FLTK 1.4.0
Fl_Text_Display Class Reference

Rich text display widget. More...

#include <Fl_Text_Display.H>

Inheritance diagram for Fl_Text_Display:
Fl_Group Fl_Widget Fl_Text_Editor

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_Bufferbuffer () 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_Bufferstyle_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_Groupas_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_Widgetchild (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_Widgetresizable () 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_Windowas_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_Groupas_group ()
 Returns an Fl_Group pointer if this widget is an Fl_Group. More...
 
virtual Fl_Group const * as_group () const
 
virtual Fl_Windowas_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_Imagedeimage ()
 Gets the image that is used as part of the widget label when in the inactive state. More...
 
const Fl_Imagedeimage () 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_Imageimage ()
 Gets the image that is used as part of the widget label when in the active state. More...
 
const Fl_Imageimage () 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_Groupparent () 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_Windowtop_window () const
 Returns a pointer to the top-level window for the widget. More...
 
Fl_Windowtop_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_Windowwindow () 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_Rectbounds ()
 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_BuffermBuffer
 
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_ScrollbarmHScrollBar
 
int mLastChar
 
int mLineNumLeft
 
int mLineNumWidth
 
int * mLineStarts
 
int mMaxsize
 
int mModifyingTabDistance
 
int mNBufferLines
 
int mNeedAbsTopLineNum
 
int mNLinesDeleted
 
int mNStyles
 
int mNVisibleLines
 
Fl_Text_BuffermStyleBuffer
 
const Style_Table_EntrymStyleTable
 
int mSuppressResync
 
int mTopLineNum
 
int mTopLineNumHint
 
Unfinished_Style_Cb mUnfinishedHighlightCB
 
char mUnfinishedStyle
 
Fl_ScrollbarmVScrollBar
 
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_Groupcurrent ()
 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...
 

Detailed Description

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.

Fl_Text_Display widget



Fl_Text_Display widget with line numbers enabled

Example Use

#include <FL/Fl_Text_Display.H>
..
int main() {
..
Fl_Text_Display *disp = new Fl_Text_Display(10, 10, 640, 480);
disp->buffer(buff); // attach text buffer to display widget
buff->text("line one\nline two"); // add some text to buffer
..
}
This class manages Unicode text displayed in one or more Fl_Text_Display widgets.
Definition: Fl_Text_Buffer.H:201
char * text() const
Get a copy of the entire contents of the text buffer.
Definition: Fl_Text_Buffer.cxx:261
Rich text display widget.
Definition: Fl_Text_Display.H:78
void buffer(Fl_Text_Buffer *buf)
Attach a text buffer to display, replacing the current buffer (if any).
Definition: Fl_Text_Display.cxx:369
Fl_Text_Display(int X, int Y, int W, int H, const char *l=0)
Creates a new text display widget.
Definition: Fl_Text_Display.cxx:106

Features

Note that other features may be available via Fl_Text_Editor and Fl_Text_Buffer classes.

Note
Line numbers were added in FLTK 1.3.3.
See also
Fl_Widget::shortcut_label(int)

Member Enumeration Documentation

◆ anonymous enum

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

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

anonymous enum

attribute flags in Style_Table_Entry.attr

Enumerator
ATTR_BGCOLOR 

use the background color in the bgcolor field

ATTR_BGCOLOR_EXT_ 

(internal use)

ATTR_BGCOLOR_EXT 

extend background color to the end of the line

ATTR_UNDERLINE 

a single underline, underline types are mutually exclusive

ATTR_GRAMMAR 

grammar suggestion (blue dotted underline)

ATTR_SPELLING 

spelling suggestion (red dotted underline)

ATTR_STRIKE_THROUGH 

line through the middle of the text

ATTR_LINES_MASK 

the mask for all underline and strike through types

Constructor & Destructor Documentation

◆ Fl_Text_Display()

Fl_Text_Display::Fl_Text_Display ( int  X,
int  Y,
int  W,
int  H,
const char *  l = 0 
)

Creates a new text display widget.

Parameters
X,Y,W,Hposition and size of widget
llabel text, defaults to none

◆ ~Fl_Text_Display()

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.
See also
Fl_Text_Display::buffer(Fl_Text_Buffer* buf)

Member Function Documentation

◆ absolute_top_line_number()

void Fl_Text_Display::absolute_top_line_number ( int  oldFirstChar)
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.

◆ buffer() [1/3]

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.

Returns
current text buffer
See also
Fl_Text_Display::buffer(Fl_Text_Buffer* buf)
Fl_Text_Display::buffer(Fl_Text_Buffer& buf)

◆ buffer() [2/3]

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.

Parameters
bufnew text buffer
See also
Fl_Text_Display::buffer(Fl_Text_Buffer* buf)

◆ buffer() [3/3]

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.

Note
The caller is responsible for the old (replaced) buffer (if any). This method does not delete the old buffer.
Parameters
bufattach this text buffer

◆ buffer_modified_cb()

void Fl_Text_Display::buffer_modified_cb ( int  pos,
int  nInserted,
int  nDeleted,
int  nRestyled,
const char *  deletedText,
void *  cbArg 
)
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.

Parameters
posstarting index of modification
nInsertednumber of bytes we inserted (must be UTF-8 aligned!)
nDeletednumber of bytes deleted (must be UTF-8 aligned!)
nRestyled??
deletedTextthis is what was removed, must not be NULL if nDeleted is set
cbArg"this" pointer for static callback function

◆ buffer_predelete_cb()

void Fl_Text_Display::buffer_predelete_cb ( int  pos,
int  nDeleted,
void *  cbArg 
)
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.

Parameters
posstarting index of deletion
nDeletednumber of bytes we will delete (must be UTF-8 aligned!)
cbArg"this" pointer for static callback function

◆ calc_last_char()

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.

◆ calc_line_starts()

void Fl_Text_Display::calc_line_starts ( int  startLine,
int  endLine 
)
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.

Parameters
startLine,endLinerange of lines to scan as line numbers

◆ clear_rect()

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.

Parameters
styleindex into style table
X,Y,width,heightsize and position of background area

◆ col_to_x()

double Fl_Text_Display::col_to_x ( double  col) const

Convert a column number into an x pixel position.

Parameters
colan approximate column number based on the main font
Returns
number of pixels from the left margin to the left of an average sized character
See also
x_to_col()

◆ count_lines()

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.

Parameters
startPosindex to first character
endPosindex after last character
startPosIsLineStartavoid scanning back to the line start
Returns
number of lines

◆ cursor_color() [1/2]

Fl_Color Fl_Text_Display::cursor_color ( ) const
inline

Gets the text cursor color.

Returns
cursor color

◆ cursor_color() [2/2]

void Fl_Text_Display::cursor_color ( Fl_Color  n)
inline

Sets the text cursor color.

Parameters
nnew cursor color

◆ cursor_style()

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.

Parameters
stylenew cursor style

◆ display_insert()

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.

◆ display_needs_recalc()

void Fl_Text_Display::display_needs_recalc ( )
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().

◆ draw()

void Fl_Text_Display::draw ( void  )
protectedvirtual

Draw the widget.

This function tries to limit drawing to smaller areas if possible.

Reimplemented from Fl_Group.

◆ draw_cursor()

void Fl_Text_Display::draw_cursor ( int  X,
int  Y 
)
protected

Draw a cursor with top center at X, Y.

Parameters
X,Ycursor position in pixels

◆ draw_line_numbers()

void Fl_Text_Display::draw_line_numbers ( bool  clearAll)
protected

Refresh the line number area.

Parameters
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.

◆ draw_range()

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.

Parameters
startposindex of first character to draw
endposindex after last character to draw

◆ draw_string()

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).

