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