summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Gilleron <marc.gilleron@gmail.com>2017-05-02 02:18:13 +0200
committerMarc Gilleron <marc.gilleron@gmail.com>2017-05-02 02:18:50 +0200
commitd78efddbf582d4f9af852948baee1b0e6bab4744 (patch)
tree4300a13a29668f32063211b4f25822a45689d5ec
parent4dd291cecb1ebe8971b9e9d09c35bbe489b9954e (diff)
Fix #8617 WindowDialog with custom panel background crashes godot
-rw-r--r--scene/gui/dialogs.cpp30
1 files changed, 17 insertions, 13 deletions
diff --git a/scene/gui/dialogs.cpp b/scene/gui/dialogs.cpp
index 835775e13b..cf5321e907 100644
--- a/scene/gui/dialogs.cpp
+++ b/scene/gui/dialogs.cpp
@@ -54,20 +54,24 @@ void WindowDialog::_fix_size() {
// Windows require additional padding to keep the window chrome visible.
Ref<StyleBoxTexture> panel = get_stylebox("panel", "WindowDialog");
- float top = panel->get_expand_margin_size(MARGIN_TOP);
- float left = panel->get_expand_margin_size(MARGIN_LEFT);
- float bottom = panel->get_expand_margin_size(MARGIN_BOTTOM);
- float right = panel->get_expand_margin_size(MARGIN_RIGHT);
- pos.x = MAX(left, MIN(pos.x, viewport_size.x - size.x - right));
- pos.y = MAX(top, MIN(pos.y, viewport_size.y - size.y - bottom));
- set_global_position(pos);
-
- // Also resize the window to fit if a resize should be possible at all.
- if (resizable) {
- size.x = MIN(size.x, viewport_size.x - left - right);
- size.y = MIN(size.y, viewport_size.y - top - bottom);
- set_size(size);
+ // Check validity, because the theme could contain a different type of StyleBox
+ if (panel.is_valid()) {
+ float top = panel->get_expand_margin_size(MARGIN_TOP);
+ float left = panel->get_expand_margin_size(MARGIN_LEFT);
+ float bottom = panel->get_expand_margin_size(MARGIN_BOTTOM);
+ float right = panel->get_expand_margin_size(MARGIN_RIGHT);
+
+ pos.x = MAX(left, MIN(pos.x, viewport_size.x - size.x - right));
+ pos.y = MAX(top, MIN(pos.y, viewport_size.y - size.y - bottom));
+ set_global_position(pos);
+
+ // Also resize the window to fit if a resize should be possible at all.
+ if (resizable) {
+ size.x = MIN(size.x, viewport_size.x - left - right);
+ size.y = MIN(size.y, viewport_size.y - top - bottom);
+ set_size(size);
+ }
}
}