|
fltk 1.3.0rc3
About: FLTK (Fast Light Tool Kit) is a cross-platform C++ GUI toolkit for UNIX/Linux (X11), Microsoft Windows, and MacOS X. Release candidate.
SfR Fresh Dox: fltk-1.3.0rc3-source.tar.gz ("inofficial" and yet experimental doxygen-generated source code documentation) ![]() |
Rich text display widget. More...
#include <Fl_Text_Display.H>


Classes | |
| struct | Style_Table_Entry |
Public Types | |
| enum | { NORMAL_CURSOR, CARET_CURSOR, DIM_CURSOR, BLOCK_CURSOR, HEAVY_CURSOR } |
| enum | { CURSOR_POS, CHARACTER_POS } |
| enum | { DRAG_NONE = -2, DRAG_START_DND = -1, DRAG_CHAR = 0, DRAG_WORD = 1, DRAG_LINE = 2 } |
| enum | { WRAP_NONE, WRAP_AT_COLUMN, WRAP_AT_PIXEL, WRAP_AT_BOUNDS } |
| typedef void(* | Unfinished_Style_Cb )(int, void *) |
Public Member Functions | |
| Fl_Text_Display (int X, int Y, int W, int H, const char *l=0) | |
| Creates a new text display widget. | |
| ~Fl_Text_Display () | |
| virtual int | handle (int e) |
| Event handling. | |
| void | buffer (Fl_Text_Buffer *buf) |
| void | buffer (Fl_Text_Buffer &buf) |
| Fl_Text_Buffer * | buffer () const |
| void | redisplay_range (int start, int end) |
| Marks text from start to end as needing a redraw. This function will trigger a damage event and later a redraw of parts of the widget. | |
| void | scroll (int topLineNum, int horizOffset) |
| Scrolls the current buffer to start at the specified line and column. | |
| void | insert (const char *text) |
| Inserts "text" at the current cursor location. | |
| void | overstrike (const char *text) |
| Replaces text at the current insert position. | |
| void | insert_position (int newPos) |
Sets the position of the text insertion cursor for text display. Move the insertion cursor in front of the character at newPos. This function may trigger a redraw. | |
| int | insert_position () const |
| int | in_selection (int x, int y) const |
| Check if a pixel position is within the primary selection. | |
| void | show_insert_position () |
| Scrolls the text buffer to show the current insert position. This function triggers a complete recalculation, ending in a call to Fl_Text_Display::display_insert() | |
| int | move_right () |
| Moves the current insert position right one character. | |
| int | move_left () |
| Moves the current insert position left one character. | |
| int | move_up () |
| Moves the current insert position up one line. | |
| int | move_down () |
| Moves the current insert position down one line. | |
| int | count_lines (int start, int end, bool start_pos_is_line_start) const |
| Count the number of lines between two positions. | |
| int | line_start (int pos) const |
| Return the beginning of a line. | |
| int | line_end (int startPos, bool startPosIsLineStart) const |
| Returns the end of a line. | |
| int | skip_lines (int startPos, int nLines, bool startPosIsLineStart) |
| Skip a number of lines forward. | |
| int | rewind_lines (int startPos, int nLines) |
| Skip a number of lines back. | |
| void | next_word (void) |
| Moves the current insert position right one word. | |
| void | previous_word (void) |
| Moves the current insert position left one word. | |
| void | show_cursor (int b=1) |
| Shows the text cursor. This function may trigger a redraw. | |
| void | hide_cursor () |
| void | cursor_style (int style) |
| Sets the text cursor style. Sets the text cursor style to one of the following: | |
| Fl_Color | cursor_color () const |
| void | cursor_color (Fl_Color n) |
| int | scrollbar_width () const |
| void | scrollbar_width (int W) |
| Fl_Align | scrollbar_align () const |
| void | scrollbar_align (Fl_Align a) |
| int | word_start (int pos) const |
| int | word_end (int pos) const |
| void | highlight_data (Fl_Text_Buffer *styleBuffer, const Style_Table_Entry *styleTable, int nStyles, char unfinishedStyle, Unfinished_Style_Cb unfinishedHighlightCB, void *cbArg) |
| Attach (or remove) highlight information in text display and redisplay. | |
| int | position_style (int lineStartPos, int lineLen, int lineIndex) const |
| Find the correct style for a character. | |
| int | shortcut () const |
| void | shortcut (int s) |
| Fl_Font | textfont () const |
| void | textfont (Fl_Font s) |
| Fl_Fontsize | textsize () const |
| void | textsize (Fl_Fontsize s) |
| Fl_Color | textcolor () const |
| void | textcolor (Fl_Color n) |
| int | wrapped_column (int row, int column) const |
| Nobody knows what this function does. | |
| int | wrapped_row (int row) const |
| Nobody knows what this function does. | |
| void | wrap_mode (int wrap, int wrap_margin) |
| Set the new text wrap mode. | |
| virtual void | resize (int X, int Y, int W, int H) |
| Change the size of the displayed text area. Calling this function will trigger a recalculation of all lines visible and of all scrollbar sizes. | |
| double | x_to_col (double x) const |
| double | col_to_x (double col) const |
Protected Types | |
| enum | { DRAW_LINE, FIND_INDEX, FIND_INDEX_FROM_ZERO, GET_WIDTH } |
Protected Member Functions | |
| virtual void | draw () |
| Draw the widget. | |
| void | draw_text (int X, int Y, int W, int H) |
| Refresh a rectangle of the text display. | |
| void | draw_range (int start, int end) |
| Draw a range of text. | |
| void | draw_cursor (int, int) |
Draw a cursor with top center at X, Y. | |
| void | draw_string (int style, int x, int y, int toX, const char *string, int nChars) const |
| Draw a text segment in a single style. | |
| void | draw_vline (int visLineNum, int leftClip, int rightClip, int leftCharIndex, int rightCharIndex) |
| Draw a single line of text. | |
| int | find_x (const char *s, int len, int style, int x) const |
| Find the index of the character that lies at the given x position. | |
| int | handle_vline (int mode, int lineStart, int lineLen, int leftChar, int rightChar, int topClip, int bottomClip, int leftClip, int rightClip) const |
| void | draw_line_numbers (bool clearAll) |
| Refresh the line number area. | |
| void | clear_rect (int style, int x, int y, int width, int height) const |
Clear a rectangle with the appropriate background color for style. | |
| void | display_insert () |
| Scroll the display to bring insertion cursor into view. | |
| void | offset_line_starts (int newTopLineNum) |
| Offset line start counters for a new vertical scroll position. | |
| void | calc_line_starts (int startLine, int endLine) |
| Update the line start arrays. | |
| void | update_line_starts (int pos, int charsInserted, int charsDeleted, int linesInserted, int linesDeleted, int *scrolled) |
| Update line start arrays and variables. | |
| void | calc_last_char () |
| Update last display character index. | |
| int | position_to_line (int pos, int *lineNum) const |
| Convert a position index into a line number offset. | |
| double | string_width (const char *string, int length, int style) const |
| Find the width of a string in the font of a particular style. | |
| void | update_v_scrollbar () |
| Update vertical scrollbar. | |
| void | update_h_scrollbar () |
| Update vertical scrollbar. | |
| int | measure_vline (int visLineNum) const |
| Returns the width in pixels of the displayed line pointed to by "visLineNum". | |
| int | longest_vline () const |
| Find the longest line of all visible lines. | |
| int | empty_vlines () const |
| Return true if there are lines visible with no corresponding buffer text. | |
| int | vline_length (int visLineNum) const |
| Count number of bytes in a visible line. | |
| int | xy_to_position (int x, int y, int PosType=CHARACTER_POS) const |
| Translate a pixel position into a character index. | |
| void | xy_to_rowcol (int x, int y, int *row, int *column, int PosType=CHARACTER_POS) const |
| Translate pixel coordinates into row and column. | |
| int | position_to_xy (int pos, int *x, int *y) const |
| Convert a character index into a pixel position. | |
| void | maintain_absolute_top_line_number (int state) |
| Line numbering stuff, currently unused. | |
| int | get_absolute_top_line_number () const |
| Line numbering stuff, currently unused. | |
| void | absolute_top_line_number (int oldFirstChar) |
| Line numbering stuff, currently unused. | |
| int | maintaining_absolute_top_line_number () const |
| Line numbering stuff, currently unused. | |
| void | reset_absolute_top_line_number () |
| Line numbering stuff, probably unused. | |
| int | position_to_linecol (int pos, int *lineNum, int *column) const |
Find the line and column number of position pos. | |
| int | scroll_ (int topLineNum, int horizOffset) |
| Scrolls the current buffer to start at the specified line and column. | |
| void | extend_range_for_styles (int *start, int *end) |
| I don't know what this does! | |
| void | find_wrap_range (const char *deletedText, int pos, int nInserted, int nDeleted, int *modRangeStart, int *modRangeEnd, int *linesInserted, int *linesDeleted) |
| Wrapping calculations. | |
| void | measure_deleted_lines (int pos, int nDeleted) |
| Wrapping calculations. | |
| void | wrapped_line_counter (Fl_Text_Buffer *buf, int startPos, int maxPos, int maxLines, bool startPosIsLineStart, int styleBufOffset, int *retPos, int *retLines, int *retLineStart, int *retLineEnd, bool countLastLineMissingNewLine=true) const |
| Wrapping calculations. | |
| void | find_line_end (int pos, bool start_pos_is_line_start, int *lineEnd, int *nextLineStart) const |
| Finds both the end of the current line and the start of the next line. | |
| double | measure_proportional_character (const char *s, int colNum, int pos) const |
| Wrapping calculations. | |
| int | wrap_uses_character (int lineEndPos) const |
| Check if the line break is caused by a \n or by line wrapping. | |
Static Protected Member Functions | |
| static void | scroll_timer_cb (void *) |
| Timer callback for scroll events. | |
| static void | buffer_predelete_cb (int pos, int nDeleted, void *cbArg) |
| This is called before any characters are deleted. | |
| static void | buffer_modified_cb (int pos, int nInserted, int nDeleted, int nRestyled, const char *deletedText, void *cbArg) |
| This is called whenever the buffer is modified. | |
| static void | h_scrollbar_cb (Fl_Scrollbar *w, Fl_Text_Display *d) |
| Callbacks for drag or valueChanged on scrollbars. | |
| static void | v_scrollbar_cb (Fl_Scrollbar *w, Fl_Text_Display *d) |
| Callbacks for drag or valueChanged on scrollbars. | |
Protected Attributes | |
| int | damage_range1_start |
| int | damage_range1_end |
| int | damage_range2_start |
| int | damage_range2_end |
| int | mCursorPos |
| int | mCursorOn |
| int | mCursorOldY |
| int | mCursorToHint |
| int | mCursorStyle |
| int | mCursorPreferredXPos |
| int | mNVisibleLines |
| int | mNBufferLines |
| Fl_Text_Buffer * | mBuffer |
| Fl_Text_Buffer * | mStyleBuffer |
| int | mFirstChar |
| int | mLastChar |
| int | mContinuousWrap |
| int | mWrapMarginPix |
| int * | mLineStarts |
| int | mTopLineNum |
| int | mAbsTopLineNum |
| int | mNeedAbsTopLineNum |
| int | mHorizOffset |
| int | mTopLineNumHint |
| int | mHorizOffsetHint |
| int | mNStyles |
| const Style_Table_Entry * | mStyleTable |
| char | mUnfinishedStyle |
| Unfinished_Style_Cb | mUnfinishedHighlightCB |
| void * | mHighlightCBArg |
| int | mMaxsize |
| int | mSuppressResync |
| int | mNLinesDeleted |
| int | mModifyingTabDistance |
| double | mColumnScale |
| Fl_Color | mCursor_color |
| Fl_Scrollbar * | mHScrollBar |
| Fl_Scrollbar * | mVScrollBar |
| int | scrollbar_width_ |
| Fl_Align | scrollbar_align_ |
| int | dragPos |
| int | dragType |
| int | dragging |
| int | display_insert_position_hint |
| struct { | |
| int x | |
| int y | |
| int w | |
| int h | |
| } | text_area |
| int | shortcut_ |
| Fl_Font | textfont_ |
| Fl_Fontsize | textsize_ |
| Fl_Color | textcolor_ |
| int | mLineNumLeft |
| int | mLineNumWidth |
Friends | |
| void | fl_text_drag_me (int pos, Fl_Text_Display *d) |
Rich text display widget.
This is the FLTK text display widget. It allows the user to view multiple lines of text and supports highlighting and scrolling. The buffer that is displayed in the widget is managed by the Fl_Text_Buffer class. A single Text Buffer can be displayed by multiple Text Displays.
Definition at line 50 of file Fl_Text_Display.H.
| typedef void(* Fl_Text_Display::Unfinished_Style_Cb)(int, void *) |
Definition at line 101 of file Fl_Text_Display.H.
| anonymous enum |
text display cursor shapes enumeration
| NORMAL_CURSOR |
I-beam |
| CARET_CURSOR |
caret under the text |
| DIM_CURSOR |
dim I-beam |
| BLOCK_CURSOR |
unfille box under the current character |
| HEAVY_CURSOR |
thick I-beam |
Definition at line 58 of file Fl_Text_Display.H.
| anonymous enum |
the character position is the left edge of a character, whereas the cursor is thought to be between the centers of two consecutive characters.
Definition at line 71 of file Fl_Text_Display.H.
| anonymous enum |
drag types - they match Fl::event_clicks() so that single clicking to start a collection selects by character, double clicking selects by word and triple clicking selects by line.
Definition at line 81 of file Fl_Text_Display.H.
| anonymous enum |
wrap types - used in wrap_mode()
| WRAP_NONE |
don't wrap text at all |
| WRAP_AT_COLUMN |
wrap text at the given text column |
| WRAP_AT_PIXEL |
wrap text at a pixel position |
| WRAP_AT_BOUNDS |
wrap text so that it fits into the widget width |
Definition at line 92 of file Fl_Text_Display.H.
anonymous enum [protected] |
Definition at line 320 of file Fl_Text_Display.H.
| Fl_Text_Display::Fl_Text_Display | ( | int | X, |
| int | Y, | ||
| int | W, | ||
| int | H, | ||
| const char * | l = 0 |
||
| ) |
Creates a new text display widget.
| X,Y,W,H | position and size of widget |
| l | label text, defaults to none |
Definition at line 91 of file Fl_Text_Display.cxx.
References Fl_Widget::box(), Fl_Widget::callback(), Fl_Widget::color(), damage_range1_end, damage_range1_start, damage_range2_end, damage_range2_start, display_insert_position_hint, DRAG_CHAR, dragging, dragPos, dragType, Fl_Group::end(), FL_ALIGN_BOTTOM_RIGHT, FL_BACKGROUND2_COLOR, FL_DOWN_FRAME, FL_FOREGROUND_COLOR, FL_HELVETICA, FL_HORIZONTAL, FL_NORMAL_SIZE, FL_SELECTION_COLOR, h_scrollbar_cb(), i, mAbsTopLineNum, mBuffer, mContinuousWrap, mCursor_color, mCursorOldY, mCursorOn, mCursorPos, mCursorPreferredXPos, mCursorStyle, mCursorToHint, mFirstChar, mHighlightCBArg, mHorizOffset, mHorizOffsetHint, mHScrollBar, mLastChar, mLineNumLeft, mLineNumWidth, mLineStarts, mMaxsize, mModifyingTabDistance, mNBufferLines, mNeedAbsTopLineNum, mNLinesDeleted, mNStyles, mNVisibleLines, mStyleBuffer, mStyleTable, mSuppressResync, mTopLineNum, mTopLineNumHint, mUnfinishedHighlightCB, mUnfinishedStyle, mVScrollBar, mWrapMarginPix, NO_HINT, NORMAL_CURSOR, scrollbar_align(), Fl::scrollbar_size(), scrollbar_width(), Fl_Widget::set_flag(), shortcut_, Fl_Widget::SHORTCUT_LABEL, text_area, textcolor(), textfont(), textsize(), Fl_Widget::type(), and v_scrollbar_cb().
| Fl_Text_Display::~Fl_Text_Display | ( | ) |
Free a text display and release its associated memory.
Note, the text BUFFER that the text display displays is a separate entity and is not freed, nor are the style buffer or style table.
Definition at line 173 of file Fl_Text_Display.cxx.
References buffer_modified_cb(), buffer_predelete_cb(), mBuffer, mLineStarts, Fl_Text_Buffer::remove_modify_callback(), Fl_Text_Buffer::remove_predelete_callback(), Fl::remove_timeout(), and scroll_timer_cb().
| void Fl_Text_Display::absolute_top_line_number | ( | int | oldFirstChar | ) | [protected] |
Line numbering stuff, currently unused.
Re-calculate absolute top line number for a change in scroll position.
Definition at line 1585 of file Fl_Text_Display.cxx.
References buffer(), Fl_Text_Buffer::count_lines(), mAbsTopLineNum, maintaining_absolute_top_line_number(), and mFirstChar.
Referenced by offset_line_starts(), reset_absolute_top_line_number(), and resize().
| void Fl_Text_Display::buffer | ( | Fl_Text_Buffer * | buf | ) |
Attach a text buffer to display, replacing the current buffer (if any)
| buf | attach this text buffer |
Definition at line 191 of file Fl_Text_Display.cxx.
References Fl_Text_Buffer::add_modify_callback(), Fl_Text_Buffer::add_predelete_callback(), buf, buffer_modified_cb(), buffer_predelete_cb(), Fl_Widget::h(), Fl_Text_Buffer::length(), mBuffer, mNBufferLines, Fl_Text_Buffer::remove_modify_callback(), Fl_Text_Buffer::remove_predelete_callback(), resize(), Fl_Text_Buffer::text(), Fl_Widget::w(), Fl_Widget::x(), and Fl_Widget::y().
Referenced by buffer_predelete_cb(), callback_cb(), fl_text_drag_me(), Fl_Text_Editor::kf_backspace(), Fl_Text_Editor::kf_copy(), Fl_Text_Editor::kf_ctrl_move(), Fl_Text_Editor::kf_delete(), Fl_Text_Editor::kf_meta_move(), Fl_Text_Editor::kf_move(), Fl_Text_Editor::kf_select_all(), Fl_Text_Editor::kf_shift_move(), Fl_Text_Editor::kf_undo(), make_class_panel(), make_data_panel(), make_decl_panel(), make_function_panel(), make_shell_window(), Fl_Class_Type::open(), Fl_Comment_Type::open(), Fl_Data_Type::open(), Fl_Decl_Type::open(), Fl_Code_Type::open(), Fl_Function_Type::open(), update_sourceview_cb(), and update_sourceview_position().
| Fl_Text_Buffer* Fl_Text_Display::buffer | ( | ) | const [inline] |
Gets the current text buffer associated with the text widget. Multiple text widgets can be associated with the same text buffer.
Definition at line 133 of file Fl_Text_Display.H.
Referenced by absolute_top_line_number(), CodeEditor::CodeEditor(), count_lines(), draw(), draw_range(), extend_range_for_styles(), find_line_end(), find_wrap_range(), Fl_Text_Editor::handle(), handle(), Fl_Text_Editor::handle_key(), handle_vline(), in_selection(), insert(), insert_position(), line_end(), line_start(), measure_deleted_lines(), move_left(), move_right(), next_word(), overstrike(), position_style(), position_to_line(), position_to_linecol(), position_to_xy(), previous_word(), redisplay_range(), resize(), rewind_lines(), show_cursor(), skip_lines(), update_line_starts(), vline_length(), wrap_mode(), wrap_uses_character(), wrapped_column(), wrapped_row(), and CodeEditor::~CodeEditor().
| void Fl_Text_Display::buffer | ( | Fl_Text_Buffer & | buf | ) | [inline] |
Sets the current text buffer associated with the text widget. Multiple text widgets can be associated with the same text buffer.
| buf | new text buffer |
Definition at line 126 of file Fl_Text_Display.H.
References buffer.
| void Fl_Text_Display::buffer_modified_cb | ( | int | pos, |
| int | nInserted, | ||
| int | nDeleted, | ||
| int | nRestyled, | ||
| const char * | deletedText, | ||
| void * | cbArg | ||
| ) | [static, protected] |
This is called whenever the buffer is modified.
Callback attached to the text buffer to receive modification information
| pos | starting index of modification |
| nInserted | number of bytes we inserted (must be UTF-8 aligned!) |
| nDeleted | number of bytes deleted (must be UTF-8 aligned!) |
| nRestyled | ?? |
| deletedText | this is what was removed, must not be NULL if nDeleted is set |
| cbArg | "this" pointer for static callback function |
Definition at line 1413 of file Fl_Text_Display.cxx.
References buf, Fl_Text_Buffer::count_lines(), Fl_Widget::damage(), draw_line_numbers(), extend_range_for_styles(), find_wrap_range(), FL_DAMAGE_EXPOSE, h, IS_UTF8_ALIGNED2, Fl_Text_Buffer::line_end(), mAbsTopLineNum, maintaining_absolute_top_line_number(), mBuffer, mContinuousWrap, mCursorPos, mCursorPreferredXPos, mCursorToHint, mFirstChar, min, mLastChar, mNBufferLines, mStyleBuffer, Fl_Text_Buffer::next_char(), NO_HINT, Fl_Text_Buffer::prev_char_clipped(), Fl_Text_Buffer::primary_selection(), redisplay_range(), reset_absolute_top_line_number(), resize(), Fl_Text_Selection::selected(), update_line_starts(), Fl_Widget::visible_r(), w, x, and y.
Referenced by buffer(), and ~Fl_Text_Display().
| void Fl_Text_Display::buffer_predelete_cb | ( | int | pos, |
| int | nDeleted, | ||
| void * | cbArg | ||
| ) | [static, protected] |
This is called before any characters are deleted.
Callback attached to the text buffer to receive delete information before the modifications are actually made.
| pos | starting index of deletion |
| nDeleted | number of bytes we will delete (must be UTF-8 aligned!) |
| cbArg | "this" pointer for static callback function |
Definition at line 1381 of file Fl_Text_Display.cxx.
References buffer(), IS_UTF8_ALIGNED2, mContinuousWrap, measure_deleted_lines(), and mSuppressResync.
Referenced by buffer(), and ~Fl_Text_Display().
| void Fl_Text_Display::calc_last_char | ( | ) | [protected] |
Update last display character index.
Given a Fl_Text_Display with a complete, up-to-date lineStarts array, update the lastChar entry to point to the last buffer position displayed.
Definition at line 2513 of file Fl_Text_Display.cxx.
References i, line_end(), mLastChar, mLineStarts, and mNVisibleLines.
Referenced by offset_line_starts(), resize(), update_line_starts(), and wrap_mode().
| void Fl_Text_Display::calc_line_starts | ( | int | startLine, |
| int | endLine | ||
| ) | [protected] |
Update the line start arrays.
Scan through the text in the "textD"'s buffer and recalculate the line starts array values beginning at index "startLine" and continuing through (including) "endLine". It assumes that the line starts entry preceding "startLine" (or mFirstChar if startLine is 0) is good, and re-counts newlines to fill in the requested entries. Out of range values for "startLine" and "endLine" are acceptable.
| startLine,endLine | range of lines to scan as line numbers |
Definition at line 2452 of file Fl_Text_Display.cxx.
References find_line_end(), Fl_Text_Buffer::length(), mBuffer, mFirstChar, mLineStarts, and mNVisibleLines.
Referenced by offset_line_starts(), resize(), update_line_starts(), and wrap_mode().
| void Fl_Text_Display::clear_rect | ( | int | style, |
| int | X, | ||
| int | Y, | ||
| int | width, | ||
| int | height | ||
| ) | const [protected] |
Clear a rectangle with the appropriate background color for style.
| style | index into style table |
| X,Y,width,height | size and position of background area |
Definition at line 2006 of file Fl_Text_Display.cxx.
References Fl_Widget::color(), f, fl_color(), fl_color_average(), fl_rectf(), Fl::focus(), HIGHLIGHT_MASK, PRIMARY_MASK, and Fl_Widget::selection_color().
Referenced by draw_string().
| double Fl_Text_Display::col_to_x | ( | double | col | ) | const |
Convert a column number into an x pixel position.
| col | an approximate column number based on the main font |
Convert a column number into an x pixel position.
Definition at line 3775 of file Fl_Text_Display.cxx.
References mColumnScale, and x_to_col().
Referenced by handle_vline(), measure_proportional_character(), and wrap_mode().
| int Fl_Text_Display::count_lines | ( | int | startPos, |
| int | endPos, | ||
| bool | startPosIsLineStart | ||
| ) | const |
Count the number of lines between two positions.
Same as BufCountLines, but takes into account wrapping if wrapping is turned on. If the caller knows that startPos is at a line start, it can pass startPosIsLineStart as True to make the call more efficient by avoiding the additional step of scanning back to the last newline.
| startPos | index to first character |
| endPos | index after last character |
| startPosIsLineStart | avoid scanning back to the line start |
Definition at line 1145 of file Fl_Text_Display.cxx.
References buffer(), Fl_Text_Buffer::count_lines(), IS_UTF8_ALIGNED2, mContinuousWrap, and wrapped_line_counter().
Referenced by display_insert(), Fl_Text_Editor::kf_ctrl_move(), Fl_Text_Editor::kf_meta_move(), resize(), shell_pipe_cb(), and wrap_mode().
| Fl_Color Fl_Text_Display::cursor_color | ( | ) | const [inline] |
| void Fl_Text_Display::cursor_color | ( | Fl_Color | n | ) | [inline] |
Sets the text cursor color.
| n | new cursor color |
Definition at line 181 of file Fl_Text_Display.H.
| void Fl_Text_Display::cursor_style | ( | int | style | ) |
Sets the text cursor style. Sets the text cursor style to one of the following:
This call also switches the cursor on and may trigger a redraw.
| style | new cursor style |
Definition at line 636 of file Fl_Text_Display.cxx.
References mCursorOn, mCursorStyle, and show_cursor().
Referenced by CodeViewer::CodeViewer().
| void Fl_Text_Display::display_insert | ( | ) | [protected] |
Scroll the display to bring insertion cursor into view.
Note: it would be nice to be able to do this without counting lines twice (scroll_() counts them too) and/or to count from the most efficient starting point, but the efficiency of this routine is not as important to the overall performance of the text display.
Definition at line 969 of file Fl_Text_Display.cxx.
References count_lines(), insert_position(), line_end(), mCursorPos, mFirstChar, mHorizOffset, mLastChar, mLineStarts, mNVisibleLines, mTopLineNum, position_to_xy(), scroll_(), text_area, and wrap_uses_character().
Referenced by resize().
| void Fl_Text_Display::draw | ( | void | ) | [protected, virtual] |
Draw the widget.
This function tries to limit drawing to smaller areas if possible.
Reimplemented from Fl_Group.
Definition at line 3353 of file Fl_Text_Display.cxx.
References BOTTOM_MARGIN, Fl_Widget::box(), buffer(), Fl_Widget::color(), Fl_Widget::damage(), damage_range1_end, damage_range1_start, damage_range2_end, damage_range2_start, Fl_Widget::draw_box(), draw_cursor(), draw_range(), draw_text(), fl_clip_box(), FL_DAMAGE_ALL, FL_DAMAGE_CHILD, FL_DAMAGE_EXPOSE, FL_DAMAGE_SCROLL, FL_GRAY, fl_pop_clip(), fl_push_clip(), fl_rectf(), Fl::focus(), H, Fl_Widget::h(), LEFT_MARGIN, mCursorOldY, mCursorOn, mCursorPos, mHScrollBar, mMaxsize, mVScrollBar, position_to_xy(), RIGHT_MARGIN, scrollbar_width(), text_area, TOP_MARGIN, Fl_Group::update_child(), Fl_Widget::visible(), Fl_Widget::w(), Fl_Widget::x(), and Fl_Widget::y().
| void Fl_Text_Display::draw_cursor | ( | int | X, |
| int | Y | ||
| ) | [protected] |
Draw a cursor with top center at X, Y.
| X,Y | cursor position in pixels |
Definition at line 2038 of file Fl_Text_Display.cxx.
References BLOCK_CURSOR, CARET_CURSOR, DIM_CURSOR, fl_color(), fl_line(), HEAVY_CURSOR, mCursor_color, mCursorStyle, mMaxsize, NORMAL_CURSOR, text_area, and TMPFONTWIDTH.
Referenced by draw().
| void Fl_Text_Display::draw_line_numbers | ( | bool | clearAll | ) | [protected] |
Refresh the line number area.
If clearAll is False, writes only over the character cell areas. Setting clearAll to True will clear out any stray marks outside of the character cell area, which might have been left from before a resize or font change.
This function is not used.
Definition at line 2634 of file Fl_Text_Display.cxx.
References min, mLineNumWidth, mMaxsize, NULL, textsize_, TMPFONTWIDTH, Fl_Widget::visible_r(), and Fl_Widget::y().
Referenced by buffer_modified_cb(), and draw_text().
| void Fl_Text_Display::draw_range | ( | int | startpos, |
| int | endpos | ||
| ) | [protected] |
Draw a range of text.
Refresh all of the text between buffer positions startpos and endpos not including the character at the position endpos.
If endpos points beyond the end of the buffer, refresh the whole display after startpos, including blank lines which are not technically part of any range of characters.
| startpos | index of first character to draw |
| endpos | index after last character to draw |
Definition at line 522 of file Fl_Text_Display.cxx.
References buffer(), draw_vline(), empty_vlines(), i, Fl_Text_Buffer::length(), mBuffer, mFirstChar, mLastChar, mLineStarts, mNVisibleLines, position_to_line(), and Fl_Text_Buffer::utf8_align().
Referenced by draw().
| void Fl_Text_Display::draw_string | ( | int | style, |
| int | X, | ||
| int | Y, | ||
| int | toX, | ||
| const char * | string, | ||
| int | nChars | ||
| ) | const [protected] |
Draw a text segment in a single style.
Draw a string or blank area according to parameter style, using the appropriate colors and drawing method for that style, with top left corner at X, Y. If style says to draw text, use string as source of characters, and draw nChars, if style is FILL, erase rectangle where text would have drawn from X to toX and from Y to the maximum y extent of the current font(s).
| style | index into style lookup table |
| X,Y | drawing origin |
| toX | rightmost position if this is a fill operation |
| string | text if this is a drawing operation |
| nChars | number of characters to draw |
Definition at line 1908 of file Fl_Text_Display.cxx.
References background, BG_ONLY_MASK, clear_rect(), Fl_Text_Display::Style_Table_Entry::color, Fl_Widget::color(), f, FILL_MASK, fl_color(), fl_color_average(), fl_contrast(), fl_descent(), fl_draw(), fl_font(), fl_pop_clip(), fl_push_clip(), fl_rectf(), Fl::focus(), Fl_Text_Display::Style_Table_Entry::font, HIGHLIGHT_MASK, IS_UTF8_ALIGNED, mMaxsize, mNStyles, mStyleTable, PRIMARY_MASK, Fl_Widget::selection_color(), Fl_Text_Display::Style_Table_Entry::size, STYLE_LOOKUP_MASK, TEXT_ONLY_MASK, textcolor(), textfont(), and textsize().
Referenced by handle_vline().
| void Fl_Text_Display::draw_text | ( | int | left, |
| int | top, | ||
| int | width, | ||
| int | height | ||
| ) | [protected] |
Refresh a rectangle of the text display.
| left,top | are in coordinates of the text drawing window. |
| width,height | size in pixels |
Definition at line 456 of file Fl_Text_Display.cxx.
References draw_line_numbers(), draw_vline(), fl_pop_clip(), fl_push_clip(), mLineNumLeft, mLineNumWidth, mMaxsize, text_area, and textsize_.
Referenced by draw().
| void Fl_Text_Display::draw_vline | ( | int | visLineNum, |
| int | leftClip, | ||
| int | rightClip, | ||
| int | leftCharIndex, | ||
| int | rightCharIndex | ||
| ) | [protected] |
Draw a single line of text.
Draw the text on a single line represented by visLineNum (the number of lines down from the top of the display), limited by leftClip and rightClip window coordinates and leftCharIndex and rightCharIndex character positions (not including the character at position rightCharIndex).
| visLineNum | index of line in the visible line number lookup |
| leftClip,rightClip | pixel position of clipped area |
| leftCharIndex,rightCharIndex | index into line of segment that we want to draw |
Definition at line 1856 of file Fl_Text_Display.cxx.
References DRAW_LINE, handle_vline(), min, mLineStarts, mMaxsize, mNVisibleLines, text_area, and vline_length().
Referenced by draw_range(), and draw_text().
| int Fl_Text_Display::empty_vlines | ( | ) | const [protected] |
Return true if there are lines visible with no corresponding buffer text.
Definition at line 2733 of file Fl_Text_Display.cxx.
References mLineStarts, and mNVisibleLines.
Referenced by draw_range(), position_to_line(), position_to_xy(), and update_line_starts().
| void Fl_Text_Display::extend_range_for_styles | ( | int * | startpos, |
| int * | endpos | ||
| ) | [protected] |
I don't know what this does!
Extend the range of a redraw request (from *start to *end) with additional redraw requests resulting from changes to the attached style buffer (which contains auxiliary information for coloring or styling text).
| startpos | ?? |
| endpos | ?? |
Definition at line 3304 of file Fl_Text_Display.cxx.
References buffer(), Fl_Text_Selection::end(), extended, IS_UTF8_ALIGNED2, Fl_Text_Buffer::line_end(), mBuffer, mStyleBuffer, Fl_Text_Buffer::primary_selection(), Fl_Text_Selection::selected(), Fl_Text_Selection::start(), and Fl_Text_Buffer::utf8_align().
Referenced by buffer_modified_cb().
| void Fl_Text_Display::find_line_end | ( | int | startPos, |
| bool | startPosIsLineStart, | ||
| int * | lineEnd, | ||
| int * | nextLineStart | ||
| ) | const [protected] |
Finds both the end of the current line and the start of the next line.
Why? In continuous wrap mode, if you need to know both, figuring out one from the other can be expensive or error prone. The problem comes when there's a trailing space or tab just before the end of the buffer. To translate an end of line value to or from the next lines start value, you need to know whether the trailing space or tab is being used as a line break or just a normal character, and to find that out would otherwise require counting all the way back to the beginning of the line.
| startPos | ||
| startPosIsLineStart | ||
| [out] | lineEnd | |
| [out] | nextLineStart |
Definition at line 3233 of file Fl_Text_Display.cxx.
References buffer(), IS_UTF8_ALIGNED2, length, Fl_Text_Buffer::line_end(), mContinuousWrap, min, Fl_Text_Buffer::next_char(), and wrapped_line_counter().
Referenced by calc_line_starts().
| void Fl_Text_Display::find_wrap_range | ( | const char * | deletedText, |
| int | pos, | ||
| int | nInserted, | ||
| int | nDeleted, | ||
| int * | modRangeStart, | ||
| int * | modRangeEnd, | ||
| int * | linesInserted, | ||
| int * | linesDeleted | ||
| ) | [protected] |
Wrapping calculations.
When continuous wrap is on, and the user inserts or deletes characters, wrapping can happen before and beyond the changed position. This routine finds the extent of the changes, and counts the deleted and inserted lines over that range. It also attempts to minimize the size of the range to what has to be counted and re-displayed, so the results can be useful both for delimiting where the line starts need to be recalculated, and for deciding what part of the text to redisplay.
| deletedText | |
| pos | |
| nInserted | |
| nDeleted | |
| modRangeStart | |
| modRangeEnd | |
| linesInserted | |
| linesDeleted |
Definition at line 2795 of file Fl_Text_Display.cxx.
References buf, buffer(), Fl_Text_Buffer::char_at(), Fl_Text_Buffer::copy(), i, Fl_Text_Buffer::insert(), IS_UTF8_ALIGNED, IS_UTF8_ALIGNED2, Fl_Text_Buffer::length(), length, line_end(), Fl_Text_Buffer::line_start(), mFirstChar, min, mLastChar, mLineStarts, mNLinesDeleted, mNVisibleLines, mSuppressResync, Fl_Text_Buffer::prev_char(), and wrapped_line_counter().
Referenced by buffer_modified_cb().
| int Fl_Text_Display::find_x | ( | const char * | s, |
| int | len, | ||
| int | style, | ||
| int | x | ||
| ) | const [protected] |
Find the index of the character that lies at the given x position.
| s | UTF-8 text string |
| len | length of string |
| style | index into style lookup table |
| x | position in pixels |
Definition at line 1826 of file Fl_Text_Display.cxx.
References fl_utf8len1(), i, int, IS_UTF8_ALIGNED, string_width(), and Fl_Widget::w().
Referenced by handle_vline().
| int Fl_Text_Display::get_absolute_top_line_number | ( | ) | const [protected] |
Line numbering stuff, currently unused.
Returns the absolute (non-wrapped) line number of the first line displayed. Returns 0 if the absolute top line number is not being maintained.
Definition at line 1570 of file Fl_Text_Display.cxx.
References mAbsTopLineNum, maintaining_absolute_top_line_number(), mContinuousWrap, and mTopLineNum.
Referenced by CodeEditor::top_line().
| void Fl_Text_Display::h_scrollbar_cb | ( | Fl_Scrollbar * | w, |
| Fl_Text_Display * | d | ||
| ) | [static, protected] |
Callbacks for drag or valueChanged on scrollbars.
Definition at line 2618 of file Fl_Text_Display.cxx.
References mHorizOffset, mTopLineNum, scroll(), and Fl_Scrollbar::value().
Referenced by Fl_Text_Display().
| int Fl_Text_Display::handle | ( | int | e | ) | [virtual] |
Event handling.
Reimplemented from Fl_Group.
Reimplemented in Fl_Text_Editor, and CodeViewer.
Definition at line 3542 of file Fl_Text_Display.cxx.
References Fl_Widget::active_r(), Fl::add_timeout(), buffer(), Fl::copy(), Fl_Window::cursor(), CURSOR_POS, Fl::dnd(), Fl::dnd_text_ops(), DRAG_CHAR, DRAG_LINE, DRAG_NONE, DRAG_START_DND, DRAG_WORD, dragging, dragPos, dragType, Fl_Group::end(), Fl::event_button(), Fl::event_clicks(), Fl::event_dy(), Fl::event_inside(), Fl::event_is_click(), Fl::event_key(), Fl::event_state(), Fl::event_x(), Fl::event_y(), FL_COMMAND, FL_CTRL, FL_CURSOR_DEFAULT, FL_CURSOR_INSERT, FL_DRAG, FL_ENTER, FL_FOCUS, FL_HIDE, FL_KEYBOARD, FL_KEYUP, FL_LEAVE, FL_LEFT_MOUSE, FL_MOUSEWHEEL, FL_MOVE, FL_PUSH, FL_RELEASE, FL_SHIFT, FL_SHORTCUT, fl_text_drag_me, FL_UNFOCUS, Fl_Group::focus(), Fl::focus(), Fl_Scrollbar::handle(), Fl_Group::handle(), insert_position(), length, line_end(), line_start(), mHScrollBar, mVScrollBar, Fl_Text_Buffer::next_char(), redisplay_range(), Fl::remove_timeout(), scroll_timer_cb(), Fl_Text_Buffer::select(), Fl_Text_Buffer::selection_text(), shortcut(), show_insert_position(), start, Fl_Widget::test_shortcut(), Fl::test_shortcut(), text_area, Fl_Text_Buffer::unselect(), Fl::visible_focus(), Fl_Widget::window(), word_end(), word_start(), and xy_to_position().
| int Fl_Text_Display::handle_vline | ( | int | mode, |
| int | lineStartPos, | ||
| int | lineLen, | ||
| int | leftChar, | ||
| int | rightChar, | ||
| int | Y, | ||
| int | bottomClip, | ||
| int | leftClip, | ||
| int | rightClip | ||
| ) | const [protected] |
Universal pixel machine.
We use a single function that handles all line layout, measuring, and drawing
| [in] | mode | DRAW_LINE, GET_WIDTH, FIND_INDEX |
| [in] | lineStartPos | index of first character |
| [in] | lineLen | size of string in bytes |
| [in] | leftChar,rightChar | |
| [in] | Y | drawing position |
| [in] | bottomClip,leftClip,rightClip | stop work when we reach the clipped area. rightClip is the X position that we search in FIND_INDEX. |
| DRAW_LINE | index of last drawn character |
| GET_WIDTH | width in pixels of text segment if we would draw it |
| FIND_INDEX | index of character at given x position in window coordinates |
| FIND_INDEX_FROM_ZERO | index of character at given x position without scrolling and widget offsets |
we need to handle hidden hyphens and tabs here!
we handle all styles and selections
we must provide code to get pixel positions of the middle of a character as well
Definition at line 1690 of file Fl_Text_Display.cxx.
References BG_ONLY_MASK, buffer(), col_to_x(), DRAW_LINE, draw_string(), FIND_INDEX, FIND_INDEX_FROM_ZERO, find_x(), fl_utf8len1(), GET_WIDTH, i, int, IS_UTF8_ALIGNED2, mBuffer, mHorizOffset, NULL, position_style(), string_width(), text_area, Fl_Text_Buffer::text_range(), and Fl_Widget::w().
Referenced by draw_vline(), move_down(), move_up(), position_to_xy(), and xy_to_position().
| void Fl_Text_Display::hide_cursor | ( | ) | [inline] |
Hides the text cursor.
Definition at line 167 of file Fl_Text_Display.H.
| void Fl_Text_Display::highlight_data | ( | Fl_Text_Buffer * | styleBuffer, |
| const Style_Table_Entry * | styleTable, | ||
| int | nStyles, | ||
| char | unfinishedStyle, | ||
| Unfinished_Style_Cb | unfinishedHighlightCB, | ||
| void * | cbArg | ||
| ) |
Attach (or remove) highlight information in text display and redisplay.
Highlighting information consists of a style buffer which parallels the normal text buffer, but codes font and color information for the display; a style table which translates style buffer codes (indexed by buffer character - 'A') into fonts and colors; and a callback mechanism for as-needed highlighting, triggered by a style buffer entry of "unfinishedStyle". Style buffer can trigger additional redisplay during a normal buffer modification if the buffer contains a primary Fl_Text_Selection (see extendRangeForStyleMods for more information on this protocol).
Style buffers, tables and their associated memory are managed by the caller.
Styles are ranged from 65 ('A') to 126.
| styleBuffer | this buffer works in parallel to the text buffer. For every character in the text buffer, the stye buffer has a byte at the same offset that contains an index into an array of possible styles. |
| styleTable | a list of styles indexed by the style buffer |
| nStyles | number of styles in the style table |
| unfinishedStyle | if this style is found, the callback below is called |
| unfinishedHighlightCB | if a character with an unfinished style is found, this callback will be called |
| cbArg | and optional argument for the callback above, usually a pointer to the Text Display. |
Definition at line 249 of file Fl_Text_Display.cxx.
References Fl_Text_Buffer::canUndo(), Fl_Widget::damage(), FL_DAMAGE_EXPOSE, mColumnScale, mHighlightCBArg, mNStyles, mStyleBuffer, mStyleTable, mUnfinishedHighlightCB, and mUnfinishedStyle.
Referenced by CodeEditor::CodeEditor().
| int Fl_Text_Display::in_selection | ( | int | X, |
| int | Y | ||
| ) | const |
Check if a pixel position is within the primary selection.
| X,Y | pixel position to test |
Definition at line 894 of file Fl_Text_Display.cxx.
References buf, buffer(), CHARACTER_POS, Fl_Text_Selection::includes(), IS_UTF8_ALIGNED2, mBuffer, Fl_Text_Buffer::primary_selection(), and xy_to_position().
| void Fl_Text_Display::insert | ( | const char * | text | ) |
Inserts "text" at the current cursor location.
This has the same effect as inserting the text into the buffer using BufInsert and then moving the insert position after the newly inserted text, except that it's optimized to do less redrawing.
| text | new text in UTF-8 encoding. |
Definition at line 721 of file Fl_Text_Display.cxx.
References buffer(), Fl_Text_Buffer::insert(), IS_UTF8_ALIGNED, IS_UTF8_ALIGNED2, mBuffer, mCursorPos, mCursorToHint, and NO_HINT.
Referenced by Fl_Text_Editor::handle(), Fl_Text_Editor::handle_key(), Fl_Text_Editor::kf_default(), and Fl_Text_Editor::kf_enter().
| void Fl_Text_Display::insert_position | ( | int | newPos | ) |
Sets the position of the text insertion cursor for text display. Move the insertion cursor in front of the character at newPos. This function may trigger a redraw.
| newPos | new caret position |
Definition at line 587 of file Fl_Text_Display.cxx.
References buffer(), IS_UTF8_ALIGNED2, Fl_Text_Buffer::length(), mBuffer, mCursorPos, mCursorPreferredXPos, and redisplay_range().
Referenced by fl_text_drag_me(), Fl_Text_Editor::kf_backspace(), Fl_Text_Editor::kf_c_s_move(), Fl_Text_Editor::kf_ctrl_move(), Fl_Text_Editor::kf_delete(), Fl_Text_Editor::kf_m_s_move(), Fl_Text_Editor::kf_meta_move(), Fl_Text_Editor::kf_move(), Fl_Text_Editor::kf_shift_move(), and Fl_Text_Editor::kf_undo().
| int Fl_Text_Display::insert_position | ( | ) | const [inline] |
Gets the position of the text insertion cursor for text display.
Definition at line 145 of file Fl_Text_Display.H.
Referenced by display_insert(), Fl_Text_Editor::handle(), handle(), Fl_Text_Editor::handle_key(), move_down(), move_left(), move_right(), move_up(), next_word(), and previous_word().
| int Fl_Text_Display::line_end | ( | int | startPos, |
| bool | startPosIsLineStart | ||
| ) | const |
Returns the end of a line.
Same as BufEndOfLine, but takes into account line breaks when wrapping is turned on. If the caller knows that startPos is at a line start, it can pass "startPosIsLineStart" as True to make the call more efficient by avoiding the additional step of scanning back to the last newline.
Note that the definition of the end of a line is less clear when continuous wrap is on. With continuous wrap off, it's just a pointer to the newline that ends the line. When it's on, it's the character beyond the last displayable character on the line, where a whitespace character which has been "converted" to a newline for wrapping is not considered displayable. Also note that a line can be wrapped at a non-whitespace character if the line had no whitespace. In this case, this routine returns a pointer to the start of the next line. This is also consistent with the model used by visLineLength.
| startPos | index to starting character |
| startPosIsLineStart | avoid scanning back to the line start |
Definition at line 1234 of file Fl_Text_Display.cxx.
References buffer(), IS_UTF8_ALIGNED2, length, Fl_Text_Buffer::line_end(), mContinuousWrap, and wrapped_line_counter().
Referenced by calc_last_char(), display_insert(), find_wrap_range(), handle(), move_down(), and move_up().
| int Fl_Text_Display::line_start | ( | int | pos | ) | const |
Return the beginning of a line.
Same as BufStartOfLine, but returns the character after last wrap point rather than the last newline.
| pos | index to starting character |
Definition at line 1265 of file Fl_Text_Display.cxx.
References buffer(), IS_UTF8_ALIGNED2, Fl_Text_Buffer::line_start(), mContinuousWrap, and wrapped_line_counter().
Referenced by handle(), move_down(), move_up(), position_to_linecol(), resize(), wrap_mode(), and wrapped_line_counter().
| int Fl_Text_Display::longest_vline | ( | ) | const [protected] |
Find the longest line of all visible lines.
Definition at line 272 of file Fl_Text_Display.cxx.
References i, measure_vline(), and mNVisibleLines.
Referenced by resize(), scroll_(), and update_h_scrollbar().
| void Fl_Text_Display::maintain_absolute_top_line_number | ( | int | state | ) | [protected] |
Line numbering stuff, currently unused.
In continuous wrap mode, internal line numbers are calculated after wrapping. A separate non-wrapped line count is maintained when line numbering is turned on. There is some performance cost to maintaining this line count, so normally absolute line numbers are not tracked if line numbering is off. This routine allows callers to specify that they still want this line count maintained (for use via TextDPosToLineAndCol). More specifically, this allows the line number reported in the statistics line to be calibrated in absolute lines, rather than post-wrapped lines.
Definition at line 1557 of file Fl_Text_Display.cxx.
References mNeedAbsTopLineNum, reset_absolute_top_line_number(), and state.
| int Fl_Text_Display::maintaining_absolute_top_line_number | ( | ) | const [protected] |
Line numbering stuff, currently unused.
Return true if a separate absolute top line number is being maintained (for displaying line numbers or showing in the statistics line).
Definition at line 1602 of file Fl_Text_Display.cxx.
References mContinuousWrap, mLineNumWidth, and mNeedAbsTopLineNum.
Referenced by absolute_top_line_number(), buffer_modified_cb(), get_absolute_top_line_number(), and position_to_linecol().
| void Fl_Text_Display::measure_deleted_lines | ( | int | pos, |
| int | nDeleted | ||
| ) | [protected] |
Wrapping calculations.
This is a stripped-down version of the findWrapRange() function above, intended to be used to calculate the number of "deleted" lines during a buffer modification. It is called _before_ the modification takes place.
This function should only be called in continuous wrap mode with a non-fixed font width. In that case, it is impossible to calculate the number of deleted lines, because the necessary style information is no longer available _after_ the modification. In other cases, we can still perform the calculation afterwards (possibly even more efficiently).
| pos | |
| nDeleted |
Definition at line 2963 of file Fl_Text_Display.cxx.
References buf, buffer(), Fl_Text_Buffer::char_at(), i, IS_UTF8_ALIGNED2, Fl_Text_Buffer::length(), Fl_Text_Buffer::line_start(), mFirstChar, mLastChar, mLineStarts, mNLinesDeleted, mNVisibleLines, mSuppressResync, and wrapped_line_counter().
Referenced by buffer_predelete_cb().
| double Fl_Text_Display::measure_proportional_character | ( | const char * | s, |
| int | xPix, | ||
| int | pos | ||
| ) | const [protected] |
Wrapping calculations.
Measure the width in pixels of the first character of string "s" at a particular column "colNum" and buffer position "pos". This is for measuring characters in proportional or mixed-width highlighting fonts.
A note about proportional and mixed-width fonts: the mixed width and proportional font code in nedit does not get much use in general editing, because nedit doesn't allow per-language-mode fonts, and editing programs in a proportional font is usually a bad idea, so very few users would choose a proportional font as a default. There are still probably mixed- width syntax highlighting cases where things don't redraw properly for insertion/deletion, though static display and wrapping and resizing should now be solid because they are now used for online help display.
| s | text string |
| xPix | x pixel position needed for calculating tab widths |
| pos | offset within string |
Definition at line 3199 of file Fl_Text_Display.cxx.
References Fl_Text_Buffer::byte_at(), col_to_x(), fl_utf8len1(), int, IS_UTF8_ALIGNED, mStyleBuffer, and string_width().
Referenced by wrapped_line_counter().
| int Fl_Text_Display::measure_vline | ( | int | visLineNum | ) | const [protected] |
Returns the width in pixels of the displayed line pointed to by "visLineNum".
| visLineNum | index into visible lines array |
Definition at line 2720 of file Fl_Text_Display.cxx.
Referenced by longest_vline().
| int Fl_Text_Display::move_down | ( | ) |
Moves the current insert position down one line.
Definition at line 1101 of file Fl_Text_Display.cxx.
References FIND_INDEX_FROM_ZERO, GET_WIDTH, handle_vline(), insert_position(), Fl_Text_Buffer::length(), line_end(), line_start(), mBuffer, mCursorPos, mCursorPreferredXPos, mLineStarts, position_to_line(), and skip_lines().
Referenced by Fl_Text_Editor::kf_move().
| int Fl_Text_Display::move_left | ( | ) |
Moves the current insert position left one character.
Definition at line 1041 of file Fl_Text_Display.cxx.
References buffer(), insert_position(), mCursorPos, and Fl_Text_Buffer::prev_char_clipped().
Referenced by Fl_Text_Editor::kf_backspace(), and Fl_Text_Editor::kf_move().
| int Fl_Text_Display::move_right | ( | ) |
Moves the current insert position right one character.
Definition at line 1026 of file Fl_Text_Display.cxx.
References buffer(), insert_position(), Fl_Text_Buffer::length(), mBuffer, mCursorPos, and Fl_Text_Buffer::next_char().
Referenced by Fl_Text_Editor::kf_move().
| int Fl_Text_Display::move_up | ( | ) |
Moves the current insert position up one line.
Definition at line 1056 of file Fl_Text_Display.cxx.
References FIND_INDEX_FROM_ZERO, GET_WIDTH, handle_vline(), insert_position(), line_end(), line_start(), mCursorPos, mCursorPreferredXPos, mLineStarts, position_to_line(), and rewind_lines().
Referenced by Fl_Text_Editor::kf_move().
| void Fl_Text_Display::next_word | ( | void | ) |
Moves the current insert position right one word.
Definition at line 1330 of file Fl_Text_Display.cxx.
References buffer(), insert_position(), length, and Fl_Text_Buffer::next_char().
Referenced by Fl_Text_Editor::kf_ctrl_move().
| void Fl_Text_Display::offset_line_starts | ( | int | newTopLineNum | ) | [protected] |
Offset line start counters for a new vertical scroll position.
Offset the line starts array, mTopLineNum, mFirstChar and lastChar, for a new vertical scroll position given by newTopLineNum. If any currently displayed lines will still be visible, salvage the line starts values, otherwise, count lines from the nearest known line start (start or end of buffer, or the closest value in the mLineStarts array)
| newTopLineNum | index into buffer |
Definition at line 2278 of file Fl_Text_Display.cxx.
References absolute_top_line_number(), buf, calc_last_char(), calc_line_starts(), i, Fl_Text_Buffer::length(), mBuffer, mFirstChar, mLineStarts, mNBufferLines, mNVisibleLines, mTopLineNum, rewind_lines(), and skip_lines().
Referenced by scroll_().
| void Fl_Text_Display::overstrike | ( | const char * | text | ) |
Replaces text at the current insert position.
| text | new text in UTF-8 encoding |
Definition at line 740 of file Fl_Text_Display.cxx.
References buf, buffer(), Fl_Text_Buffer::char_at(), Fl_Text_Buffer::count_displayed_characters(), FL_TEXT_MAX_EXP_CHAR_LEN, fl_utf8len1(), i, indent(), IS_UTF8_ALIGNED, IS_UTF8_ALIGNED2, Fl_Text_Buffer::length(), Fl_Text_Buffer::line_start(), mBuffer, mCursorPos, mCursorToHint, Fl_Text_Buffer::next_char(), NO_HINT, NULL, and Fl_Text_Buffer::replace().
Referenced by Fl_Text_Editor::handle(), Fl_Text_Editor::handle_key(), and Fl_Text_Editor::kf_default().
| int Fl_Text_Display::position_style | ( | int | lineStartPos, |
| int | lineLen, | ||
| int | lineIndex | ||
| ) | const |
Find the correct style for a character.
Determine the drawing method to use to draw a specific character from "buf". lineStartPos gives the character index where the line begins, lineIndex, the number of characters past the beginning of the line, and lineIndex the number of displayed characters past the beginning of the line. Passing lineStartPos of -1 returns the drawing style for "no text".
Why not just: position_style(pos)? Because style applies to blank areas of the window beyond the text boundaries, and because this routine must also decide whether a position is inside of a rectangular Fl_Text_Selection, and do so efficiently, without re-counting character positions from the start of the line.
Note that style is a somewhat incorrect name, drawing method would be more appropriate.
| lineStartPos | beginning of this line |
| lineLen | number of bytes in line |
| lineIndex | position of character within line |
Definition at line 2129 of file Fl_Text_Display.cxx.
References buf, buffer(), Fl_Text_Buffer::byte_at(), FILL_MASK, HIGHLIGHT_MASK, Fl_Text_Buffer::highlight_selection(), Fl_Text_Selection::includes(), IS_UTF8_ALIGNED2, mBuffer, mHighlightCBArg, min, mStyleBuffer, mUnfinishedHighlightCB, mUnfinishedStyle, NULL, PRIMARY_MASK, Fl_Text_Buffer::primary_selection(), SECONDARY_MASK, and Fl_Text_Buffer::secondary_selection().
Referenced by handle_vline().
| int Fl_Text_Display::position_to_line | ( | int | pos, |
| int * | lineNum | ||
| ) | const [protected] |
Convert a position index into a line number offset.
Find the line number of position pos relative to the first line of displayed text. Returns 0 if the line is not displayed.
| pos | ?? | |
| [out] | lineNum | ?? |
Definition at line 1634 of file Fl_Text_Display.cxx.
References buffer(), empty_vlines(), Fl::error, i, IS_UTF8_ALIGNED2, length, mFirstChar, mLastChar, mLineStarts, and mNVisibleLines.
Referenced by draw_range(), move_down(), move_up(), position_to_linecol(), position_to_xy(), and update_line_starts().
| int Fl_Text_Display::position_to_linecol | ( | int | pos, |
| int * | lineNum, | ||
| int * | column | ||
| ) | const [protected] |
Find the line and column number of position pos.
This only works for displayed lines. If the line is not displayed, the function returns 0 (without the mLineStarts array it could turn in to very long calculation involving scanning large amounts of text in the buffer). If continuous wrap mode is on, returns the absolute line number (as opposed to the wrapped line number which is used for scrolling).
| pos | character index | |
| [out] | lineNum | absolute (unwrapped) line number |
| [out] | column | character offset to the beginning of the line |
pos is off screen, line number otherwise Definition at line 863 of file Fl_Text_Display.cxx.
References buffer(), Fl_Text_Buffer::count_displayed_characters(), Fl_Text_Buffer::count_lines(), IS_UTF8_ALIGNED2, line_start(), mAbsTopLineNum, maintaining_absolute_top_line_number(), mBuffer, mContinuousWrap, mFirstChar, mLastChar, mLineStarts, mTopLineNum, and position_to_line().
| int Fl_Text_Display::position_to_xy | ( | int | pos, |
| int * | X, | ||
| int * | Y | ||
| ) | const [protected] |
Convert a character index into a pixel position.
Translate a buffer text position to the XY location where the top left of the cursor would be positioned to point to that character. Returns 0 if the position is not displayed because it is vertically out of view. If the position is horizontally out of view, returns the X coordinate where the position would be if it were visible.
| pos | character index | |
| [out] | X,Y | pixel position of character on screen |
Definition at line 809 of file Fl_Text_Display.cxx.
References buffer(), empty_vlines(), GET_WIDTH, handle_vline(), IS_UTF8_ALIGNED2, mFirstChar, mHorizOffset, mLastChar, mLineStarts, mMaxsize, mNBufferLines, position_to_line(), text_area, and vline_length().
Referenced by display_insert(), and draw().
| void Fl_Text_Display::previous_word | ( | void | ) |
Moves the current insert position left one word.
Definition at line 1349 of file Fl_Text_Display.cxx.
References buffer(), insert_position(), Fl_Text_Buffer::next_char(), and Fl_Text_Buffer::prev_char().
Referenced by Fl_Text_Editor::kf_ctrl_move().
| void Fl_Text_Display::redisplay_range | ( | int | startpos, |
| int | endpos | ||
| ) |
Marks text from start to end as needing a redraw. This function will trigger a damage event and later a redraw of parts of the widget.
| startpos | index of first character needing redraw |
| endpos | index after last character needing redraw |
Definition at line 486 of file Fl_Text_Display.cxx.
References buffer(), Fl_Widget::damage(), damage_range1_end, damage_range1_start, damage_range2_end, damage_range2_start, FL_DAMAGE_SCROLL, IS_UTF8_ALIGNED2, and min.
Referenced by buffer_modified_cb(), handle(), insert_position(), and show_cursor().
| void Fl_Text_Display::reset_absolute_top_line_number | ( | ) | [protected] |
Line numbering stuff, probably unused.
Count lines from the beginning of the buffer to reestablish the absolute (non-wrapped) top line number. If mode is not continuous wrap, or the number is not being maintained, does nothing.
Definition at line 1616 of file Fl_Text_Display.cxx.
References absolute_top_line_number(), and mAbsTopLineNum.
Referenced by buffer_modified_cb(), maintain_absolute_top_line_number(), and wrap_mode().
| void Fl_Text_Display::resize | ( | int | X, |
| int | Y, | ||
| int | W, | ||
| int | H | ||
| ) | [virtual] |
Change the size of the displayed text area. Calling this function will trigger a recalculation of all lines visible and of all scrollbar sizes.
| X,Y,W,H | new position and size of this widget |
Reimplemented from Fl_Group.
Definition at line 287 of file Fl_Text_Display.cxx.
References absolute_top_line_number(), BOTTOM_MARGIN, Fl_Widget::box(), Fl::box_dh(), Fl::box_dw(), Fl::box_dx(), Fl::box_dy(), buffer(), calc_last_char(), calc_line_starts(), Fl_Widget::clear_visible(), count_lines(), display_insert(), display_insert_position_hint, FL_ALIGN_BOTTOM, FL_ALIGN_LEFT, FL_ALIGN_RIGHT, FL_ALIGN_TOP, fl_height(), i, LEFT_MARGIN, length, line_start(), longest_vline(), mContinuousWrap, mFirstChar, mHorizOffset, mHorizOffsetHint, mHScrollBar, mLineStarts, mMaxsize, mNBufferLines, mNStyles, mNVisibleLines, mStyleTable, mTopLineNum, mTopLineNumHint, mVScrollBar, mWrapMarginPix, Fl_Widget::redraw(), Fl_Widget::resize(), RIGHT_MARGIN, scroll_(), scrollbar_align(), scrollbar_width(), Fl_Widget::set_visible(), Fl_Widget::size(), text_area, textfont(), textsize(), TOP_MARGIN, update_h_scrollbar(), update_v_scrollbar(), Fl_Widget::visible(), and Fl_Widget::w().
Referenced by buffer(), buffer_modified_cb(), scroll(), show_insert_position(), and wrap_mode().
| int Fl_Text_Display::rewind_lines | ( | int | startPos, |
| int | nLines | ||
| ) |
Skip a number of lines back.
Same as BufCountBackwardNLines, but takes into account line breaks when wrapping is turned on.
| startPos | index to starting character |
| nLines | number of lines to skip back |
Definition at line 1293 of file Fl_Text_Display.cxx.
References buf, buffer(), IS_UTF8_ALIGNED2, Fl_Text_Buffer::line_start(), mContinuousWrap, Fl_Text_Buffer::rewind_lines(), skip_lines(), and wrapped_line_counter().
Referenced by move_up(), offset_line_starts(), and update_line_starts().
| void Fl_Text_Display::scroll | ( | int | topLineNum, |
| int | horizOffset | ||
| ) |
Scrolls the current buffer to start at the specified line and column.
| topLineNum | top line number |
| horizOffset | column number |
Definition at line 2527 of file Fl_Text_Display.cxx.
References Fl_Widget::h(), mHorizOffsetHint, mTopLineNumHint, resize(), Fl_Widget::w(), Fl_Widget::x(), and Fl_Widget::y().
Referenced by h_scrollbar_cb(), Fl_Text_Editor::kf_ctrl_move(), Fl_Text_Editor::kf_meta_move(), scroll_timer_cb(), shell_pipe_cb(), update_sourceview_cb(), update_sourceview_position(), and v_scrollbar_cb().
| int Fl_Text_Display::scroll_ | ( | int | topLineNum, |
| int | horizOffset | ||
| ) | [protected] |
Scrolls the current buffer to start at the specified line and column.
| topLineNum | top line number |
| horizOffset | in pixels |
Definition at line 2541 of file Fl_Text_Display.cxx.
References Fl_Widget::damage(), FL_DAMAGE_EXPOSE, longest_vline(), mHorizOffset, mNBufferLines, mNVisibleLines, mTopLineNum, offset_line_starts(), and text_area.
Referenced by display_insert(), and resize().
| void Fl_Text_Display::scroll_timer_cb | ( | void * | user_data | ) | [static, protected] |
Timer callback for scroll events.
This timer event scrolls the text view proportionally to how far the mouse pointer has left the text area. This allows for smooth scrolling without "wiggeling" the mouse.
Definition at line 3510 of file Fl_Text_Display.cxx.
References CURSOR_POS, fl_text_drag_me, h, mHorizOffset, mTopLineNum, Fl::repeat_timeout(), scroll(), text_area, w, Fl_Widget::w(), x, xy_to_position(), and y.
Referenced by handle(), and ~Fl_Text_Display().
| void Fl_Text_Display::scrollbar_align | ( | Fl_Align | a | ) | [inline] |
Sets the scrollbar alignment type.
| a | new scrollbar alignment |
Definition at line 205 of file Fl_Text_Display.H.
References buffer.
| Fl_Align Fl_Text_Display::scrollbar_align | ( | ) | const [inline] |
Gets the scrollbar alignment type.
Definition at line 199 of file Fl_Text_Display.H.
Referenced by Fl_Text_Display(), and resize().
| void Fl_Text_Display::scrollbar_width | ( | int | W | ) | [inline] |
Sets the width/height of the scrollbars.
| W | width of scrollbars |
Definition at line 193 of file Fl_Text_Display.H.
| int Fl_Text_Display::scrollbar_width | ( | ) | const [inline] |
Gets the width/height of the scrollbars. /return width of scrollbars
Definition at line 187 of file Fl_Text_Display.H.
Referenced by draw(), Fl_Text_Display(), and resize().
| void Fl_Text_Display::shortcut | ( | int | s | ) | [inline] |
| s | the new shortcut key |
Definition at line 242 of file Fl_Text_Display.H.
| int Fl_Text_Display::shortcut | ( | ) | const [inline] |
Definition at line 235 of file Fl_Text_Display.H.
Referenced by Fl_Widget_Type::copy_properties(), Fl_Text_Editor::handle(), handle(), shortcut_in_cb(), and Fl_Widget_Type::write_properties().
| void Fl_Text_Display::show_cursor | ( | int | b = 1 | ) |
Shows the text cursor. This function may trigger a redraw.
| b | show(1) or hide(0) the text cursor (caret). |
Definition at line 614 of file Fl_Text_Display.cxx.
References b, buffer(), mCursorOn, mCursorPos, and redisplay_range().
Referenced by cursor_style(), and Fl_Text_Editor::handle().
| void Fl_Text_Display::show_insert_position | ( | ) |
Scrolls the text buffer to show the current insert position. This function triggers a complete recalculation, ending in a call to Fl_Text_Display::display_insert()
Definition at line 1012 of file Fl_Text_Display.cxx.
References display_insert_position_hint, Fl_Widget::h(), resize(), Fl_Widget::w(), Fl_Widget::x(), and Fl_Widget::y().
Referenced by Fl_Text_Editor::handle(), handle(), Fl_Text_Editor::handle_key(), Fl_Text_Editor::kf_backspace(), Fl_Text_Editor::kf_copy(), Fl_Text_Editor::kf_ctrl_move(), Fl_Text_Editor::kf_default(), Fl_Text_Editor::kf_delete(), Fl_Text_Editor::kf_enter(), Fl_Text_Editor::kf_meta_move(), Fl_Text_Editor::kf_move(), Fl_Text_Editor::kf_paste(), and Fl_Text_Editor::kf_undo().
| int Fl_Text_Display::skip_lines | ( | int | startPos, |
| int | nLines, | ||
| bool | startPosIsLineStart | ||
| ) |
Skip a number of lines forward.
Same as BufCountForwardNLines, but takes into account line breaks when wrapping is turned on. If the caller knows that startPos is at a line start, it can pass "startPosIsLineStart" as True to make the call more efficient by avoiding the additional step of scanning back to the last newline.
| startPos | index to starting character |
| nLines | number of lines to skip ahead |
| startPosIsLineStart | avoid scanning back to the line start |
Definition at line 1188 of file Fl_Text_Display.cxx.
References buffer(), IS_UTF8_ALIGNED2, length, mContinuousWrap, Fl_Text_Buffer::skip_lines(), and wrapped_line_counter().
Referenced by move_down(), offset_line_starts(), rewind_lines(), and update_line_starts().
| double Fl_Text_Display::string_width | ( | const char * | string, |
| int | length, | ||
| int | style | ||
| ) | const [protected] |
Find the width of a string in the font of a particular style.
| string | the text |
| length | number of bytes in string |
| style | index into style table |
Definition at line 2170 of file Fl_Text_Display.cxx.
References fl_font(), fl_width(), Fl_Text_Display::Style_Table_Entry::font, IS_UTF8_ALIGNED, mNStyles, mStyleTable, Fl_Text_Display::Style_Table_Entry::size, STYLE_LOOKUP_MASK, textfont(), and textsize().
Referenced by find_x(), handle_vline(), measure_proportional_character(), and x_to_col().
| Fl_Color Fl_Text_Display::textcolor | ( | ) | const [inline] |
Gets the default color of text in the widget.
Definition at line 272 of file Fl_Text_Display.H.
Referenced by draw_string(), and Fl_Text_Display().
| void Fl_Text_Display::textcolor | ( | Fl_Color | n | ) | [inline] |
Sets the default color of text in the widget.
| n | new text color |
Definition at line 278 of file Fl_Text_Display.H.
| Fl_Font Fl_Text_Display::textfont | ( | ) | const [inline] |
Gets the default font used when drawing text in the widget.
Definition at line 248 of file Fl_Text_Display.H.
Referenced by draw_string(), Fl_Text_Display(), Fl_Text_Editor_Type::ideal_size(), Fl_Text_Display_Type::ideal_size(), make_class_panel(), make_code_panel(), make_comment_panel(), make_data_panel(), make_decl_panel(), make_function_panel(), make_shell_window(), make_sourceview(), make_widget_panel(), resize(), and string_width().
| void Fl_Text_Display::textfont | ( | Fl_Font | s | ) | [inline] |
Sets the default font used when drawing text in the widget.
| s | default text font face |
Definition at line 254 of file Fl_Text_Display.H.
| Fl_Fontsize Fl_Text_Display::textsize | ( | ) | const [inline] |
Gets the default size of text in the widget.
Definition at line 260 of file Fl_Text_Display.H.
Referenced by draw_string(), Fl_Text_Display(), Fl_Text_Editor_Type::ideal_size(), Fl_Text_Display_Type::ideal_size(), make_class_panel(), make_code_panel(), make_comment_panel(), make_data_panel(), make_decl_panel(), make_function_panel(), make_sourceview(), make_widget_panel(), resize(), and string_width().
| void Fl_Text_Display::textsize | ( | Fl_Fontsize | s | ) | [inline] |
Sets the default size of text in the widget.
| s | new text size |
Definition at line 266 of file Fl_Text_Display.H.
| void Fl_Text_Display::update_h_scrollbar | ( | ) | [protected] |
Update vertical scrollbar.
Update the minimum, maximum, slider size, page increment, and value for the horizontal scrollbar.
Definition at line 2598 of file Fl_Text_Display.cxx.
References longest_vline(), mHorizOffset, mHScrollBar, text_area, and Fl_Scrollbar::value().
Referenced by resize().
| void Fl_Text_Display::update_line_starts | ( | int | pos, |
| int | charsInserted, | ||
| int | charsDeleted, | ||
| int | linesInserted, | ||
| int | linesDeleted, | ||
| int * | scrolled | ||
| ) | [protected] |
Update line start arrays and variables.
Update the line starts array, mTopLineNum, mFirstChar and lastChar for this text display after a modification to the text buffer, given by the position pos where the change began, and the numbers of characters and lines inserted and deleted.
| pos | index into buffer of recent changes | |
| charsInserted | number of bytes(!) inserted | |
| charsDeleted | number of bytes(!) deleted | |
| linesInserted | number of lines | |
| linesDeleted | number of lines | |
| [out] | scrolled | set to 1 if the text display needs to be scrolled |
Definition at line 2346 of file Fl_Text_Display.cxx.
References buffer(), calc_last_char(), calc_line_starts(), empty_vlines(), i, IS_UTF8_ALIGNED2, mFirstChar, mLastChar, mLineStarts, mNBufferLines, mNVisibleLines, mTopLineNum, position_to_line(), rewind_lines(), and skip_lines().
Referenced by buffer_modified_cb().
| void Fl_Text_Display::update_v_scrollbar | ( | ) | [protected] |
Update vertical scrollbar.
Update the minimum, maximum, slider size, page increment, and value for vertical scrollbar.
Definition at line 2576 of file Fl_Text_Display.cxx.
References Fl_Scrollbar::linesize(), mNBufferLines, mNVisibleLines, mTopLineNum, mVScrollBar, and Fl_Scrollbar::value().
Referenced by resize().
| void Fl_Text_Display::v_scrollbar_cb | ( | Fl_Scrollbar * | w, |
| Fl_Text_Display * | d | ||
| ) | [static, protected] |
Callbacks for drag or valueChanged on scrollbars.
Definition at line 2608 of file Fl_Text_Display.cxx.
References mHorizOffset, mTopLineNum, scroll(), and Fl_Scrollbar::value().
Referenced by Fl_Text_Display().
| int Fl_Text_Display::vline_length | ( | int | visLineNum | ) | const [protected] |
Count number of bytes in a visible line.
Return the length of a line (number of bytes) by examining entries in the line starts array rather than by scanning for newlines.
| visLineNum | index of line in visible line array |
Definition at line 2748 of file Fl_Text_Display.cxx.
References buffer(), mLastChar, mLineStarts, mNVisibleLines, Fl_Text_Buffer::prev_char(), and wrap_uses_character().
Referenced by draw_vline(), position_to_xy(), and xy_to_position().
| int Fl_Text_Display::word_end | ( | int | pos | ) | const [inline] |
Moves the insert position to the end of the current word.
| pos | start calculation at this index |
Definition at line 219 of file Fl_Text_Display.H.
Referenced by fl_text_drag_me(), and handle().
| int Fl_Text_Display::word_start | ( | int | pos | ) | const [inline] |
Moves the insert position to the beginning of the current word.
| pos | start calculation at this index |
Definition at line 212 of file Fl_Text_Display.H.
References buffer.
Referenced by fl_text_drag_me(), and handle().
| void Fl_Text_Display::wrap_mode | ( | int | wrap, |
| int | wrapMargin | ||
| ) |
Set the new text wrap mode.
If wrap mode is not zero, this call enables automatic word wrapping at column wrapMargin. Word-wrapping does not change the text buffer itself, only the way the text is displayed. Different Text Displays can have different wrap modes, even if they share the same Text Buffer.
| wrap | new wrap mode is WRAP_NONE (don't wrap text at all), WRAP_AT_COLUMN (wrap text at the given text column), WRAP_AT_PIXEL (wrap text at a pixel position), or WRAP_AT_BOUNDS (wrap text so that it fits into the widget width) |
| wrapMargin | in WRAP_AT_COLUMN mode, text will wrap at the n'th character. For variable width fonts, an average character width is calculated. The column width is calculated using the current textfont or the first style when this function is called. If the font size changes, this function must be called again. In WRAP_AT_PIXEL mode, this is the pixel position. |
Definition at line 663 of file Fl_Text_Display.cxx.
References buffer(), calc_last_char(), calc_line_starts(), col_to_x(), count_lines(), Fl_Widget::h(), int, length, line_start(), mAbsTopLineNum, mContinuousWrap, mFirstChar, mNBufferLines, mNVisibleLines, mTopLineNum, mWrapMarginPix, reset_absolute_top_line_number(), resize(), Fl_Widget::w(), WRAP_AT_BOUNDS, WRAP_AT_COLUMN, WRAP_AT_PIXEL, WRAP_NONE, Fl_Widget::x(), and Fl_Widget::y().
| int Fl_Text_Display::wrap_uses_character | ( | int | lineEndPos | ) | const [protected] |
Check if the line break is caused by a \n or by line wrapping.
Line breaks in continuous wrap mode usually happen at newlines or whitespace. This line-terminating character is not included in line width measurements and has a special status as a non-visible character. However, lines with no whitespace are wrapped without the benefit of a line terminating character, and this distinction causes endless trouble with all of the text display code which was originally written without continuous wrap mode and always expects to wrap at a newline character.
Given the position of the end of the line, as returned by TextDEndOfLine or BufEndOfLine, this returns true if there is a line terminating character, and false if there's not. On the last character in the buffer, this function can't tell for certain whether a trailing space was used as a wrap point, and just guesses that it wasn't. So if an exact accounting is necessary, don't use this function.
| lineEndPos | index of character where the line wraps |
Definition at line 3277 of file Fl_Text_Display.cxx.
References buffer(), Fl_Text_Buffer::char_at(), IS_UTF8_ALIGNED2, Fl_Text_Buffer::length(), length, and mContinuousWrap.
Referenced by display_insert(), and vline_length().
| int Fl_Text_Display::wrapped_column | ( | int | row, |
| int | column | ||
| ) | const |
Nobody knows what this function does.
Correct a column number based on an unconstrained position (as returned by TextDXYToUnconstrainedPosition) to be relative to the last actual newline in the buffer before the row and column position given, rather than the last line start created by line wrapping. This is an adapter for rectangular selections and code written before continuous wrap mode, which thinks that the unconstrained column is the number of characters from the last newline. Obviously this is time consuming, because it invloves character re-counting.
| row | |
| column |
Definition at line 923 of file Fl_Text_Display.cxx.
References buffer(), Fl_Text_Buffer::count_displayed_characters(), Fl_Text_Buffer::line_start(), mContinuousWrap, mLineStarts, mNVisibleLines, and row.
| void Fl_Text_Display::wrapped_line_counter | ( | Fl_Text_Buffer * | buf, |
| int | startPos, | ||
| int | maxPos, | ||
| int | maxLines, | ||
| bool | startPosIsLineStart, | ||
| int | styleBufOffset, | ||
| int * | retPos, | ||
| int * | retLines, | ||
| int * | retLineStart, | ||
| int * | retLineEnd, | ||
| bool | countLastLineMissingNewLine = true |
||
| ) | const [protected] |
Wrapping calculations.
Count forward from startPos to either maxPos or maxLines (whichever is reached first), and return all relevant positions and line count. The provided textBuffer may differ from the actual text buffer of the widget. In that case it must be a (partial) copy of the actual text buffer and the styleBufOffset argument must indicate the starting position of the copy, to take into account the correct style information.
| buf | ||
| startPos | ||
| maxPos | ||
| maxLines | ||
| startPosIsLineStart | ||
| styleBufOffset | ||
| [out] | retPos | Position where counting ended. When counting lines, the position returned is the start of the line "maxLines" lines beyond "startPos". |
| [out] | retLines | Number of line breaks counted |
| [out] | retLineStart | Start of the line where counting ended |
| [out] | retLineEnd | End position of the last line traversed |
| [out] | countLastLineMissingNewLine |
Definition at line 3055 of file Fl_Text_Display.cxx.
References Fl_Text_Buffer::address(), b, Fl_Text_Buffer::char_at(), i, int, IS_UTF8_ALIGNED2, Fl_Text_Buffer::length(), line_start(), measure_proportional_character(), mWrapMarginPix, Fl_Text_Buffer::next_char(), Fl_Text_Buffer::prev_char(), text_area, and width.
Referenced by count_lines(), find_line_end(), find_wrap_range(), line_end(), line_start(), measure_deleted_lines(), rewind_lines(), and skip_lines().
| int Fl_Text_Display::wrapped_row | ( | int | row | ) | const |
Nobody knows what this function does.
Correct a row number from an unconstrained position (as returned by TextDXYToUnconstrainedPosition) to a straight number of newlines from the top line of the display. Because rectangular selections are based on newlines, rather than display wrapping, and anywhere a rectangular selection needs a row, it needs it in terms of un-wrapped lines.
| row |
Definition at line 951 of file Fl_Text_Display.cxx.
References buffer(), Fl_Text_Buffer::count_lines(), mContinuousWrap, mFirstChar, mLineStarts, mNVisibleLines, and row.
| double Fl_Text_Display::x_to_col | ( | double | x | ) | const |
Convert an x pixel position into a column number.
| x | number of pixels from the left margin |
Definition at line 3763 of file Fl_Text_Display.cxx.
References mColumnScale, and string_width().
Referenced by col_to_x().
| int Fl_Text_Display::xy_to_position | ( | int | X, |
| int | Y, | ||
| int | posType = CHARACTER_POS |
||
| ) | const [protected] |
Translate a pixel position into a character index.
Translate window coordinates to the nearest (insert cursor or character cell) text position. The parameter posType specifies how to interpret the position: CURSOR_POS means translate the coordinates to the nearest cursor position, and CHARACTER_POS means return the position of the character closest to (X, Y).
| X,Y | pixel position |
| posType | CURSOR_POS or CHARACTER_POS |
Definition at line 2206 of file Fl_Text_Display.cxx.
References FIND_INDEX, handle_vline(), Fl_Text_Buffer::length(), mBuffer, mFirstChar, mLineStarts, mMaxsize, mNVisibleLines, text_area, and vline_length().
Referenced by Fl_Text_Editor::handle(), handle(), in_selection(), and scroll_timer_cb().
| void Fl_Text_Display::xy_to_rowcol | ( | int | X, |
| int | Y, | ||
| int * | row, | ||
| int * | column, | ||
| int | posType = CHARACTER_POS |
||
| ) | const [protected] |
Translate pixel coordinates into row and column.
Translate window coordinates to the nearest row and column number for positioning the cursor. This, of course, makes no sense when the font is proportional, since there are no absolute columns. The parameter posType specifies how to interpret the position: CURSOR_POS means translate the coordinates to the nearest position between characters, and CHARACTER_POS means translate the position to the nearest character cell.
| X,Y | pixel coordinates | |
| [out] | row,column | neares row and column |
| posType | CURSOR_POS or CHARACTER_POS |
Definition at line 2250 of file Fl_Text_Display.cxx.
References CURSOR_POS, mHorizOffset, mMaxsize, mNVisibleLines, text_area, and TMPFONTWIDTH.
| void fl_text_drag_me | ( | int | pos, |
| Fl_Text_Display * | d | ||
| ) | [friend] |
Definition at line 3472 of file Fl_Text_Display.cxx.
Referenced by handle(), Fl_Text_Editor::kf_c_s_move(), Fl_Text_Editor::kf_m_s_move(), Fl_Text_Editor::kf_shift_move(), and scroll_timer_cb().
int Fl_Text_Display::damage_range1_end [protected] |
Definition at line 394 of file Fl_Text_Display.H.
Referenced by draw(), Fl_Text_Display(), and redisplay_range().
int Fl_Text_Display::damage_range1_start [protected] |
Definition at line 394 of file Fl_Text_Display.H.
Referenced by draw(), Fl_Text_Display(), and redisplay_range().
int Fl_Text_Display::damage_range2_end [protected] |
Definition at line 395 of file Fl_Text_Display.H.
Referenced by draw(), Fl_Text_Display(), and redisplay_range().
int Fl_Text_Display::damage_range2_start [protected] |
Definition at line 395 of file Fl_Text_Display.H.
Referenced by draw(), Fl_Text_Display(), and redisplay_range().
int Fl_Text_Display::display_insert_position_hint [protected] |
Definition at line 461 of file Fl_Text_Display.H.
Referenced by Fl_Text_Display(), resize(), and show_insert_position().
int Fl_Text_Display::dragging [protected] |
Definition at line 460 of file Fl_Text_Display.H.
Referenced by Fl_Text_Display(), and handle().
int Fl_Text_Display::dragPos [protected] |
Definition at line 460 of file Fl_Text_Display.H.
Referenced by Fl_Text_Display(), fl_text_drag_me(), handle(), Fl_Text_Editor::kf_ctrl_move(), Fl_Text_Editor::kf_meta_move(), and Fl_Text_Editor::kf_move().
int Fl_Text_Display::dragType [protected] |
Definition at line 460 of file Fl_Text_Display.H.
Referenced by Fl_Text_Display(), fl_text_drag_me(), Fl_Text_Editor::handle(), and handle().
Definition at line 462 of file Fl_Text_Display.H.
Referenced by buffer_modified_cb(), and scroll_timer_cb().
int Fl_Text_Display::mAbsTopLineNum [protected] |
Definition at line 419 of file Fl_Text_Display.H.
Referenced by absolute_top_line_number(), buffer_modified_cb(), Fl_Text_Display(), get_absolute_top_line_number(), position_to_linecol(), reset_absolute_top_line_number(), and wrap_mode().
Fl_Text_Buffer* Fl_Text_Display::mBuffer [protected] |
Definition at line 406 of file Fl_Text_Display.H.
Referenced by buffer(), buffer_modified_cb(), calc_line_starts(), CodeEditor::CodeEditor(), draw_range(), extend_range_for_styles(), Fl_Text_Display(), handle_vline(), in_selection(), insert(), insert_position(), move_down(), move_right(), offset_line_starts(), overstrike(), position_style(), position_to_linecol(), xy_to_position(), CodeEditor::~CodeEditor(), and ~Fl_Text_Display().
double Fl_Text_Display::mColumnScale [mutable, protected] |
Definition at line 449 of file Fl_Text_Display.H.
Referenced by col_to_x(), highlight_data(), and x_to_col().
int Fl_Text_Display::mContinuousWrap [protected] |
Definition at line 413 of file Fl_Text_Display.H.
Referenced by buffer_modified_cb(), buffer_predelete_cb(), count_lines(), find_line_end(), Fl_Text_Display(), get_absolute_top_line_number(), line_end(), line_start(), maintaining_absolute_top_line_number(), position_to_linecol(), resize(), rewind_lines(), skip_lines(), wrap_mode(), wrap_uses_character(), wrapped_column(), and wrapped_row().
Fl_Color Fl_Text_Display::mCursor_color [protected] |
Definition at line 454 of file Fl_Text_Display.H.
Referenced by draw_cursor(), and Fl_Text_Display().
int Fl_Text_Display::mCursorOldY [protected] |
Definition at line 398 of file Fl_Text_Display.H.
Referenced by draw(), and Fl_Text_Display().
int Fl_Text_Display::mCursorOn [protected] |
Definition at line 397 of file Fl_Text_Display.H.
Referenced by cursor_style(), draw(), Fl_Text_Display(), Fl_Text_Editor::Fl_Text_Editor(), Fl_Text_Editor::handle(), and show_cursor().
int Fl_Text_Display::mCursorPos [protected] |
Definition at line 396 of file Fl_Text_Display.H.
Referenced by buffer_modified_cb(), display_insert(), draw(), Fl_Text_Display(), insert(), insert_position(), move_down(), move_left(), move_right(), move_up(), overstrike(), and show_cursor().
int Fl_Text_Display::mCursorPreferredXPos [protected] |
Definition at line 403 of file Fl_Text_Display.H.
Referenced by buffer_modified_cb(), Fl_Text_Display(), insert_position(), move_down(), and move_up().
int Fl_Text_Display::mCursorStyle [protected] |
Definition at line 402 of file Fl_Text_Display.H.
Referenced by cursor_style(), draw_cursor(), and Fl_Text_Display().
int Fl_Text_Display::mCursorToHint [protected] |
Definition at line 399 of file Fl_Text_Display.H.
Referenced by buffer_modified_cb(), Fl_Text_Display(), insert(), and overstrike().
int Fl_Text_Display::mFirstChar [protected] |
Definition at line 409 of file Fl_Text_Display.H.
Referenced by absolute_top_line_number(), buffer_modified_cb(), calc_line_starts(), display_insert(), draw_range(), find_wrap_range(), Fl_Text_Display(), measure_deleted_lines(), offset_line_starts(), position_to_line(), position_to_linecol(), position_to_xy(), resize(), update_line_starts(), wrap_mode(), wrapped_row(), and xy_to_position().
void* Fl_Text_Display::mHighlightCBArg [protected] |
Definition at line 437 of file Fl_Text_Display.H.
Referenced by Fl_Text_Display(), highlight_data(), and position_style().
int Fl_Text_Display::mHorizOffset [protected] |
Definition at line 426 of file Fl_Text_Display.H.
Referenced by display_insert(), Fl_Text_Display(), h_scrollbar_cb(), handle_vline(), Fl_Text_Editor::kf_ctrl_move(), position_to_xy(), resize(), scroll_(), scroll_timer_cb(), update_h_scrollbar(), v_scrollbar_cb(), and xy_to_rowcol().
int Fl_Text_Display::mHorizOffsetHint [protected] |
Definition at line 429 of file Fl_Text_Display.H.
Referenced by Fl_Text_Display(), resize(), and scroll().
Fl_Scrollbar* Fl_Text_Display::mHScrollBar [protected] |
Definition at line 456 of file Fl_Text_Display.H.
Referenced by draw(), Fl_Text_Display(), handle(), resize(), and update_h_scrollbar().
int Fl_Text_Display::mLastChar [protected] |
Definition at line 409 of file Fl_Text_Display.H.
Referenced by buffer_modified_cb(), calc_last_char(), display_insert(), draw_range(), find_wrap_range(), Fl_Text_Display(), measure_deleted_lines(), position_to_line(), position_to_linecol(), position_to_xy(), update_line_starts(), and vline_length().
int Fl_Text_Display::mLineNumLeft [protected] |
Definition at line 475 of file Fl_Text_Display.H.
Referenced by draw_text(), and Fl_Text_Display().
int Fl_Text_Display::mLineNumWidth [protected] |
Definition at line 475 of file Fl_Text_Display.H.
Referenced by draw_line_numbers(), draw_text(), Fl_Text_Display(), and maintaining_absolute_top_line_number().
int* Fl_Text_Display::mLineStarts [protected] |
Definition at line 416 of file Fl_Text_Display.H.
Referenced by calc_last_char(), calc_line_starts(), display_insert(), draw_range(), draw_vline(), empty_vlines(), find_wrap_range(), Fl_Text_Display(), Fl_Text_Editor::kf_ctrl_move(), measure_deleted_lines(), move_down(), move_up(), offset_line_starts(), position_to_line(), position_to_linecol(), position_to_xy(), resize(), update_line_starts(), vline_length(), wrapped_column(), wrapped_row(), xy_to_position(), and ~Fl_Text_Display().
int Fl_Text_Display::mMaxsize [protected] |
Definition at line 439 of file Fl_Text_Display.H.
Referenced by draw(), draw_cursor(), draw_line_numbers(), draw_string(), draw_text(), draw_vline(), Fl_Text_Display(), position_to_xy(), resize(), xy_to_position(), and xy_to_rowcol().
int Fl_Text_Display::mModifyingTabDistance [protected] |
Definition at line 446 of file Fl_Text_Display.H.
Referenced by Fl_Text_Display().
int Fl_Text_Display::mNBufferLines [protected] |
Definition at line 405 of file Fl_Text_Display.H.
Referenced by buffer(), buffer_modified_cb(), Fl_Text_Display(), offset_line_starts(), position_to_xy(), resize(), scroll_(), update_line_starts(), update_v_scrollbar(), and wrap_mode().
int Fl_Text_Display::mNeedAbsTopLineNum [protected] |
Definition at line 423 of file Fl_Text_Display.H.
Referenced by Fl_Text_Display(), maintain_absolute_top_line_number(), and maintaining_absolute_top_line_number().
int Fl_Text_Display::mNLinesDeleted [protected] |
Definition at line 443 of file Fl_Text_Display.H.
Referenced by find_wrap_range(), Fl_Text_Display(), and measure_deleted_lines().
int Fl_Text_Display::mNStyles [protected] |
Definition at line 430 of file Fl_Text_Display.H.
Referenced by draw_string(), Fl_Text_Display(), highlight_data(), resize(), and string_width().
int Fl_Text_Display::mNVisibleLines [protected] |
Definition at line 404 of file Fl_Text_Display.H.
Referenced by calc_last_char(), calc_line_starts(), display_insert(), draw_range(), draw_vline(), empty_vlines(), find_wrap_range(), Fl_Text_Display(), Fl_Text_Editor::kf_ctrl_move(), Fl_Text_Editor::kf_move(), longest_vline(), measure_deleted_lines(), offset_line_starts(), position_to_line(), resize(), scroll_(), update_line_starts(), update_v_scrollbar(), vline_length(), wrap_mode(), wrapped_column(), wrapped_row(), xy_to_position(), and xy_to_rowcol().
Fl_Text_Buffer* Fl_Text_Display::mStyleBuffer [protected] |
Definition at line 407 of file Fl_Text_Display.H.
Referenced by buffer_modified_cb(), CodeEditor::CodeEditor(), extend_range_for_styles(), Fl_Text_Display(), highlight_data(), measure_proportional_character(), position_style(), and CodeEditor::~CodeEditor().
const Style_Table_Entry* Fl_Text_Display::mStyleTable [protected] |
Definition at line 431 of file Fl_Text_Display.H.
Referenced by draw_string(), Fl_Text_Display(), highlight_data(), resize(), and string_width().
int Fl_Text_Display::mSuppressResync [protected] |
Definition at line 441 of file Fl_Text_Display.H.
Referenced by buffer_predelete_cb(), find_wrap_range(), Fl_Text_Display(), and measure_deleted_lines().
int Fl_Text_Display::mTopLineNum [protected] |
Definition at line 417 of file Fl_Text_Display.H.
Referenced by display_insert(), Fl_Text_Display(), get_absolute_top_line_number(), h_scrollbar_cb(), Fl_Text_Editor::kf_ctrl_move(), offset_line_starts(), position_to_linecol(), resize(), scroll_(), scroll_timer_cb(), update_line_starts(), update_v_scrollbar(), v_scrollbar_cb(), and wrap_mode().
int Fl_Text_Display::mTopLineNumHint [protected] |
Definition at line 427 of file Fl_Text_Display.H.
Referenced by Fl_Text_Display(), resize(), and scroll().
Definition at line 435 of file Fl_Text_Display.H.
Referenced by Fl_Text_Display(), highlight_data(), and position_style().
char Fl_Text_Display::mUnfinishedStyle [protected] |
Definition at line 433 of file Fl_Text_Display.H.
Referenced by Fl_Text_Display(), highlight_data(), and position_style().
Fl_Scrollbar* Fl_Text_Display::mVScrollBar [protected] |
Definition at line 457 of file Fl_Text_Display.H.
Referenced by draw(), Fl_Text_Display(), handle(), resize(), and update_v_scrollbar().
int Fl_Text_Display::mWrapMarginPix [protected] |
Definition at line 414 of file Fl_Text_Display.H.
Referenced by Fl_Text_Display(), resize(), wrap_mode(), and wrapped_line_counter().
Fl_Align Fl_Text_Display::scrollbar_align_ [protected] |
Definition at line 459 of file Fl_Text_Display.H.
int Fl_Text_Display::scrollbar_width_ [protected] |
Definition at line 458 of file Fl_Text_Display.H.
int Fl_Text_Display::shortcut_ [protected] |
Definition at line 464 of file Fl_Text_Display.H.
Referenced by Fl_Text_Display().
struct { ... } Fl_Text_Display::text_area [protected] |
Fl_Color Fl_Text_Display::textcolor_ [protected] |
Definition at line 468 of file Fl_Text_Display.H.
Fl_Font Fl_Text_Display::textfont_ [protected] |
Definition at line 466 of file Fl_Text_Display.H.
Fl_Fontsize Fl_Text_Display::textsize_ [protected] |
Definition at line 467 of file Fl_Text_Display.H.
Referenced by draw_line_numbers(), and draw_text().
Definition at line 462 of file Fl_Text_Display.H.
Referenced by buffer_modified_cb(), and scroll_timer_cb().
Definition at line 462 of file Fl_Text_Display.H.
Referenced by buffer_modified_cb(), and scroll_timer_cb().
Definition at line 462 of file Fl_Text_Display.H.
Referenced by buffer_modified_cb(), and scroll_timer_cb().