Parameters
styleindex into style lookup table
X,Ydrawing origin
toXrightmost position if this is a fill operation
stringtext if this is a drawing operation
nCharsnumber of characters to draw

◆ draw_text()

void Fl_Text_Display::draw_text ( int  left,
int  top,
int  width,
int  height 
)
protected

Refresh a rectangle of the text display.

Parameters
left,topare in coordinates of the text drawing window.
width,heightsize in pixels

◆ draw_vline()

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).

Parameters
visLineNumindex of line in the visible line number lookup
leftClip,rightClippixel position of clipped area
leftCharIndex,rightCharIndexindex into line of segment that we want to draw

◆ empty_vlines()

int Fl_Text_Display::empty_vlines ( ) const
protected

Return true if there are lines visible with no corresponding buffer text.

Returns
1 if there are empty lines

◆ extend_range_for_styles()

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).

Parameters
startpos??
endpos??
Todo:
Unicode?

◆ find_line_end()

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.

Parameters
startPos
startPosIsLineStart
[out]lineEnd
[out]nextLineStart

◆ find_wrap_range()

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.

Parameters
deletedText
pos
nInserted
nDeleted
modRangeStart
modRangeEnd
linesInserted
linesDeleted

◆ find_x()

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 / closest cursor position.

Parameters
sUTF-8 text string
lenlength of string
styleindex into style lookup table
xposition in pixels - negative returns closest cursor position
Returns
index into buffer

