Convert TextEdit callbacks to Callable

This commit is contained in:
Paulb23 2021-11-07 17:26:15 +00:00
parent bbee193957
commit 1a4609fabe
12 changed files with 44 additions and 47 deletions

View file

@ -695,8 +695,7 @@
<method name="set_gutter_custom_draw">
<return type="void" />
<argument index="0" name="column" type="int" />
<argument index="1" name="object" type="Object" />
<argument index="2" name="callback" type="StringName" />
<argument index="1" name="draw_callback" type="Callable" />
<description>
Set a custom draw method for the gutter. The callback method must take the following args: [code]line: int, gutter: int, Area: Rect2[/code].
</description>
@ -873,9 +872,8 @@
</method>
<method name="set_tooltip_request_func">
<return type="void" />
<argument index="0" name="object" type="Object" />
<argument index="1" name="callback" type="StringName" />
<argument index="2" name="data" type="Variant" />
<argument index="0" name="callback" type="Callable" />
<argument index="1" name="data" type="Variant" />
<description>
Provide custom tooltip text. The callback method must take the following args: [code]hovered_word: String, data: Variant[/code]
</description>

View file

@ -2327,7 +2327,7 @@ bool ScriptEditor::edit(const RES &p_resource, int p_line, int p_col, bool p_gra
// If we delete a script within the filesystem, the original resource path
// is lost, so keep it as metadata to figure out the exact tab to delete.
se->set_meta("_edit_res_path", p_resource->get_path());
se->set_tooltip_request_func("_get_debug_tooltip", this);
se->set_tooltip_request_func(callable_mp(this, &ScriptEditor::_get_debug_tooltip));
if (se->get_edit_menu()) {
se->get_edit_menu()->hide();
menu_hb->add_child(se->get_edit_menu());

View file

@ -165,7 +165,7 @@ public:
virtual bool show_members_overview() = 0;
virtual void set_tooltip_request_func(String p_method, Object *p_obj) = 0;
virtual void set_tooltip_request_func(const Callable &p_toolip_callback) = 0;
virtual Control *get_edit_menu() = 0;
virtual void clear_edit_menu() = 0;
virtual void set_find_replace_bar(FindReplaceBar *p_bar) = 0;

View file

@ -1379,8 +1379,8 @@ void ScriptTextEditor::clear_breakpoints() {
code_editor->get_text_editor()->clear_breakpointed_lines();
}
void ScriptTextEditor::set_tooltip_request_func(String p_method, Object *p_obj) {
code_editor->get_text_editor()->set_tooltip_request_func(p_obj, p_method, this);
void ScriptTextEditor::set_tooltip_request_func(const Callable &p_toolip_callback) {
code_editor->get_text_editor()->set_tooltip_request_func(p_toolip_callback, this);
}
void ScriptTextEditor::set_debugger_active(bool p_active) {

View file

@ -233,7 +233,7 @@ public:
virtual bool show_members_overview() override;
virtual void set_tooltip_request_func(String p_method, Object *p_obj) override;
virtual void set_tooltip_request_func(const Callable &p_toolip_callback) override;
virtual void set_debugger_active(bool p_active) override;

View file

@ -269,8 +269,8 @@ void TextEditor::update_settings() {
code_editor->update_editor_settings();
}
void TextEditor::set_tooltip_request_func(String p_method, Object *p_obj) {
code_editor->get_text_editor()->set_tooltip_request_func(p_obj, p_method, this);
void TextEditor::set_tooltip_request_func(const Callable &p_toolip_callback) {
code_editor->get_text_editor()->set_tooltip_request_func(p_toolip_callback, this);
}
Control *TextEditor::get_edit_menu() {

View file

@ -135,7 +135,7 @@ public:
virtual bool show_members_overview() override;
virtual bool can_lose_focus_on_node_selection() override { return true; }
virtual void set_debugger_active(bool p_active) override;
virtual void set_tooltip_request_func(String p_method, Object *p_obj) override;
virtual void set_tooltip_request_func(const Callable &p_toolip_callback) override;
virtual void add_callback(const String &p_function, PackedStringArray p_args) override;
void update_toggle_scripts_button() override;

View file

@ -2660,7 +2660,7 @@ Control *VisualScriptEditor::get_base_editor() const {
return graph;
}
void VisualScriptEditor::set_tooltip_request_func(String p_method, Object *p_obj) {
void VisualScriptEditor::set_tooltip_request_func(const Callable &p_toolip_callback) {
}
Control *VisualScriptEditor::get_edit_menu() {

View file

@ -321,7 +321,7 @@ public:
virtual void update_settings() override;
virtual bool show_members_overview() override;
virtual void set_debugger_active(bool p_active) override;
virtual void set_tooltip_request_func(String p_method, Object *p_obj) override;
virtual void set_tooltip_request_func(const Callable &p_toolip_callback) override;
virtual Control *get_edit_menu() override;
virtual void clear_edit_menu() override;
virtual void set_find_replace_bar(FindReplaceBar *p_bar) override { p_bar->hide(); }; // Not needed here.

View file

@ -3018,7 +3018,7 @@ CodeEdit::CodeEdit() {
set_gutter_draw(gutter_idx, false);
set_gutter_overwritable(gutter_idx, true);
set_gutter_type(gutter_idx, GUTTER_TYPE_CUSTOM);
set_gutter_custom_draw(gutter_idx, this, "_main_gutter_draw_callback");
set_gutter_custom_draw(gutter_idx, callable_mp(this, &CodeEdit::_main_gutter_draw_callback));
gutter_idx++;
/* Line numbers */
@ -3026,7 +3026,7 @@ CodeEdit::CodeEdit() {
set_gutter_name(gutter_idx, "line_numbers");
set_gutter_draw(gutter_idx, false);
set_gutter_type(gutter_idx, GUTTER_TYPE_CUSTOM);
set_gutter_custom_draw(gutter_idx, this, "_line_number_draw_callback");
set_gutter_custom_draw(gutter_idx, callable_mp(this, &CodeEdit::_line_number_draw_callback));
gutter_idx++;
/* Fold Gutter */
@ -3034,7 +3034,7 @@ CodeEdit::CodeEdit() {
set_gutter_name(gutter_idx, "fold_gutter");
set_gutter_draw(gutter_idx, false);
set_gutter_type(gutter_idx, GUTTER_TYPE_CUSTOM);
set_gutter_custom_draw(gutter_idx, this, "_fold_gutter_draw_callback");
set_gutter_custom_draw(gutter_idx, callable_mp(this, &CodeEdit::_fold_gutter_draw_callback));
gutter_idx++;
connect("lines_edited_from", callable_mp(this, &CodeEdit::_lines_edited_from));

View file

@ -953,15 +953,17 @@ void TextEdit::_notification(int p_what) {
icon->draw_rect(ci, gutter_rect, false, get_line_gutter_item_color(line, g));
} break;
case GUTTER_TYPE_CUSTOM: {
if (gutter.custom_draw_obj.is_valid()) {
Object *cdo = ObjectDB::get_instance(gutter.custom_draw_obj);
if (cdo) {
Rect2i gutter_rect = Rect2i(Point2i(gutter_offset, ofs_y), Size2i(gutter.width, row_height));
if (rtl) {
gutter_rect.position.x = size.width - gutter_rect.position.x - gutter_rect.size.x;
}
cdo->call(gutter.custom_draw_callback, line, g, Rect2(gutter_rect));
if (gutter.custom_draw_callback.is_valid()) {
Rect2i gutter_rect = Rect2i(Point2i(gutter_offset, ofs_y), Size2i(gutter.width, row_height));
if (rtl) {
gutter_rect.position.x = size.width - gutter_rect.position.x - gutter_rect.size.x;
}
Variant args[3] = { line, g, Rect2(gutter_rect) };
const Variant *argp[] = { &args[0], &args[1], &args[2] };
Callable::CallError ce;
Variant ret;
gutter.custom_draw_callback.call(argp, 3, ret, ce);
}
} break;
}
@ -2410,8 +2412,7 @@ Control::CursorShape TextEdit::get_cursor_shape(const Point2 &p_pos) const {
}
String TextEdit::get_tooltip(const Point2 &p_pos) const {
Object *tooltip_obj = ObjectDB::get_instance(tooltip_obj_id);
if (!tooltip_obj) {
if (!tooltip_callback.is_valid()) {
return Control::get_tooltip(p_pos);
}
Point2i pos = get_line_column_at_pos(p_pos);
@ -2424,18 +2425,20 @@ String TextEdit::get_tooltip(const Point2 &p_pos) const {
}
int beg, end;
if (select_word(s, col, beg, end)) {
String tt = tooltip_obj->call(tooltip_func, s.substr(beg, end - beg), tooltip_ud);
return tt;
Variant args[2] = { s.substr(beg, end - beg), tooltip_ud };
const Variant *argp[] = { &args[0], &args[1] };
Callable::CallError ce;
Variant ret;
tooltip_callback.call(argp, 2, ret, ce);
ERR_FAIL_COND_V_MSG(ce.error != Callable::CallError::CALL_OK, "", "Failed to call custom tooltip.");
return ret;
}
return Control::get_tooltip(p_pos);
}
void TextEdit::set_tooltip_request_func(Object *p_obj, const StringName &p_function, const Variant &p_udata) {
ERR_FAIL_NULL(p_obj);
tooltip_obj_id = p_obj->get_instance_id();
tooltip_func = p_function;
void TextEdit::set_tooltip_request_func(const Callable &p_tooltip_callback, const Variant &p_udata) {
tooltip_callback = p_tooltip_callback;
tooltip_ud = p_udata;
}
@ -4379,12 +4382,10 @@ void TextEdit::merge_gutters(int p_from_line, int p_to_line) {
update();
}
void TextEdit::set_gutter_custom_draw(int p_gutter, Object *p_object, const StringName &p_callback) {
void TextEdit::set_gutter_custom_draw(int p_gutter, const Callable &p_draw_callback) {
ERR_FAIL_INDEX(p_gutter, gutters.size());
ERR_FAIL_NULL(p_object);
gutters.write[p_gutter].custom_draw_obj = p_object->get_instance_id();
gutters.write[p_gutter].custom_draw_callback = p_callback;
gutters.write[p_gutter].custom_draw_callback = p_draw_callback;
update();
}
@ -4674,7 +4675,7 @@ void TextEdit::_bind_methods() {
ClassDB::bind_method(D_METHOD("search", "text", "flags", "from_line", "from_colum"), &TextEdit::search);
/* Tooltip */
ClassDB::bind_method(D_METHOD("set_tooltip_request_func", "object", "callback", "data"), &TextEdit::set_tooltip_request_func);
ClassDB::bind_method(D_METHOD("set_tooltip_request_func", "callback", "data"), &TextEdit::set_tooltip_request_func);
/* Mouse */
ClassDB::bind_method(D_METHOD("get_local_mouse_pos"), &TextEdit::get_local_mouse_pos);
@ -4841,7 +4842,7 @@ void TextEdit::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_gutter_overwritable", "gutter", "overwritable"), &TextEdit::set_gutter_overwritable);
ClassDB::bind_method(D_METHOD("is_gutter_overwritable", "gutter"), &TextEdit::is_gutter_overwritable);
ClassDB::bind_method(D_METHOD("merge_gutters", "from_line", "to_line"), &TextEdit::merge_gutters);
ClassDB::bind_method(D_METHOD("set_gutter_custom_draw", "column", "object", "callback"), &TextEdit::set_gutter_custom_draw);
ClassDB::bind_method(D_METHOD("set_gutter_custom_draw", "column", "draw_callback"), &TextEdit::set_gutter_custom_draw);
ClassDB::bind_method(D_METHOD("get_total_gutter_width"), &TextEdit::get_total_gutter_width);
// Line gutters.

View file

@ -120,8 +120,7 @@ private:
bool clickable = false;
bool overwritable = false;
ObjectID custom_draw_obj = ObjectID();
StringName custom_draw_callback;
Callable custom_draw_callback;
};
class Text {
@ -331,8 +330,7 @@ private:
int _get_column_pos_of_word(const String &p_key, const String &p_search, uint32_t p_search_flags, int p_from_column) const;
/* Tooltip. */
ObjectID tooltip_obj_id;
StringName tooltip_func;
Callable tooltip_callback;
Variant tooltip_ud;
/* Mouse */
@ -604,7 +602,7 @@ public:
virtual bool is_text_field() const override;
virtual CursorShape get_cursor_shape(const Point2 &p_pos = Point2i()) const override;
virtual String get_tooltip(const Point2 &p_pos) const override;
void set_tooltip_request_func(Object *p_obj, const StringName &p_function, const Variant &p_udata);
void set_tooltip_request_func(const Callable &p_tooltip_callback, const Variant &p_udata);
/* Text */
// Text properties.
@ -863,7 +861,7 @@ public:
void merge_gutters(int p_from_line, int p_to_line);
void set_gutter_custom_draw(int p_gutter, Object *p_object, const StringName &p_callback);
void set_gutter_custom_draw(int p_gutter, const Callable &p_draw_callback);
// Line gutters.
void set_line_gutter_metadata(int p_line, int p_gutter, const Variant &p_metadata);