Skip to content

Commit

Permalink
Colorize raw mode rgb sliders
Browse files Browse the repository at this point in the history
  • Loading branch information
beicause committed Mar 6, 2025
1 parent 2bb6120 commit c7ba215
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 37 deletions.
22 changes: 9 additions & 13 deletions scene/gui/color_mode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,15 @@ void ColorModeRAW::slider_draw(int p_which) {
left_color.a = 0;
right_color = color;
right_color.a = 1;

} else if (p_which != 3) {
left_color = Color(
p_which == 0 ? 0 : color.r,
p_which == 1 ? 0 : color.g,
p_which == 2 ? 0 : color.b);
right_color = Color(
p_which == 0 ? 1 : color.r,
p_which == 1 ? 1 : color.g,
p_which == 2 ? 1 : color.b);
col.set(0, left_color);
col.set(1, right_color);
col.set(2, right_color);
Expand All @@ -275,18 +283,6 @@ void ColorModeRAW::slider_draw(int p_which) {
}
}

bool ColorModeRAW::apply_theme() const {
for (int i = 0; i < ColorPicker::SLIDER_COUNT; i++) {
HSlider *slider = color_picker->get_slider(i);
slider->remove_theme_icon_override("grabber");
slider->remove_theme_icon_override("grabber_highlight");
slider->remove_theme_style_override("slider");
slider->remove_theme_constant_override("grabber_offset");
}

return true;
}

void ColorModeOKHSL::_value_changed() {
Vector<float> values = color_picker->get_active_slider_values();

Expand Down
3 changes: 1 addition & 2 deletions scene/gui/color_mode.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ class ColorMode {
virtual void _value_changed() {}

virtual void slider_draw(int p_which) = 0;
virtual bool apply_theme() const { return false; }

virtual ColorPicker::PickerShapeType get_shape_override() const { return ColorPicker::SHAPE_MAX; }

ColorMode(ColorPicker *p_color_picker);
Expand Down Expand Up @@ -126,7 +126,6 @@ class ColorModeRAW : public ColorMode {
virtual Color get_color() const override;

virtual void slider_draw(int p_which) override;
virtual bool apply_theme() const override;

ColorModeRAW(ColorPicker *p_color_picker) :
ColorMode(p_color_picker) {}
Expand Down
37 changes: 17 additions & 20 deletions scene/gui/color_picker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -295,8 +295,6 @@ void ColorPicker::_update_controls() {
}
alpha_label->set_text("A");

slider_theme_modified = modes[current_mode]->apply_theme();

if (edit_alpha) {
alpha_value->show();
alpha_slider->show();
Expand Down Expand Up @@ -446,6 +444,8 @@ void ColorPicker::_slider_value_changed() {
sliders[1]->set_value_no_signal(color.g / multiplier);
sliders[2]->set_value_no_signal(color.b / multiplier);
sliders[3]->set_value_no_signal(Math::log2(multiplier));
// The color slightly changes because of slider step.
color = modes[current_mode]->get_color();
}
// Set intensity spinbox prefix.
values[3]->set_prefix(sliders[3]->get_value() < 0 ? "" : "+");
Expand Down Expand Up @@ -624,7 +624,8 @@ void ColorPicker::_reset_sliders_theme() {
style_box_flat->set_content_margin(SIDE_TOP, 16 * theme_cache.base_scale);
style_box_flat->set_bg_color(Color(0.2, 0.23, 0.31).lerp(Color(0, 0, 0, 1), 0.3).clamp());

for (int i = 0; i < SLIDER_COUNT; i++) {
// Skip intensity slider.
for (int i = 0; i < SLIDER_COUNT - 1; i++) {
sliders[i]->begin_bulk_theme_override();
sliders[i]->add_theme_icon_override("grabber", theme_cache.bar_arrow);
sliders[i]->add_theme_icon_override("grabber_highlight", theme_cache.bar_arrow);
Expand Down Expand Up @@ -1180,10 +1181,6 @@ void ColorPicker::set_color_mode(ColorModeType p_mode) {
return;
}

if (slider_theme_modified) {
_reset_sliders_theme();
}

mode_popup->set_item_checked(current_mode, false);
mode_popup->set_item_checked(p_mode, true);

Expand Down Expand Up @@ -1224,22 +1221,22 @@ void ColorPicker::set_colorize_sliders(bool p_colorize_sliders) {
if (colorize_sliders) {
Ref<StyleBoxEmpty> style_box_empty(memnew(StyleBoxEmpty));

if (!slider_theme_modified) {
for (int i = 0; i < SLIDER_COUNT; i++) {
sliders[i]->add_theme_style_override("slider", style_box_empty);
}
// Skip intensity slider.
for (int i = 0; i < SLIDER_COUNT - 1; i++) {
sliders[i]->add_theme_style_override("slider", style_box_empty);
}

alpha_slider->add_theme_style_override("slider", style_box_empty);
} else {
Ref<StyleBoxFlat> style_box_flat(memnew(StyleBoxFlat));
style_box_flat->set_content_margin(SIDE_TOP, 16 * theme_cache.base_scale);
style_box_flat->set_bg_color(Color(0.2, 0.23, 0.31).lerp(Color(0, 0, 0, 1), 0.3).clamp());

if (!slider_theme_modified) {
for (int i = 0; i < SLIDER_COUNT; i++) {
sliders[i]->add_theme_style_override("slider", style_box_flat);
}
// Skip intensity slider.
for (int i = 0; i < SLIDER_COUNT - 1; i++) {
sliders[i]->add_theme_style_override("slider", style_box_flat);
}

alpha_slider->add_theme_style_override("slider", style_box_flat);
}
}
Expand Down Expand Up @@ -2271,10 +2268,10 @@ ColorPicker::ColorPicker() {
shape_popup->set_item_checked(current_shape, true);
shape_popup->connect(SceneStringName(id_pressed), callable_mp(this, &ColorPicker::set_picker_shape));

add_mode(new ColorModeRGB(this));
add_mode(new ColorModeHSV(this));
add_mode(new ColorModeRAW(this));
add_mode(new ColorModeOKHSL(this));
add_mode(memnew(ColorModeRGB(this)));
add_mode(memnew(ColorModeHSV(this)));
add_mode(memnew(ColorModeRAW(this)));
add_mode(memnew(ColorModeOKHSL(this)));

mode_hbc = memnew(HBoxContainer);
real_vbox->add_child(mode_hbc);
Expand Down Expand Up @@ -2452,7 +2449,7 @@ ColorPicker::ColorPicker() {

ColorPicker::~ColorPicker() {
for (int i = 0; i < modes.size(); i++) {
delete modes[i];
memdelete(modes[i]);
}
}

Expand Down
2 changes: 0 additions & 2 deletions scene/gui/color_picker.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,6 @@ class ColorPicker : public VBoxContainer {
static const int MODE_BUTTON_COUNT = 3;
const float WHEEL_RADIUS = 0.42;

bool slider_theme_modified = true;

Vector<ColorMode *> modes;

Popup *picker_window = nullptr;
Expand Down

0 comments on commit c7ba215

Please sign in to comment.