◆ get_absolute_top_line_number()

int Fl_Text_Display::get_absolute_top_line_number ( ) const
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.

◆ grammar_underline_color() [1/2]

Fl_Color Fl_Text_Display::grammar_underline_color ( ) const
inline

Gets the underline color for style attribute ATTR_GRAMMAR.

Returns
underline color

◆ grammar_underline_color() [2/2]

void Fl_Text_Display::grammar_underline_color ( Fl_Color  color)
inline

Sets the underline color for style attribute ATTR_GRAMMAR.

Parameters
colorunderline color

◆ handle()

int Fl_Text_Display::handle ( int  e)
virtual

Event handling.

Reimplemented from Fl_Group.

Reimplemented in Fl_Text_Editor.

◆ handle_rmb()

int Fl_Text_Display::handle_rmb ( int  readonly)
protected

Handle right mouse button down events.

Returns
0 for no op, 1 to cut, 2 to copy, 3 to paste

◆ handle_vline()

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

  • draw a text range
  • return the width of a text range in pixels
  • return the index of a character that is at a pixel position
Parameters
[in]modeDRAW_LINE, GET_WIDTH, FIND_INDEX, FIND_INDEX_FROM_ZERO, or FIND_CURSOR_INDEX
[in]lineStartPosindex of first character
[in]lineLensize of string in bytes
[in]leftChar,rightChar
[in]Ydrawing position
[in]bottomClip,leftClip,rightClipstop work when we reach the clipped area. rightClip is the X position that we search in FIND_INDEX.
Return values
DRAW_LINEindex of last drawn character
GET_WIDTHwidth in pixels of text segment if we would draw it
FIND_INDEXindex of character at given x position in window coordinates
FIND_INDEX_FROM_ZEROindex of character at given x position without scrolling and widget offsets
Todo:

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

◆ highlight_data()

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.

Note
Style information in the style buffer must have the same byte offset as the corresponding character in the text buffer. UTF-8 characters can have a maximum length of four bytes. Style information must take this into account and fill the unused bytes with 0. See fl_utf8len().

Text: "*g* r &uuml; *n*" , where normal style is 'A', and bold is 'B'

Text Buffer(hex): 67 72 c3 bc 6e : gr..n
Style Buffer(hex): 42 41 41 00 42 : BAA.B
Parameters
styleBufferthis 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.
styleTablea list of styles indexed by the style buffer
nStylesnumber of styles in the style table
unfinishedStyleif this style is found, the callback below is called
unfinishedHighlightCBif a character with an unfinished style is found, this callback will be called
cbArgan optional argument for the callback above, usually a pointer to the Text Display.
See also
Fl_Text_Display::style_buffer()

◆ in_selection()

int Fl_Text_Display::in_selection ( int  X,
int  Y 
) const

Check if a pixel position is within the primary selection.

Parameters
X,Ypixel position to test
Returns
1 if position (X, Y) is inside of the primary Fl_Text_Selection

◆ insert()

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.

Parameters
textnew text in UTF-8 encoding.

◆ insert_position() [1/2]

int Fl_Text_Display::insert_position ( ) const
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.

Returns
insert position index into text buffer
See also
insert_position(int)

◆ insert_position() [2/2]

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.

Parameters
newPosnew caret position

◆ line_end()

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.

Parameters
startPosindex to starting character
startPosIsLineStartavoid scanning back to the line start
Returns
new position as index

◆ 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.

Parameters
posindex to starting character
Returns
new position as index

◆ linenumber_align()

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.

Version
1.3.3

◆ linenumber_bgcolor()

void Fl_Text_Display::linenumber_bgcolor ( Fl_Color  val)

Set the background color used for line numbers (if enabled).

Version
1.3.3

◆ linenumber_fgcolor()

void Fl_Text_Display::linenumber_fgcolor ( Fl_Color  val)

