소스 검색

Added GraphEdit properties to control lines thickness and antialiasing

Yuri Roubinsky 4 년 전
부모
커밋
52e44ed3ef
3개의 변경된 파일49개의 추가작업 그리고 6개의 파일을 삭제
  1. 9 1
      doc/classes/GraphEdit.xml
  2. 31 5
      scene/gui/graph_edit.cpp
  3. 9 0
      scene/gui/graph_edit.h

+ 9 - 1
doc/classes/GraphEdit.xml

@@ -174,6 +174,12 @@
 		</method>
 		</method>
 	</methods>
 	</methods>
 	<members>
 	<members>
+		<member name="connection_lines_antialiased" type="bool" setter="set_connection_lines_antialiased" getter="is_connection_lines_antialiased" default="true">
+			If [code]true[/code], the lines between nodes will use antialiasing.
+		</member>
+		<member name="connection_lines_thickness" type="float" setter="set_connection_lines_thickness" getter="get_connection_lines_thickness" default="2.0">
+			The thickness of the lines between the nodes.
+		</member>
 		<member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" override="true" enum="Control.FocusMode" default="2" />
 		<member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" override="true" enum="Control.FocusMode" default="2" />
 		<member name="minimap_enabled" type="bool" setter="set_minimap_enabled" getter="is_minimap_enabled" default="true">
 		<member name="minimap_enabled" type="bool" setter="set_minimap_enabled" getter="is_minimap_enabled" default="true">
 			If [code]true[/code], the minimap is visible.
 			If [code]true[/code], the minimap is visible.
@@ -181,7 +187,7 @@
 		<member name="minimap_opacity" type="float" setter="set_minimap_opacity" getter="get_minimap_opacity" default="0.65">
 		<member name="minimap_opacity" type="float" setter="set_minimap_opacity" getter="get_minimap_opacity" default="0.65">
 			The opacity of the minimap rectangle.
 			The opacity of the minimap rectangle.
 		</member>
 		</member>
-		<member name="minimap_size" type="Vector2" setter="set_minimap_size" getter="get_minimap_size" default="Vector2(240, 160)">
+		<member name="minimap_size" type="Vector2" setter="set_minimap_size" getter="get_minimap_size" default="Vector2( 240, 160 )">
 			The size of the minimap rectangle. The map itself is based on the size of the grid area and is scaled to fit this rectangle.
 			The size of the minimap rectangle. The map itself is based on the size of the grid area and is scaled to fit this rectangle.
 		</member>
 		</member>
 		<member name="rect_clip_content" type="bool" setter="set_clip_contents" getter="is_clipping_contents" override="true" default="true" />
 		<member name="rect_clip_content" type="bool" setter="set_clip_contents" getter="is_clipping_contents" override="true" default="true" />
@@ -326,6 +332,8 @@
 		<theme_item name="grid_minor" type="Color" default="Color( 1, 1, 1, 0.05 )">
 		<theme_item name="grid_minor" type="Color" default="Color( 1, 1, 1, 0.05 )">
 			Color of minor grid lines.
 			Color of minor grid lines.
 		</theme_item>
 		</theme_item>
+		<theme_item name="minimap" type="Texture2D">
+		</theme_item>
 		<theme_item name="minus" type="Texture2D">
 		<theme_item name="minus" type="Texture2D">
 			The icon for the zoom out button.
 			The icon for the zoom out button.
 		</theme_item>
 		</theme_item>

+ 31 - 5
scene/gui/graph_edit.cpp

@@ -784,7 +784,7 @@ void GraphEdit::_bake_segment2d(Vector<Vector2> &points, Vector<Color> &colors,
 	}
 	}
 }
 }
 
 
