1.8
Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
TextBox Class Reference

Input text box. More...

Inheritance diagram for TextBox:
Inheritance graph
[legend]

Public Types

enum class  TextFlag : uint32_t {
  fit_to_width = detail::bit(0) , multiline = detail::bit(1) , word_wrap = detail::bit(2) , no_virt_keyboard = detail::bit(3) ,
  horizontal_scrollable = detail::bit(4) , vertical_scrollable = detail::bit(5)
}
 Text flags. More...
 
using TextFlags = egt::Flags< TextFlag >
 Text flags. More...
 
using ValidatorCallback = std::function< bool(const std::string &)>
 Validator callback type. More...
 
- Public Types inherited from Widget
enum class  Flag : uint32_t {
  plane_window = detail::bit(0) , window = detail::bit(1) , frame = detail::bit(2) , disabled = detail::bit(3) ,
  readonly = detail::bit(4) , active = detail::bit(5) , invisible = detail::bit(6) , grab_mouse = detail::bit(7) ,
  no_clip = detail::bit(8) , no_layout = detail::bit(9) , no_autoresize = detail::bit(10) , checked = detail::bit(11) ,
  component = detail::bit(12)
}
 Common flags used for various widget properties. More...
 
using Flags = egt::Flags< Widget::Flag >
 Widget flags. More...
 
using WalkCallback = std::function< bool(Widget *widget, int level)>
 Callback definition used by walk(). More...
 
using WidgetId = uint64_t
 Type used to identify a unique Widget ID. More...
 
- Public Types inherited from Object
using EventCallback = std::function< void(Event &event)>
 Event handler callback function. More...
 
using FilterFlags = FlagsBase< EventId >
 Event handler EventId filter. More...
 
using RegisterHandle = uint64_t
 Handle type. More...
 

Public Member Functions

 TextBox (const std::string &text, const Rect &rect, const AlignFlags &text_align=default_text_align(), const TextFlags &flags={}) noexcept
 
 TextBox (const std::string &text, const TextFlags &flags, const AlignFlags &text_align=default_text_align()) noexcept
 
 TextBox (const std::string &text={}, const AlignFlags &text_align=default_text_align(), const TextFlags &flags={}) noexcept
 
 TextBox (const TextBox &)=delete
 
 TextBox (Frame &parent, const std::string &text, const Rect &rect, const AlignFlags &text_align=default_text_align(), const TextFlags &flags={}) noexcept
 
 TextBox (Frame &parent, const std::string &text={}, const AlignFlags &text_align=default_text_align(), const TextFlags &flags={}) noexcept
 
 TextBox (Serializer::Properties &props) noexcept
 
 TextBox (TextBox &&)=default
 
 ~TextBox () noexcept override
 
void add_validator_function (ValidatorCallback callback)
 Add a callback to be invoked to validate the input. More...
 
size_t append (const std::string &str)
 Move the cursor to the end and insert. More...
 
void clear () override
 Clear the text value. More...
 
EGT_NODISCARD size_t cursor () const
 Get the cursor position. More...
 
void cursor_backward (size_t count=1)
 Move the cursor backward by the specified count from the current position. More...
 
void cursor_begin ()
 Move the cursor to the beginning. More...
 
void cursor_end ()
 Move the cursor to the end. More...
 
void cursor_forward (size_t count=1)
 Move the cursor forward by the specified count from the current position. More...
 
void cursor_set (size_t pos)
 Set the cursor to the specific position. More...
 
void draw (Painter &painter, const Rect &rect) override
 Draw the widget. More...
 
void handle (Event &event) override
 Handle an event. More...
 
void input_validation_enabled (bool enabled)
 Enable or disable input validation. More...
 
size_t insert (const std::string &str)
 Insert text at the cursor. More...
 
EGT_NODISCARD size_t max_length () const
 Get the max length of allowed text. More...
 
void max_length (size_t len)
 Set the maximum allowed length of the text. More...
 
EGT_NODISCARD Size min_size_hint () const override
 Get a minimum size hint for the Widget. More...
 
TextBoxoperator= (const TextBox &)=delete
 
TextBoxoperator= (TextBox &&)=default
 
void resize (const Size &size) override
 Resize the widget. More...
 
EGT_NODISCARD std::string selected_text () const
 Get, or copy, the selected text. More...
 
void selection (size_t pos, size_t length)
 Set the selection of text. More...
 
void selection_all ()
 Select all of the text. More...
 
void selection_backward (size_t count=1)
 Extend the selection to the left if the cursor is at its end, otherwise reduce the selection from the right. More...
 
void selection_clear ()
 Clear any selection. More...
 
EGT_NODISCARD size_t selection_cursor ()
 Get the position of the moving end of the selection, as opposed to its origin (the fixed end of the selection). More...
 
void selection_delete ()
 Delete the selected text. More...
 
void selection_forward (size_t count=1)
 Extend the selection to the right if the cursor is at its beginning, otherwise reduce the selection from the left. More...
 
EGT_NODISCARD size_t selection_length () const
 Get the length of the selection. More...
 
void selection_move (size_t count, bool save_column=true)
 Move the selection cursor to count character(s): More...
 
EGT_NODISCARD size_t selection_start () const
 Get the start position of the selection. More...
 
void serialize (Serializer &serializer) const override
 Serialize the widget to the specified serializer. More...
 
virtual EGT_NODISCARD const std::string & text () const
 Get the text of the Label. More...
 
virtual void text (const std::string &str)
 Set the text. More...
 
void text (const std::string &str) override
 Set the text. More...
 
EGT_NODISCARD const TextFlagstext_flags () const
 Get a const ref of the flags. More...
 
void text_flags (const TextFlags &text_flags)
 Set the text flags. More...
 
EGT_NODISCARD Point text_offset () const
 Get the position offset of the drawn text as compared to the whole text. More...
 
void text_offset (const Point &p)
 Set the position offset of the drawn text as compared to the whole text. More...
 
- Public Member Functions inherited from TextWidget
 TextWidget (Serializer::Properties &props) noexcept
 
 TextWidget (std::string text={}, const Rect &rect={}, const AlignFlags &text_align=AlignFlag::center) noexcept
 
virtual EGT_NODISCARD size_t len () const
 Get the length of the text. More...
 
void serialize (Serializer &serializer) const override
 Serialize the widget to the specified serializer. More...
 
virtual EGT_NODISCARD const std::string & text () const
 Get the text of the Label. More...
 
EGT_NODISCARD AlignFlags text_align () const
 Get the text alignment within the Label. More...
 
void text_align (const AlignFlags &align)
 Set the text alignment within the Label. More...
 
