Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Display the old color in ColorPicker for easier comparison (3.x) #48611

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 49 additions & 6 deletions scene/gui/color_picker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -394,17 +394,39 @@ void ColorPicker::_update_text_value() {
}

void ColorPicker::_sample_draw() {
const Rect2 r = Rect2(Point2(), Size2(uv_edit->get_size().width, sample->get_size().height * 0.95));
// Covers the right half of the sample if the old color is being displayed,
// or the whole sample if it's not being displayed.
Rect2 rect_new;

if (display_old_color) {
rect_new = Rect2(Point2(uv_edit->get_size().width * 0.5, 0), Size2(uv_edit->get_size().width * 0.5, sample->get_size().height * 0.95));

// Draw both old and new colors for easier comparison (only if spawned from a ColorPickerButton).
const Rect2 rect_old = Rect2(Point2(), Size2(uv_edit->get_size().width * 0.5, sample->get_size().height * 0.95));

if (display_old_color && old_color.a < 1.0) {
sample->draw_texture_rect(get_icon("preset_bg", "ColorPicker"), rect_old, true);
}

sample->draw_rect(rect_old, old_color);

if (old_color.r > 1 || old_color.g > 1 || old_color.b > 1) {
// Draw an indicator to denote that the old color is "overbright" and can't be displayed accurately in the preview.
sample->draw_texture(get_icon("overbright_indicator", "ColorPicker"), Point2());
}
} else {
rect_new = Rect2(Point2(), Size2(uv_edit->get_size().width, sample->get_size().height * 0.95));
}

if (color.a < 1.0) {
sample->draw_texture_rect(get_icon("preset_bg", "ColorPicker"), r, true);
sample->draw_texture_rect(get_icon("preset_bg", "ColorPicker"), rect_new, true);
}

sample->draw_rect(r, color);
sample->draw_rect(rect_new, color);

if (color.r > 1 || color.g > 1 || color.b > 1) {
// Draw an indicator to denote that the color is "overbright" and can't be displayed accurately in the preview
sample->draw_texture(get_icon("overbright_indicator", "ColorPicker"), Point2());
// Draw an indicator to denote that the new color is "overbright" and can't be displayed accurately in the preview
sample->draw_texture(get_icon("overbright_indicator", "ColorPicker"), Point2(uv_edit->get_size().width * 0.5, 0));
}
}

Expand Down Expand Up @@ -886,6 +908,13 @@ ColorPicker::ColorPicker() :

/////////////////

void ColorPickerButton::_about_to_show() {
set_pressed(true);
if (picker) {
picker->set_old_color(color);
}
}

void ColorPickerButton::_color_changed(const Color &p_color) {
color = p_color;
update();
Expand Down Expand Up @@ -943,6 +972,18 @@ Color ColorPickerButton::get_pick_color() const {
return color;
}

void ColorPicker::set_old_color(const Color &p_color) {
old_color = p_color;
}

void ColorPicker::set_display_old_color(bool p_enabled) {
display_old_color = p_enabled;
}

bool ColorPicker::is_displaying_old_color() const {
return display_old_color;
}

void ColorPickerButton::set_edit_alpha(bool p_show) {
edit_alpha = p_show;
if (picker) {
Expand Down Expand Up @@ -972,10 +1013,11 @@ void ColorPickerButton::_update_picker() {
add_child(popup);
picker->connect("color_changed", this, "_color_changed");
popup->connect("modal_closed", this, "_modal_closed");
popup->connect("about_to_show", this, "set_pressed", varray(true));
popup->connect("about_to_show", this, "_about_to_show");
popup->connect("popup_hide", this, "set_pressed", varray(false));
picker->set_pick_color(color);
picker->set_edit_alpha(edit_alpha);
picker->set_display_old_color(true);
emit_signal("picker_created");
}
}
Expand All @@ -987,6 +1029,7 @@ void ColorPickerButton::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_popup"), &ColorPickerButton::get_popup);
ClassDB::bind_method(D_METHOD("set_edit_alpha", "show"), &ColorPickerButton::set_edit_alpha);
ClassDB::bind_method(D_METHOD("is_editing_alpha"), &ColorPickerButton::is_editing_alpha);
ClassDB::bind_method(D_METHOD("_about_to_show"), &ColorPickerButton::_about_to_show);
ClassDB::bind_method(D_METHOD("_color_changed"), &ColorPickerButton::_color_changed);
ClassDB::bind_method(D_METHOD("_modal_closed"), &ColorPickerButton::_modal_closed);

Expand Down
7 changes: 7 additions & 0 deletions scene/gui/color_picker.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ class ColorPicker : public BoxContainer {
int presets_per_row;

Color color;
Color old_color;
bool display_old_color = false;
bool raw_mode_enabled;
bool hsv_mode_enabled;
bool deferred_mode_enabled;
Expand Down Expand Up @@ -112,6 +114,10 @@ class ColorPicker : public BoxContainer {
void _set_pick_color(const Color &p_color, bool p_update_sliders);
void set_pick_color(const Color &p_color);
Color get_pick_color() const;
void set_old_color(const Color &p_color);

void set_display_old_color(bool p_enabled);
bool is_displaying_old_color() const;

void add_preset(const Color &p_color);
void erase_preset(const Color &p_color);
Expand Down Expand Up @@ -145,6 +151,7 @@ class ColorPickerButton : public Button {
Color color;
bool edit_alpha;

void _about_to_show();
void _color_changed(const Color &p_color);
void _modal_closed();

Expand Down