-void GraphEdit::_draw_cos_line(CanvasItem *p_where, const Vector2 &p_from, const Vector2 &p_to, const Color &p_color, const Color &p_to_color, float p_width = 2.0, float p_bezier_ratio = 1.0) {
+void GraphEdit::_draw_cos_line(CanvasItem *p_where, const Vector2 &p_from, const Vector2 &p_to, const Color &p_color, const Color &p_to_color, float p_width, float p_bezier_ratio = 1.0) {
 	//cubic bezier code
 	//cubic bezier code
 	float diff = p_to.x - p_from.x;
 	float diff = p_to.x - p_from.x;
 	float cp_offset;
 	float cp_offset;
@@ -811,9 +811,9 @@ void GraphEdit::_draw_cos_line(CanvasItem *p_where, const Vector2 &p_from, const
 	colors.push_back(p_to_color);
 	colors.push_back(p_to_color);
 
 
 #ifdef TOOLS_ENABLED
 #ifdef TOOLS_ENABLED
-	p_where->draw_polyline_colors(points, colors, Math::floor(p_width * EDSCALE), true);
+	p_where->draw_polyline_colors(points, colors, Math::floor(p_width * EDSCALE), lines_antialiased);
 #else
 #else
-	p_where->draw_polyline_colors(points, colors, p_width, true);
+	p_where->draw_polyline_colors(points, colors, p_width, lines_antialiased);
 #endif
 #endif
 }
 }
 
 
@@ -860,7 +860,7 @@ void GraphEdit::_connections_layer_draw() {
 			color = color.lerp(activity_color, E->get().activity);
 			color = color.lerp(activity_color, E->get().activity);
 			tocolor = tocolor.lerp(activity_color, E->get().activity);
 			tocolor = tocolor.lerp(activity_color, E->get().activity);
 		}
 		}
-		_draw_cos_line(connections_layer, frompos, topos, color, tocolor);
+		_draw_cos_line(connections_layer, frompos, topos, color, tocolor, lines_thickness);
 	}
 	}
 
 
 	while (to_erase.size()) {
 	while (to_erase.size()) {
@@ -899,7 +899,7 @@ void GraphEdit::_top_layer_draw() {
 		if (!connecting_out) {
 		if (!connecting_out) {
 			SWAP(pos, topos);
 			SWAP(pos, topos);
 		}
 		}
-		_draw_cos_line(top_layer, pos, topos, col, col);
+		_draw_cos_line(top_layer, pos, topos, col, col, lines_thickness);
 	}
 	}
 
 
 	if (box_selecting) {
 	if (box_selecting) {
@@ -1536,6 +1536,24 @@ void GraphEdit::_minimap_toggled() {
 	minimap->update();
 	minimap->update();
 }
 }
 
 
+void GraphEdit::set_connection_lines_thickness(float p_thickness) {
+	lines_thickness = p_thickness;
+	update();
+}
+
+float GraphEdit::get_connection_lines_thickness() const {
+	return lines_thickness;
+}
+
+void GraphEdit::set_connection_lines_antialiased(bool p_antialiased) {
+	lines_antialiased = p_antialiased;
+	update();
+}
+
+bool GraphEdit::is_connection_lines_antialiased() const {
+	return lines_antialiased;
+}
+
 HBoxContainer *GraphEdit::get_zoom_hbox() {
 HBoxContainer *GraphEdit::get_zoom_hbox() {
 	return zoom_hb;
 	return zoom_hb;
 }
 }
@@ -1567,6 +1585,12 @@ void GraphEdit::_bind_methods() {
 	ClassDB::bind_method(D_METHOD("set_use_snap", "enable"), &GraphEdit::set_use_snap);
 	ClassDB::bind_method(D_METHOD("set_use_snap", "enable"), &GraphEdit::set_use_snap);
 	ClassDB::bind_method(D_METHOD("is_using_snap"), &GraphEdit::is_using_snap);
 	ClassDB::bind_method(D_METHOD("is_using_snap"), &GraphEdit::is_using_snap);
 
 
+	ClassDB::bind_method(D_METHOD("set_connection_lines_thickness", "pixels"), &GraphEdit::set_connection_lines_thickness);
+	ClassDB::bind_method(D_METHOD("get_connection_lines_thickness"), &GraphEdit::get_connection_lines_thickness);
+
+	ClassDB::bind_method(D_METHOD("set_connection_lines_antialiased", "pixels"), &GraphEdit::set_connection_lines_antialiased);
+	ClassDB::bind_method(D_METHOD("is_connection_lines_antialiased"), &GraphEdit::is_connection_lines_antialiased);
+
 	ClassDB::bind_method(D_METHOD("set_minimap_size", "p_size"), &GraphEdit::set_minimap_size);
 	ClassDB::bind_method(D_METHOD("set_minimap_size", "p_size"), &GraphEdit::set_minimap_size);
 	ClassDB::bind_method(D_METHOD("get_minimap_size"), &GraphEdit::get_minimap_size);
 	ClassDB::bind_method(D_METHOD("get_minimap_size"), &GraphEdit::get_minimap_size);
 	ClassDB::bind_method(D_METHOD("set_minimap_opacity", "p_opacity"), &GraphEdit::set_minimap_opacity);
 	ClassDB::bind_method(D_METHOD("set_minimap_opacity", "p_opacity"), &GraphEdit::set_minimap_opacity);
@@ -1590,6 +1614,8 @@ void GraphEdit::_bind_methods() {
 	ADD_PROPERTY(PropertyInfo(Variant::INT, "snap_distance"), "set_snap", "get_snap");
 	ADD_PROPERTY(PropertyInfo(Variant::INT, "snap_distance"), "set_snap", "get_snap");
 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_snap"), "set_use_snap", "is_using_snap");
 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_snap"), "set_use_snap", "is_using_snap");
 	ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "zoom"), "set_zoom", "get_zoom");
 	ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "zoom"), "set_zoom", "get_zoom");
