Don't instantiate ColorPicker in EditorPropertyColor constructor

This commit is contained in:
Lars Pettersson 2025-01-15 03:54:19 +01:00
parent 1b7b009674
commit 3376ba6688
No known key found for this signature in database
GPG key ID: CC050E7B46DF7540
2 changed files with 14 additions and 9 deletions

View file

@ -2599,6 +2599,17 @@ void EditorPropertyColor::_color_changed(const Color &p_color) {
get_edited_object()->set(get_edited_property(), p_color); get_edited_object()->set(get_edited_property(), p_color);
} }
void EditorPropertyColor::_picker_created() {
picker->get_popup()->connect("about_to_popup", callable_mp(this, &EditorPropertyColor::_popup_opening));
picker->connect("popup_closed", callable_mp(this, &EditorPropertyColor::_popup_closed), CONNECT_DEFERRED);
}
void EditorPropertyColor::_popup_opening() {
EditorNode::get_singleton()->setup_color_picker(picker->get_picker());
last_color = picker->get_pick_color();
was_checked = !is_checkable() || is_checked();
}
void EditorPropertyColor::_popup_closed() { void EditorPropertyColor::_popup_closed() {
get_edited_object()->set(get_edited_property(), was_checked ? Variant(last_color) : Variant()); get_edited_object()->set(get_edited_property(), was_checked ? Variant(last_color) : Variant());
if (!picker->get_pick_color().is_equal_approx(last_color)) { if (!picker->get_pick_color().is_equal_approx(last_color)) {
@ -2606,11 +2617,6 @@ void EditorPropertyColor::_popup_closed() {
} }
} }
void EditorPropertyColor::_picker_opening() {
last_color = picker->get_pick_color();
was_checked = !is_checkable() || is_checked();
}
void EditorPropertyColor::_notification(int p_what) { void EditorPropertyColor::_notification(int p_what) {
switch (p_what) { switch (p_what) {
case NOTIFICATION_ENTER_TREE: case NOTIFICATION_ENTER_TREE:
@ -2654,9 +2660,7 @@ EditorPropertyColor::EditorPropertyColor() {
add_child(picker); add_child(picker);
picker->set_flat(true); picker->set_flat(true);
picker->connect("color_changed", callable_mp(this, &EditorPropertyColor::_color_changed)); picker->connect("color_changed", callable_mp(this, &EditorPropertyColor::_color_changed));
picker->connect("popup_closed", callable_mp(this, &EditorPropertyColor::_popup_closed), CONNECT_DEFERRED); picker->connect("picker_created", callable_mp(this, &EditorPropertyColor::_picker_created), CONNECT_ONE_SHOT);
picker->get_popup()->connect("about_to_popup", callable_mp(EditorNode::get_singleton(), &EditorNode::setup_color_picker).bind(picker->get_picker()));
picker->get_popup()->connect("about_to_popup", callable_mp(this, &EditorPropertyColor::_picker_opening));
} }
////////////// NODE PATH ////////////////////// ////////////// NODE PATH //////////////////////

View file

@ -593,8 +593,9 @@ class EditorPropertyColor : public EditorProperty {
GDCLASS(EditorPropertyColor, EditorProperty); GDCLASS(EditorPropertyColor, EditorProperty);
ColorPickerButton *picker = nullptr; ColorPickerButton *picker = nullptr;
void _color_changed(const Color &p_color); void _color_changed(const Color &p_color);
void _picker_created();
void _popup_opening();
void _popup_closed(); void _popup_closed();
void _picker_opening();
Color last_color; Color last_color;
bool live_changes_enabled = true; bool live_changes_enabled = true;