- Public Member Functions inherited from Widget
 Widget (const Rect &rect={}, const Widget::Flags &flags={}) noexcept
 
 Widget (const Widget &)=delete
 
 Widget (Frame &parent, const Rect &rect={}, const Widget::Flags &flags={}) noexcept
 
 Widget (Serializer::Properties &props) noexcept
 
 Widget (Widget &&) noexcept=default
 
 ~Widget () noexcept override
 
EGT_NODISCARD bool active () const
 Get the active state. More...
 
void active (bool value)
 Set the active state. More...
 
AlignFlagsalign ()
 Get the alignment. More...
 
EGT_NODISCARD const AlignFlagsalign () const
 Get the alignment. More...
 
void align (const AlignFlags &a)
 Align the widget. More...
 
EGT_NODISCARD float alpha () const
 Get the alpha property. More...
 
void alpha (float alpha)
 Set the alpha property. More...
 
EGT_NODISCARD bool autoresize () const
 Return the autoresize state of the widget. More...
 
void autoresize (bool value)
 Set the autoresize state. More...
 
EGT_NODISCARD DefaultDim border () const
 Get the border width. More...
 
void border (DefaultDim border)
 Set the border width. More...
 
EGT_NODISCARD Theme::BorderFlags border_flags () const
 Get the border flags. More...
 
void border_flags (const Theme::BorderFlags &flags)
 Set the border flags. More...
 
EGT_NODISCARD float border_radius () const
 Get the border radius. More...
 
void border_radius (float radius)
 Set the border radius. More...
 
EGT_NODISCARD const Rectbox () const
 Bounding box for the Widget. More...
 
void box (const Rect &rect)
 Change the bounding box of the widget. More...
 
bool can_handle_event () const
 Returns true if the widget is capable of handling an event. More...
 
EGT_NODISCARD Point center () const
 Get the center point of the widget's box(). More...
 
EGT_NODISCARD bool checked () const
 Get the boolean checked state of the a widget. More...
 
virtual void checked (bool value)
 Set the checked state of the widget. More...
 
EGT_NODISCARD bool clip () const
 Return the clip state of the widget. More...
 
EGT_NODISCARD const Patterncolor (Palette::ColorId id) const
 Get a Widget color. More...
 
void color (Palette::ColorId id, const Pattern &color, Palette::GroupId group=Palette::GroupId::normal)
 Add a color to the widget's instance palette. More...
 
EGT_NODISCARD const Patterncolor (Palette::ColorId id, Palette::GroupId group) const
 Get a Widget color. More...
 
virtual EGT_NODISCARD Rect content_area () const
 Return the area that content is allowed to be positioned into. More...
 
virtual void damage ()
 Damage the box() of the widget and cause a redraw. More...
 
virtual void damage (const Rect &rect)
 Mark the specified rect as a damaged area of the widget. More...
 
virtual void deserialize_children (const Deserializer &deserializer)
 Deserialize the children of this widget. More...
 
void detach ()
 Detach this widget from its parent. More...
 
void disable ()
 Set the disabled state to true. More...
 
void disable_toggle ()
 Toggle the disabled state. More...
 
EGT_NODISCARD bool disabled () const
 Return the disabled state of the widget. More...
 
void disabled (bool value)
 Set the disabled state. More...
 
DisplayPoint display_origin ()
 Get the display origin of the Widget. More...
 
virtual Point display_to_local (const DisplayPoint &p)
 Convert a display point to a local point. More...
 
void draw_box (Painter &painter, Palette::ColorId bg, Palette::ColorId border) const
 Helper function to draw this widget's box using the appropriate theme. More...
 
void draw_circle (Painter &painter, Palette::ColorId bg, Palette::ColorId border) const
 Helper function to draw this widget's circle using the appropriate theme. More...
 
void enable ()
 Set the disabled state to false. More...
 
Theme::FillFlagsfill_flags ()
 Get a modifiable fill flags reference. More...
 
EGT_NODISCARD const Theme::FillFlagsfill_flags () const
 Get the fill flags. More...
 
void fill_flags (const Theme::FillFlags &flags)
 Set the fill flags. More...
 
EGT_NODISCARD bool focus () const
 Get the current focus state. More...
 
void focus (bool value)
 Set the focus state. More...
 
EGT_NODISCARD const Fontfont () const
 Get the widget Font. More...
 
void font (const Font &font)
 Set the widget Font. More...
 
EGT_NODISCARD bool frame () const
 Return the frame state of the widget. More...
 
EGT_NODISCARD bool grab_mouse () const
 Return the grab_mouse state of the widget. More...
 
void grab_mouse (bool value)
 Set the grab_mouse state. More...
 
bool has_font () const
 Check whether the widget has a custom Font. More...
 
EGT_NODISCARD bool has_palette () const
 Check whether the widget has a custom palette. More...
 
EGT_NODISCARD DefaultDim height () const
 Height of the widget's box(). More...
 
void height (DefaultDim h)
 Change the height. More...
 
virtual void hide ()
 Hide the Widget. More...
 
EGT_NODISCARD DefaultDim horizontal_ratio () const
 Get the horizontal ratio relative to parent. More...
 
void horizontal_ratio (DefaultDim horizontal)
 Set the horizontal ratio relative to parent. More...
 
EGT_NODISCARD bool in_layout () const
 Indicate if the Widget is computing the layout or not. More...
 
virtual void layout ()
 Perform layout of the Widget. More...
 
DisplayPoint local_to_display (const Point &p)
 Convert a local point to a display point. More...
 
EGT_NODISCARD DefaultDim margin () const
 Get the margin width. More...
 
void margin (DefaultDim margin)
 Set the margin width. More...
 
void min_size_hint (const Size &size)
 Set the minimum size hint for the Widget. More...
 
EGT_NODISCARD size_t moat () const
 Get the sum of the margin(), padding(), and border() around the content of the widget. More...
 
virtual void move (const Point &point)
 Move the Widget to a new position. More...
 
void move_to_center ()
 Move the widget to the center of its parent. More...
 
void move_to_center (const Point &point)
 Move the widget to the specified center point. More...
 
EGT_NODISCARD bool no_layout () const
 Return the no_layout state of the widget. More...
 
void no_layout (bool value)
 Set the no_layout state. More...
 
virtual void on_screen_resized ()
 Called from ComposerScreen::resize(). More...
 
Widgetoperator= (const Widget &)=delete
 
Widgetoperator= (Widget &&) noexcept=default
 
EGT_NODISCARD DefaultDim padding () const
 Return the padding width. More...
 
void padding (DefaultDim padding)
 Set the padding width. More...
 
virtual void paint (Painter &painter)
 Paint the Widget using a Painter. More...
 
virtual void paint_to_file (const std::string &filename={})
 Draw the widget to a file. More...
 
EGT_NODISCARD const Palettepalette () const
 Get the widget palette. More...
 
