|
@@ -105,6 +105,17 @@ void ColorModeRGB::slider_draw(int p_which) {
|
|
|
slider->draw_polygon(pos, col);
|
|
|
}
|
|
|
|
|
|
+void ColorModeHSV::_value_changed() {
|
|
|
+ Vector<float> values = color_picker->get_active_slider_values();
|
|
|
+
|
|
|
+ if (values[1] > 0 || values[0] != cached_hue) {
|
|
|
+ cached_hue = values[0];
|
|
|
+ }
|
|
|
+ if (values[2] > 0 || values[1] != cached_saturation) {
|
|
|
+ cached_saturation = values[1];
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
String ColorModeHSV::get_slider_label(int idx) const {
|
|
|
ERR_FAIL_INDEX_V_MSG(idx, 3, String(), "Couldn't get slider label.");
|
|
|
return labels[idx];
|
|
@@ -121,14 +132,14 @@ float ColorModeHSV::get_slider_value(int idx) const {
|
|
|
if (color_picker->get_pick_color().get_s() > 0) {
|
|
|
return color_picker->get_pick_color().get_h() * 360.0;
|
|
|
} else {
|
|
|
- return color_picker->get_cached_hue();
|
|
|
+ return cached_hue;
|
|
|
}
|
|
|
}
|
|
|
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();
|
|
|
+ return cached_saturation;
|
|
|
}
|
|
|
}
|
|
|
case 2:
|
|
@@ -176,7 +187,7 @@ void ColorModeHSV::slider_draw(int p_which) {
|
|
|
s_col.set_hsv(color.get_h(), 0, color.get_v());
|
|
|
left_color = (p_which == 1) ? s_col : Color(0, 0, 0);
|
|
|
|
|
|
- float s_col_hue = (color.get_s() == 0.0) ? color_picker->get_cached_hue() / 360.0 : color.get_h();
|
|
|
+ float s_col_hue = (Math::is_zero_approx(color.get_s())) ? cached_hue / 360.0 : color.get_h();
|
|
|
s_col.set_hsv(s_col_hue, 1, color.get_v());
|
|
|
v_col.set_hsv(color.get_h(), color.get_s(), 1);
|
|
|
right_color = (p_which == 1) ? s_col : v_col;
|
|
@@ -267,6 +278,17 @@ bool ColorModeRAW::apply_theme() const {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+void ColorModeOKHSL::_value_changed() {
|
|
|
+ Vector<float> values = color_picker->get_active_slider_values();
|
|
|
+
|
|
|
+ if (values[1] > 0 || values[0] != cached_hue) {
|
|
|
+ cached_hue = values[0];
|
|
|
+ }
|
|
|
+ if (values[2] > 0 || values[1] != cached_saturation) {
|
|
|
+ cached_saturation = values[1];
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
String ColorModeOKHSL::get_slider_label(int idx) const {
|
|
|
ERR_FAIL_INDEX_V_MSG(idx, 3, String(), "Couldn't get slider label.");
|
|
|
return labels[idx];
|
|
@@ -279,10 +301,20 @@ float ColorModeOKHSL::get_slider_max(int idx) const {
|
|
|
|
|
|
float ColorModeOKHSL::get_slider_value(int idx) const {
|
|
|
switch (idx) {
|
|
|
- case 0:
|
|
|
- return color_picker->get_pick_color().get_ok_hsl_h() * 360.0;
|
|
|
- case 1:
|
|
|
- return color_picker->get_pick_color().get_ok_hsl_s() * 100.0;
|
|
|
+ case 0: {
|
|
|
+ if (color_picker->get_pick_color().get_ok_hsl_s() > 0) {
|
|
|
+ return color_picker->get_pick_color().get_ok_hsl_h() * 360.0;
|
|
|
+ } else {
|
|
|
+ return cached_hue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ case 1: {
|
|
|
+ if (color_picker->get_pick_color().get_ok_hsl_l() > 0) {
|
|
|
+ return color_picker->get_pick_color().get_ok_hsl_s() * 100.0;
|
|
|
+ } else {
|
|
|
+ return cached_saturation;
|
|
|
+ }
|
|
|
+ }
|
|
|
case 2:
|
|
|
return color_picker->get_pick_color().get_ok_hsl_l() * 100.0;
|
|
|
case 3:
|
|
@@ -315,8 +347,11 @@ void ColorModeOKHSL::slider_draw(int p_which) {
|
|
|
col.resize(6);
|
|
|
left_color = Color(0, 0, 0);
|
|
|
Color middle_color;
|
|
|
- middle_color.set_ok_hsl(color.get_ok_hsl_h(), color.get_ok_hsl_s(), 0.5);
|
|
|
- right_color.set_ok_hsl(color.get_ok_hsl_h(), color.get_ok_hsl_s(), 1);
|
|
|
+ float slider_hue = (Math::is_zero_approx(color.get_ok_hsl_s())) ? cached_hue / 360.0 : color.get_ok_hsl_h();
|
|
|
+ float slider_sat = (Math::is_zero_approx(color.get_ok_hsl_l())) ? cached_saturation / 100.0 : color.get_ok_hsl_s();
|
|
|
+
|
|
|
+ middle_color.set_ok_hsl(slider_hue, slider_sat, 0.5);
|
|
|
+ right_color.set_ok_hsl(slider_hue, slider_sat, 1);
|
|
|
|
|
|
col.set(0, left_color);
|
|
|
col.set(1, middle_color);
|
|
@@ -347,7 +382,8 @@ void ColorModeOKHSL::slider_draw(int p_which) {
|
|
|
right_color = left_color;
|
|
|
} else {
|
|
|
left_color.set_ok_hsl(color.get_ok_hsl_h(), 0, color.get_ok_hsl_l());
|
|
|
- right_color.set_ok_hsl(color.get_ok_hsl_h(), 1, color.get_ok_hsl_l());
|
|
|
+ float s_col_hue = (Math::is_zero_approx(color.get_ok_hsl_s())) ? cached_hue / 360.0 : color.get_ok_hsl_h();
|
|
|
+ right_color.set_ok_hsl(s_col_hue, 1, color.get_ok_hsl_l());
|
|
|
}
|
|
|
|
|
|
col.set(0, left_color);
|