79 typename Alignment = hi::alignment,
80 typename VerticalAlignment = hi::vertical_alignment,
81 typename TextStyle = hi::semantic_text_style>
86 Alignment&&
alignment = hi::alignment::middle_center(),
87 TextStyle&&
text_style = semantic_text_style::label) noexcept :
90 this->text = std::forward<Text>(text);
91 this->alignment = std::forward<Alignment>(
alignment);
92 this->text_style = std::forward<TextStyle>(
text_style);
97 void set_layout(
widget_layout const& layout) noexcept override;
98 void draw(
draw_context const& context) noexcept override;
99 bool handle_event(
gui_event const& event) noexcept override;
100 hitbox hitbox_test(
point3 position) const noexcept override;
101 [[nodiscard]]
bool accepts_keyboard_focus(keyboard_focus_group group) const noexcept override;
104 enum class add_type { append, insert, dead };
108 text_selection selection;
111 enum class cursor_state_type {
off, on, busy, none };
113 text_shaper _shaped_text;
116 decltype(text)::token_type _text_cbt;
117 decltype(text_style)::token_type _text_style_cbt;
119 text_selection _selection;
121 scoped_task<> _blink_cursor;
123 observable<cursor_state_type> _cursor_state = cursor_state_type::none;
124 decltype(_cursor_state)::token_type _cursor_state_cbt;
128 bool _request_scroll =
false;
136 gui_event _last_drag_mouse_event = {};
140 utc_nanoseconds _last_drag_mouse_event_next_repeat = {};
146 bool _overwrite_mode =
false;
153 grapheme _has_dead_character = {};
155 undo_stack<undo_type> _undo_stack = {1000};
157 text_widget(gui_window& window, widget *parent)
noexcept;
163 void update_shaped_text() noexcept;
167 void scroll_to_show_selection() noexcept;
169 void request_scroll() noexcept;
180 void reset_state(
char const *states) noexcept;
182 [[nodiscard]] gstring_view selected_text() const noexcept;
183 void undo_push() noexcept;
184 void undo() noexcept;
185 void redo() noexcept;
187 scoped_task<> blink_cursor() noexcept;
191 void fix_cursor_position() noexcept;
193 void replace_selection(gstring const &replacement) noexcept;
200 void add_character(grapheme c, add_type mode) noexcept;
201 void delete_dead_character() noexcept;
202 void delete_character_next() noexcept;
203 void delete_character_prev() noexcept;
204 void delete_word_next() noexcept;
205 void delete_word_prev() noexcept;
text_widget(gui_window &window, widget *parent, Text &&text, Alignment &&alignment=hi::alignment::middle_center(), TextStyle &&text_style=semantic_text_style::label) noexcept
Construct a text widget.
Definition text_widget.hpp:82