summaryrefslogtreecommitdiffstats
path: root/editor/plugins/visual_shader_editor_plugin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'editor/plugins/visual_shader_editor_plugin.cpp')
-rw-r--r--editor/plugins/visual_shader_editor_plugin.cpp80
1 files changed, 55 insertions, 25 deletions
diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp
index 4750179473..acca5810a9 100644
--- a/editor/plugins/visual_shader_editor_plugin.cpp
+++ b/editor/plugins/visual_shader_editor_plugin.cpp
@@ -104,6 +104,7 @@ void VisualShaderNodePlugin::_bind_methods() {
///////////////////
VisualShaderGraphPlugin::VisualShaderGraphPlugin() {
+ vs_msdf_fonts_theme.instantiate();
}
void VisualShaderGraphPlugin::_bind_methods() {
@@ -358,6 +359,13 @@ void VisualShaderGraphPlugin::update_theme() {
vector_expanded_color[1] = editor->get_theme_color(SNAME("axis_y_color"), EditorStringName(Editor)); // green
vector_expanded_color[2] = editor->get_theme_color(SNAME("axis_z_color"), EditorStringName(Editor)); // blue
vector_expanded_color[3] = editor->get_theme_color(SNAME("axis_w_color"), EditorStringName(Editor)); // alpha
+
+ Ref<Font> label_font = EditorNode::get_singleton()->get_editor_theme()->get_font("main_msdf", EditorStringName(EditorFonts));
+ Ref<Font> label_bold_font = EditorNode::get_singleton()->get_editor_theme()->get_font("main_bold_msdf", EditorStringName(EditorFonts));
+ vs_msdf_fonts_theme->set_font("font", "Label", label_font);
+ vs_msdf_fonts_theme->set_font("font", "GraphNodeTitleLabel", label_bold_font);
+ vs_msdf_fonts_theme->set_font("font", "LineEdit", label_font);
+ vs_msdf_fonts_theme->set_font("font", "Button", label_font);
}
bool VisualShaderGraphPlugin::is_node_has_parameter_instances_relatively(VisualShader::Type p_type, int p_node) const {
@@ -398,34 +406,35 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id, bool
Control *offset;
- static const Color type_color[] = {
- Color(0.38, 0.85, 0.96), // scalar (float)
- Color(0.49, 0.78, 0.94), // scalar (int)
- Color(0.20, 0.88, 0.67), // scalar (uint)
- Color(0.74, 0.57, 0.95), // vector2
- Color(0.84, 0.49, 0.93), // vector3
- Color(1.0, 0.125, 0.95), // vector4
- Color(0.55, 0.65, 0.94), // boolean
- Color(0.96, 0.66, 0.43), // transform
- Color(1.0, 1.0, 0.0), // sampler
+ const Color type_color[] = {
+ EDITOR_GET("editors/visual_editors/connection_colors/scalar_color"),
+ EDITOR_GET("editors/visual_editors/connection_colors/scalar_color"),
+ EDITOR_GET("editors/visual_editors/connection_colors/scalar_color"),
+ EDITOR_GET("editors/visual_editors/connection_colors/vector2_color"),
+ EDITOR_GET("editors/visual_editors/connection_colors/vector3_color"),
+ EDITOR_GET("editors/visual_editors/connection_colors/vector4_color"),
+ EDITOR_GET("editors/visual_editors/connection_colors/boolean_color"),
+ EDITOR_GET("editors/visual_editors/connection_colors/transform_color"),
+ EDITOR_GET("editors/visual_editors/connection_colors/sampler_color"),
};
- static const String vector_expanded_name[4] = {
- "red",
- "green",
- "blue",
- "alpha"
+ // Keep in sync with VisualShaderNode::Category.
+ const Color category_color[VisualShaderNode::Category::CATEGORY_MAX] = {
+ Color(0.0, 0.0, 0.0), // None (default, not used)
+ EDITOR_GET("editors/visual_editors/category_colors/output_color"),
+ EDITOR_GET("editors/visual_editors/category_colors/color_color"),
+ EDITOR_GET("editors/visual_editors/category_colors/conditional_color"),
+ EDITOR_GET("editors/visual_editors/category_colors/input_color"),
+ EDITOR_GET("editors/visual_editors/category_colors/scalar_color"),
+ EDITOR_GET("editors/visual_editors/category_colors/textures_color"),
+ EDITOR_GET("editors/visual_editors/category_colors/transform_color"),
+ EDITOR_GET("editors/visual_editors/category_colors/utility_color"),
+ EDITOR_GET("editors/visual_editors/category_colors/vector_color"),
+ EDITOR_GET("editors/visual_editors/category_colors/special_color"),
+ EDITOR_GET("editors/visual_editors/category_colors/particle_color"),
};
- // Visual shader specific theme for MSDF font.
- Ref<Theme> vstheme;
- vstheme.instantiate();
- Ref<Font> label_font = EditorNode::get_singleton()->get_editor_theme()->get_font("main_msdf", EditorStringName(EditorFonts));
- Ref<Font> label_bold_font = EditorNode::get_singleton()->get_editor_theme()->get_font("main_bold_msdf", EditorStringName(EditorFonts));
- vstheme->set_font("font", "Label", label_font);
- vstheme->set_font("font", "GraphNodeTitleLabel", label_bold_font);
- vstheme->set_font("font", "LineEdit", label_font);
- vstheme->set_font("font", "Button", label_font);
+ static const String vector_expanded_name[4] = { "red", "green", "blue", "alpha" };
Ref<VisualShaderNode> vsnode = visual_shader->get_node(p_type, p_id);
@@ -457,7 +466,18 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id, bool
node->connect("delete_request", callable_mp(editor, &VisualShaderEditor::_delete_node_request).bind(p_type, p_id), CONNECT_DEFERRED);
}
graph->add_child(node);
- node->set_theme(vstheme);
+ node->set_theme(vs_msdf_fonts_theme);
+
+ // Set the node's titlebar color based on its category.
+ if (vsnode->get_category() != VisualShaderNode::CATEGORY_NONE) {
+ Ref<StyleBoxFlat> sb_colored = editor->get_theme_stylebox("titlebar", "GraphNode")->duplicate();
+ sb_colored->set_bg_color(category_color[vsnode->get_category()]);
+ node->add_theme_style_override("titlebar", sb_colored);
+
+ Ref<StyleBoxFlat> sb_colored_selected = editor->get_theme_stylebox("titlebar_selected", "GraphNode")->duplicate();
+ sb_colored_selected->set_bg_color(category_color[vsnode->get_category()].lightened(0.2));
+ node->add_theme_style_override("titlebar_selected", sb_colored_selected);
+ }
if (p_just_update) {
Link &link = links[p_id];
@@ -506,6 +526,11 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id, bool
port_offset += 1;
}
+ // Set the minimum width of a node based on the preview size to avoid a resize when toggling the preview.
+ Ref<StyleBoxFlat> graph_node_stylebox = graph->get_theme_stylebox("panel", "GraphNode");
+ int port_preview_size = EDITOR_GET("editors/visual_editors/visual_shader/port_preview_size");
+ node->set_custom_minimum_size(Size2((Math::ceil(graph_node_stylebox->get_minimum_size().width) + port_preview_size) * EDSCALE, 0));
+
Ref<VisualShaderNodeParticleEmit> emit = vsnode;
if (emit.is_valid()) {
node->set_custom_minimum_size(Size2(200 * EDSCALE, 0));
@@ -4313,7 +4338,9 @@ void VisualShaderEditor::_notification(int p_what) {
}
if (EditorSettings::get_singleton()->check_changed_settings_in_group("editors/visual_editors")) {
graph->set_minimap_opacity(EDITOR_GET("editors/visual_editors/minimap_opacity"));
+ graph->set_grid_pattern((GraphEdit::GridPattern) int(EDITOR_GET("editors/visual_editors/grid_pattern")));
graph->set_connection_lines_curvature(EDITOR_GET("editors/visual_editors/lines_curvature"));
+
_update_graph();
}
} break;
@@ -5424,6 +5451,9 @@ VisualShaderEditor::VisualShaderEditor() {
graph->get_menu_hbox()->set_h_size_flags(SIZE_EXPAND_FILL);
graph->set_v_size_flags(SIZE_EXPAND_FILL);
graph->set_h_size_flags(SIZE_EXPAND_FILL);
+ graph->set_grid_pattern(GraphEdit::GridPattern::GRID_PATTERN_DOTS);
+ int grid_pattern = EDITOR_GET("editors/visual_editors/grid_pattern");
+ graph->set_grid_pattern((GraphEdit::GridPattern)grid_pattern);
graph->set_show_zoom_label(true);
add_child(graph);
SET_DRAG_FORWARDING_GCD(graph, VisualShaderEditor);