Browse Source

Use cached saturation for color picker when value is 0

dinoplane 2 years ago
parent
commit
e11e9d2b9a
3 changed files with 12 additions and 2 deletions
  1. 7 2
      scene/gui/color_mode.cpp
  2. 3 0
      scene/gui/color_picker.cpp
  3. 2 0
      scene/gui/color_picker.h

+ 7 - 2
scene/gui/color_mode.cpp

@@ -124,8 +124,13 @@ float ColorModeHSV::get_slider_value(int idx) const {
 				return color_picker->get_cached_hue();
 			}
 		}
-		case 1:
-			return color_picker->get_pick_color().get_s() * 100.0;
+		case 1: {
+			if (color_picker->get_pick_color().get_v() > 0) {
+				return color_picker->get_pick_color().get_s() * 100.0;
+			} else {
+				return color_picker->get_cached_saturation();
+			}
+		}
 		case 2:
 			return color_picker->get_pick_color().get_v() * 100.0;
 		case 3:

+ 3 - 0
scene/gui/color_picker.cpp

@@ -380,6 +380,9 @@ void ColorPicker::_value_changed(double) {
 		if (sliders[1]->get_value() > 0 || sliders[0]->get_value() != cached_hue) {
 			cached_hue = sliders[0]->get_value();
 		}
+		if (sliders[2]->get_value() > 0 || sliders[1]->get_value() != cached_saturation) {
+			cached_saturation = sliders[1]->get_value();
+		}
 	}
 
 	if (current_mode == MODE_HSV || current_mode == MODE_OKHSL) {

+ 2 - 0
scene/gui/color_picker.h

@@ -205,6 +205,7 @@ private:
 	float s = 0.0;
 	float v = 0.0;
 	float cached_hue = 0.0;
+	float cached_saturation = 0.0;
 	Color last_color;
 
 	struct ThemeCache {
@@ -296,6 +297,7 @@ public:
 	void set_editor_settings(Object *p_editor_settings);
 #endif
 	float get_cached_hue() { return cached_hue; };
+	float get_cached_saturation() { return cached_saturation; };
 
 	HSlider *get_slider(int idx);
 	Vector<float> get_active_slider_values();