void palette (const Palette &palette)
 Set the widget instance Palette. More...
 
Widgetparent ()
 Get a pointer to the parent Widget, or nullptr if none exists. More...
 
EGT_NODISCARD const Widgetparent () const
 Get a pointer to the parent Widget, or nullptr if none exists. More...
 
EGT_NODISCARD bool plane_window () const
 Return the plane_window state of the widget. More...
 
EGT_NODISCARD const Pointpoint () const
 Get the origin of the widget's box(). More...
 
virtual void post_deserialize (Serializer::Properties &props)
 Resume deserializing of the widget after its children have been deserialized. More...
 
void ratio (DefaultDim horizontal, DefaultDim vertical)
 Set the size ratio relative to parent. More...
 
void ratio (DefaultDim ratio)
 Set the size ratio relative to parent. More...
 
EGT_NODISCARD bool readonly () const
 Get the readonly state of the widget. More...
 
void readonly (bool value)
 Set the readonly state of the widget. More...
 
void readonly_toggle ()
 Toggle the readonly state. More...
 
void reset_font ()
 Reset the widget's Font. More...
 
void reset_palette ()
 Clear the widget instance palette. More...
 
void resize_by_ratio (DefaultDim hratio, DefaultDim vratio)
 Scale the current size of the Widget given the ratio. More...
 
void resize_by_ratio (DefaultDim ratio)
 Scale the current size of the Widget given the ratio. More...
 
virtual void scale (float hscale, float vscale)
 Set the scale of the widget. More...
 
void scale (float scale)
 Set the scale of the widget. More...
 
virtual EGT_NODISCARD Screenscreen () const
 Get a pointer to the Screen instance, using using a parent as necessary. More...
 
virtual void serialize_children (Serializer &serializer) const
 Serialize the widget's children to the specified serializer. More...
 
virtual void show ()
 Show the Widget. More...
 
EGT_NODISCARD const Sizesize () const
 Get the size of the widget's box(). More...
 
EGT_NODISCARD const Themetheme () const
 Get the Widget Theme. More...
 
EGT_NODISCARD Point to_parent (const Point &r) const
 Convert a point with a local origin to a parent origin. More...
 
EGT_NODISCARD Rect to_parent (const Rect &r) const
 Convert a point in a rect a local origin to a parent origin. More...
 
virtual EGT_NODISCARD std::string type () const
 Returns a string representation of the type of this widget. More...
 
EGT_NODISCARD const Rectuser_requested_box () const
 Get the box corresponding to the user requested one, not the actual one. More...
 
EGT_NODISCARD DefaultDim vertical_ratio () const
 Get the vertical ratio relative to parent. More...
 
void vertical_ratio (DefaultDim vertical)
 Set the vertical ratio relative to parent. More...
 
EGT_NODISCARD bool visible () const
 Get the visible state of the widget. More...
 
void visible (bool value)
 Set the visible state. More...
 
void visible_toggle ()
 Toggle the visibility state. More...
 
virtual void walk (const WalkCallback &callback, int level=0)
 Walk the Widget tree and call callback with each Widget. More...
 
EGT_NODISCARD WidgetId widgetid () const
 Get the unique id of the widget. More...
 
EGT_NODISCARD DefaultDim width () const
 Width of the widget's box(). More...
 
void width (DefaultDim w)
 Change the width. More...
 
EGT_NODISCARD DefaultDim x () const
 X coordinate of the widget's box(). More...
 
void x (DefaultDim x)
 Set the X coordinate of the box. More...
 
EGT_NODISCARD DefaultDim xratio () const
 Get the X position ratio relative to parent. More...
 
void xratio (DefaultDim xratio)
 Set the X position ratio relative to parent. More...
 
EGT_NODISCARD DefaultDim y () const
 Y coordinate of the widget's box(). More...
 
void y (DefaultDim y)
 Set the Y coordinate of the box. More...
 
EGT_NODISCARD DefaultDim yratio () const
 Get the Y position ratio relative to parent. More...
 
void yratio (DefaultDim yratio)
 Set the Y position ratio relative to parent. More...
 
virtual EGT_NODISCARD size_t zorder () const
 Get the zorder of the widget. More...
 
virtual void zorder (size_t rank)
 Set the zorder of the widget. More...
 
virtual void zorder_bottom ()
 Move the widget to the bottom. More...
 
virtual void zorder_down ()
 Move this widgets zorder down relative to other widgets with the same parent. More...
 
virtual void zorder_top ()
 Move the widget to the top. More...
 
virtual void zorder_up ()
 Move this widgets zorder up relative to other widgets with the same parent. More...
 
- Public Member Functions inherited from Object
 Object () noexcept=default
 
 Object (const Object &)=delete
 
 Object (Object &&)=default
 
virtual ~Object () noexcept=default
 
void clear_handlers ()
 Clear all registered event handlers. More...
 
void invoke_handlers (Event &event)
 Invoke all handlers with the specified event. More...
 
void invoke_handlers (EventId event)
 Invoke all handlers with the specified EventId. More...
 
EGT_NODISCARD const std::string & name () const
 Get the name of the Object. More...
 
void name (const std::string &name)
 Set the name of the Object. More...
 
RegisterHandle on_event (const EventCallback &handler, const FilterFlags &mask={})
 Add an event handler to be called when the widget generates an event. More...
 
Objectoperator= (const Object &)=delete
 
Objectoperator= (Object &&)=default
 
void remove_handler (RegisterHandle handle)
 Remove an event handler. More...
 

Static Public Member Functions

static AlignFlags default_text_align ()
 Change text align. More...
 
static void default_text_align (const AlignFlags &align)
 Change default text align. More...
 
- Static Public Member Functions inherited from TextWidget
static Font scale_font (const Size &target, const std::string &text, const Font &font)
 Given a Font, text, and a target Size, scale the font size so that the text will will fit and return the new Font. More...
 

Protected Types

using ValidatorCallbackArray = std::vector< ValidatorCallback >
 Type array used for validator callbacks. More...
 
- Protected Types inherited from Widget
using ChildDrawCallback = std::function< void(Painter &painter, Widget *widget)>
 Helper type that defines the special draw child callback. More...
 
using SubordinatesArray = std::list< std::shared_ptr< Widget > >
 Helper type for an array of subordinate widgets. More...
 
- Protected Types inherited from Object
using CallbackArray = std::vector< CallbackMeta >
 Helper type for an array of callbacks. More...
 

Protected Member Functions

 TextBox (Serializer::Properties &props, bool is_derived) noexcept
 
size_t beginning_of_line () const
 Get the position of the beginning of the current line. More...
 
size_t beginning_of_line (size_t cursor_pos) const
 Get the position of the beginning of the line at cursor_pos. More...
 