Set the foreground color used for line numbers (if enabled).

Version
1.3.3

◆ linenumber_font()

void Fl_Text_Display::linenumber_font ( Fl_Font  val)

Set the font used for line numbers (if enabled).

Version
1.3.3

◆ linenumber_format()

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
Version
1.3.3

◆ linenumber_size()

void Fl_Text_Display::linenumber_size ( Fl_Fontsize  val)

Set the font size used for line numbers (if enabled).

Version
1.3.3

◆ linenumber_width()

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.

Parameters
widthThe new width of the area for line numbers to appear, in pixels. 0 disables line numbers (default)

◆ longest_vline()

int Fl_Text_Display::longest_vline ( ) const
protected

Find the longest line of all visible lines.

Returns
the width of the longest visible line in pixels

◆ maintain_absolute_top_line_number()

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 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.

◆ maintaining_absolute_top_line_number()

int Fl_Text_Display::maintaining_absolute_top_line_number ( ) const
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).

◆ measure_deleted_lines()

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).

Parameters
pos
nDeleted

◆ measure_proportional_character()

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.

Parameters
stext string
xPixx pixel position needed for calculating tab widths
posoffset within string
Returns
width of character in pixels

◆ measure_vline()

int Fl_Text_Display::measure_vline ( int  visLineNum) const
protected

Returns the width in pixels of the displayed line pointed to by "visLineNum".

Parameters
visLineNumindex into visible lines array
Returns
width of line in pixels

◆ move_down()

int Fl_Text_Display::move_down ( )

Moves the current insert position down one line.

Returns
1 if the cursor moved, 0 if the beginning of the text was reached

◆ move_left()

int Fl_Text_Display::move_left ( )

Moves the current insert position left one character.

Returns
1 if the cursor moved, 0 if the beginning of the text was reached

◆ move_right()

int Fl_Text_Display::move_right ( )

Moves the current insert position right one character.

Returns
1 if the cursor moved, 0 if the end of the text was reached

◆ move_up()

int Fl_Text_Display::move_up ( )

Moves the current insert position up one line.

Returns
1 if the cursor moved, 0 if the beginning of the text was reached

◆ offset_line_starts()

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)

Parameters
newTopLineNumindex into buffer

◆ overstrike()

void Fl_Text_Display::overstrike ( const char *  text)

Replaces text at the current insert position.

Parameters
textnew text in UTF-8 encoding
Todo:
Unicode? Find out exactly what we do here and simplify.

◆ position_style()

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.

Parameters
lineStartPosbeginning of this line
lineLennumber of bytes in line
lineIndexposition of character within line
Returns
style for the given character

◆ position_to_line()

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, 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.

Parameters
[in]posbyte position in buffer
[out]lineNumrelative line number of byte pos in buffer
Returns
whether the character at byte position pos is currently displayed
Return values
0pos is not displayed; lineNum is invalid (zero)
1pos is displayed; lineNum is valid

◆ position_to_linecol()

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).

Parameters
poscharacter index
[out]lineNumabsolute (unwrapped) line number
[out]columncharacter offset to the beginning of the line
Returns
0 if pos is off screen, line number otherwise
Todo:
a column number makes little sense in the UTF-8/variable font width environment. We will have to further define what exactly we want to return. Please check the functions that call this particular function.

◆ position_to_xy()

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.

Parameters
poscharacter index
[out]X,Ypixel position of character on screen
Returns
0 if character vertically out of view, X & Y positions otherwise

◆ recalc_display()

void Fl_Text_Display::recalc_display ( )
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().

◆ redisplay_range()

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.

Parameters
startposindex of first character needing redraw
endposindex after last character needing redraw

◆ reset_absolute_top_line_number()

void Fl_Text_Display::reset_absolute_top_line_number ( )
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.

◆ resize()

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 visible lines and of all scrollbar sizes.

Parameters
X,Y,W,Hnew position and size of this widget

Reimplemented from Fl_Group.

◆ rewind_lines()

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.

Parameters
startPosindex to starting character
nLinesnumber of lines to skip back
Returns
new position as index

◆ scroll()

void Fl_Text_Display::scroll ( int  topLineNum,
int  horizOffset 
)

Scrolls the current buffer to start at the specified line and column.

Parameters
topLineNumtop line number
horizOffsetcolumn number
Todo:
Column numbers make little sense here.

