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

Change print warnings to config ones for popups that need transparency #101321

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
2 changes: 1 addition & 1 deletion main/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2531,7 +2531,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
GLOBAL_DEF_BASIC("internationalization/locale/include_text_server_data", false);

OS::get_singleton()->_allow_hidpi = GLOBAL_DEF("display/window/dpi/allow_hidpi", true);
OS::get_singleton()->_allow_layered = GLOBAL_DEF("display/window/per_pixel_transparency/allowed", false);
OS::get_singleton()->_allow_layered = GLOBAL_DEF_RST("display/window/per_pixel_transparency/allowed", false);

#ifdef TOOLS_ENABLED
if (editor || project_manager) {
Expand Down
8 changes: 8 additions & 0 deletions scene/gui/menu_button.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,14 @@ void MenuButton::set_disable_shortcuts(bool p_disabled) {
disable_shortcuts = p_disabled;
}

#ifdef TOOLS_ENABLED
PackedStringArray MenuButton::get_configuration_warnings() const {
PackedStringArray warnings = Button::get_configuration_warnings();
warnings.append_array(popup->get_configuration_warnings());
return warnings;
}
#endif

MenuButton::MenuButton(const String &p_text) :
Button(p_text) {
set_flat(true);
Expand Down
4 changes: 4 additions & 0 deletions scene/gui/menu_button.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@ class MenuButton : public Button {
void set_item_count(int p_count);
int get_item_count() const;

#ifdef TOOLS_ENABLED
PackedStringArray get_configuration_warnings() const override;
#endif

MenuButton(const String &p_text = String());
~MenuButton();
};
Expand Down
8 changes: 8 additions & 0 deletions scene/gui/option_button.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -582,6 +582,14 @@ void OptionButton::set_disable_shortcuts(bool p_disabled) {
disable_shortcuts = p_disabled;
}

#ifdef TOOLS_ENABLED
PackedStringArray OptionButton::get_configuration_warnings() const {
PackedStringArray warnings = Button::get_configuration_warnings();
warnings.append_array(popup->get_configuration_warnings());
return warnings;
}
#endif

OptionButton::OptionButton(const String &p_text) :
Button(p_text) {
set_toggle_mode(true);
Expand Down
4 changes: 4 additions & 0 deletions scene/gui/option_button.h
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,10 @@ class OptionButton : public Button {

void set_disable_shortcuts(bool p_disabled);

#ifdef TOOLS_ENABLED
PackedStringArray get_configuration_warnings() const override;
#endif

OptionButton(const String &p_text = String());
~OptionButton();
};
Expand Down
35 changes: 26 additions & 9 deletions scene/gui/popup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@

#include "popup.h"

#ifdef TOOLS_ENABLED
#include "core/config/project_settings.h"
#endif
#include "scene/gui/panel.h"
#include "scene/resources/style_box_flat.h"
#include "scene/theme/theme_db.h"
Expand Down Expand Up @@ -221,6 +224,21 @@ Popup::Popup() {
Popup::~Popup() {
}

#ifdef TOOLS_ENABLED
PackedStringArray PopupPanel::get_configuration_warnings() const {
PackedStringArray warnings = Popup::get_configuration_warnings();

if (!DisplayServer::get_singleton()->is_window_transparency_available() && !GLOBAL_GET("display/window/subwindows/embed_subwindows")) {
Ref<StyleBoxFlat> sb = theme_cache.panel_style;
if (sb.is_valid() && (sb->get_shadow_size() > 0 || sb->get_corner_radius(CORNER_TOP_LEFT) > 0 || sb->get_corner_radius(CORNER_TOP_RIGHT) > 0 || sb->get_corner_radius(CORNER_BOTTOM_LEFT) > 0 || sb->get_corner_radius(CORNER_BOTTOM_RIGHT) > 0)) {
warnings.push_back(RTR("The current theme style has shadows and/or rounded corners for popups, but those won't display correctly if \"display/window/per_pixel_transparency/allowed\" isn't enabled in the Project Settings, nor if it isn't supported."));
}
}

return warnings;
}
#endif

void PopupPanel::_input_from_window(const Ref<InputEvent> &p_event) {
if (p_event.is_valid()) {
if (!get_flag(FLAG_POPUP)) {
Expand Down Expand Up @@ -341,15 +359,6 @@ void PopupPanel::_update_child_rects() const {

void PopupPanel::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE: {
if (!Engine::get_singleton()->is_editor_hint() && !DisplayServer::get_singleton()->is_window_transparency_available() && !is_embedded()) {
Ref<StyleBoxFlat> sb = theme_cache.panel_style;
if (sb.is_valid() && (sb->get_shadow_size() > 0 || sb->get_corner_radius(CORNER_TOP_LEFT) > 0 || sb->get_corner_radius(CORNER_TOP_RIGHT) > 0 || sb->get_corner_radius(CORNER_BOTTOM_LEFT) > 0 || sb->get_corner_radius(CORNER_BOTTOM_RIGHT) > 0)) {
WARN_PRINT_ONCE("The current theme styles PopupPanel to have shadows and/or rounded corners, but those won't display correctly if 'display/window/per_pixel_transparency/allowed' isn't enabled in the Project Settings, nor if it isn't supported.");
}
}
} break;

case NOTIFICATION_THEME_CHANGED: {
panel->add_theme_style_override(SceneStringName(panel), theme_cache.panel_style);

Expand All @@ -358,6 +367,10 @@ void PopupPanel::_notification(int p_what) {
}

_update_child_rects();

#ifdef TOOLS_ENABLED
update_configuration_warnings();
#endif
} break;

case Control::NOTIFICATION_LAYOUT_DIRECTION_CHANGED: {
Expand Down Expand Up @@ -410,4 +423,8 @@ PopupPanel::PopupPanel() {
panel = memnew(Panel);
panel->set_anchors_and_offsets_preset(Control::PRESET_FULL_RECT);
add_child(panel, false, INTERNAL_MODE_FRONT);

#ifdef TOOLS_ENABLED
ProjectSettings::get_singleton()->connect("settings_changed", callable_mp((Node *)this, &Node::update_configuration_warnings));
#endif
}
4 changes: 4 additions & 0 deletions scene/gui/popup.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,10 @@ class PopupPanel : public Popup {
virtual Size2 _get_contents_minimum_size() const override;

public:
#ifdef TOOLS_ENABLED
PackedStringArray get_configuration_warnings() const override;
#endif

PopupPanel();
};

Expand Down
30 changes: 23 additions & 7 deletions scene/gui/popup_menu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1106,13 +1106,6 @@ void PopupMenu::_notification(int p_what) {
if (system_menu_id != NativeMenu::INVALID_MENU_ID) {
bind_global_menu();
}

if (!Engine::get_singleton()->is_editor_hint() && !DisplayServer::get_singleton()->is_window_transparency_available() && !is_embedded()) {
Ref<StyleBoxFlat> sb = theme_cache.panel_style;
if (sb.is_valid() && (sb->get_shadow_size() > 0 || sb->get_corner_radius(CORNER_TOP_LEFT) > 0 || sb->get_corner_radius(CORNER_TOP_RIGHT) > 0 || sb->get_corner_radius(CORNER_BOTTOM_LEFT) > 0 || sb->get_corner_radius(CORNER_BOTTOM_RIGHT) > 0)) {
WARN_PRINT_ONCE("The current theme styles PopupMenu to have shadows and/or rounded corners, but those won't display correctly if 'display/window/per_pixel_transparency/allowed' isn't enabled in the Project Settings, nor if it isn't supported.");
}
}
} break;

case NOTIFICATION_EXIT_TREE: {
Expand All @@ -1129,6 +1122,10 @@ void PopupMenu::_notification(int p_what) {
_update_shadow_offsets();
}

#ifdef TOOLS_ENABLED
update_configuration_warnings();
#endif

[[fallthrough]];
}
case NOTIFICATION_TRANSLATION_CHANGED: {
Expand Down Expand Up @@ -2709,6 +2706,21 @@ String PopupMenu::get_tooltip(const Point2 &p_pos) const {
return items[over].tooltip;
}

#ifdef TOOLS_ENABLED
PackedStringArray PopupMenu::get_configuration_warnings() const {
PackedStringArray warnings = Popup::get_configuration_warnings();

if (!DisplayServer::get_singleton()->is_window_transparency_available() && !GLOBAL_GET("display/window/subwindows/embed_subwindows")) {
Ref<StyleBoxFlat> sb = theme_cache.panel_style;
if (sb.is_valid() && (sb->get_shadow_size() > 0 || sb->get_corner_radius(CORNER_TOP_LEFT) > 0 || sb->get_corner_radius(CORNER_TOP_RIGHT) > 0 || sb->get_corner_radius(CORNER_BOTTOM_LEFT) > 0 || sb->get_corner_radius(CORNER_BOTTOM_RIGHT) > 0)) {
warnings.push_back(RTR("The current theme style has shadows and/or rounded corners for popups, but those won't display correctly if \"display/window/per_pixel_transparency/allowed\" isn't enabled in the Project Settings, nor if it isn't supported."));
}
}

return warnings;
}
#endif

void PopupMenu::add_autohide_area(const Rect2 &p_area) {
autohide_areas.push_back(p_area);
}
Expand Down Expand Up @@ -3027,6 +3039,10 @@ PopupMenu::PopupMenu() {
add_child(minimum_lifetime_timer, false, INTERNAL_MODE_FRONT);

property_helper.setup_for_instance(base_property_helper, this);

#ifdef TOOLS_ENABLED
ProjectSettings::get_singleton()->connect("settings_changed", callable_mp((Node *)this, &Node::update_configuration_warnings));
#endif
}

PopupMenu::~PopupMenu() {
Expand Down
4 changes: 4 additions & 0 deletions scene/gui/popup_menu.h
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,10 @@ class PopupMenu : public Popup {

virtual String get_tooltip(const Point2 &p_pos) const;

#ifdef TOOLS_ENABLED
PackedStringArray get_configuration_warnings() const override;
#endif

void add_autohide_area(const Rect2 &p_area);
void clear_autohide_areas();

Expand Down