From b7a7563a593bb3af90d6e184dc6ebb5dfba5db48 Mon Sep 17 00:00:00 2001 From: ed Date: Wed, 16 Aug 2017 10:50:42 +0100 Subject: [PATCH] Added a virtual getPopupMenuBorderSize() to PopupMenu::LookAndFeelMethods --- .../lookandfeel/juce_LookAndFeel_V2.cpp | 2 ++ .../lookandfeel/juce_LookAndFeel_V2.h | 2 ++ modules/juce_gui_basics/menus/juce_PopupMenu.cpp | 14 +++++++------- modules/juce_gui_basics/menus/juce_PopupMenu.h | 2 ++ 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp index 58dc722090..a6da80b56f 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp @@ -1104,6 +1104,8 @@ void LookAndFeel_V2::preparePopupMenuWindow (Component&) {} bool LookAndFeel_V2::shouldPopupMenuScaleWithTargetComponent (const PopupMenu::Options&) { return true; } +int LookAndFeel_V2::getPopupMenuBorderSize() { return 2; } + //============================================================================== void LookAndFeel_V2::fillTextEditorBackground (Graphics& g, int /*width*/, int /*height*/, TextEditor& textEditor) { diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h index 302edef3e2..31fd22bc9d 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h @@ -182,6 +182,8 @@ public: bool shouldPopupMenuScaleWithTargetComponent (const PopupMenu::Options& options) override; + int getPopupMenuBorderSize() override; + //============================================================================== void drawComboBox (Graphics&, int width, int height, bool isButtonDown, int buttonX, int buttonY, int buttonW, int buttonH, diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp index 27aa3e5d0d..5e6d7c45d9 100644 --- a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp +++ b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp @@ -27,7 +27,6 @@ namespace PopupMenuSettings { const int scrollZone = 24; - const int borderSize = 2; const int dismissCommandId = 0x6287345f; static bool menuWasHiddenBecauseOfAppChange = false; @@ -290,7 +289,8 @@ public: auto& lf = getLookAndFeel(); if (parentComponent != nullptr) - lf.drawResizableFrame (g, getWidth(), getHeight(), BorderSize (PopupMenuSettings::borderSize)); + lf.drawResizableFrame (g, getWidth(), getHeight(), + BorderSize (getLookAndFeel().getPopupMenuBorderSize())); if (canScroll()) { @@ -598,7 +598,7 @@ public: return parentComponent->getLocalArea (nullptr, parentComponent->getScreenBounds() - .reduced (PopupMenuSettings::borderSize) + .reduced (getLookAndFeel().getPopupMenuBorderSize()) .getIntersection (parentArea)); } @@ -711,7 +711,7 @@ public: needsToScroll = contentHeight > actualH; width = updateYPositions(); - height = actualH + PopupMenuSettings::borderSize * 2; + height = actualH + getLookAndFeel().getPopupMenuBorderSize() * 2; } int workOutBestSize (const int maxMenuW) @@ -733,7 +733,7 @@ public: colH += items.getUnchecked (childNum + i)->getHeight(); } - colW = jmin (maxMenuW / jmax (1, numColumns - 2), colW + PopupMenuSettings::borderSize * 2); + colW = jmin (maxMenuW / jmax (1, numColumns - 2), colW + getLookAndFeel().getPopupMenuBorderSize() * 2); columnWidths.set (col, colW); totalW += colW; @@ -832,7 +832,7 @@ public: childYOffset = jmax (childYOffset, 0); else if (delta > 0) childYOffset = jmin (childYOffset, - contentHeight - windowPos.getHeight() + PopupMenuSettings::borderSize); + contentHeight - windowPos.getHeight() + getLookAndFeel().getPopupMenuBorderSize()); updateYPositions(); } @@ -857,7 +857,7 @@ public: const int colW = columnWidths [col]; - int y = PopupMenuSettings::borderSize - (childYOffset + (getY() - windowPos.getY())); + int y = getLookAndFeel().getPopupMenuBorderSize() - (childYOffset + (getY() - windowPos.getY())); for (int i = 0; i < numChildren; ++i) { diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.h b/modules/juce_gui_basics/menus/juce_PopupMenu.h index dd81f49b1c..276fb62a43 100644 --- a/modules/juce_gui_basics/menus/juce_PopupMenu.h +++ b/modules/juce_gui_basics/menus/juce_PopupMenu.h @@ -727,6 +727,8 @@ public: /** Return true if you want your popup menus to scale with the target component's AffineTransform or scale factor */ virtual bool shouldPopupMenuScaleWithTargetComponent (const PopupMenu::Options& options) = 0; + + virtual int getPopupMenuBorderSize() = 0; }; private: