Browse Source

ColorPicker: New properties to toggle the editability and visibility of presets

will 6 years ago
parent
commit
eb9c92f996
2 changed files with 51 additions and 8 deletions
  1. 40 8
      scene/gui/color_picker.cpp
  2. 11 0
      scene/gui/color_picker.h

+ 40 - 8
scene/gui/color_picker.cpp

@@ -38,8 +38,6 @@
 #include "editor_scale.h"
 #include "editor_scale.h"
 #include "editor_settings.h"
 #include "editor_settings.h"
 #endif
 #endif
-
-#include "scene/gui/separator.h"
 #include "scene/main/viewport.h"
 #include "scene/main/viewport.h"
 
 
 void ColorPicker::_notification(int p_what) {
 void ColorPicker::_notification(int p_what) {
@@ -469,7 +467,7 @@ void ColorPicker::_preset_input(const Ref<InputEvent> &p_event) {
 			set_pick_color(presets[index]);
 			set_pick_color(presets[index]);
 			_update_color();
 			_update_color();
 			emit_signal("color_changed", color);
 			emit_signal("color_changed", color);
-		} else if (bev->is_pressed() && bev->get_button_index() == BUTTON_RIGHT) {
+		} else if (bev->is_pressed() && bev->get_button_index() == BUTTON_RIGHT && presets_enabled) {
 			int index = bev->get_position().x / (preset->get_size().x / presets.size());
 			int index = bev->get_position().x / (preset->get_size().x / presets.size());
 			Color clicked_preset = presets[index];
 			Color clicked_preset = presets[index];
 			erase_preset(clicked_preset);
 			erase_preset(clicked_preset);
@@ -565,6 +563,31 @@ void ColorPicker::_html_focus_exit() {
 	_focus_exit();
 	_focus_exit();
 }
 }
 
 
+void ColorPicker::set_presets_enabled(bool p_enabled) {
+	presets_enabled = p_enabled;
+	if (!p_enabled) {
+		bt_add_preset->set_disabled(true);
+		bt_add_preset->set_focus_mode(FOCUS_NONE);
+	} else {
+		bt_add_preset->set_disabled(false);
+		bt_add_preset->set_focus_mode(FOCUS_ALL);
+	}
+}
+
+bool ColorPicker::are_presets_enabled() const {
+	return presets_enabled;
+}
+
+void ColorPicker::set_presets_visible(bool p_visible) {
+	presets_visible = p_visible;
+	preset_separator->set_visible(p_visible);
+	preset_container->set_visible(p_visible);
+}
+
+bool ColorPicker::are_presets_visible() const {
+	return presets_visible;
+}
+
 void ColorPicker::_bind_methods() {
 void ColorPicker::_bind_methods() {
 
 
 	ClassDB::bind_method(D_METHOD("set_pick_color", "color"), &ColorPicker::set_pick_color);
 	ClassDB::bind_method(D_METHOD("set_pick_color", "color"), &ColorPicker::set_pick_color);
@@ -575,6 +598,10 @@ void ColorPicker::_bind_methods() {
 	ClassDB::bind_method(D_METHOD("is_deferred_mode"), &ColorPicker::is_deferred_mode);
 	ClassDB::bind_method(D_METHOD("is_deferred_mode"), &ColorPicker::is_deferred_mode);
 	ClassDB::bind_method(D_METHOD("set_edit_alpha", "show"), &ColorPicker::set_edit_alpha);
 	ClassDB::bind_method(D_METHOD("set_edit_alpha", "show"), &ColorPicker::set_edit_alpha);
 	ClassDB::bind_method(D_METHOD("is_editing_alpha"), &ColorPicker::is_editing_alpha);
 	ClassDB::bind_method(D_METHOD("is_editing_alpha"), &ColorPicker::is_editing_alpha);
+	ClassDB::bind_method(D_METHOD("set_presets_enabled", "enabled"), &ColorPicker::set_presets_enabled);
+	ClassDB::bind_method(D_METHOD("are_presets_enabled"), &ColorPicker::are_presets_enabled);
+	ClassDB::bind_method(D_METHOD("set_presets_visible", "visible"), &ColorPicker::set_presets_visible);
+	ClassDB::bind_method(D_METHOD("are_presets_visible"), &ColorPicker::are_presets_visible);
 	ClassDB::bind_method(D_METHOD("add_preset", "color"), &ColorPicker::add_preset);
 	ClassDB::bind_method(D_METHOD("add_preset", "color"), &ColorPicker::add_preset);
 	ClassDB::bind_method(D_METHOD("erase_preset", "color"), &ColorPicker::erase_preset);
 	ClassDB::bind_method(D_METHOD("erase_preset", "color"), &ColorPicker::erase_preset);
 	ClassDB::bind_method(D_METHOD("get_presets"), &ColorPicker::get_presets);
 	ClassDB::bind_method(D_METHOD("get_presets"), &ColorPicker::get_presets);
@@ -598,6 +625,8 @@ void ColorPicker::_bind_methods() {
 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "edit_alpha"), "set_edit_alpha", "is_editing_alpha");
 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "edit_alpha"), "set_edit_alpha", "is_editing_alpha");
 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "raw_mode"), "set_raw_mode", "is_raw_mode");
 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "raw_mode"), "set_raw_mode", "is_raw_mode");
 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "deferred_mode"), "set_deferred_mode", "is_deferred_mode");
 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "deferred_mode"), "set_deferred_mode", "is_deferred_mode");
+	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "presets_enabled"), "set_presets_enabled", "are_presets_enabled");
+	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "presets_visible"), "set_presets_visible", "are_presets_visible");
 
 
 	ADD_SIGNAL(MethodInfo("color_changed", PropertyInfo(Variant::COLOR, "color")));
 	ADD_SIGNAL(MethodInfo("color_changed", PropertyInfo(Variant::COLOR, "color")));
 	ADD_SIGNAL(MethodInfo("preset_added", PropertyInfo(Variant::COLOR, "color")));
 	ADD_SIGNAL(MethodInfo("preset_added", PropertyInfo(Variant::COLOR, "color")));
@@ -613,6 +642,8 @@ ColorPicker::ColorPicker() :
 	raw_mode_enabled = false;
 	raw_mode_enabled = false;
 	deferred_mode_enabled = false;
 	deferred_mode_enabled = false;
 	changing_color = false;
 	changing_color = false;
+	presets_enabled = true;
+	presets_visible = true;
 	screen = NULL;
 	screen = NULL;
 
 
 	HBoxContainer *hb_smpl = memnew(HBoxContainer);
 	HBoxContainer *hb_smpl = memnew(HBoxContainer);
@@ -725,18 +756,19 @@ ColorPicker::ColorPicker() :
 
 
 	set_pick_color(Color(1, 1, 1));
 	set_pick_color(Color(1, 1, 1));
 
 
-	add_child(memnew(HSeparator));
+	preset_separator = memnew(HSeparator);
+	add_child(preset_separator);
 
 
-	HBoxContainer *bbc = memnew(HBoxContainer);
-	add_child(bbc);
+	preset_container = memnew(HBoxContainer);
+	add_child(preset_container);
 
 
 	preset = memnew(TextureRect);
 	preset = memnew(TextureRect);
-	bbc->add_child(preset);
+	preset_container->add_child(preset);
 	preset->connect("gui_input", this, "_preset_input");
 	preset->connect("gui_input", this, "_preset_input");
 	preset->connect("draw", this, "_update_presets");
 	preset->connect("draw", this, "_update_presets");
 
 
 	bt_add_preset = memnew(Button);
 	bt_add_preset = memnew(Button);
-	bbc->add_child(bt_add_preset);
+	preset_container->add_child(bt_add_preset);
 	bt_add_preset->set_tooltip(TTR("Add current color as a preset."));
 	bt_add_preset->set_tooltip(TTR("Add current color as a preset."));
 	bt_add_preset->connect("pressed", this, "_add_preset_pressed");
 	bt_add_preset->connect("pressed", this, "_add_preset_pressed");
 }
 }

+ 11 - 0
scene/gui/color_picker.h

@@ -37,6 +37,7 @@
 #include "scene/gui/label.h"
 #include "scene/gui/label.h"
 #include "scene/gui/line_edit.h"
 #include "scene/gui/line_edit.h"
 #include "scene/gui/popup.h"
 #include "scene/gui/popup.h"
+#include "scene/gui/separator.h"
 #include "scene/gui/slider.h"
 #include "scene/gui/slider.h"
 #include "scene/gui/spin_box.h"
 #include "scene/gui/spin_box.h"
 #include "scene/gui/texture_rect.h"
 #include "scene/gui/texture_rect.h"
@@ -52,6 +53,8 @@ private:
 	Control *w_edit;
 	Control *w_edit;
 	TextureRect *sample;
 	TextureRect *sample;
 	TextureRect *preset;
 	TextureRect *preset;
+	HBoxContainer *preset_container;
+	HSeparator *preset_separator;
 	Button *bt_add_preset;
 	Button *bt_add_preset;
 	List<Color> presets;
 	List<Color> presets;
 	ToolButton *btn_pick;
 	ToolButton *btn_pick;
@@ -70,6 +73,8 @@ private:
 	bool deferred_mode_enabled;
 	bool deferred_mode_enabled;
 	bool updating;
 	bool updating;
 	bool changing_color;
 	bool changing_color;
+	bool presets_enabled;
+	bool presets_visible;
 	float h, s, v;
 	float h, s, v;
 	Color last_hsv;
 	Color last_hsv;
 
 
@@ -114,6 +119,12 @@ public:
 	void set_deferred_mode(bool p_enabled);
 	void set_deferred_mode(bool p_enabled);
 	bool is_deferred_mode() const;
 	bool is_deferred_mode() const;
 
 
+	void set_presets_enabled(bool p_enabled);
+	bool are_presets_enabled() const;
+
+	void set_presets_visible(bool p_visible);
+	bool are_presets_visible() const;
+
 	void set_focus_on_line_edit();
 	void set_focus_on_line_edit();
 
 
 	ColorPicker();
 	ColorPicker();