mirror of
https://github.com/godotengine/godot.git
synced 2024-11-21 11:32:13 +00:00
Compare commits
3 Commits
0602f22dc0
...
8f409b1fc8
Author | SHA1 | Date | |
---|---|---|---|
|
8f409b1fc8 | ||
|
f5507aec7f | ||
|
e3ebbdd963 |
@ -210,26 +210,36 @@ void ColorModeHSV::slider_draw(int p_which) {
|
||||
}
|
||||
|
||||
String ColorModeRAW::get_slider_label(int idx) const {
|
||||
ERR_FAIL_INDEX_V_MSG(idx, 3, String(), "Couldn't get slider label.");
|
||||
ERR_FAIL_INDEX_V_MSG(idx, 4, String(), "Couldn't get slider label.");
|
||||
return labels[idx];
|
||||
}
|
||||
|
||||
float ColorModeRAW::get_slider_max(int idx) const {
|
||||
ERR_FAIL_INDEX_V_MSG(idx, 4, 0, "Couldn't get slider max value.");
|
||||
ERR_FAIL_INDEX_V_MSG(idx, 5, 0, "Couldn't get slider max value.");
|
||||
return slider_max[idx];
|
||||
}
|
||||
|
||||
float ColorModeRAW::get_slider_value(int idx) const {
|
||||
ERR_FAIL_INDEX_V_MSG(idx, 4, 0, "Couldn't get slider value.");
|
||||
return color_picker->get_pick_color().components[idx];
|
||||
ERR_FAIL_INDEX_V_MSG(idx, 5, 0, "Couldn't get slider value.");
|
||||
Color color = color_picker->get_pick_color();
|
||||
float intensity = MAX(1, MAX(MAX(color.r, color.g), color.b));
|
||||
if (idx == 3) {
|
||||
return Math::log2(intensity);
|
||||
} else if (idx == 4) {
|
||||
return color.a;
|
||||
} else {
|
||||
return color.components[idx] / intensity;
|
||||
}
|
||||
}
|
||||
|
||||
Color ColorModeRAW::get_color() const {
|
||||
Vector<float> values = color_picker->get_active_slider_values();
|
||||
Color color;
|
||||
for (int i = 0; i < 4; i++) {
|
||||
color.components[i] = values[i];
|
||||
float intensity = Math::pow(2, values[3]);
|
||||
for (int i = 0; i < 3; i++) {
|
||||
color.components[i] = values[i] * intensity;
|
||||
}
|
||||
color.a = values[4];
|
||||
return color;
|
||||
}
|
||||
|
||||
|
@ -105,11 +105,12 @@ public:
|
||||
|
||||
class ColorModeRAW : public ColorMode {
|
||||
public:
|
||||
String labels[3] = { "R", "G", "B" };
|
||||
float slider_max[4] = { 100, 100, 100, 1 };
|
||||
String labels[4] = { "R", "G", "B", "I" };
|
||||
float slider_max[5] = { 1, 1, 1, 5, 1 };
|
||||
|
||||
virtual String get_name() const override { return "RAW"; }
|
||||
|
||||
virtual int get_slider_count() const override { return 4; }
|
||||
virtual float get_slider_step() const override { return 0.001; }
|
||||
virtual float get_spinbox_arrow_step() const override { return 0.01; }
|
||||
virtual String get_slider_label(int idx) const override;
|
||||
|
@ -128,10 +128,8 @@ void ColorPicker::_notification(int p_what) {
|
||||
|
||||
_reset_sliders_theme();
|
||||
|
||||
if (Engine::get_singleton()->is_editor_hint()) {
|
||||
// Adjust for the width of the "Script" icon.
|
||||
text_type->set_custom_minimum_size(Size2(28 * theme_cache.base_scale, 0));
|
||||
}
|
||||
// Adjust for the width of the "Script" icon.
|
||||
text_type->set_custom_minimum_size(Size2(28 * theme_cache.base_scale, 0));
|
||||
|
||||
_update_presets();
|
||||
_update_recent_presets();
|
||||
@ -579,7 +577,7 @@ void ColorPicker::_reset_sliders_theme() {
|
||||
}
|
||||
|
||||
void ColorPicker::_html_submitted(const String &p_html) {
|
||||
if (updating || text_is_constructor || !c_text->is_visible()) {
|
||||
if (updating || text_is_constructor || !c_text->is_editable()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -705,7 +703,9 @@ void ColorPicker::_text_type_toggled() {
|
||||
if (text_is_constructor) {
|
||||
text_type->set_text("");
|
||||
#ifdef TOOLS_ENABLED
|
||||
text_type->set_button_icon(get_editor_theme_icon(SNAME("Script")));
|
||||
if (Engine::get_singleton()->is_editor_hint()) {
|
||||
text_type->set_button_icon(get_editor_theme_icon(SNAME("Script")));
|
||||
}
|
||||
#endif
|
||||
|
||||
c_text->set_editable(false);
|
||||
@ -717,7 +717,7 @@ void ColorPicker::_text_type_toggled() {
|
||||
c_text->set_editable(true);
|
||||
c_text->set_tooltip_text(ETR("Enter a hex code (\"#ff0000\") or named color (\"red\")."));
|
||||
}
|
||||
_update_color();
|
||||
_update_text_value();
|
||||
}
|
||||
|
||||
Color ColorPicker::get_pick_color() const {
|
||||
@ -1047,25 +1047,35 @@ bool ColorPicker::is_deferred_mode() const {
|
||||
}
|
||||
|
||||
void ColorPicker::_update_text_value() {
|
||||
bool text_visible = true;
|
||||
if (text_is_constructor) {
|
||||
bool is_rgb_valid = color.r <= 1 && color.g <= 1 && color.b <= 1 && color.r >= 0 && color.g >= 0 && color.b >= 0;
|
||||
if (text_is_constructor || !is_rgb_valid) {
|
||||
String t = "Color(" + String::num(color.r, 3) + ", " + String::num(color.g, 3) + ", " + String::num(color.b, 3);
|
||||
if (edit_alpha && color.a < 1) {
|
||||
t += ", " + String::num(color.a, 3) + ")";
|
||||
} else {
|
||||
t += ")";
|
||||
}
|
||||
text_type->set_text("");
|
||||
#ifdef TOOLS_ENABLED
|
||||
if (Engine::get_singleton()->is_editor_hint()) {
|
||||
text_type->set_button_icon(get_editor_theme_icon(SNAME("Script")));
|
||||
}
|
||||
#endif
|
||||
if (!is_rgb_valid) {
|
||||
text_type->set_disabled(true);
|
||||
} else {
|
||||
text_type->set_disabled(false);
|
||||
}
|
||||
c_text->set_text(t);
|
||||
}
|
||||
c_text->set_editable(false);
|
||||
} else {
|
||||
text_type->set_text("#");
|
||||
text_type->set_button_icon(nullptr);
|
||||
text_type->set_disabled(false);
|
||||
|
||||
if (color.r > 1 || color.g > 1 || color.b > 1 || color.r < 0 || color.g < 0 || color.b < 0) {
|
||||
text_visible = false;
|
||||
} else if (!text_is_constructor) {
|
||||
c_text->set_text(color.to_html(edit_alpha && color.a < 1));
|
||||
c_text->set_editable(true);
|
||||
}
|
||||
|
||||
text_type->set_visible(text_visible);
|
||||
c_text->set_visible(text_visible);
|
||||
}
|
||||
|
||||
void ColorPicker::_sample_input(const Ref<InputEvent> &p_event) {
|
||||
@ -1934,11 +1944,9 @@ ColorPicker::ColorPicker() {
|
||||
hex_hbc->add_child(text_type);
|
||||
text_type->set_text("#");
|
||||
text_type->set_tooltip_text(RTR("Switch between hexadecimal and code values."));
|
||||
if (Engine::get_singleton()->is_editor_hint()) {
|
||||
text_type->connect(SceneStringName(pressed), callable_mp(this, &ColorPicker::_text_type_toggled));
|
||||
} else {
|
||||
text_type->connect(SceneStringName(pressed), callable_mp(this, &ColorPicker::_text_type_toggled));
|
||||
if (!Engine::get_singleton()->is_editor_hint()) {
|
||||
text_type->set_flat(true);
|
||||
text_type->set_mouse_filter(MOUSE_FILTER_IGNORE);
|
||||
}
|
||||
|
||||
c_text = memnew(LineEdit);
|
||||
|
Loading…
Reference in New Issue
Block a user