void change_cursor (size_t pos, bool save_column=true)
 Change the value of m_cursor_pos. More...
 
void clear_selection (TextRects &rects)
 Clear the TextRectFlag::selected flag from all TextRects in rects. More...
 
void compute_layout (TextRects &rects)
 Compute the text layout from the tokens contained in the TextRects. More...
 
void consolidate (TextRects &rects)
 Merge adjacent TextRect items, when possible. More...
 
cairo_t * context () const
 Get the cairo context to compute text extents, hence the text layout. More...
 
void continue_show_cursor ()
 If the cursor is shown, keep is shown some more. More...
 
void cursor_set (size_t pos, bool save_column)
 Set the cursor position. More...
 
void damage_component (Widget &component)
 Damage a component. More...
 
void damage_cursor ()
 Damage the cursor but only if visible. More...
 
void damage_hslider ()
 Damage the horizontal slider. More...
 
void damage_text (const Rect &rect)
 Damage the text but only if visible. More...
 
void damage_vslider ()
 Damage the vertical slider. More...
 
size_t down () const
 Get the position in the next line at the same column, if possible. More...
 
size_t down (size_t cursor_pos) const
 Get the position in the line after cursor_pos at the same column, if possible. More...
 
void draw_sliders (Painter &painter, const Rect &rect)
 Draw sliders. More...
 
void draw_text (Painter &painter, const Rect &rect)
 Draw the text based on the m_rects TextRects. More...
 
size_t end_of_line () const
 Get the position of the end of the current line. More...
 
size_t end_of_line (size_t cursor_pos) const
 Get the position of the end of the line at cursor_pos. More...
 
void get_cursor_rect ()
 Update m_cursor_rect based on the current position of the cursor. More...
 
virtual void handle_key (const Key &key)
 Process key events. More...
 
void hide_cursor ()
 Hide/disable the visibility of the cursor. More...
 
void init_sliders ()
 Init sliders. More...
 
void invalidate_text_rect ()
 Invalidate the cache used by text_rect() More...
 
void move_hslider ()
 Move the horizontal slider, if needed, to track the cursor. More...
 
void move_sliders ()
 Move sliders, if needed, to track the cursor. More...
 
void move_vslider ()
 Move the vertical slider, if needed, to track the cursor. More...
 
size_t point2pos (const Point &p) const
 Convert point coordinates to position in text for cursor or selection. More...
 
void prepare_text (TextRects &rects)
 Tokenize and compute the layout of a text; fill TextRects accordingly. More...
 
void refresh_text_area ()
 Compute the new text layout and cursor rectangle. More...
 
void resize_sliders ()
 Resize the sliders whenever the widget size changes. More...
 
void selection_damage ()
 Compute damage rectangles for selection updates. More...
 
void set_selection (TextRects &rects)
 Add the TextRectFlag::selected flag to TextRects based on the m_select_start and m_select_len values. More...
 
void show_cursor ()
 Show/enable the visibility of the cursor. More...
 
void tag_default_aligned_line (TextRects &prev, TextRects::iterator &prev_pos, TextRects &next, TextRects::iterator &next_pos)
 Damage the merged rectangle of two text lines if they are not equal. More...
 
void tag_left_aligned_line (TextRects &prev, TextRects::iterator &prev_pos, TextRects &next, TextRects::iterator &next_pos)
 Damage the merge rectangle of two text lines, excluding their common prefix. More...
 
void tag_line (TextRects &prev, TextRects::iterator &prev_pos, TextRects &next, TextRects::iterator &next_pos)
 Damage the differences between two text lines, based on the text alignment. More...
 
void tag_line_selection (const TextRects &prev, TextRects::const_iterator &prev_pos, const TextRects &next, TextRects::const_iterator &next_pos)
 Damage the differences between two selected text lines. More...
 
void tag_right_aligned_line (TextRects &prev, TextRects::iterator &prev_pos, TextRects &next, TextRects::iterator &next_pos)
 Damage the merge rectangle of two text lines, excluding their common suffix. More...
 
void tag_text (TextRects &prev, TextRects &next)
 Damage the differences between two texts. More...
 
void tag_text_selection (const TextRects &prev, const TextRects &next)
 Damage the differences between two selected texts. More...
 
EGT_NODISCARD Rect text_area () const
 Return the rectangle boundaries where the text can be drawn. More...
 
EGT_NODISCARD Rect text_boundaries () const
 Get the rectangle of the text boundaries. More...
 
EGT_NODISCARD Rect text_rect () const
 Get the rectangle of a text. More...
 
EGT_NODISCARD Size text_size () const
 
EGT_NODISCARD Size text_size (const std::string &text) const
 Get the size of a text. More...
 
void tokenize (TextRects &rects)
 Split the text into atomic tokens that fill the TextRects parameter. More...
 
size_t up () const
 Get the position in the previous line at the same column, if possible. More...
 
size_t up (size_t cursor_pos) const
 Get the position in the line befor cursor_pos at the same column, if possible. More...
 
void update_hslider ()
 Update the horizontal slider. More...
 
void update_sliders ()
 Update the horizontal and vertical sliders as needed. More...
 
void update_vslider ()
 Update the vertical slider. More...
 
bool validate_input (const std::string &str)
 Validate the input against the validator pattern. More...
 
EGT_NODISCARD size_t width_to_len (const std::string &str) const
 Given text, return the number of UTF8 characters that will fit on a single line inside of the widget. More...
 
- Protected Member Functions inherited from TextWidget
 TextWidget (Serializer::Properties &props, bool is_derived) noexcept
 
EGT_NODISCARD Size text_size (const std::string &text) const
 Get the size of the text. More...
 
- Protected Member Functions inherited from Widget
 Widget (Serializer::Properties &props, bool is_derived) noexcept
 
void add_component (Widget &widget)
 Add a component. More...
 
void add_damage (const Rect &rect)
 Add damage to the damage array. More...
 
virtual void begin_draw ()
 Cause the widget to draw itself and all of its children. More...
 
void begin_draw (Widget *parent)
 Call the begin_draw() method of the parent. More...
 
EGT_NODISCARD detail::Range< SubordinatesArray > & children ()
 Return the array of child widgets. More...
 
EGT_NODISCARD const detail::Range< SubordinatesArraychildren () const
 Return the array of child widgets. More...
 
EGT_NODISCARD bool component () const
 Get the component status. More...
 
void component (bool value)
 Set the component flag. More...
 
virtual void damage_from_subordinate (const Rect &rect)
 Special variation of damage() that is to be called explicitly by subordinate widgets. More...
 
void deserialize_leaf (Serializer::Properties &props)
 Deserialize widget properties that require to call overridden methods. More...
 
