67 template<
typename Value>
69 requires(not std::is_convertible_v<Value, weak_or_unique_ptr<delegate_type>>) :
75 void init() noexcept override;
76 void deinit() noexcept override;
77 [[nodiscard]]
bool constrain(
hires_utc_clock::time_point display_time_point,
bool need_reconstrain) noexcept override;
78 void layout(
hires_utc_clock::time_point display_time_point,
bool need_layout) noexcept override;
80 bool handle_event(command command) noexcept override;
81 bool handle_event(
mouse_event const &event) noexcept override;
83 hitbox hitbox_test(
point2 position) const noexcept override;
84 [[nodiscard]]
bool accepts_keyboard_focus(keyboard_focus_group group) const noexcept override;
85 [[nodiscard]]
color focus_color() const noexcept override;
89 typename delegate_type::callback_ptr_type _delegate_callback;
91 bool _continues = false;
97 float _text_width = 0.0f;
100 aarectangle _text_field_rectangle;
101 aarectangle _text_field_clipping_rectangle;
103 editable_text _field;
104 shaped_text _shaped_text;
105 aarectangle _left_to_right_caret = {};
110 float _drag_scroll_speed_x = 0.0f;
114 int _drag_click_count = 0;
116 point2 _drag_select_position = {};
120 float _text_scroll_x = 0.0f;
122 translate2 _text_translate;
123 translate2 _text_inv_translate;
125 static constexpr hires_utc_clock::duration _blink_interval = 500ms;
126 hires_utc_clock::time_point _next_redraw_time_point;
127 hires_utc_clock::time_point _last_update_time_point;
129 text_field_widget(gui_window &
window,
widget *
parent, weak_or_unique_ptr<delegate_type> delegate)
noexcept;
130 void revert(
bool force)
noexcept;
131 void commit(
bool force)
noexcept;
132 void drag_select() noexcept;
133 void scroll_text() noexcept;
134 void draw_background_box(draw_context context) const noexcept;
135 void draw_selection_rectangles(draw_context context) const noexcept;
136 void draw_partial_grapheme_caret(draw_context context) const noexcept;
137 void draw_caret(draw_context context, hires_utc_clock::time_point display_time_point) noexcept;
138 void draw_text(draw_context context) const noexcept;