103 typename Alignment = hi::alignment,
104 typename VerticalAlignment = hi::vertical_alignment,
105 typename TextStyle = hi::theme_text_style>
110 Alignment&&
alignment = hi::alignment::middle_center(),
111 TextStyle&&
text_style = theme_text_style::label) noexcept :
114 this->text = std::forward<Text>(text);
115 this->alignment = std::forward<Alignment>(
alignment);
116 this->text_style = std::forward<TextStyle>(
text_style);
121 void set_layout(
widget_layout const& layout) noexcept override;
122 void draw(
draw_context const& context) noexcept override;
123 bool handle_event(hi::command command) noexcept override;
125 bool handle_event(
mouse_event const& event) noexcept override;
126 hitbox hitbox_test(
point3 position) const noexcept override;
127 [[nodiscard]]
bool accepts_keyboard_focus(keyboard_focus_group group) const noexcept override;
130 enum class add_type { append, insert, dead };
134 text_selection selection;
137 text_shaper _shaped_text;
138 float _shaped_text_cap_height;
140 decltype(text)::token_type _text_cbt;
142 text_selection _selection;
144 scoped_task<> _blink_cursor;
146 bool _cursor_visible =
false;
148 utc_nanoseconds _cursor_blink_time_point = {};
156 mouse_event _last_drag_mouse_event = {};
160 utc_nanoseconds _last_drag_mouse_event_next_repeat = {};
166 bool _overwrite_mode =
false;
173 grapheme _has_dead_character = {};
175 undo_stack<undo_type> _undo_stack = {1000};
177 text_widget(gui_window& window, widget *parent)
noexcept;
181 void scroll_to_show_selection() noexcept;
192 void reset_state(
char const *states) noexcept;
194 [[nodiscard]] gstring_view selected_text() const noexcept;
195 void undo_push() noexcept;
196 void undo() noexcept;
197 void redo() noexcept;
205 void fix_cursor_position(
size_t size) noexcept;
211 void fix_cursor_position() noexcept
213 fix_cursor_position(_shaped_text.size());
216 void replace_selection(gstring replacement)
noexcept;
223 void add_character(grapheme c, add_type mode)
noexcept;
224 void delete_dead_character() noexcept;
225 void delete_character_next() noexcept;
226 void delete_character_prev() noexcept;
227 void delete_word_next() noexcept;
228 void delete_word_prev() noexcept;
text_widget(gui_window &window, widget *parent, Text &&text, Alignment &&alignment=hi::alignment::middle_center(), TextStyle &&text_style=theme_text_style::label) noexcept
Construct a text widget.
Definition text_widget.hpp:106