+	ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "connection_lines_thickness"), "set_connection_lines_thickness", "get_connection_lines_thickness");
+	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "connection_lines_antialiased"), "set_connection_lines_antialiased", "is_connection_lines_antialiased");
 	ADD_GROUP("Minimap", "minimap");
 	ADD_GROUP("Minimap", "minimap");
 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "minimap_enabled"), "set_minimap_enabled", "is_minimap_enabled");
 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "minimap_enabled"), "set_minimap_enabled", "is_minimap_enabled");
 	ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "minimap_size"), "set_minimap_size", "get_minimap_size");
 	ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "minimap_size"), "set_minimap_size", "get_minimap_size");

+ 9 - 0
scene/gui/graph_edit.h

@@ -158,6 +158,9 @@ private:
 	bool awaiting_scroll_offset_update;
 	bool awaiting_scroll_offset_update;
 	List<Connection> connections;
 	List<Connection> connections;
 
 
+	float lines_thickness = 2.0f;
+	bool lines_antialiased = true;
+
 	void _bake_segment2d(Vector<Vector2> &points, Vector<Color> &colors, float p_begin, float p_end, const Vector2 &p_a, const Vector2 &p_out, const Vector2 &p_b, const Vector2 &p_in, int p_depth, int p_min_depth, int p_max_depth, float p_tol, const Color &p_color, const Color &p_to_color, int &lines) const;
 	void _bake_segment2d(Vector<Vector2> &points, Vector<Color> &colors, float p_begin, float p_end, const Vector2 &p_a, const Vector2 &p_out, const Vector2 &p_b, const Vector2 &p_in, int p_depth, int p_min_depth, int p_max_depth, float p_tol, const Color &p_color, const Color &p_to_color, int &lines) const;
 
 
 	void _draw_cos_line(CanvasItem *p_where, const Vector2 &p_from, const Vector2 &p_to, const Color &p_color, const Color &p_to_color, float p_width, float p_bezier_ratio);
 	void _draw_cos_line(CanvasItem *p_where, const Vector2 &p_from, const Vector2 &p_to, const Color &p_color, const Color &p_to_color, float p_width, float p_bezier_ratio);
@@ -275,6 +278,12 @@ public:
 	int get_snap() const;
 	int get_snap() const;
 	void set_snap(int p_snap);
 	void set_snap(int p_snap);
 
 
+	void set_connection_lines_thickness(float p_thickness);
+	float get_connection_lines_thickness() const;
+
+	void set_connection_lines_antialiased(bool p_antialiased);
+	bool is_connection_lines_antialiased() const;
+
 	HBoxContainer *get_zoom_hbox();
 	HBoxContainer *get_zoom_hbox();
 
 
 	GraphEdit();
 	GraphEdit();