Widgetfind_screen ()
 Starting from this Widget, find the Widget that has a Screen. More...
 
EGT_NODISCARD const Widgetfind_screen () const
 Starting from this Widget, find the Widget that has a Screen. More...
 
Widget::Flagsflags ()
 Get a modifiable ref of the flags. More...
 
EGT_NODISCARD const Widget::Flagsflags () const
 Get a const ref of the flags. More...
 
virtual EGT_NODISCARD bool has_screen () const
 Does this Widget have a screen? More...
 
EGT_NODISCARD Rect local_box () const
 Get the local box which is the same size as box(), but with the origin zeroed. More...
 
EGT_NODISCARD bool parent_in_layout ()
 Indicate if our parent is computing the layout. More...
 
void parent_layout ()
 Call our parent to do a layout. More...
 
void remove_component (Widget *widget)
 Remove a component. More...
 
virtual void set_parent (Widget *parent)
 Set this widget's parent. More...
 
void special_child_draw (Painter &painter, Widget *widget)
 Special draw function that can be invoked when drawing each child. More...
 
EGT_NODISCARD ChildDrawCallback special_child_draw_callback () const
 Get the special child draw callback. More...
 
void special_child_draw_callback (ChildDrawCallback func)
 Set the special child draw callback. More...
 
EGT_NODISCARD ChildDrawCallback special_child_draw_callback (Widget *parent) const
 Get the child draw callback of the parent. More...
 
virtual Point to_panel (const Point &p)
 Convert a local point to the coordinate system of the current panel. More...
 
virtual EGT_NODISCARD Point to_subordinate (const Point &p) const
 Convert a point with an origin of the current widget to subordinate origin. More...
 
EGT_NODISCARD Rect to_subordinate (Rect rect) const
 
virtual EGT_NODISCARD bool top_level () const
 Is this widget a top level widget? More...
 
size_t zorder (const Widget *widget) const
 Get the zorder of the widget. More...
 
void zorder (const Widget *widget, size_t rank)
 Set the zorder of the widget. More...
 
void zorder_bottom (const Widget *widget)
 Move the specified widget zorder to the bottom of the current list of widgets with the same parent. More...
 
void zorder_down (const Widget *widget)
 Move the specified widget zorder down relative to other widgets with the same parent. More...
 
void zorder_top (const Widget *widget)
 Move the specified widget zorder to the top of the current list of widgets with the same parent. More...
 
void zorder_up (const Widget *widget)
 Move the specified widget zorder up relative to other widgets with the same parent. More...
 

Static Protected Member Functions

static void get_line (const TextRects &rects, TextRects::iterator &pos, std::string &line, Rect &rect)
 Get the std::string and Rect from pos to the first follwing TextRect in rects with a different height, or till the end of rects if any. More...
 
static void get_line_selection (const TextRects &rects, TextRects::const_iterator &pos, Rect &rect)
 Compute the merged Rect for the selected TextRects on the same line as pos. More...
 
static DefaultDim half_screens (DefaultDim size, DefaultDim screen_size)
 Return the lowest multiple of 'screen_size' / 2, greater than 'size'. More...
 
static std::string longest_prefix (const std::string &s1, const std::string &s2)
 Compute the longest common prefix between two strings. More...
 
static std::string longest_suffix (const std::string &s1, const std::string &s2)
 Compute the longest common suffix between two strings. More...
 

Protected Attributes

Canvas m_canvas
 The canvas that provides a cairo context to compute the text layout. More...
 
cairo_t * m_cr {nullptr}
 Cairo context. More...
 
size_t m_cursor_pos {0}
 The current position of the cursor. More...
 
Rect m_cursor_rect
 
TextRects m_rects
 
size_t m_saved_column {0}
 Save the column of the cursor when it was moved for the last time, except when the cursor is moved with the UP and DOWN keys. More...
 
size_t m_select_drag_start {0}
 Selection drag start. More...
 
size_t m_select_len {0}
 Selection length. More...
 
size_t m_select_origin {0}
 Selection origin. More...
 
size_t m_select_start {0}
 Selection start position. More...
 
Rect m_text_rect
 The cache for text_rect(). More...
 
bool m_text_rect_valid {false}
 
PeriodicTimer m_timer
 Timer for blinking the cursor. More...
 
bool m_validate_input {false}
 Validation of the input. More...
 
ValidatorCallbackArray m_validator_callbacks
 Callbacks invoked to validate the input. More...
 
- Protected Attributes inherited from TextWidget
std::string m_text
 The text. More...
 
AlignFlags m_text_align {AlignFlag::center}
 Alignment of the text. More...
 
- Protected Attributes inherited from Widget
Rect m_box
 Bounding box. More...
 
detail::Range< SubordinatesArraym_children
 Array of child widgets in the order they were added. More...
 
SubordinatesArray::iterator m_components_begin
 Iterator for the beginning of components which are positionned after children in the subordinates array. More...
 
Screen::DamageArray m_damage
 The damage array for this widget. More...
 
bool m_in_draw {false}
 Status for whether this widget is currently drawing. More...
 
bool m_in_layout {false}
 Status for whether this widget is currently performing layout. More...
 
Size m_min_size
 Minimum size of the widget when not an empty value. More...
 
Widgetm_parent {nullptr}
 Pointer to this widget's parent. More...
 
ChildDrawCallback m_special_child_draw_callback
 Used internally for calling the special child draw function. More...
 
SubordinatesArray m_subordinates
 Array of subordinates widgets split in child widgets and component widgets. More...
 
Rect m_user_requested_box
 Keep track of the box requested by the user. More...
 
WidgetId m_widgetid {0}
 Unique ID of this widget. More...
 
- Protected Attributes inherited from Object
detail::CopyOnWriteAllocate< CallbackArraym_callbacks
 Array of callbacks. More...
 
RegisterHandle m_handle_counter {0}
 Counter used to generate unique handles for each callback registration. More...
 
std::string m_name
 A user defined name for the Object. More...
 

Additional Inherited Members

- Public Attributes inherited from TextWidget
Signal on_text_changed
 Event signal. More...
 
- Public Attributes inherited from Widget
Signal on_checked_changed
 Event signal. More...
 
Signal on_gain_focus
 Invoked when the widget gains focus. More...
 
Signal on_lost_focus
 Invoked when the widget loses focus. More...
 
Signal on_show
 Invoked when a widget is shown. More...
 
Signal on_hide
 Invoked when a widget is hidden. More...
 

Detailed Description

Input text box.

Supported Features:

Example

TextBox textbox;
TextBox(const std::string &text={}, const AlignFlags &text_align=default_text_align(), const TextFlags &flags={}) noexcept
@ word_wrap
Wrap at word boundaries instead of character boundaries. Must be flag::multiline.
@ multiline
Enable multi-line text. expand_vertical align flag must be set, be careful to not set top or bottom l...

