summaryrefslogtreecommitdiffstats
path: root/editor/shader_globals_editor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'editor/shader_globals_editor.cpp')
-rw-r--r--editor/shader_globals_editor.cpp35
1 files changed, 28 insertions, 7 deletions
diff --git a/editor/shader_globals_editor.cpp b/editor/shader_globals_editor.cpp
index ead0eeeae3..46f520df45 100644
--- a/editor/shader_globals_editor.cpp
+++ b/editor/shader_globals_editor.cpp
@@ -105,7 +105,6 @@ class ShaderGlobalsEditorInterface : public Object {
protected:
static void _bind_methods() {
- ClassDB::bind_method("_set_var", &ShaderGlobalsEditorInterface::_set_var);
ClassDB::bind_method("_var_changed", &ShaderGlobalsEditorInterface::_var_changed);
ADD_SIGNAL(MethodInfo("var_changed"));
}
@@ -117,7 +116,7 @@ protected:
return false;
}
- call_deferred("_set_var", p_name, p_value, existing);
+ callable_mp(this, &ShaderGlobalsEditorInterface::_set_var).call_deferred(p_name, p_value, existing);
return true;
}
@@ -345,15 +344,29 @@ static Variant create_var(RS::GlobalShaderParameterType p_type) {
}
}
+String ShaderGlobalsEditor::_check_new_variable_name(const String &p_variable_name) {
+ if (p_variable_name.is_empty()) {
+ return TTR("Name cannot be empty.");
+ }
+
+ if (!p_variable_name.is_valid_identifier()) {
+ return TTR("Name must be a valid identifier.");
+ }
+
+ return "";
+}
+
+void ShaderGlobalsEditor::_variable_name_text_changed(const String &p_variable_name) {
+ const String &warning = _check_new_variable_name(p_variable_name.strip_edges());
+ variable_add->set_tooltip_text(warning);
+ variable_add->set_disabled(!warning.is_empty());
+}
+
void ShaderGlobalsEditor::_variable_added() {
String var = variable_name->get_text().strip_edges();
- if (var.is_empty() || !var.is_valid_identifier()) {
- EditorNode::get_singleton()->show_warning(TTR("Please specify a valid shader uniform identifier name."));
- return;
- }
if (RenderingServer::get_singleton()->global_shader_parameter_get(var).get_type() != Variant::NIL) {
- EditorNode::get_singleton()->show_warning(vformat(TTR("Global shader parameter '%s' already exists'"), var));
+ EditorNode::get_singleton()->show_warning(vformat(TTR("Global shader parameter '%s' already exists."), var));
return;
}
@@ -417,6 +430,10 @@ void ShaderGlobalsEditor::_notification(int p_what) {
}
} break;
+ case NOTIFICATION_THEME_CHANGED: {
+ variable_add->set_icon(get_editor_theme_icon(SNAME("Add")));
+ } break;
+
case NOTIFICATION_PREDELETE: {
inspector->edit(nullptr);
} break;
@@ -432,6 +449,9 @@ ShaderGlobalsEditor::ShaderGlobalsEditor() {
add_menu_hb->add_child(memnew(Label(TTR("Name:"))));
variable_name = memnew(LineEdit);
variable_name->set_h_size_flags(SIZE_EXPAND_FILL);
+ variable_name->set_clear_button_enabled(true);
+ variable_name->connect("text_changed", callable_mp(this, &ShaderGlobalsEditor::_variable_name_text_changed));
+
add_menu_hb->add_child(variable_name);
add_menu_hb->add_child(memnew(Label(TTR("Type:"))));
@@ -444,6 +464,7 @@ ShaderGlobalsEditor::ShaderGlobalsEditor() {
}
variable_add = memnew(Button(TTR("Add")));
+ variable_add->set_disabled(true);
add_menu_hb->add_child(variable_add);
variable_add->connect("pressed", callable_mp(this, &ShaderGlobalsEditor::_variable_added));