Improve Graphedit connection lines
This commit is contained in:
parent
3ed2a0428c
commit
70c234f3e3
@ -202,6 +202,9 @@
|
|||||||
<member name="connection_lines_antialiased" type="bool" setter="set_connection_lines_antialiased" getter="is_connection_lines_antialiased" default="true">
|
<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.
|
If [code]true[/code], the lines between nodes will use antialiasing.
|
||||||
</member>
|
</member>
|
||||||
|
<member name="connection_lines_curvature" type="float" setter="set_connection_lines_curvature" getter="get_connection_lines_curvature" default="0.5">
|
||||||
|
The curvature of the lines between the nodes. 0 results in straight lines.
|
||||||
|
</member>
|
||||||
<member name="connection_lines_thickness" type="float" setter="set_connection_lines_thickness" getter="get_connection_lines_thickness" default="2.0">
|
<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.
|
The thickness of the lines between the nodes.
|
||||||
</member>
|
</member>
|
||||||
@ -372,10 +375,6 @@
|
|||||||
<theme_item name="selection_stroke" data_type="color" type="Color" default="Color(1, 1, 1, 0.8)">
|
<theme_item name="selection_stroke" data_type="color" type="Color" default="Color(1, 1, 1, 0.8)">
|
||||||
The outline color of the selection rectangle.
|
The outline color of the selection rectangle.
|
||||||
</theme_item>
|
</theme_item>
|
||||||
<theme_item name="bezier_len_neg" data_type="constant" type="int" default="160">
|
|
||||||
</theme_item>
|
|
||||||
<theme_item name="bezier_len_pos" data_type="constant" type="int" default="80">
|
|
||||||
</theme_item>
|
|
||||||
<theme_item name="port_hotzone_inner_extent" data_type="constant" type="int" default="22">
|
<theme_item name="port_hotzone_inner_extent" data_type="constant" type="int" default="22">
|
||||||
The horizontal range within which a port can be grabbed (inner side).
|
The horizontal range within which a port can be grabbed (inner side).
|
||||||
</theme_item>
|
</theme_item>
|
||||||
|
@ -681,6 +681,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
|
|||||||
|
|
||||||
// Visual editors
|
// Visual editors
|
||||||
EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/visual_editors/minimap_opacity", 0.85, "0.0,1.0,0.01")
|
EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/visual_editors/minimap_opacity", 0.85, "0.0,1.0,0.01")
|
||||||
|
EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/visual_editors/lines_curvature", 0.5, "0.0,1.0,0.01")
|
||||||
EDITOR_SETTING(Variant::INT, PROPERTY_HINT_RANGE, "editors/visual_editors/visualshader/port_preview_size", 160, "100,400,0.01")
|
EDITOR_SETTING(Variant::INT, PROPERTY_HINT_RANGE, "editors/visual_editors/visualshader/port_preview_size", 160, "100,400,0.01")
|
||||||
|
|
||||||
/* Run */
|
/* Run */
|
||||||
|
@ -1446,8 +1446,6 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
|
|||||||
theme->set_icon("snap", "GraphEdit", theme->get_icon(SNAME("SnapGrid"), SNAME("EditorIcons")));
|
theme->set_icon("snap", "GraphEdit", theme->get_icon(SNAME("SnapGrid"), SNAME("EditorIcons")));
|
||||||
theme->set_icon("minimap", "GraphEdit", theme->get_icon(SNAME("GridMinimap"), SNAME("EditorIcons")));
|
theme->set_icon("minimap", "GraphEdit", theme->get_icon(SNAME("GridMinimap"), SNAME("EditorIcons")));
|
||||||
theme->set_icon("layout", "GraphEdit", theme->get_icon(SNAME("GridLayout"), SNAME("EditorIcons")));
|
theme->set_icon("layout", "GraphEdit", theme->get_icon(SNAME("GridLayout"), SNAME("EditorIcons")));
|
||||||
theme->set_constant("bezier_len_pos", "GraphEdit", 80 * EDSCALE);
|
|
||||||
theme->set_constant("bezier_len_neg", "GraphEdit", 160 * EDSCALE);
|
|
||||||
|
|
||||||
// GraphEditMinimap
|
// GraphEditMinimap
|
||||||
Ref<StyleBoxFlat> style_minimap_bg = make_flat_stylebox(dark_color_1, 0, 0, 0, 0);
|
Ref<StyleBoxFlat> style_minimap_bg = make_flat_stylebox(dark_color_1, 0, 0, 0, 0);
|
||||||
|
@ -264,6 +264,8 @@ void AnimationNodeBlendTreeEditor::_update_graph() {
|
|||||||
|
|
||||||
float graph_minimap_opacity = EditorSettings::get_singleton()->get("editors/visual_editors/minimap_opacity");
|
float graph_minimap_opacity = EditorSettings::get_singleton()->get("editors/visual_editors/minimap_opacity");
|
||||||
graph->set_minimap_opacity(graph_minimap_opacity);
|
graph->set_minimap_opacity(graph_minimap_opacity);
|
||||||
|
float graph_lines_curvature = EditorSettings::get_singleton()->get("editors/visual_editors/lines_curvature");
|
||||||
|
graph->set_connection_lines_curvature(graph_lines_curvature);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnimationNodeBlendTreeEditor::_file_opened(const String &p_file) {
|
void AnimationNodeBlendTreeEditor::_file_opened(const String &p_file) {
|
||||||
@ -969,6 +971,8 @@ AnimationNodeBlendTreeEditor::AnimationNodeBlendTreeEditor() {
|
|||||||
graph->connect("connection_from_empty", callable_mp(this, &AnimationNodeBlendTreeEditor::_connection_from_empty));
|
graph->connect("connection_from_empty", callable_mp(this, &AnimationNodeBlendTreeEditor::_connection_from_empty));
|
||||||
float graph_minimap_opacity = EditorSettings::get_singleton()->get("editors/visual_editors/minimap_opacity");
|
float graph_minimap_opacity = EditorSettings::get_singleton()->get("editors/visual_editors/minimap_opacity");
|
||||||
graph->set_minimap_opacity(graph_minimap_opacity);
|
graph->set_minimap_opacity(graph_minimap_opacity);
|
||||||
|
float graph_lines_curvature = EditorSettings::get_singleton()->get("editors/visual_editors/lines_curvature");
|
||||||
|
graph->set_connection_lines_curvature(graph_lines_curvature);
|
||||||
|
|
||||||
VSeparator *vs = memnew(VSeparator);
|
VSeparator *vs = memnew(VSeparator);
|
||||||
graph->get_zoom_hbox()->add_child(vs);
|
graph->get_zoom_hbox()->add_child(vs);
|
||||||
|
@ -1745,6 +1745,8 @@ void VisualShaderEditor::_update_graph() {
|
|||||||
|
|
||||||
float graph_minimap_opacity = EditorSettings::get_singleton()->get("editors/visual_editors/minimap_opacity");
|
float graph_minimap_opacity = EditorSettings::get_singleton()->get("editors/visual_editors/minimap_opacity");
|
||||||
graph->set_minimap_opacity(graph_minimap_opacity);
|
graph->set_minimap_opacity(graph_minimap_opacity);
|
||||||
|
float graph_lines_curvature = EditorSettings::get_singleton()->get("editors/visual_editors/lines_curvature");
|
||||||
|
graph->set_connection_lines_curvature(graph_lines_curvature);
|
||||||
}
|
}
|
||||||
|
|
||||||
VisualShader::Type VisualShaderEditor::get_current_shader_type() const {
|
VisualShader::Type VisualShaderEditor::get_current_shader_type() const {
|
||||||
@ -4675,6 +4677,8 @@ VisualShaderEditor::VisualShaderEditor() {
|
|||||||
graph->set_drag_forwarding(this);
|
graph->set_drag_forwarding(this);
|
||||||
float graph_minimap_opacity = EditorSettings::get_singleton()->get("editors/visual_editors/minimap_opacity");
|
float graph_minimap_opacity = EditorSettings::get_singleton()->get("editors/visual_editors/minimap_opacity");
|
||||||
graph->set_minimap_opacity(graph_minimap_opacity);
|
graph->set_minimap_opacity(graph_minimap_opacity);
|
||||||
|
float graph_lines_curvature = EditorSettings::get_singleton()->get("editors/visual_editors/lines_curvature");
|
||||||
|
graph->set_connection_lines_curvature(graph_lines_curvature);
|
||||||
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_SCALAR);
|
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_SCALAR);
|
||||||
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_SCALAR_INT);
|
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_SCALAR_INT);
|
||||||
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_BOOLEAN);
|
graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_BOOLEAN);
|
||||||
|
@ -980,6 +980,9 @@ void VisualScriptEditor::_update_graph(int p_only_id) {
|
|||||||
float graph_minimap_opacity = EditorSettings::get_singleton()->get("editors/visual_editors/minimap_opacity");
|
float graph_minimap_opacity = EditorSettings::get_singleton()->get("editors/visual_editors/minimap_opacity");
|
||||||
graph->set_minimap_opacity(graph_minimap_opacity);
|
graph->set_minimap_opacity(graph_minimap_opacity);
|
||||||
|
|
||||||
|
float graph_lines_curvature = EditorSettings::get_singleton()->get("editors/visual_editors/lines_curvature");
|
||||||
|
graph->set_connection_lines_curvature(graph_lines_curvature);
|
||||||
|
|
||||||
// Use default_func instead of default_func for now I think that should be good stop gap solution to ensure not breaking anything.
|
// Use default_func instead of default_func for now I think that should be good stop gap solution to ensure not breaking anything.
|
||||||
graph->call_deferred(SNAME("set_scroll_ofs"), script->get_scroll() * EDSCALE);
|
graph->call_deferred(SNAME("set_scroll_ofs"), script->get_scroll() * EDSCALE);
|
||||||
updating_graph = false;
|
updating_graph = false;
|
||||||
@ -4593,6 +4596,8 @@ VisualScriptEditor::VisualScriptEditor() {
|
|||||||
graph->set_drag_forwarding(this);
|
graph->set_drag_forwarding(this);
|
||||||
float graph_minimap_opacity = EditorSettings::get_singleton()->get("editors/visual_editors/minimap_opacity");
|
float graph_minimap_opacity = EditorSettings::get_singleton()->get("editors/visual_editors/minimap_opacity");
|
||||||
graph->set_minimap_opacity(graph_minimap_opacity);
|
graph->set_minimap_opacity(graph_minimap_opacity);
|
||||||
|
float graph_lines_curvature = EditorSettings::get_singleton()->get("editors/visual_editors/lines_curvature");
|
||||||
|
graph->set_connection_lines_curvature(graph_lines_curvature);
|
||||||
graph->hide();
|
graph->hide();
|
||||||
graph->connect("scroll_offset_changed", callable_mp(this, &VisualScriptEditor::_graph_ofs_changed));
|
graph->connect("scroll_offset_changed", callable_mp(this, &VisualScriptEditor::_graph_ofs_changed));
|
||||||
|
|
||||||
|
@ -857,13 +857,23 @@ PackedVector2Array GraphEdit::get_connection_line(const Vector2 &p_from, const V
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float x_diff = (p_to.x - p_from.x);
|
||||||
|
float cp_offset = x_diff * lines_curvature;
|
||||||
|
if (x_diff < 0) {
|
||||||
|
cp_offset *= -1;
|
||||||
|
}
|
||||||
|
|
||||||
Curve2D curve;
|
Curve2D curve;
|
||||||
Vector<Color> colors;
|
|
||||||
curve.add_point(p_from);
|
curve.add_point(p_from);
|
||||||
curve.set_point_out(0, Vector2(60, 0));
|
curve.set_point_out(0, Vector2(cp_offset, 0));
|
||||||
curve.add_point(p_to);
|
curve.add_point(p_to);
|
||||||
curve.set_point_in(1, Vector2(-60, 0));
|
curve.set_point_in(1, Vector2(-cp_offset, 0));
|
||||||
return curve.tessellate();
|
|
||||||
|
if (lines_curvature > 0) {
|
||||||
|
return curve.tessellate(5, 2.0);
|
||||||
|
} else {
|
||||||
|
return curve.tessellate(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphEdit::_draw_connection_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_zoom) {
|
void GraphEdit::_draw_connection_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_zoom) {
|
||||||
@ -1684,6 +1694,15 @@ void GraphEdit::_minimap_toggled() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GraphEdit::set_connection_lines_curvature(float p_curvature) {
|
||||||
|
lines_curvature = p_curvature;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
float GraphEdit::get_connection_lines_curvature() const {
|
||||||
|
return lines_curvature;
|
||||||
|
}
|
||||||
|
|
||||||
void GraphEdit::set_connection_lines_thickness(float p_thickness) {
|
void GraphEdit::set_connection_lines_thickness(float p_thickness) {
|
||||||
lines_thickness = p_thickness;
|
lines_thickness = p_thickness;
|
||||||
update();
|
update();
|
||||||
@ -2262,6 +2281,9 @@ 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_curvature", "curvature"), &GraphEdit::set_connection_lines_curvature);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_connection_lines_curvature"), &GraphEdit::get_connection_lines_curvature);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("set_connection_lines_thickness", "pixels"), &GraphEdit::set_connection_lines_thickness);
|
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("get_connection_lines_thickness"), &GraphEdit::get_connection_lines_thickness);
|
||||||
|
|
||||||
@ -2298,6 +2320,7 @@ void GraphEdit::_bind_methods() {
|
|||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "panning_scheme", PROPERTY_HINT_ENUM, "Scroll Zooms,Scroll Pans"), "set_panning_scheme", "get_panning_scheme");
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "panning_scheme", PROPERTY_HINT_ENUM, "Scroll Zooms,Scroll Pans"), "set_panning_scheme", "get_panning_scheme");
|
||||||
|
|
||||||
ADD_GROUP("Connection Lines", "connection_lines");
|
ADD_GROUP("Connection Lines", "connection_lines");
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "connection_lines_curvature"), "set_connection_lines_curvature", "get_connection_lines_curvature");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "connection_lines_thickness"), "set_connection_lines_thickness", "get_connection_lines_thickness");
|
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_PROPERTY(PropertyInfo(Variant::BOOL, "connection_lines_antialiased"), "set_connection_lines_antialiased", "is_connection_lines_antialiased");
|
||||||
|
|
||||||
|
@ -178,6 +178,7 @@ private:
|
|||||||
List<Connection> connections;
|
List<Connection> connections;
|
||||||
|
|
||||||
float lines_thickness = 2.0f;
|
float lines_thickness = 2.0f;
|
||||||
|
float lines_curvature = 0.5f;
|
||||||
bool lines_antialiased = true;
|
bool lines_antialiased = true;
|
||||||
|
|
||||||
PackedVector2Array get_connection_line(const Vector2 &p_from, const Vector2 &p_to);
|
PackedVector2Array get_connection_line(const Vector2 &p_from, const Vector2 &p_to);
|
||||||
@ -344,6 +345,9 @@ 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_curvature(float p_curvature);
|
||||||
|
float get_connection_lines_curvature() const;
|
||||||
|
|
||||||
void set_connection_lines_thickness(float p_thickness);
|
void set_connection_lines_thickness(float p_thickness);
|
||||||
float get_connection_lines_thickness() const;
|
float get_connection_lines_thickness() const;
|
||||||
|
|
||||||
|
@ -1004,8 +1004,6 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
|
|||||||
theme->set_color("selection_fill", "GraphEdit", Color(1, 1, 1, 0.3));
|
theme->set_color("selection_fill", "GraphEdit", Color(1, 1, 1, 0.3));
|
||||||
theme->set_color("selection_stroke", "GraphEdit", Color(1, 1, 1, 0.8));
|
theme->set_color("selection_stroke", "GraphEdit", Color(1, 1, 1, 0.8));
|
||||||
theme->set_color("activity", "GraphEdit", Color(1, 1, 1));
|
theme->set_color("activity", "GraphEdit", Color(1, 1, 1));
|
||||||
theme->set_constant("bezier_len_pos", "GraphEdit", 80 * scale);
|
|
||||||
theme->set_constant("bezier_len_neg", "GraphEdit", 160 * scale);
|
|
||||||
|
|
||||||
// Visual Node Ports
|
// Visual Node Ports
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user