Member Typedef Documentation

◆ TextFlags

Text flags.

◆ ValidatorCallback

using ValidatorCallback = std::function<bool(const std::string&)>

Validator callback type.

See also
add_validator_function()

◆ ValidatorCallbackArray

using ValidatorCallbackArray = std::vector<ValidatorCallback>
protected

Type array used for validator callbacks.

Member Enumeration Documentation

◆ TextFlag

enum TextFlag : uint32_t
strong

Text flags.

Enumerator
fit_to_width 

When not multiline, only allow max length to be what can fit.

multiline 

Enable multi-line text. expand_vertical align flag must be set, be careful to not set top or bottom later.

word_wrap 

Wrap at word boundaries instead of character boundaries. Must be flag::multiline.

no_virt_keyboard 

Do not display a virtual keyboard when focus is gained.

horizontal_scrollable 

Horizontal scrollable.

vertical_scrollable 

Vertical scrollable.

Constructor & Destructor Documentation

◆ TextBox() [1/9]

TextBox ( const std::string &  text = {},
const AlignFlags text_align = default_text_align(),
const TextFlags flags = {} 
)
explicitnoexcept
Parameters
[in]textThe text to display.
[in]text_alignAlignment for the text.
[in]flagsTextBox flags.

◆ TextBox() [2/9]

TextBox ( const std::string &  text,
const TextFlags flags,
const AlignFlags text_align = default_text_align() 
)
explicitnoexcept
Parameters
[in]textThe text to display.
[in]text_alignAlignment for the text.
[in]flagsTextBox flags.

◆ TextBox() [3/9]

TextBox ( const std::string &  text,
const Rect rect,
const AlignFlags text_align = default_text_align(),
const TextFlags flags = {} 
)
noexcept
Parameters
[in]textThe text to display.
[in]rectRectangle for the widget.
[in]text_alignAlignment for the text.
[in]flagsTextBox flags.

◆ TextBox() [4/9]

TextBox ( Frame parent,
const std::string &  text = {},
const AlignFlags text_align = default_text_align(),
const TextFlags flags = {} 
)
explicitnoexcept
Parameters
[in]parentThe parent Frame.
[in]textThe text to display.
[in]text_alignAlignment for the text.
[in]flagsTextBox flags.

◆ TextBox() [5/9]

TextBox ( Frame parent,
const std::string &  text,
const Rect rect,
const AlignFlags text_align = default_text_align(),
const TextFlags flags = {} 
)
noexcept
Parameters
[in]parentThe parent Frame.
[in]textThe text to display.
[in]rectRectangle for the widget.
[in]text_alignAlignment for the text.
[in]flagsTextBox flags.

◆ TextBox() [6/9]

TextBox ( Serializer::Properties props)
inlineexplicitnoexcept
Parameters
[in]propslist of widget argument and its properties.

◆ TextBox() [7/9]

TextBox ( Serializer::Properties props,
bool  is_derived 
)
explicitprotectednoexcept

◆ TextBox() [8/9]

TextBox ( const TextBox )
delete

◆ TextBox() [9/9]

TextBox ( TextBox &&  )
default

◆ ~TextBox()

~TextBox ( )
overridenoexcept

Member Function Documentation

◆ add_validator_function()

void add_validator_function ( ValidatorCallback  callback)

Add a callback to be invoked to validate the input.

Anytime the text is changed, the callback will be invoked with the new text for validation.

To enable this, you must set input_validation_enabled() to true.

◆ append()

size_t append ( const std::string &  str)

Move the cursor to the end and insert.

The is the same as doing:

insert(str);
size_t insert(const std::string &str)
Insert text at the cursor.
void cursor_end()
Move the cursor to the end.
Parameters
strThe string to append.

◆ beginning_of_line() [1/2]

size_t beginning_of_line ( ) const
inlineprotected

Get the position of the beginning of the current line.

◆ beginning_of_line() [2/2]

size_t beginning_of_line ( size_t  cursor_pos) const
protected

Get the position of the beginning of the line at cursor_pos.

◆ change_cursor()

void change_cursor ( size_t  pos,
bool  save_column = true 
)
protected

Change the value of m_cursor_pos.

◆ clear()

void clear ( )
overridevirtual

Clear the text value.

Reimplemented from TextWidget.

◆ clear_selection()

void clear_selection ( TextRects rects)
protected

Clear the TextRectFlag::selected flag from all TextRects in rects.

◆ compute_layout()

void compute_layout ( TextRects rects)
protected

Compute the text layout from the tokens contained in the TextRects.

◆ consolidate()

void consolidate ( TextRects rects)
protected

Merge adjacent TextRect items, when possible.

◆ context()

cairo_t* context ( ) const
inlineprotected

Get the cairo context to compute text extents, hence the text layout.

◆ continue_show_cursor()

void continue_show_cursor ( )
protected

If the cursor is shown, keep is shown some more.

◆ cursor()

EGT_NODISCARD size_t cursor ( ) const

Get the cursor position.

◆ cursor_backward()

void cursor_backward ( size_t  count = 1)

Move the cursor backward by the specified count from the current position.

Parameters
countThe number of characters to move.

◆ cursor_begin()

void cursor_begin ( )

Move the cursor to the beginning.

◆ cursor_end()

void cursor_end ( )

Move the cursor to the end.

◆ cursor_forward()

void cursor_forward ( size_t  count = 1)

Move the cursor forward by the specified count from the current position.

Parameters
countThe number of characters to move.

◆ cursor_set() [1/2]

void cursor_set ( size_t  pos)

Set the cursor to the specific position.

Parameters
posThe new cursor position.

◆ cursor_set() [2/2]

void cursor_set ( size_t  pos,
bool  save_column 
)
protected

Set the cursor position.

◆ damage_component()

void damage_component ( Widget component)
inlineprotected

Damage a component.

◆ damage_cursor()

void damage_cursor ( )
inlineprotected

Damage the cursor but only if visible.

The cursor may cross the content area; hence intersect with the box.

◆ damage_hslider()

void damage_hslider ( )
inlineprotected

Damage the horizontal slider.

◆ damage_text()

void damage_text ( const Rect rect)
inlineprotected

Damage the text but only if visible.

◆ damage_vslider()

void damage_vslider ( )
inlineprotected

Damage the vertical slider.

◆ default_text_align() [1/2]

static AlignFlags default_text_align ( )
static

Change text align.

◆ default_text_align() [2/2]

static void default_text_align ( const AlignFlags align)
static

Change default text align.

◆ down() [1/2]

size_t down ( ) const
inlineprotected

Get the position in the next line at the same column, if possible.

