FLTK 1.4.0
|
Rich text display widget. More...
#include <Fl_Text_Display.H>
Classes | |
struct | Style_Table_Entry |
This structure associates the color, font, and font size of a string to draw with an attribute mask matching attr. More... | |
Public Types | |
enum | { NORMAL_CURSOR , CARET_CURSOR , DIM_CURSOR , BLOCK_CURSOR , HEAVY_CURSOR , SIMPLE_CURSOR } |
text display cursor shapes enumeration More... | |
enum | { CURSOR_POS , CHARACTER_POS } |
the character position is the left edge of a character, whereas the cursor is thought to be between the centers of two consecutive characters. | |
enum | { DRAG_NONE = -2 , DRAG_START_DND = -1 , DRAG_CHAR = 0 , DRAG_WORD = 1 , DRAG_LINE = 2 } |
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. | |
enum | { WRAP_NONE , WRAP_AT_COLUMN , WRAP_AT_PIXEL , WRAP_AT_BOUNDS } |
wrap types - used in wrap_mode() More... | |
enum | { ATTR_BGCOLOR = 0x0001 , ATTR_BGCOLOR_EXT_ = 0x0002 , ATTR_BGCOLOR_EXT = 0x0003 , ATTR_UNDERLINE = 0x0004 , ATTR_GRAMMAR = 0x0008 , ATTR_SPELLING = 0x000C , ATTR_STRIKE_THROUGH = 0x0010 , ATTR_LINES_MASK = 0x001C } |
attribute flags in Style_Table_Entry.attr More... | |
typedef void(* | Unfinished_Style_Cb) (int, void *) |
Public Member Functions | |
Fl_Text_Buffer * | buffer () const |
Gets the current text buffer associated with the text widget. More... | |
void | buffer (Fl_Text_Buffer &buf) |
Sets the current text buffer associated with the text widget. More... | |
void | buffer (Fl_Text_Buffer *buf) |
Attach a text buffer to display, replacing the current buffer (if any). More... | |
double | col_to_x (double col) const |
Convert a column number into an x pixel position. More... | |
int | count_lines (int start, int end, bool start_pos_is_line_start) const |
Count the number of lines between two positions. More... | |
Fl_Color | cursor_color () const |
Gets the text cursor color. More... | |
void | cursor_color (Fl_Color n) |
Sets the text cursor color. More... | |
int | cursor_style () const |
void | cursor_style (int style) |
Sets the text cursor style. More... | |
virtual void | display_needs_recalc () |
Schedule a recalc_display() to be done on next draw(). More... | |
Fl_Text_Display (int X, int Y, int W, int H, const char *l=0) | |
Creates a new text display widget. More... | |
Fl_Color | grammar_underline_color () const |
Gets the underline color for style attribute ATTR_GRAMMAR. More... | |
void | grammar_underline_color (Fl_Color color) |
Sets the underline color for style attribute ATTR_GRAMMAR. More... | |
int | handle (int e) FL_OVERRIDE |
Event handling. More... | |
void | hide_cursor () |
Hides the text cursor. | |
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. More... | |
int | in_selection (int x, int y) const |
Check if a pixel position is within the primary selection. More... | |
void | insert (const char *text) |
Inserts "text" at the current cursor location. More... | |
int | insert_position () const |
Gets the position of the text insertion cursor for text display. More... | |
void | insert_position (int newPos) |
Sets the position of the text insertion cursor for text display. More... | |
int | line_end (int startPos, bool startPosIsLineStart) const |
Returns the end of a line. More... | |
int | line_start (int pos) const |
Return the beginning of a line. More... | |
Fl_Align | linenumber_align () const |
Returns the alignment used for line numbers (if enabled). | |
void | linenumber_align (Fl_Align val) |
Set alignment for line numbers (if enabled). More... | |
Fl_Color | linenumber_bgcolor () const |
Returns the background color used for line numbers (if enabled). | |
void | linenumber_bgcolor (Fl_Color val) |
Set the background color used for line numbers (if enabled). More... | |
Fl_Color | linenumber_fgcolor () const |
Return the foreground color used for line numbers (if enabled). | |
void | linenumber_fgcolor (Fl_Color val) |
Set the foreground color used for line numbers (if enabled). More... | |
Fl_Font | linenumber_font () const |
Return the font used for line numbers (if enabled). | |
void | linenumber_font (Fl_Font val) |
Set the font used for line numbers (if enabled). More... | |
const char * | linenumber_format () const |
Returns the line number printf() format string. | |
void | linenumber_format (const char *val) |
Sets the printf() style format string used for line numbers. More... | |
Fl_Fontsize | linenumber_size () const |
Return the font size used for line numbers (if enabled). | |
void | linenumber_size (Fl_Fontsize val) |
Set the font size used for line numbers (if enabled). More... | |
int | linenumber_width () const |
Return the screen area width provided for line numbers. | |
void | linenumber_width (int width) |
Set width of screen area for line numbers. More... | |
int | move_down () |
Moves the current insert position down one line. More... | |
int | move_left () |
Moves the current insert position left one character. More... | |
int | move_right () |
Moves the current insert position right one character. More... | |
int | move_up () |
Moves the current insert position up one line. More... | |
void | next_word (void) |
Moves the current insert position right one word. | |
void | overstrike (const char *text) |
Replaces text at the current insert position. More... | |
int | position_style (int lineStartPos, int lineLen, int lineIndex) const |
Find the correct style for a character. More... | |
int | position_to_xy (int pos, int *x, int *y) const |
Convert a character index into a pixel position. More... | |
void | previous_word (void) |
Moves the current insert position left one word. | |
virtual void | recalc_display () |
Recalculate the display's visible lines and scrollbar sizes. More... | |
void | redisplay_range (int start, int end) |
Marks text from start to end as needing a redraw. More... | |
void | resize (int X, int Y, int W, int H) FL_OVERRIDE |
Change the size of the displayed text area. More... | |
int | rewind_lines (int startPos, int nLines) |
Skip a number of lines back. More... | |
void | scroll (int topLineNum, int horizOffset) |
Scrolls the current buffer to start at the specified line and column. More... | |
Fl_Align | scrollbar_align () const |
Gets the scrollbar alignment type. More... | |
void | scrollbar_align (Fl_Align a) |
Sets the scrollbar alignment type. More... | |
int | scrollbar_size () const |
Gets the current size of the scrollbars' troughs, in pixels. More... | |
void | scrollbar_size (int newSize) |
Sets the pixel size of the scrollbars' troughs to newSize , in pixels. More... | |
int | scrollbar_width () const |
Returns the global value Fl::scrollbar_size() unless a specific scrollbar_width_ has been set. More... | |
void | scrollbar_width (int width) |
Sets the global Fl::scrollbar_size(), and forces this instance of the widget to use it. More... | |
Fl_Color | secondary_selection_color () const |
Gets the background color for the secondary selection block. More... | |
void | secondary_selection_color (Fl_Color color) |
Sets the background color for the secondary selection block. More... | |
int | shortcut () const |
void | shortcut (int s) |
void | show_cursor (int b=1) |
Shows the text cursor. More... | |
void | show_insert_position () |
Scrolls the text buffer to show the current insert position. More... | |
int | skip_lines (int startPos, int nLines, bool startPosIsLineStart) |
Skip a number of lines forward. More... | |
Fl_Color | spelling_underline_color () const |
Gets the underline color for style attribute ATTR_SPELLING. More... | |
void | spelling_underline_color (Fl_Color color) |
Sets the underline color for style attribute ATTR_SPELLING. More... | |
Fl_Text_Buffer * | style_buffer () const |
Gets the current style buffer associated with the text widget. More... | |
Fl_Color | textcolor () const |
Gets the default color of text in the widget. More... | |
void | textcolor (Fl_Color n) |
Sets the default color of text in the widget. More... | |
Fl_Font | textfont () const |
Gets the default font used when drawing text in the widget. More... | |
void | textfont (Fl_Font s) |
Sets the default font used when drawing text in the widget. More... | |
Fl_Fontsize | textsize () const |
Gets the default size of text in the widget. More... | |
void | textsize (Fl_Fontsize s) |
Sets the default size of text in the widget. More... | |
int | word_end (int pos) const |
Moves the insert position to the end of the current word. More... | |
int | word_start (int pos) const |
Moves the insert position to the beginning of the current word. More... | |
void | wrap_mode (int wrap, int wrap_margin) |
Set the new text wrap mode. More... | |
int | wrapped_column (int row, int column) const |
Nobody knows what this function does. More... | |
int | wrapped_row (int row) const |
Nobody knows what this function does. More... | |
double | x_to_col (double x) const |
Convert an x pixel position into a column number. More... | |
~Fl_Text_Display () | |
Free a text display and release its associated memory. More... | |
Public Member Functions inherited from Fl_Group | |
Fl_Widget *& | _ddfdesign_kludge () |
This is for forms compatibility only. | |
void | add (Fl_Widget &) |
The widget is removed from its current group (if any) and then added to the end of this group. | |
void | add (Fl_Widget *o) |
See void Fl_Group::add(Fl_Widget &w) | |
void | add_resizable (Fl_Widget &o) |
Adds a widget to the group and makes it the resizable widget. | |
Fl_Widget *const * | array () const |
Returns a pointer to the array of children. More... | |
Fl_Group const * | as_group () const FL_OVERRIDE |
Fl_Group * | as_group () FL_OVERRIDE |
Returns an Fl_Group pointer if this widget is an Fl_Group. More... | |
void | begin () |
Sets the current group so you can build the widget tree by just constructing the widgets. More... | |
Fl_Widget * | child (int n) const |
Returns array()[n]. More... | |
int | children () const |
Returns how many child widgets the group has. | |
void | clear () |
Deletes all child widgets from memory recursively. More... | |
unsigned int | clip_children () |
Returns the current clipping mode. More... | |
void | clip_children (int c) |
Controls whether the group widget clips the drawing of child widgets to its bounding box. More... | |
virtual int | delete_child (int n) |
Removes the widget at index from the group and deletes it. More... | |
void | end () |
Exactly the same as current(this->parent()). More... | |
int | find (const Fl_Widget &o) const |
See int Fl_Group::find(const Fl_Widget *w) const. | |
int | find (const Fl_Widget *) const |
Searches the child array for the widget and returns the index. More... | |
Fl_Group (int, int, int, int, const char *=0) | |
Creates a new Fl_Group widget using the given position, size, and label string. More... | |
void | focus (Fl_Widget *W) |
void | forms_end () |
This is for forms compatibility only. | |
int | handle (int) FL_OVERRIDE |
Handles the specified event. More... | |
void | init_sizes () |
Resets the internal array of widget sizes and positions. More... | |
void | insert (Fl_Widget &, int i) |
The widget is removed from its current group (if any) and then inserted into this group. More... | |
void | insert (Fl_Widget &o, Fl_Widget *before) |
This does insert(w, find(before)). More... | |
void | remove (Fl_Widget &) |
Removes a widget from the group but does not delete it. More... | |
void | remove (Fl_Widget *o) |
Removes the widget o from the group. More... | |
void | remove (int index) |
Removes the widget at index from the group but does not delete it. More... | |
Fl_Widget * | resizable () const |
Returns the group's resizable widget. More... | |
void | resizable (Fl_Widget &o) |
Sets the group's resizable widget. More... | |
void | resizable (Fl_Widget *o) |
The resizable widget defines both the resizing box and the resizing behavior of the group and its children. More... | |
void | resize (int, int, int, int) FL_OVERRIDE |
Resizes the Fl_Group widget and all of its children. More... | |
virtual | ~Fl_Group () |
The destructor also deletes all the children. More... | |
Public Member Functions inherited from Fl_Widget | |
void | _clear_fullscreen () |
void | _set_fullscreen () |
void | activate () |
Activates the widget. More... | |
unsigned int | active () const |
Returns whether the widget is active. More... | |
int | active_r () const |
Returns whether the widget and all of its parents are active. More... | |
Fl_Align | align () const |
Gets the label alignment. More... | |
void | align (Fl_Align alignment) |
Sets the label alignment. More... | |
long | argument () const |
Gets the current user data (long) argument that is passed to the callback function. More... | |
void | argument (long v) |
Sets the current user data (long) argument that is passed to the callback function. More... | |
virtual class Fl_Gl_Window * | as_gl_window () |
Returns an Fl_Gl_Window pointer if this widget is an Fl_Gl_Window. More... | |
virtual class Fl_Gl_Window const * | as_gl_window () const |
virtual Fl_Group * | as_group () |
Returns an Fl_Group pointer if this widget is an Fl_Group. More... | |
virtual Fl_Group const * | as_group () const |
virtual Fl_Window * | as_window () |
Returns an Fl_Window pointer if this widget is an Fl_Window. More... | |
virtual Fl_Window const * | as_window () const |
void | bind_deimage (Fl_Image *img) |
Sets the image to use as part of the widget label when in the inactive state. More... | |
void | bind_deimage (int f) |
Bind the inactive image to the widget, so the widget will delete the image when it is no longer needed. More... | |
void | bind_image (Fl_Image *img) |
Sets the image to use as part of the widget label when in the active state. More... | |
void | bind_image (int f) |
Bind the image to the widget, so the widget will delete the image when it is no longer needed. More... | |
Fl_Boxtype | box () const |
Gets the box type of the widget. More... | |
void | box (Fl_Boxtype new_box) |
Sets the box type for the widget. More... | |
Fl_Callback_p | callback () const |
Gets the current callback function for the widget. More... | |
void | callback (Fl_Callback *cb) |
Sets the current callback function for the widget. More... | |
void | callback (Fl_Callback *cb, Fl_Callback_User_Data *p, bool auto_free) |
Sets the current callback function and managed user data for the widget. More... | |
void | callback (Fl_Callback *cb, void *p) |
Sets the current callback function and data for the widget. More... | |
void | callback (Fl_Callback0 *cb) |
Sets the current callback function for the widget. More... | |
void | callback (Fl_Callback1 *cb, long p=0) |
Sets the current callback function for the widget. More... | |
unsigned int | changed () const |
Checks if the widget value changed since the last callback. More... | |
void | clear_active () |
Marks the widget as inactive without sending events or changing focus. More... | |
void | clear_changed () |
Marks the value of the widget as unchanged. More... | |
void | clear_damage (uchar c=0) |
Clears or sets the damage flags. More... | |
void | clear_output () |
Sets a widget to accept input. More... | |
void | clear_visible () |
Hides the widget. More... | |
void | clear_visible_focus () |
Disables keyboard focus navigation with this widget. More... | |
Fl_Color | color () const |
Gets the background color of the widget. More... | |
void | color (Fl_Color bg) |
Sets the background color of the widget. More... | |
void | color (Fl_Color bg, Fl_Color sel) |
Sets the background and selection color of the widget. More... | |
Fl_Color | color2 () const |
For back compatibility only. More... | |
void | color2 (unsigned a) |
For back compatibility only. More... | |
int | contains (const Fl_Widget *w) const |
Checks if w is a child of this widget. More... | |
void | copy_label (const char *new_label) |
Sets the current label. More... | |
void | copy_tooltip (const char *text) |
Sets the current tooltip text. More... | |
uchar | damage () const |
Returns non-zero if draw() needs to be called. More... | |
void | damage (uchar c) |
Sets the damage bits for the widget. More... | |
void | damage (uchar c, int x, int y, int w, int h) |
Sets the damage bits for an area inside the widget. More... | |
int | damage_resize (int, int, int, int) |
Internal use only. | |
void | deactivate () |
Deactivates the widget. More... | |
Fl_Image * | deimage () |
Gets the image that is used as part of the widget label when in the inactive state. More... | |
const Fl_Image * | deimage () const |
Gets the image that is used as part of the widget label when in the inactive state. More... | |
void | deimage (Fl_Image &img) |
Sets the image to use as part of the widget label when in the inactive state. More... | |
void | deimage (Fl_Image *img) |
Sets the image to use as part of the widget label when in the inactive state. More... | |
int | deimage_bound () const |
Returns whether the inactive image is managed by the widget. More... | |
void | do_callback (Fl_Callback_Reason reason=FL_REASON_UNKNOWN) |
Calls the widget callback function with default arguments. More... | |
void | do_callback (Fl_Widget *widget, long arg, Fl_Callback_Reason reason=FL_REASON_UNKNOWN) |
Calls the widget callback function with arbitrary arguments. More... | |
void | do_callback (Fl_Widget *widget, void *arg=0, Fl_Callback_Reason reason=FL_REASON_UNKNOWN) |
Calls the widget callback function with arbitrary arguments. More... | |
virtual void | draw ()=0 |
Draws the widget. More... | |
void | draw_label (int, int, int, int, Fl_Align) const |
Draws the label in an arbitrary bounding box with an arbitrary alignment. More... | |
int | h () const |
Gets the widget height. More... | |
virtual int | handle (int event) |
Handles the specified event. More... | |
virtual void | hide () |
Makes a widget invisible. More... | |
int | horizontal_label_margin () |
Get the spacing between the label and the horizontal edge of the widget. More... | |
void | horizontal_label_margin (int px) |
Set the spacing between the label and the horizontal edge of the widget. More... | |
Fl_Image * | image () |
Gets the image that is used as part of the widget label when in the active state. More... | |
const Fl_Image * | image () const |
Gets the image that is used as part of the widget label when in the active state. More... | |
void | image (Fl_Image &img) |
Sets the image to use as part of the widget label when in the active state. More... | |
void | image (Fl_Image *img) |
Sets the image to use as part of the widget label when in the active state. More... | |
int | image_bound () const |
Returns whether the image is managed by the widget. More... | |
int | inside (const Fl_Widget *wgt) const |
Checks if this widget is a child of wgt . More... | |
int | is_label_copied () const |
Returns whether the current label was assigned with copy_label(). More... | |
const char * | label () const |
Gets the current label text. More... | |
void | label (const char *text) |
Sets the current label pointer. More... | |
void | label (Fl_Labeltype a, const char *b) |
Shortcut to set the label text and type in one call. More... | |
int | label_image_spacing () |
Return the gap size between the label and the image. More... | |
void | label_image_spacing (int gap) |
Set the gap between the label and the image in pixels. More... | |
Fl_Color | labelcolor () const |
Gets the label color. More... | |
void | labelcolor (Fl_Color c) |
Sets the label color. More... | |
Fl_Font | labelfont () const |
Gets the font to use. More... | |
void | labelfont (Fl_Font f) |
Sets the font to use. More... | |
Fl_Fontsize | labelsize () const |
Gets the font size in pixels. More... | |
void | labelsize (Fl_Fontsize pix) |
Sets the font size in pixels. More... | |
Fl_Labeltype | labeltype () const |
Gets the label type. More... | |
void | labeltype (Fl_Labeltype a) |
Sets the label type. More... | |
void | measure_label (int &ww, int &hh) const |
Sets width ww and height hh accordingly with the label size. More... | |
bool | needs_keyboard () const |
Returns whether this widget needs a keyboard. More... | |
void | needs_keyboard (bool needs) |
Sets whether this widget needs a keyboard. More... | |
unsigned int | output () const |
Returns if a widget is used for output only. More... | |
Fl_Group * | parent () const |
Returns a pointer to the parent widget. More... | |
void | parent (Fl_Group *p) |
Internal use only - "for hacks only". More... | |
void | position (int X, int Y) |
Repositions the window or widget. More... | |
void | redraw () |
Schedules the drawing of the widget. More... | |
void | redraw_label () |
Schedules the drawing of the label. More... | |
virtual void | resize (int x, int y, int w, int h) |
Changes the size or position of the widget. More... | |
Fl_Color | selection_color () const |
Gets the selection color. More... | |
void | selection_color (Fl_Color a) |
Sets the selection color. More... | |
void | set_active () |
Marks the widget as active without sending events or changing focus. More... | |
void | set_changed () |
Marks the value of the widget as changed. More... | |
void | set_output () |
Sets a widget to output only. More... | |
void | set_visible () |
Makes the widget visible. More... | |
void | set_visible_focus () |
Enables keyboard focus navigation with this widget. More... | |
int | shortcut_label () const |
Returns whether the widget's label uses '&' to indicate shortcuts. More... | |
void | shortcut_label (int value) |
Sets whether the widget's label uses '&' to indicate shortcuts. More... | |
virtual void | show () |
Makes a widget visible. More... | |
void | size (int W, int H) |
Changes the size of the widget. More... | |
int | take_focus () |
Gives the widget the keyboard focus. More... | |
unsigned int | takesevents () const |
Returns if the widget is able to take events. More... | |
int | test_shortcut () |
Returns true if the widget's label contains the entered '&x' shortcut. More... | |
const char * | tooltip () const |
Gets the current tooltip text. More... | |
void | tooltip (const char *text) |
Sets the current tooltip text. More... | |
Fl_Window * | top_window () const |
Returns a pointer to the top-level window for the widget. More... | |
Fl_Window * | top_window_offset (int &xoff, int &yoff) const |
Finds the x/y offset of the current widget relative to the top-level window. More... | |
uchar | type () const |
Gets the widget type. More... | |
void | type (uchar t) |
Sets the widget type. More... | |
int | use_accents_menu () |
Returns non zero if MAC_USE_ACCENTS_MENU flag is set, 0 otherwise. | |
void * | user_data () const |
Gets the user data for this widget. More... | |
void | user_data (Fl_Callback_User_Data *v, bool auto_free) |
Sets the user data for this widget. | |
void | user_data (void *v) |
Sets the user data for this widget. | |
int | vertical_label_margin () |
Get the spacing between the label and the vertical edge of the widget. More... | |
void | vertical_label_margin (int px) |
Set the spacing between the label and the vertical edge of the widget. More... | |
unsigned int | visible () const |
Returns whether a widget is visible. More... | |
unsigned int | visible_focus () const |
Checks whether this widget has a visible focus. More... | |
void | visible_focus (int v) |
Modifies keyboard focus navigation. More... | |
int | visible_r () const |
Returns whether a widget and all its parents are visible. More... | |
int | w () const |
Gets the widget width. More... | |
Fl_When | when () const |
Returns the conditions under which the callback is called. More... | |
void | when (uchar i) |
Sets the flags used to decide when a callback is called. More... | |
Fl_Window * | window () const |
Returns a pointer to the nearest parent window up the widget hierarchy. More... | |
int | x () const |
Gets the widget position in its window. More... | |
int | y () const |
Gets the widget position in its window. More... | |
virtual | ~Fl_Widget () |
Destroys the widget. More... | |
Protected Types | |
enum | { DRAW_LINE , FIND_INDEX , FIND_INDEX_FROM_ZERO , GET_WIDTH , FIND_CURSOR_INDEX } |
Protected Types inherited from Fl_Widget | |
enum | { INACTIVE = 1<<0 , INVISIBLE = 1<<1 , OUTPUT = 1<<2 , NOBORDER = 1<<3 , FORCE_POSITION = 1<<4 , NON_MODAL = 1<<5 , SHORTCUT_LABEL = 1<<6 , CHANGED = 1<<7 , OVERRIDE = 1<<8 , VISIBLE_FOCUS = 1<<9 , COPIED_LABEL = 1<<10 , CLIP_CHILDREN = 1<<11 , MENU_WINDOW = 1<<12 , TOOLTIP_WINDOW = 1<<13 , MODAL = 1<<14 , NO_OVERLAY = 1<<15 , GROUP_RELATIVE = 1<<16 , COPIED_TOOLTIP = 1<<17 , FULLSCREEN = 1<<18 , MAC_USE_ACCENTS_MENU = 1<<19 , NEEDS_KEYBOARD = 1<<20 , IMAGE_BOUND = 1<<21 , DEIMAGE_BOUND = 1<<22 , AUTO_DELETE_USER_DATA = 1<<23 , MAXIMIZED = 1<<24 , POPUP = 1<<25 , USERFLAG3 = 1<<29 , USERFLAG2 = 1<<30 , USERFLAG1 = 1<<31 } |
flags possible values enumeration. More... | |
Protected Member Functions | |
void | absolute_top_line_number (int oldFirstChar) |
Re-calculate absolute top line number for a change in scroll position. More... | |
void | calc_last_char () |
Update last display character index. More... | |
void | calc_line_starts (int startLine, int endLine) |
Update the line starts array. More... | |
void | clear_rect (int style, int x, int y, int width, int height) const |
Clear a rectangle with the appropriate background color for style . More... | |
void | display_insert () |
Scroll the display to bring insertion cursor into view. More... | |
void | draw () FL_OVERRIDE |
Draw the widget. More... | |
void | draw_cursor (int, int) |
Draw a cursor with top center at X , Y . More... | |
void | draw_line_numbers (bool clearAll) |
Refresh the line number area. More... | |
void | draw_range (int start, int end) |
Draw a range of text. More... | |
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. More... | |
void | draw_text (int X, int Y, int W, int H) |
Refresh a rectangle of the text display. More... | |
void | draw_vline (int visLineNum, int leftClip, int rightClip, int leftCharIndex, int rightCharIndex) |
Draw a single line of text. More... | |
int | empty_vlines () const |
Return true if there are lines visible with no corresponding buffer text. More... | |
void | extend_range_for_styles (int *start, int *end) |
I don't know what this does! More... | |
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. More... | |
void | find_wrap_range (const char *deletedText, int pos, int nInserted, int nDeleted, int *modRangeStart, int *modRangeEnd, int *linesInserted, int *linesDeleted) |
Wrapping calculations. More... | |
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 / closest cursor position. More... | |
int | get_absolute_top_line_number () const |
Returns the absolute (non-wrapped) line number of the first line displayed. More... | |
int | handle_rmb (int readonly) |
Handle right mouse button down events. More... | |
int | handle_vline (int mode, int lineStart, int lineLen, int leftChar, int rightChar, int topClip, int bottomClip, int leftClip, int rightClip) const |
Universal pixel machine. More... | |
int | longest_vline () const |
Find the longest line of all visible lines. More... | |
void | maintain_absolute_top_line_number (int state) |
Line numbering stuff, currently unused. More... | |
int | maintaining_absolute_top_line_number () const |
Returns true if a separate absolute top line number is being maintained. More... | |
void | measure_deleted_lines (int pos, int nDeleted) |
Wrapping calculations. More... | |
double | measure_proportional_character (const char *s, int colNum, int pos) const |
Wrapping calculations. More... | |
int | measure_vline (int visLineNum) const |
Returns the width in pixels of the displayed line pointed to by "visLineNum". More... | |
void | offset_line_starts (int newTopLineNum) |
Offset line start counters for a new vertical scroll position. More... | |
int | position_to_line (int pos, int *lineNum) const |
Convert a position index into a line number offset. More... | |
int | position_to_linecol (int pos, int *lineNum, int *column) const |
Find the line and column number of position pos . More... | |
void | reset_absolute_top_line_number () |
Reestablish the absolute (non-wrapped) top line number. More... | |
int | scroll_ (int topLineNum, int horizOffset) |
Scrolls the current buffer to start at the specified line and column. More... | |
double | string_width (const char *string, int length, int style) const |
Find the width of a string in the font of a particular style. More... | |
void | update_h_scrollbar () |
Update horizontal scrollbar. More... | |
void | update_line_starts (int pos, int charsInserted, int charsDeleted, int linesInserted, int linesDeleted, int *scrolled) |
Update line start arrays and variables. More... | |
void | update_v_scrollbar () |
Update vertical scrollbar. More... | |
int | vline_length (int visLineNum) const |
Count number of bytes in a visible line. More... | |
int | wrap_uses_character (int lineEndPos) const |
Check if the line break is caused by a newline or by line wrapping. More... | |
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. More... | |
int | xy_to_position (int x, int y, int PosType=CHARACTER_POS) const |
Translate a pixel position into a character index. More... | |
void | xy_to_rowcol (int x, int y, int *row, int *column, int PosType=CHARACTER_POS) const |
Translate pixel coordinates into row and column. More... | |
Protected Member Functions inherited from Fl_Group | |
Fl_Rect * | bounds () |
Returns the internal array of widget sizes and positions. More... | |
void | draw () FL_OVERRIDE |
Draws the widget. More... | |
void | draw_child (Fl_Widget &widget) const |
Forces a child to redraw. More... | |
void | draw_children () |
Draws all children of the group. More... | |
void | draw_outside_label (const Fl_Widget &widget) const |
Parents normally call this to draw outside labels of child widgets. | |
virtual int | on_insert (Fl_Widget *, int) |
Allow derived groups to act when a widget is added as a child. More... | |
virtual int | on_move (int, int) |
Allow derived groups to act when a widget is moved within the group. More... | |
virtual void | on_remove (int) |
Allow derived groups to act when a child widget is removed from the group. More... | |
int * | sizes () |
Returns the internal array of widget sizes and positions. More... | |
void | update_child (Fl_Widget &widget) const |
Draws a child only if it needs it. More... | |
Protected Member Functions inherited from Fl_Widget | |
void | clear_flag (unsigned int c) |
Clears a flag in the flags mask. | |
void | draw_backdrop () const |
If FL_ALIGN_IMAGE_BACKDROP is set, the image or deimage will be drawn. | |
void | draw_box () const |
Draws the widget box according its box style. | |
void | draw_box (Fl_Boxtype t, Fl_Color c) const |
Draws a box of type t, of color c at the widget's position and size. | |
void | draw_box (Fl_Boxtype t, int x, int y, int w, int h, Fl_Color c) const |
Draws a box of type t, of color c at the position X,Y and size W,H. | |
void | draw_focus () const |
Draws a focus rectangle around the widget. More... | |
void | draw_focus (Fl_Boxtype t, int X, int Y, int W, int H) const |
Draws a focus rectangle around the widget. More... | |
void | draw_focus (Fl_Boxtype t, int x, int y, int w, int h, Fl_Color bg) const |
Draws a focus box for the widget at the given position and size. More... | |
void | draw_label () const |
Draws the widget's label at the defined label position. More... | |
void | draw_label (int, int, int, int) const |
Draws the label in an arbitrary bounding box. More... | |
Fl_Widget (int x, int y, int w, int h, const char *label=0L) | |
Creates a widget at the given position and size. More... | |
unsigned int | flags () const |
Gets the widget flags mask. | |
void | h (int v) |
Internal use only. More... | |
void | set_flag (unsigned int c) |
Sets a flag in the flags mask. | |
void | w (int v) |
Internal use only. More... | |
void | x (int v) |
Internal use only. More... | |
void | y (int v) |
Internal use only. More... | |
Static Protected Member Functions | |
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. More... | |
static void | buffer_predelete_cb (int pos, int nDeleted, void *cbArg) |
This is called before any characters are deleted. More... | |
static void | h_scrollbar_cb (Fl_Scrollbar *w, Fl_Text_Display *d) |
Callback for drag or valueChanged on horizontal scrollbar. | |
static void | scroll_timer_cb (void *) |
Timer callback for scroll events. More... | |
static void | v_scrollbar_cb (Fl_Scrollbar *w, Fl_Text_Display *d) |
Callback for drag or valueChanged on vertical scrollbar. | |
Protected Attributes | |
int | damage_range1_end |
int | damage_range1_start |
int | damage_range2_end |
int | damage_range2_start |
int | display_insert_position_hint |
bool | display_needs_recalc_ |
int | dragging |
int | dragPos |
int | dragType |
Fl_Color | grammar_underline_color_ |
Fl_Align | linenumber_align_ |
Fl_Color | linenumber_bgcolor_ |
Fl_Color | linenumber_fgcolor_ |
Fl_Font | linenumber_font_ |
const char * | linenumber_format_ |
Fl_Fontsize | linenumber_size_ |
int | mAbsTopLineNum |
Fl_Text_Buffer * | mBuffer |
double | mColumnScale |
int | mContinuousWrap |
Fl_Color | mCursor_color |
int | mCursorOldY |
int | mCursorOn |
int | mCursorPos |
int | mCursorPreferredXPos |
int | mCursorStyle |
int | mCursorToHint |
int | mFirstChar |
void * | mHighlightCBArg |
int | mHorizOffset |
int | mHorizOffsetHint |
Fl_Scrollbar * | mHScrollBar |
int | mLastChar |
int | mLineNumLeft |
int | mLineNumWidth |
int * | mLineStarts |
int | mMaxsize |
int | mModifyingTabDistance |
int | mNBufferLines |
int | mNeedAbsTopLineNum |
int | mNLinesDeleted |
int | mNStyles |
int | mNVisibleLines |
Fl_Text_Buffer * | mStyleBuffer |
const Style_Table_Entry * | mStyleTable |
int | mSuppressResync |
int | mTopLineNum |
int | mTopLineNumHint |
Unfinished_Style_Cb | mUnfinishedHighlightCB |
char | mUnfinishedStyle |
Fl_Scrollbar * | mVScrollBar |
int | mWrapMarginPix |
Fl_Align | scrollbar_align_ |
int | scrollbar_width_ |
Fl_Color | secondary_selection_color_ |
int | shortcut_ |
Fl_Color | spelling_underline_color_ |
struct { | |
int h | |
int w | |
int x | |
int y | |
} | text_area |
Fl_Color | textcolor_ |
Fl_Font | textfont_ |
Fl_Fontsize | textsize_ |
Friends | |
void | fl_text_drag_me (int pos, Fl_Text_Display *d) |
int | fl_text_drag_prepare (int pos, int key, Fl_Text_Display *d) |
Additional Inherited Members | |
Static Public Member Functions inherited from Fl_Group | |
static Fl_Group * | current () |
Returns the currently active group. More... | |
static void | current (Fl_Group *g) |
Sets the current group. More... | |
Static Public Member Functions inherited from Fl_Widget | |
static void | default_callback (Fl_Widget *widget, void *data) |
The default callback for all widgets that don't set a callback. More... | |
static unsigned int | label_shortcut (const char *t) |
Returns the Unicode value of the '&x' shortcut in a given text. More... | |
static int | test_shortcut (const char *, const bool require_alt=false) |
Returns true if the given text t contains the entered '&x' shortcut. More... | |
Rich text display widget.
This is the FLTK text display widget. It allows the user to view multiple lines of text and supports highlighting, word wrap, mixes of font faces and colors, line numbers 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.
Example Use
Features
Note that other features may be available via Fl_Text_Editor and Fl_Text_Buffer classes.
anonymous enum |
text display cursor shapes enumeration
Enumerator | |
---|---|
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 |
SIMPLE_CURSOR | as cursor as Fl_Input cursor |
anonymous enum |
wrap types - used in wrap_mode()
Enumerator | |
---|---|
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 |
anonymous enum |
attribute flags in Style_Table_Entry.attr
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 |
Fl_Text_Display::~Fl_Text_Display | ( | ) |
Free a text display and release its associated memory.
|
protected |
Re-calculate absolute top line number for a change in scroll position.
Does nothing if the absolute top line number is not being maintained.
|
inline |
Gets the current text buffer associated with the text widget.
Multiple text widgets can be associated with the same text buffer.
|
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 |
void Fl_Text_Display::buffer | ( | Fl_Text_Buffer * | buf | ) |
Attach a text buffer to display, replacing the current buffer (if any).
Multiple text widgets can be associated with the same text buffer.
buf | attach this text buffer |
|
staticprotected |
This is called whenever the buffer is modified.
Callback attached to the text buffer to receive modification information.
This callback can be used to adjust the display or update other setting. It is not advisable to change any buffers or text in this callback, or line counting may get out of sync.
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 |
|
staticprotected |
This is called before any characters are deleted.
Callback attached to the text buffer to receive delete information before the modifications are actually made.
This callback can be used to adjust the display or update other setting. It is not advisable to change any buffers or text in this callback, or line counting may get out of sync.
pos | starting index of deletion |
nDeleted | number of bytes we will delete (must be UTF-8 aligned!) |
cbArg | "this" pointer for static callback function |
|
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.
|
protected |
Update the line starts array.
Scan through the text in the Text Display'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 |
|
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 |
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 |
int Fl_Text_Display::count_lines | ( | int | startPos, |
int | endPos, | ||
bool | startPosIsLineStart | ||
) | const |
Count the number of lines between two positions.
Same as Fl_Text_Buffer::count_lines(), 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 |
|
inline |
Gets the text cursor color.
|
inline |
Sets the text cursor color.
n | new cursor color |
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 |
|
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.
|
virtual |
Schedule a recalc_display() to be done on next draw().
Call this from methods that might be called repeatedly, to defers potentially CPU intensive recalc_display() until it's actually needed just before draw().
|
protectedvirtual |
Draw the widget.
This function tries to limit drawing to smaller areas if possible.
Reimplemented from Fl_Group.
|
protected |
Draw a cursor with top center at X
, Y
.
X,Y | cursor position in pixels |
|
protected |
Refresh the line number area.
clearAll | – (currently unused) If False, only draws the line number text, does not clear the area behind it. If True, clears the area and redraws the text. Use False to avoid a 'flash' for single buffered windows. |
|
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 |
|
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 |
|
protected |
Refresh a rectangle of the text display.
left,top | are in coordinates of the text drawing window. |
width,height | size in pixels |
|
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 |
|
protected |
Return true if there are lines visible with no corresponding buffer text.
|
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 | ?? |
|
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 |
|
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 |
|
protected |
Find the index of the character that lies at the given x position / closest cursor position.
s | UTF-8 text string |
len | length of string |
style | index into style lookup table |
x | position in pixels - negative returns closest cursor position |
|
protected |
Returns the absolute (non-wrapped) line number of the first line displayed.
Returns 0 if the absolute top line number is not being maintained.
|
inline |
Gets the underline color for style attribute ATTR_GRAMMAR.
|
inline |
Sets the underline color for style attribute ATTR_GRAMMAR.
color | underline color |
|
virtual |
|
protected |
Handle right mouse button down events.
|
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, FIND_INDEX_FROM_ZERO, or FIND_CURSOR_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
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 extend_range_for_styles() 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.
fl_utf8len()
.Text: "*g* r ü *n*" , where normal style is 'A', and bold is 'B'
styleBuffer | this buffer works in parallel to the text buffer. For every character in the text buffer, the style 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 | an optional argument for the callback above, usually a pointer to the Text Display. |
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 |
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 insert(insert_position(),text) 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. |
|
inline |
Gets the position of the text insertion cursor for text display.
The insert position is the byte count (offset) from the beginning of the text buffer (starting with 0). Returns 0 (zero) if no buffer is associated to the text display. Returns buffer()->length() if the insert position is at the end of the buffer.
void Fl_Text_Display::insert_position | ( | int | newPos | ) |
Sets the position of the text insertion cursor for text display.
Moves the insertion cursor in front of the character at newPos
. This function may trigger a redraw.
newPos | new caret position |
int Fl_Text_Display::line_end | ( | int | startPos, |
bool | startPosIsLineStart | ||
) | const |
Returns the end of a line.
Same as buffer()->line_end(startPos), 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 |
int Fl_Text_Display::line_start | ( | int | pos | ) | const |
Return the beginning of a line.
Same as buffer()->line_start(pos), but returns the character after last wrap point rather than the last newline.
pos | index to starting character |
void Fl_Text_Display::linenumber_align | ( | Fl_Align | val | ) |
Set alignment for line numbers (if enabled).
Valid values are FL_ALIGN_LEFT, FL_ALIGN_CENTER or FL_ALIGN_RIGHT.
void Fl_Text_Display::linenumber_bgcolor | ( | Fl_Color | val | ) |
Set the background color used for line numbers (if enabled).
void Fl_Text_Display::linenumber_fgcolor | ( | Fl_Color | val | ) |
Set the foreground color used for line numbers (if enabled).
void Fl_Text_Display::linenumber_font | ( | Fl_Font | val | ) |
Set the font used for line numbers (if enabled).
void Fl_Text_Display::linenumber_format | ( | const char * | val | ) |
Sets the printf() style format string used for line numbers.
Default is "%d" for normal unpadded decimal integers.
An internal copy of val
is allocated and managed; it is automatically freed whenever a new value is assigned, or when the widget is destroyed.
The value of val
must not be NULL.
Example values:
- "%d" -- For normal line numbers without padding (Default) - "%03d" -- For 000 padding - "%x" -- For hexadecimal line numbers - "%o" -- For octal line numbers
void Fl_Text_Display::linenumber_size | ( | Fl_Fontsize | val | ) |
Set the font size used for line numbers (if enabled).
void Fl_Text_Display::linenumber_width | ( | int | width | ) |
Set width of screen area for line numbers.
Use to also enable/disable line numbers. A value of 0 disables line numbering, values >0 enable the line number display.
width | The new width of the area for line numbers to appear, in pixels. 0 disables line numbers (default) |
|
protected |
Find the longest line of all visible lines.
|
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 Fl_Text_Display::position_to_linecol()). More specifically, this allows the line number reported in the statistics line to be calibrated in absolute lines, rather than post-wrapped lines.
|
protected |
Returns true if a separate absolute top line number is being maintained.
The absolute top line number is used for displaying line numbers in continuous wrap mode or showing in the statistics line (the latter is currently not available in FLTK).
|
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 |
|
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 |
|
protected |
Returns the width in pixels of the displayed line pointed to by "visLineNum".
visLineNum | index into visible lines array |
int Fl_Text_Display::move_down | ( | ) |
Moves the current insert position down one line.
int Fl_Text_Display::move_left | ( | ) |
Moves the current insert position left one character.
int Fl_Text_Display::move_right | ( | ) |
Moves the current insert position right one character.
int Fl_Text_Display::move_up | ( | ) |
Moves the current insert position up one line.
|
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 |
void Fl_Text_Display::overstrike | ( | const char * | text | ) |
Replaces text at the current insert position.
text | new text in UTF-8 encoding |
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 lineLen
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.
If lineIndex is pointing to the last character in a line, and the second to last character has the ATTR_BGCOLOR_EXT set, the background color will extend into the remaining line.
lineStartPos | beginning of this line |
lineLen | number of bytes in line |
lineIndex | position of character within line |
|
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, counting from 0 to visible lines - 1. The line number is returned in lineNum
.
Returns 0 if the line is not displayed. In this case lineNum
is 0 as well.
Returns 1 if the line is displayed. In this case lineNum
is the relative line number.
[in] | pos | byte position in buffer |
[out] | lineNum | relative line number of byte pos in buffer |
pos
is currently displayed 0 | pos is not displayed; lineNum is invalid (zero) |
1 | pos is displayed; lineNum is valid |
|
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 int Fl_Text_Display::position_to_xy | ( | int | pos, |
int * | X, | ||
int * | Y | ||
) | const |
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 |
|
virtual |
Recalculate the display's visible lines and scrollbar sizes.
Beware calling this directly may cause a lot of CPU if called repeatedly (issue 300). Better to call display_needs_recalc() to flag a recalc to be done during next draw().
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 |
|
protected |
Reestablish the absolute (non-wrapped) top line number.
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.
|
virtual |
Change the size of the displayed text area.
Calling this function will trigger a recalculation of all visible lines and of all scrollbar sizes.
X,Y,W,H | new position and size of this widget |
Reimplemented from Fl_Group.
int Fl_Text_Display::rewind_lines | ( | int | startPos, |
int | nLines | ||
) |
Skip a number of lines back.
Same as buffer()->rewind_lines(startPos, nLines), but takes into account line breaks when wrapping is turned on.
startPos | index to starting character |
nLines | number of lines to skip back |
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 |
|
protected |
Scrolls the current buffer to start at the specified line and column.
topLineNum | top line number |
horizOffset | in pixels |
|
staticprotected |
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.
|
inline |
Gets the scrollbar alignment type.
|
inline |
Sets the scrollbar alignment type.
a | new scrollbar alignment |
|
inline |
Gets the current size of the scrollbars' troughs, in pixels.
If this value is zero (default), this widget will use the Fl::scrollbar_size() value as the scrollbar's width.
|
inline |
Sets the pixel size of the scrollbars' troughs to newSize
, in pixels.
Normally you should not need this method, and should use Fl::scrollbar_size(int) instead to manage the size of ALL your widgets' scrollbars. This ensures your application has a consistent UI, is the default behavior, and is normally what you want.
Only use THIS method if you really need to override the global scrollbar size. The need for this should be rare.
Setting newSize
to the special value of 0 causes the widget to track the global Fl::scrollbar_size(), which is the default.
[in] | newSize | Sets the scrollbar size in pixels. If 0 (default), scrollbar size tracks the global Fl::scrollbar_size() |
|
inline |
Returns the global value Fl::scrollbar_size() unless a specific scrollbar_width_ has been set.
|
inline |
Sets the global Fl::scrollbar_size(), and forces this instance of the widget to use it.
|
inline |
Gets the background color for the secondary selection block.
|
inline |
Sets the background color for the secondary selection block.
color | background color |
|
inline |
|
inline |
s | the new shortcut key |
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). |
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()
int Fl_Text_Display::skip_lines | ( | int | startPos, |
int | nLines, | ||
bool | startPosIsLineStart | ||
) |
Skip a number of lines forward.
Same as Fl_Text_Buffer::skip_lines(startPos, nLines), 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 |
|
inline |
Gets the underline color for style attribute ATTR_SPELLING.
|
inline |
Sets the underline color for style attribute ATTR_SPELLING.
color | underline color |
|
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 |
|
inline |
Gets the current style buffer associated with the text widget.
Multiple text widgets can be associated with the same style buffer.
|
inline |
Gets the default color of text in the widget.
|
inline |
Sets the default color of text in the widget.
n | new text color |
|
inline |
Gets the default font used when drawing text in the widget.
|
inline |
Sets the default font used when drawing text in the widget.
s | default text font face |
|
inline |
Gets the default size of text in the widget.
|
inline |
Sets the default size of text in the widget.
s | new text size |
|
protected |
Update horizontal scrollbar.
Update the minimum, maximum, slider size, page increment, and value for the horizontal scrollbar.
|
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 |
|
protected |
Update vertical scrollbar.
Update the minimum, maximum, slider size, page increment, and value for the vertical scrollbar.
|
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 |
|
inline |
Moves the insert position to the end of the current word.
pos | start calculation at this index |
|
inline |
Moves the insert position to the beginning of the current word.
pos | start calculation at this index |
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.
Valid wrap modes are:
wrap | new wrap mode (see above) |
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. |
|
protected |
Check if the line break is caused by a newline or by line wrapping.
Line breaks in continuous wrap mode usually happen at newlines (\n) 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 Fl_Text_Display::line_end() or Fl_Text_Buffer::line_end(), 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 |
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 |
|
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.
[in] | buf | The text buffer to operate on |
[in] | startPos | Starting index position into the buffer |
[in] | maxPos | Maximum index position into the buffer we'll reach |
[in] | maxLines | Maximum number of lines we'll reach |
[in] | startPosIsLineStart | Flag indicating if startPos is start of line. (If set, prevents our having to find the line start) |
[in] | styleBufOffset | Offset index position into style buffer. |
[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 |
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 |
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 |
|
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 |
|
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 |