浏览代码

Add editor settings for call hint placement

Added settings: text_editor/put_callhint_tooltip_below_current_line
and text_editor/callhint_tooltip_offset
Martin Chuckeles 9 年之前
父节点
当前提交
47206b409d
共有 4 个文件被更改,包括 45 次插入4 次删除
  1. 29 4
      scene/gui/text_edit.cpp
  2. 7 0
      scene/gui/text_edit.h
  3. 6 0
      tools/editor/code_editor.cpp
  4. 3 0
      tools/editor/plugins/script_editor_plugin.cpp

+ 29 - 4
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 (completion_hint!="" && !completion_active) {
+			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;

+ 7 - 0
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);

+ 6 - 0
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() {

+ 3 - 0
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);