◆ down() [2/2]

size_t down ( size_t  cursor_pos) const
protected

Get the position in the line after cursor_pos at the same column, if possible.

◆ draw()

void draw ( Painter painter,
const Rect rect 
)
overridevirtual

Draw the widget.

To change how a widget is drawn, this function can be overloaded and changed in a derived class, or it can be changed dynamically with the Theme.

To optimize drawing, a Widget may use the Rect parameter to limit what needs to be redrawn, which may be smaller than the widget's box(), but will never be outside the widget's box().

Painter will always be supplied in a default state to this function, so there is no need to do any cleanup or state saving inside this draw() function.

Warning
Normally this should not be called directly and instead the EventLoop will call this function with an already established Painter when the Widget needs to be drawn.
See also
Color, Palette, and Theme and Drawing
Parameters
[in]painterInstance of the Painter for the Screen.
[in]rectThe rectangle to draw.

Reimplemented from Widget.

◆ draw_sliders()

void draw_sliders ( Painter painter,
const Rect rect 
)
protected

Draw sliders.

◆ draw_text()

void draw_text ( Painter painter,
const Rect rect 
)
protected

Draw the text based on the m_rects TextRects.

◆ end_of_line() [1/2]

size_t end_of_line ( ) const
inlineprotected

Get the position of the end of the current line.

◆ end_of_line() [2/2]

size_t end_of_line ( size_t  cursor_pos) const
protected

Get the position of the end of the line at cursor_pos.

◆ get_cursor_rect()

void get_cursor_rect ( )
protected

Update m_cursor_rect based on the current position of the cursor.

◆ get_line()

static void get_line ( const TextRects rects,
TextRects::iterator &  pos,
std::string &  line,
Rect rect 
)
staticprotected

Get the std::string and Rect from pos to the first follwing TextRect in rects with a different height, or till the end of rects if any.

◆ get_line_selection()

static void get_line_selection ( const TextRects rects,
TextRects::const_iterator &  pos,
Rect rect 
)
staticprotected

Compute the merged Rect for the selected TextRects on the same line as pos.

◆ half_screens()

static DefaultDim half_screens ( DefaultDim  size,
DefaultDim  screen_size 
)
staticprotected

Return the lowest multiple of 'screen_size' / 2, greater than 'size'.

◆ handle()

void handle ( Event event)
overridevirtual

Handle an event.

This handles global events that usually do not originate at the widget. For example, a pointer event. All events are defined by egt::EventId.

The default implementation in the Widget class, will dispatch the event to any third party handlers that have been registered with on_event(). What this means is if you expect other handlers to receive the events then this must be called from derived classes. Or, manually call invoke_handlers().

Override this function in a derived class to handle events.

See also
Events
Parameters
eventThe Event that occurred.

Reimplemented from Widget.

◆ handle_key()

virtual void handle_key ( const Key key)
protectedvirtual

Process key events.

◆ hide_cursor()

void hide_cursor ( )
protected

Hide/disable the visibility of the cursor.

◆ init_sliders()

void init_sliders ( )
protected

Init sliders.

◆ input_validation_enabled()

void input_validation_enabled ( bool  enabled)

Enable or disable input validation.

Invoke the validator callbacks. If one of them returns false, the input is rejected.

◆ insert()

size_t insert ( const std::string &  str)

Insert text at the cursor.

Parameters
strThe string to insert.
Returns
The number of characters inserted.

◆ invalidate_text_rect()

void invalidate_text_rect ( )
protected

Invalidate the cache used by text_rect()

◆ longest_prefix()

static std::string longest_prefix ( const std::string &  s1,
const std::string &  s2 
)
staticprotected

Compute the longest common prefix between two strings.

◆ longest_suffix()

static std::string longest_suffix ( const std::string &  s1,
const std::string &  s2 
)
staticprotected

Compute the longest common suffix between two strings.

◆ max_length() [1/2]

EGT_NODISCARD size_t max_length ( ) const
inline

Get the max length of allowed text.

◆ max_length() [2/2]

void max_length ( size_t  len)

Set the maximum allowed length of the text.

Parameters
lenThe maximum length of the text.

◆ min_size_hint()

EGT_NODISCARD Size min_size_hint ( ) const
overridevirtual

Get a minimum size hint for the Widget.

This is used by sizers to pick minimum and default dimensions when no other force is used.

Reimplemented from Widget.

◆ move_hslider()

void move_hslider ( )
protected

Move the horizontal slider, if needed, to track the cursor.

◆ move_sliders()

void move_sliders ( )
protected

Move sliders, if needed, to track the cursor.

◆ move_vslider()

void move_vslider ( )
protected

Move the vertical slider, if needed, to track the cursor.

◆ operator=() [1/2]

TextBox& operator= ( const TextBox )
delete

◆ operator=() [2/2]

TextBox& operator= ( TextBox &&  )
default

◆ point2pos()

size_t point2pos ( const Point p) const
protected

Convert point coordinates to position in text for cursor or selection.

◆ prepare_text()

void prepare_text ( TextRects rects)
protected

Tokenize and compute the layout of a text; fill TextRects accordingly.

◆ refresh_text_area()

void refresh_text_area ( )
protected

Compute the new text layout and cursor rectangle.

◆ resize()

void resize ( const Size size)
overridevirtual

Resize the widget.

Changes the width and height of the Widget.

Parameters
[in]sizeThe new size of the Widget.
Note
This will cause a redraw of the Widget.

Reimplemented from Widget.

◆ resize_sliders()

void resize_sliders ( )
protected

Resize the sliders whenever the widget size changes.

◆ selected_text()

EGT_NODISCARD std::string selected_text ( ) const

Get, or copy, the selected text.

Returns
The selected text, or an empty string if there is no selection.

◆ selection()

void selection ( size_t  pos,
size_t  length 
)

Set the selection of text.

Parameters
posThe starting position.
lengthThe length of the selection.

◆ selection_all()

void selection_all ( )

Select all of the text.

◆ selection_backward()

void selection_backward ( size_t  count = 1)

Extend the selection to the left if the cursor is at its end, otherwise reduce the selection from the right.

In both cases, the selection length is updated by the specified count.

Parameters
countThe number of characters to move.

◆ selection_clear()

void selection_clear ( )

Clear any selection.

Note
This does not delete text, it just clears the selection. To delete the selected text call delete_selection().

◆ selection_cursor()

EGT_NODISCARD size_t selection_cursor ( )

Get the position of the moving end of the selection, as opposed to its origin (the fixed end of the selection).

Set the selection origin, if needed.

◆ selection_damage()

void selection_damage ( )
protected

Compute damage rectangles for selection updates.

◆ selection_delete()

void selection_delete ( )

Delete the selected text.

