|
@@ -389,18 +389,12 @@ private:
|
|
|
/* Caret. */
|
|
|
struct Selection {
|
|
|
bool active = false;
|
|
|
- bool shiftclick_left = false;
|
|
|
|
|
|
- int selecting_line = 0;
|
|
|
- int selecting_column = 0;
|
|
|
- int selected_word_beg = 0;
|
|
|
- int selected_word_end = 0;
|
|
|
- int selected_word_origin = 0;
|
|
|
-
|
|
|
- int from_line = 0;
|
|
|
- int from_column = 0;
|
|
|
- int to_line = 0;
|
|
|
- int to_column = 0;
|
|
|
+ int origin_line = 0;
|
|
|
+ int origin_column = 0;
|
|
|
+ int origin_last_fit_x = 0;
|
|
|
+ int word_begin_column = 0;
|
|
|
+ int word_end_column = 0;
|
|
|
};
|
|
|
|
|
|
struct Caret {
|
|
@@ -438,12 +432,16 @@ private:
|
|
|
bool drag_action = false;
|
|
|
bool drag_caret_force_displayed = false;
|
|
|
|
|
|
+ void _caret_changed(int p_caret = -1);
|
|
|
void _emit_caret_changed();
|
|
|
|
|
|
void _reset_caret_blink_timer();
|
|
|
void _toggle_draw_caret();
|
|
|
|
|
|
int _get_column_x_offset_for_line(int p_char, int p_line, int p_column) const;
|
|
|
+ bool _is_line_col_in_range(int p_line, int p_column, int p_from_line, int p_from_column, int p_to_line, int p_to_column, bool p_include_edges = true) const;
|
|
|
+
|
|
|
+ void _cancel_drag_and_drop_text();
|
|
|
|
|
|
/* Selection. */
|
|
|
SelectionMode selecting_mode = SelectionMode::SELECTION_MODE_NONE;
|
|
@@ -456,18 +454,23 @@ private:
|
|
|
|
|
|
bool selection_drag_attempt = false;
|
|
|
bool dragging_selection = false;
|
|
|
+ int drag_and_drop_origin_caret_index = -1;
|
|
|
+ int drag_caret_index = -1;
|
|
|
|
|
|
Timer *click_select_held = nullptr;
|
|
|
uint64_t last_dblclk = 0;
|
|
|
Vector2 last_dblclk_pos;
|
|
|
+
|
|
|
+ void _selection_changed(int p_caret = -1);
|
|
|
void _click_selection_held();
|
|
|
|
|
|
- void _update_selection_mode_pointer();
|
|
|
- void _update_selection_mode_word();
|
|
|
- void _update_selection_mode_line();
|
|
|
+ void _update_selection_mode_pointer(bool p_initial = false);
|
|
|
+ void _update_selection_mode_word(bool p_initial = false);
|
|
|
+ void _update_selection_mode_line(bool p_initial = false);
|
|
|
|
|
|
void _pre_shift_selection(int p_caret);
|
|
|
- void _post_shift_selection(int p_caret);
|
|
|
+
|
|
|
+ bool _selection_contains(int p_caret, int p_line, int p_column, bool p_include_edges = true, bool p_only_selections = true) const;
|
|
|
|
|
|
/* Line wrapping. */
|
|
|
LineWrappingMode line_wrapping_mode = LineWrappingMode::LINE_WRAPPING_NONE;
|
|
@@ -599,7 +602,8 @@ private:
|
|
|
|
|
|
/*** Super internal Core API. Everything builds on it. ***/
|
|
|
bool text_changed_dirty = false;
|
|
|
- void _text_changed_emit();
|
|
|
+ void _text_changed();
|
|
|
+ void _emit_text_changed();
|
|
|
|
|
|
void _insert_text(int p_line, int p_char, const String &p_text, int *r_end_line = nullptr, int *r_end_char = nullptr);
|
|
|
void _remove_text(int p_from_line, int p_from_column, int p_to_line, int p_to_column);
|
|
@@ -659,6 +663,7 @@ protected:
|
|
|
bool _is_line_hidden(int p_line) const;
|
|
|
|
|
|
void _unhide_all_lines();
|
|
|
+ virtual void _unhide_carets();
|
|
|
|
|
|
// Symbol lookup.
|
|
|
String lookup_symbol_word;
|
|
@@ -851,7 +856,7 @@ public:
|
|
|
void set_multiple_carets_enabled(bool p_enabled);
|
|
|
bool is_multiple_carets_enabled() const;
|
|
|
|
|
|
- int add_caret(int p_line, int p_col);
|
|
|
+ int add_caret(int p_line, int p_column);
|
|
|
void remove_caret(int p_caret);
|
|
|
void remove_secondary_carets();
|
|
|
void merge_overlapping_carets();
|
|
@@ -884,27 +889,34 @@ public:
|
|
|
void set_drag_and_drop_selection_enabled(const bool p_enabled);
|
|
|
bool is_drag_and_drop_selection_enabled() const;
|
|
|
|
|
|
- void set_selection_mode(SelectionMode p_mode, int p_line = -1, int p_column = -1, int p_caret = 0);
|
|
|
+ void set_selection_mode(SelectionMode p_mode);
|
|
|
SelectionMode get_selection_mode() const;
|
|
|
|
|
|
void select_all();
|
|
|
void select_word_under_caret(int p_caret = -1);
|
|
|
void add_selection_for_next_occurrence();
|
|
|
void skip_selection_for_next_occurrence();
|
|
|
- void select(int p_from_line, int p_from_column, int p_to_line, int p_to_column, int p_caret = 0);
|
|
|
+ void select(int p_origin_line, int p_origin_column, int p_caret_line, int p_caret_column, int p_caret = 0);
|
|
|
|
|
|
bool has_selection(int p_caret = -1) const;
|
|
|
|
|
|
String get_selected_text(int p_caret = -1);
|
|
|
+ int get_selection_at_line_column(int p_line, int p_column, bool p_include_edges = true) const;
|
|
|
+ Vector<Point2i> get_line_ranges_from_carets(bool p_only_selections = false, bool p_merge_adjacent = true) const;
|
|
|
+ TypedArray<Vector2i> get_line_ranges_from_carets_typed_array(bool p_only_selections = false, bool p_merge_adjacent = true) const;
|
|
|
|
|
|
- int get_selection_line(int p_caret = 0) const;
|
|
|
- int get_selection_column(int p_caret = 0) const;
|
|
|
+ void set_selection_origin_line(int p_line, bool p_can_be_hidden = true, int p_wrap_index = -1, int p_caret = 0);
|
|
|
+ void set_selection_origin_column(int p_column, int p_caret = 0);
|
|
|
+ int get_selection_origin_line(int p_caret = 0) const;
|
|
|
+ int get_selection_origin_column(int p_caret = 0) const;
|
|
|
|
|
|
int get_selection_from_line(int p_caret = 0) const;
|
|
|
int get_selection_from_column(int p_caret = 0) const;
|
|
|
int get_selection_to_line(int p_caret = 0) const;
|
|
|
int get_selection_to_column(int p_caret = 0) const;
|
|
|
|
|
|
+ bool is_caret_after_selection_origin(int p_caret = 0) const;
|
|
|
+
|
|
|
void deselect(int p_caret = -1);
|
|
|
void delete_selection(int p_caret = -1);
|
|
|
|