summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Verschelde <remi@verschelde.fr>2016-03-04 12:52:59 +0100
committerRémi Verschelde <remi@verschelde.fr>2016-03-04 12:52:59 +0100
commit3fc80f65cd26122fed771a149c2e583a8139e4ce (patch)
tree21bc90d19a76a920b66f561858a289b30a0fcbad
parent5200ebd8fd3e72f26c28b46235838d1b8267b2b7 (diff)
parent47206b409d6802ac9ccbaedaa0daedc30b739e2f (diff)
Merge pull request #3910 from chuckeles/completion-tooltip
Completion tooltip
-rw-r--r--scene/gui/text_edit.cpp33
-rw-r--r--scene/gui/text_edit.h7
-rw-r--r--tools/editor/code_editor.cpp6
-rw-r--r--tools/editor/plugins/script_editor_plugin.cpp3
4 files changed, 45 insertions, 4 deletions
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index bf012b7a03..5d7436517f 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -847,7 +847,7 @@ void TextEdit::_notification(int p_what) {
}
}
-
+ bool completion_below = false;
if (completion_active) {
// code completion box
Ref<StyleBox> csb = get_stylebox("completion");
@@ -878,11 +878,12 @@ void TextEdit::_notification(int p_what) {
}
int th = h + csb->get_minimum_size().y;
+
if (cursor_pos.y+get_row_height()+th > get_size().height) {
completion_rect.pos.y=cursor_pos.y-th;
} else {
completion_rect.pos.y=cursor_pos.y+get_row_height()+csb->get_offset().y;
-
+ completion_below = true;
}
if (cursor_pos.x-nofs+w+scrollw > get_size().width) {
@@ -930,8 +931,24 @@ void TextEdit::_notification(int p_what) {
completion_line_ofs=line_from;
}
-
+
+ // check to see if the hint should be drawn
+ bool show_hint = false;
if (completion_hint!="") {
+ if (completion_active) {
+ if (completion_below && !callhint_below) {
+ show_hint = true;
+ }
+ else if (!completion_below && callhint_below) {
+ show_hint = true;
+ }
+ }
+ else {
+ show_hint = true;
+ }
+ }
+
+ if (show_hint) {
Ref<StyleBox> sb = get_stylebox("panel","TooltipPanel");
Ref<Font> font = cache.font;
@@ -967,7 +984,15 @@ void TextEdit::_notification(int p_what) {
}
- Point2 hint_ofs = Vector2(completion_hint_offset,cursor_pos.y-minsize.y);
+ Point2 hint_ofs = Vector2(completion_hint_offset,cursor_pos.y) + callhint_offset;
+
+ if (callhint_below) {
+ hint_ofs.y += get_row_height() + sb->get_offset().y;
+ }
+ else {
+ hint_ofs.y -= minsize.y + sb->get_offset().y;
+ }
+
draw_style_box(sb,Rect2(hint_ofs,minsize));
spacing=0;
diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h
index 2ca5ab054a..44e780aaf3 100644
--- a/scene/gui/text_edit.h
+++ b/scene/gui/text_edit.h
@@ -231,6 +231,9 @@ class TextEdit : public Control {
bool next_operation_is_complex;
+ bool callhint_below;
+ Vector2 callhint_offset;
+
int get_visible_rows() const;
int get_char_count();
@@ -326,6 +329,10 @@ public:
brace_matching_enabled=p_enabled;
update();
}
+ inline void set_callhint_settings(bool below, Vector2 offset) {
+ callhint_below = below;
+ callhint_offset = offset;
+ }
void set_auto_indent(bool p_auto_indent);
void cursor_set_column(int p_col, bool p_adjust_viewport=true);
diff --git a/tools/editor/code_editor.cpp b/tools/editor/code_editor.cpp
index fe863bfebc..f7d335fba3 100644
--- a/tools/editor/code_editor.cpp
+++ b/tools/editor/code_editor.cpp
@@ -568,6 +568,12 @@ void CodeTextEditor::_on_settings_change() {
);
enable_complete_timer = EDITOR_DEF("text_editor/enable_code_completion_delay",true);
+
+ // call hint settings
+ text_editor->set_callhint_settings(
+ EDITOR_DEF("text_editor/put_callhint_tooltip_below_current_line", true),
+ EDITOR_DEF("text_editor/callhint_tooltip_offset", Vector2())
+ );
}
void CodeTextEditor::_text_changed_idle_timeout() {
diff --git a/tools/editor/plugins/script_editor_plugin.cpp b/tools/editor/plugins/script_editor_plugin.cpp
index 8d0527cff7..474bafee69 100644
--- a/tools/editor/plugins/script_editor_plugin.cpp
+++ b/tools/editor/plugins/script_editor_plugin.cpp
@@ -1928,6 +1928,9 @@ void ScriptEditor::edit(const Ref<Script>& p_script) {
ste->set_edited_script(p_script);
ste->get_text_edit()->set_tooltip_request_func(this,"_get_debug_tooltip",ste);
ste->get_text_edit()->set_auto_brace_completion(EditorSettings::get_singleton()->get("text_editor/auto_brace_complete"));
+ ste->get_text_edit()->set_callhint_settings(
+ EditorSettings::get_singleton()->get("text_editor/put_callhint_tooltip_below_current_line"),
+ EditorSettings::get_singleton()->get("text_editor/callhint_tooltip_offset"));
tab_container->add_child(ste);
_go_to_tab(tab_container->get_tab_count()-1);