From 98e21c6ad82aa0d814d04b240a6d56b61d139db3 Mon Sep 17 00:00:00 2001 From: Oliver James Date: Thu, 19 Dec 2024 17:44:29 +0000 Subject: [PATCH] PopupMenu: Move section header size calculation into LookAndFeel methods. This fixes a bug introduced in the previous commit that caused all menu items to be sized too large. --- .../lookandfeel/juce_LookAndFeel_V2.cpp | 13 +++++++++++++ .../lookandfeel/juce_LookAndFeel_V2.h | 6 ++++++ .../lookandfeel/juce_LookAndFeel_V4.cpp | 3 --- modules/juce_gui_basics/menus/juce_PopupMenu.cpp | 11 +++++------ modules/juce_gui_basics/menus/juce_PopupMenu.h | 6 ++++++ 5 files changed, 30 insertions(+), 9 deletions(-) diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp index 755e691b3f..afe8a4326d 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp @@ -899,7 +899,20 @@ void LookAndFeel_V2::getIdealPopupMenuItemSizeWithOptions (const String& text, standardMenuItemHeight, idealWidth, idealHeight); +} +void LookAndFeel_V2::getIdealPopupMenuSectionHeaderSizeWithOptions (const String& text, + int standardMenuItemHeight, + int& idealWidth, + int& idealHeight, + const PopupMenu::Options& options) +{ + getIdealPopupMenuItemSizeWithOptions (text, + false, + standardMenuItemHeight, + idealWidth, + idealHeight, + options); idealHeight += idealHeight / 2; idealWidth += idealWidth / 4; } diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h index 8662fcc9b6..f3ada35f81 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h @@ -207,6 +207,12 @@ public: int& idealHeight, const PopupMenu::Options&) override; + void getIdealPopupMenuSectionHeaderSizeWithOptions (const String& text, + int standardMenuItemHeight, + int& idealWidth, + int& idealHeight, + const PopupMenu::Options&) override; + int getMenuWindowFlags() override; void preparePopupMenuWindow (Component&) override; diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.cpp b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.cpp index d611bb9a95..a9ed7700fb 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.cpp +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.cpp @@ -884,9 +884,6 @@ void LookAndFeel_V4::getIdealPopupMenuItemSize (const String& text, const bool i idealHeight = standardMenuItemHeight > 0 ? standardMenuItemHeight : roundToInt (font.getHeight() * 1.3f); idealWidth = GlyphArrangement::getStringWidthInt (font, text) + idealHeight * 2; } - - idealHeight += idealHeight / 2; - idealWidth += idealWidth / 4; } void LookAndFeel_V4::drawMenuBarBackground (Graphics& g, int width, int height, diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp index 69129d3696..cf7974aabf 100644 --- a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp +++ b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp @@ -84,12 +84,11 @@ struct HeaderItemComponent final : public PopupMenu::CustomComponent void getIdealSize (int& idealWidth, int& idealHeight) override { - getLookAndFeel().getIdealPopupMenuItemSizeWithOptions (getName(), - false, - -1, - idealWidth, - idealHeight, - options); + getLookAndFeel().getIdealPopupMenuSectionHeaderSizeWithOptions (getName(), + -1, + idealWidth, + idealHeight, + options); } std::unique_ptr createAccessibilityHandler() override diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.h b/modules/juce_gui_basics/menus/juce_PopupMenu.h index 26235173dd..a8234453e9 100644 --- a/modules/juce_gui_basics/menus/juce_PopupMenu.h +++ b/modules/juce_gui_basics/menus/juce_PopupMenu.h @@ -997,6 +997,12 @@ public: int& idealHeight, const Options&) = 0; + virtual void getIdealPopupMenuSectionHeaderSizeWithOptions (const String& text, + int standardMenuItemHeight, + int& idealWidth, + int& idealHeight, + const Options&) = 0; + virtual int getMenuWindowFlags() = 0; virtual void drawMenuBarBackground (Graphics&, int width, int height,