diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2019-12-30 18:00:37 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-30 18:00:37 +0100 |
commit | 7b412eb8390d73313bfc6ba4997e3533802186cf (patch) | |
tree | 4528f87410ba735ec8a81043d07d193e93bb1c66 | |
parent | 583d96cb964d37cca39e3bc0e9a4372d6693dfec (diff) | |
parent | fd2c181a3560eebfeae3ac53c55309f505dde849 (diff) |
Merge pull request #34653 from YeldhamDev/optionbutton_margin_auto
Make OptionButton itself take into account the arrow margin instead of relying on the theme
-rw-r--r-- | editor/editor_themes.cpp | 23 | ||||
-rw-r--r-- | scene/gui/option_button.cpp | 14 | ||||
-rw-r--r-- | scene/resources/default_theme/default_theme.cpp | 8 |
3 files changed, 21 insertions, 24 deletions
diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp index 6ac20e6719..b203ca8bc0 100644 --- a/editor/editor_themes.cpp +++ b/editor/editor_themes.cpp @@ -587,24 +587,11 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_color("icon_color_pressed", "Button", icon_color_pressed); // OptionButton - Ref<StyleBoxFlat> style_option_button_normal = style_widget->duplicate(); - Ref<StyleBoxFlat> style_option_button_hover = style_widget_hover->duplicate(); - Ref<StyleBoxFlat> style_option_button_pressed = style_widget_pressed->duplicate(); - Ref<StyleBoxFlat> style_option_button_focus = style_widget_focus->duplicate(); - Ref<StyleBoxFlat> style_option_button_disabled = style_widget_disabled->duplicate(); - - int option_button_arrow_margin = theme->get_icon("GuiOptionArrow", "EditorIcons")->get_size().width + (default_margin_size + 4) * EDSCALE; - style_option_button_normal->set_default_margin(MARGIN_RIGHT, option_button_arrow_margin); - style_option_button_hover->set_default_margin(MARGIN_RIGHT, option_button_arrow_margin); - style_option_button_pressed->set_default_margin(MARGIN_RIGHT, option_button_arrow_margin); - style_option_button_focus->set_default_margin(MARGIN_RIGHT, option_button_arrow_margin); - style_option_button_disabled->set_default_margin(MARGIN_RIGHT, option_button_arrow_margin); - - theme->set_stylebox("normal", "OptionButton", style_option_button_normal); - theme->set_stylebox("hover", "OptionButton", style_option_button_hover); - theme->set_stylebox("pressed", "OptionButton", style_option_button_pressed); - theme->set_stylebox("focus", "OptionButton", style_option_button_focus); - theme->set_stylebox("disabled", "OptionButton", style_option_button_disabled); + theme->set_stylebox("normal", "OptionButton", style_widget); + theme->set_stylebox("hover", "OptionButton", style_widget_hover); + theme->set_stylebox("pressed", "OptionButton", style_widget_pressed); + theme->set_stylebox("focus", "OptionButton", style_widget_focus); + theme->set_stylebox("disabled", "OptionButton", style_widget_disabled); theme->set_color("font_color", "OptionButton", font_color); theme->set_color("font_color_hover", "OptionButton", font_color_hl); diff --git a/scene/gui/option_button.cpp b/scene/gui/option_button.cpp index de8df4215d..f9214c3b1e 100644 --- a/scene/gui/option_button.cpp +++ b/scene/gui/option_button.cpp @@ -35,8 +35,9 @@ Size2 OptionButton::get_minimum_size() const { Size2 minsize = Button::get_minimum_size(); - if (has_icon("arrow")) + if (has_icon("arrow")) { minsize.width += Control::get_icon("arrow")->get_width() + get_constant("hseparation"); + } return minsize; } @@ -73,6 +74,12 @@ void OptionButton::_notification(int p_what) { Point2 ofs(size.width - arrow->get_width() - get_constant("arrow_margin"), int(Math::abs((size.height - arrow->get_height()) / 2))); arrow->draw(ci, ofs, clr); } break; + case NOTIFICATION_THEME_CHANGED: { + + if (has_icon("arrow")) { + _set_internal_margin(MARGIN_RIGHT, Control::get_icon("arrow")->get_width()); + } + } break; case NOTIFICATION_VISIBILITY_CHANGED: { if (!is_visible_in_tree()) { @@ -327,7 +334,7 @@ void OptionButton::_bind_methods() { ClassDB::bind_method(D_METHOD("_get_items"), &OptionButton::_get_items); ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "items", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_items", "_get_items"); - // "selected" property must come after "items", otherwise GH-10213 occurs + // "selected" property must come after "items", otherwise GH-10213 occurs. ADD_PROPERTY(PropertyInfo(Variant::INT, "selected"), "_select_int", "get_selected"); ADD_SIGNAL(MethodInfo("item_selected", PropertyInfo(Variant::INT, "id"))); ADD_SIGNAL(MethodInfo("item_focused", PropertyInfo(Variant::INT, "id"))); @@ -339,6 +346,9 @@ OptionButton::OptionButton() { set_toggle_mode(true); set_text_align(ALIGN_LEFT); set_action_mode(ACTION_MODE_BUTTON_PRESS); + if (has_icon("arrow")) { + _set_internal_margin(MARGIN_RIGHT, Control::get_icon("arrow")->get_width()); + } popup = memnew(PopupMenu); popup->hide(); diff --git a/scene/resources/default_theme/default_theme.cpp b/scene/resources/default_theme/default_theme.cpp index c67e5a928c..7bbe2a7d09 100644 --- a/scene/resources/default_theme/default_theme.cpp +++ b/scene/resources/default_theme/default_theme.cpp @@ -266,10 +266,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const // OptionButton - Ref<StyleBox> sb_optbutton_normal = sb_expand(make_stylebox(option_button_normal_png, 4, 4, 21, 4, 6, 3, 21, 3), 2, 2, 2, 2); - Ref<StyleBox> sb_optbutton_pressed = sb_expand(make_stylebox(option_button_pressed_png, 4, 4, 21, 4, 6, 3, 21, 3), 2, 2, 2, 2); - Ref<StyleBox> sb_optbutton_hover = sb_expand(make_stylebox(option_button_hover_png, 4, 4, 21, 4, 6, 2, 21, 2), 2, 2, 2, 2); - Ref<StyleBox> sb_optbutton_disabled = sb_expand(make_stylebox(option_button_disabled_png, 4, 4, 21, 4, 6, 2, 21, 2), 2, 2, 2, 2); + Ref<StyleBox> sb_optbutton_normal = sb_expand(make_stylebox(option_button_normal_png, 4, 4, 21, 4, 6, 3, 9, 3), 2, 2, 2, 2); + Ref<StyleBox> sb_optbutton_pressed = sb_expand(make_stylebox(option_button_pressed_png, 4, 4, 21, 4, 6, 3, 9, 3), 2, 2, 2, 2); + Ref<StyleBox> sb_optbutton_hover = sb_expand(make_stylebox(option_button_hover_png, 4, 4, 21, 4, 6, 2, 9, 2), 2, 2, 2, 2); + Ref<StyleBox> sb_optbutton_disabled = sb_expand(make_stylebox(option_button_disabled_png, 4, 4, 21, 4, 6, 2, 9, 2), 2, 2, 2, 2); Ref<StyleBox> sb_optbutton_focus = sb_expand(make_stylebox(button_focus_png, 4, 4, 4, 4, 6, 2, 6, 2), 2, 2, 2, 2); theme->set_stylebox("normal", "OptionButton", sb_optbutton_normal); |