◆ selection_forward()

void selection_forward ( size_t  count = 1)

Extend the selection to the right if the cursor is at its beginning, otherwise reduce the selection from the left.

In both cases, the selection length is updated by the specified count.

Parameters
countThe number of characters to move.

◆ selection_length()

EGT_NODISCARD size_t selection_length ( ) const
inline

Get the length of the selection.

◆ selection_move()

void selection_move ( size_t  count,
bool  save_column = true 
)

Move the selection cursor to count character(s):

  • to the left, if count is negative
  • to the right, if count is positive Do nothing if count is zero.

Also, set the selection origin (its fixed end), if needed. In all cases, the cursor is positioned to the new selection cursor.

◆ selection_start()

EGT_NODISCARD size_t selection_start ( ) const
inline

Get the start position of the selection.

◆ serialize()

void serialize ( Serializer serializer) const
overridevirtual

Serialize the widget to the specified serializer.

Reimplemented from Widget.

◆ set_selection()

void set_selection ( TextRects rects)
protected

Add the TextRectFlag::selected flag to TextRects based on the m_select_start and m_select_len values.

Split TextRects if needed.

◆ show_cursor()

void show_cursor ( )
protected

Show/enable the visibility of the cursor.

◆ tag_default_aligned_line()

void tag_default_aligned_line ( TextRects prev,
TextRects::iterator &  prev_pos,
TextRects next,
TextRects::iterator &  next_pos 
)
protected

Damage the merged rectangle of two text lines if they are not equal.

◆ tag_left_aligned_line()

void tag_left_aligned_line ( TextRects prev,
TextRects::iterator &  prev_pos,
TextRects next,
TextRects::iterator &  next_pos 
)
protected

Damage the merge rectangle of two text lines, excluding their common prefix.

◆ tag_line()

void tag_line ( TextRects prev,
TextRects::iterator &  prev_pos,
TextRects next,
TextRects::iterator &  next_pos 
)
protected

Damage the differences between two text lines, based on the text alignment.

◆ tag_line_selection()

void tag_line_selection ( const TextRects prev,
TextRects::const_iterator &  prev_pos,
const TextRects next,
TextRects::const_iterator &  next_pos 
)
protected

Damage the differences between two selected text lines.

◆ tag_right_aligned_line()

void tag_right_aligned_line ( TextRects prev,
TextRects::iterator &  prev_pos,
TextRects next,
TextRects::iterator &  next_pos 
)
protected

Damage the merge rectangle of two text lines, excluding their common suffix.

◆ tag_text()

void tag_text ( TextRects prev,
TextRects next 
)
protected

Damage the differences between two texts.

◆ tag_text_selection()

void tag_text_selection ( const TextRects prev,
const TextRects next 
)
protected

Damage the differences between two selected texts.

◆ text() [1/3]

virtual EGT_NODISCARD const std::string& text ( void  )
inline

Get the text of the Label.

◆ text() [2/3]

virtual void text ( void  )

Set the text.

Parameters
strThe text string to set.

◆ text() [3/3]

void text ( const std::string &  str)
overridevirtual

Set the text.

Parameters
strThe text string to set.

Reimplemented from TextWidget.

◆ text_area()

EGT_NODISCARD Rect text_area ( ) const
protected

Return the rectangle boundaries where the text can be drawn.

◆ text_boundaries()

EGT_NODISCARD Rect text_boundaries ( ) const
protected

Get the rectangle of the text boundaries.

◆ text_flags() [1/2]

EGT_NODISCARD const TextFlags& text_flags ( ) const
inline

Get a const ref of the flags.

◆ text_flags() [2/2]

void text_flags ( const TextFlags text_flags)
inline

Set the text flags.

Parameters
[in]text_flagsText flags.

◆ text_offset() [1/2]

EGT_NODISCARD Point text_offset ( ) const

Get the position offset of the drawn text as compared to the whole text.

◆ text_offset() [2/2]

void text_offset ( const Point p)

Set the position offset of the drawn text as compared to the whole text.

◆ text_rect()

EGT_NODISCARD Rect text_rect ( ) const
protected

Get the rectangle of a text.

◆ text_size() [1/2]

EGT_NODISCARD Size text_size ( ) const
protected

◆ text_size() [2/2]

EGT_NODISCARD Size text_size
protected

Get the size of a text.

◆ tokenize()

void tokenize ( TextRects rects)
protected

Split the text into atomic tokens that fill the TextRects parameter.

◆ up() [1/2]

size_t up ( ) const
inlineprotected

Get the position in the previous line at the same column, if possible.

◆ up() [2/2]

size_t up ( size_t  cursor_pos) const
protected

Get the position in the line befor cursor_pos at the same column, if possible.

◆ update_hslider()

void update_hslider ( )
protected

Update the horizontal slider.

◆ update_sliders()

void update_sliders ( )
protected

Update the horizontal and vertical sliders as needed.

◆ update_vslider()

void update_vslider ( )
protected

Update the vertical slider.

◆ validate_input()

bool validate_input ( const std::string &  str)
protected

Validate the input against the validator pattern.

◆ width_to_len()

EGT_NODISCARD size_t width_to_len ( const std::string &  str) const
protected

Given text, return the number of UTF8 characters that will fit on a single line inside of the widget.

Member Data Documentation

◆ m_canvas

Canvas m_canvas
protected

The canvas that provides a cairo context to compute the text layout.

◆ m_cr

cairo_t* m_cr {nullptr}
protected

Cairo context.

◆ m_cursor_pos

size_t m_cursor_pos {0}
protected

The current position of the cursor.

This is a UTF-8 offset.

◆ m_cursor_rect

Rect m_cursor_rect
protected

◆ m_rects

TextRects m_rects
protected

◆ m_saved_column

size_t m_saved_column {0}
protected

Save the column of the cursor when it was moved for the last time, except when the cursor is moved with the UP and DOWN keys.

◆ m_select_drag_start

size_t m_select_drag_start {0}
protected

Selection drag start.

◆ m_select_len

size_t m_select_len {0}
protected

Selection length.

◆ m_select_origin

size_t m_select_origin {0}
protected

Selection origin.

◆ m_select_start

size_t m_select_start {0}
protected

Selection start position.

This is a UTF-8 offset.

◆ m_text_rect

Rect m_text_rect
mutableprotected

The cache for text_rect().

◆ m_text_rect_valid

bool m_text_rect_valid {false}
mutableprotected

◆ m_timer

PeriodicTimer m_timer
protected

Timer for blinking the cursor.

◆ m_validate_input

bool m_validate_input {false}
protected

Validation of the input.

◆ m_validator_callbacks

ValidatorCallbackArray m_validator_callbacks
protected

Callbacks invoked to validate the input.