◆ scroll_()

int Fl_Text_Display::scroll_ ( int  topLineNum,
int  horizOffset 
)
protected

Scrolls the current buffer to start at the specified line and column.

Parameters
topLineNumtop line number
horizOffsetin pixels
Returns
0 if nothing changed, 1 if we scrolled

◆ scroll_timer_cb()

void Fl_Text_Display::scroll_timer_cb ( void *  user_data)
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.

◆ scrollbar_align() [1/2]

Fl_Align Fl_Text_Display::scrollbar_align ( ) const
inline

Gets the scrollbar alignment type.

Returns
scrollbar alignment

◆ scrollbar_align() [2/2]

void Fl_Text_Display::scrollbar_align ( Fl_Align  a)
inline

Sets the scrollbar alignment type.

Parameters
anew scrollbar alignment

◆ scrollbar_size() [1/2]

int Fl_Text_Display::scrollbar_size ( void  ) const
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.

Returns
Scrollbar size in pixels, or 0 if the global Fl::scrollbar_size() is being used.
See also
Fl::scrollbar_size(int)

◆ scrollbar_size() [2/2]

void Fl_Text_Display::scrollbar_size ( int  newSize)
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.

Parameters
[in]newSizeSets the scrollbar size in pixels.
If 0 (default), scrollbar size tracks the global Fl::scrollbar_size()
See also
Fl::scrollbar_size()

◆ scrollbar_width() [1/2]

int Fl_Text_Display::scrollbar_width ( ) const
inline

Returns the global value Fl::scrollbar_size() unless a specific scrollbar_width_ has been set.

Deprecated:
Use scrollbar_size() instead.
Todo:
This method should eventually be removed.

◆ scrollbar_width() [2/2]

void Fl_Text_Display::scrollbar_width ( int  width)
inline

Sets the global Fl::scrollbar_size(), and forces this instance of the widget to use it.

Deprecated:
Use scrollbar_size() instead.
Todo:
This method should eventually be removed

◆ secondary_selection_color() [1/2]

Fl_Color Fl_Text_Display::secondary_selection_color ( ) const
inline

Gets the background color for the secondary selection block.

Returns
background color color

◆ secondary_selection_color() [2/2]

void Fl_Text_Display::secondary_selection_color ( Fl_Color  color)
inline

Sets the background color for the secondary selection block.

Parameters
colorbackground color

◆ shortcut() [1/2]

int Fl_Text_Display::shortcut ( ) const
inline
Todo:
FIXME : get set methods pointing on shortcut_ have no effects as shortcut_ is unused in this class and derived!
Returns
the current shortcut key

◆ shortcut() [2/2]

void Fl_Text_Display::shortcut ( int  s)
inline
Todo:
FIXME : get set methods pointing on shortcut_ have no effects as shortcut_ is unused in this class and derived!
Parameters
sthe new shortcut key

◆ show_cursor()

void Fl_Text_Display::show_cursor ( int  b = 1)

Shows the text cursor.

This function may trigger a redraw.

Parameters
bshow(1) or hide(0) the text cursor (caret).

◆ show_insert_position()

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()

◆ skip_lines()

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.

Parameters
startPosindex to starting character
nLinesnumber of lines to skip ahead
startPosIsLineStartavoid scanning back to the line start
Returns
new position as index

◆ spelling_underline_color() [1/2]

Fl_Color Fl_Text_Display::spelling_underline_color ( ) const
inline

Gets the underline color for style attribute ATTR_SPELLING.

Returns
underline color

◆ spelling_underline_color() [2/2]

void Fl_Text_Display::spelling_underline_color ( Fl_Color  color)
inline

Sets the underline color for style attribute ATTR_SPELLING.

Parameters
colorunderline color

◆ string_width()

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.

Parameters
stringthe text
lengthnumber of bytes in string
styleindex into style table
Returns
width of text segment in pixels

◆ style_buffer()

Fl_Text_Buffer * Fl_Text_Display::style_buffer ( ) const
inline

Gets the current style buffer associated with the text widget.

Multiple text widgets can be associated with the same style buffer.

Returns
current style buffer
See also
Fl_Text_Display::highlight_data()

◆ textcolor() [1/2]

Fl_Color Fl_Text_Display::textcolor ( void  ) const
inline

Gets the default color of text in the widget.

Returns
text color unless overridden by a style

◆ textcolor() [2/2]

void Fl_Text_Display::textcolor ( Fl_Color  n)
inline

Sets the default color of text in the widget.

Parameters
nnew text color

◆ textfont() [1/2]

Fl_Font Fl_Text_Display::textfont ( void  ) const
inline

Gets the default font used when drawing text in the widget.

Returns
current text font face unless overridden by a style

◆ textfont() [2/2]

void Fl_Text_Display::textfont ( Fl_Font  s)
inline

Sets the default font used when drawing text in the widget.

Parameters
sdefault text font face

◆ textsize() [1/2]

Fl_Fontsize Fl_Text_Display::textsize ( void  ) const
inline

Gets the default size of text in the widget.

Returns
current text height unless overridden by a style

◆ textsize() [2/2]

void Fl_Text_Display::textsize ( Fl_Fontsize  s)
inline

Sets the default size of text in the widget.

Parameters
snew text size

◆ update_h_scrollbar()

void Fl_Text_Display::update_h_scrollbar ( )
protected

Update horizontal scrollbar.

Update the minimum, maximum, slider size, page increment, and value for the horizontal scrollbar.

◆ update_line_starts()

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.

Parameters
posindex into buffer of recent changes
charsInsertednumber of bytes(!) inserted
charsDeletednumber of bytes(!) deleted
linesInsertednumber of lines
linesDeletednumber of lines
[out]scrolledset to 1 if the text display needs to be scrolled

◆ update_v_scrollbar()

void Fl_Text_Display::update_v_scrollbar ( )
protected

Update vertical scrollbar.

Update the minimum, maximum, slider size, page increment, and value for the vertical scrollbar.

◆ vline_length()

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.

Parameters
visLineNumindex of line in visible line array
Returns
number of bytes in this line

◆ word_end()

int Fl_Text_Display::word_end ( int  pos) const
inline

Moves the insert position to the end of the current word.

Parameters
posstart calculation at this index
Returns
index of first character after the end of the word

◆ word_start()

int Fl_Text_Display::word_start ( int  pos) const
inline

Moves the insert position to the beginning of the current word.

Parameters
posstart calculation at this index
Returns
beginning of the words

◆ wrap_mode()

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_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
Parameters
wrapnew wrap mode (see above)
wrapMarginin 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.

◆ wrap_uses_character()

int Fl_Text_Display::wrap_uses_character ( int  lineEndPos) const
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.

Parameters
lineEndPosindex of character where the line wraps
Returns
1 if a \n character causes the line wrap

◆ wrapped_column()

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.

Parameters
row
column
Returns
something unknown
Todo:
What does this do and how is it useful? Column numbers mean little in this context. Which functions depend on this one? Function TextDXYToUnconstrainedPosition does not exist (nedit port?)
Todo:
Unicode?

◆ wrapped_line_counter()

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.

Parameters
[in]bufThe text buffer to operate on
[in]startPosStarting index position into the buffer
[in]maxPosMaximum index position into the buffer we'll reach
[in]maxLinesMaximum number of lines we'll reach
[in]startPosIsLineStartFlag indicating if startPos is start of line. (If set, prevents our having to find the line start)
[in]styleBufOffsetOffset index position into style buffer.
[out]retPosPosition where counting ended. When counting lines, the position returned is the start of the line "maxLines" lines beyond "startPos".
[out]retLinesNumber of line breaks counted
[out]retLineStartStart of the line where counting ended
[out]retLineEndEnd position of the last line traversed
[out]countLastLineMissingNewLine

◆ wrapped_row()

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.

Parameters
row
Returns
something unknown
Todo:
What does this do and how is it useful? Column numbers mean little in this context. Which functions depend on this one? Function TextDXYToUnconstrainedPosition does not exist (nedit port?)

◆ x_to_col()

double Fl_Text_Display::x_to_col ( double  x) const

Convert an x pixel position into a column number.

Parameters
xnumber of pixels from the left margin
Returns
an approximate column number based on the main font

◆ xy_to_position()

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).

Parameters
X,Ypixel position
posTypeCURSOR_POS or CHARACTER_POS
Returns
index into text buffer

◆ xy_to_rowcol()

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.

Parameters
X,Ypixel coordinates
[out]row,columnneares row and column
posTypeCURSOR_POS or CHARACTER_POS

The documentation for this class was generated from the following files: