Browse Source

Made the PopupMenu use the L+F to set the border it uses for custom components, and improved the layout of menus with icons

tags/2021-05-28
jules 7 years ago
parent
commit
fe8ba4c02f
2 changed files with 22 additions and 23 deletions
  1. +1
    -0
      modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.cpp
  2. +21
    -23
      modules/juce_gui_basics/menus/juce_PopupMenu.cpp

+ 1
- 0
modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.cpp View File

@@ -803,6 +803,7 @@ void LookAndFeel_V4::drawPopupMenuItem (Graphics& g, const Rectangle<int>& area,
if (icon != nullptr) if (icon != nullptr)
{ {
icon->drawWithin (g, iconArea, RectanglePlacement::centred | RectanglePlacement::onlyReduceInSize, 1.0f); icon->drawWithin (g, iconArea, RectanglePlacement::centred | RectanglePlacement::onlyReduceInSize, 1.0f);
r.removeFromLeft (roundToInt (maxFontHeight * 0.5f));
} }
else if (isTicked) else if (isTicked)
{ {


+ 21
- 23
modules/juce_gui_basics/menus/juce_PopupMenu.cpp View File

@@ -126,8 +126,8 @@ struct ItemComponent : public Component
void resized() override void resized() override
{ {
if (Component* const child = getChildComponent (0))
child->setBounds (getLocalBounds().reduced (2, 0));
if (auto* child = getChildComponent (0))
child->setBounds (getLocalBounds().reduced (getLookAndFeel().getPopupMenuBorderSize(), 0));
} }
void setHighlighted (bool shouldBeHighlighted) void setHighlighted (bool shouldBeHighlighted)
@@ -551,7 +551,7 @@ public:
bool treeContains (const MenuWindow* const window) const noexcept bool treeContains (const MenuWindow* const window) const noexcept
{ {
const MenuWindow* mw = this;
auto* mw = this;
while (mw->parent != nullptr) while (mw->parent != nullptr)
mw = mw->parent; mw = mw->parent;
@@ -617,7 +617,7 @@ public:
if (parentComponent != nullptr) if (parentComponent != nullptr)
target = parentComponent->getLocalArea (nullptr, target).getIntersection (parentArea); target = parentComponent->getLocalArea (nullptr, target).getIntersection (parentArea);
const int maxMenuHeight = parentArea.getHeight() - 24;
auto maxMenuHeight = parentArea.getHeight() - 24;
int x, y, widthToUse, heightToUse; int x, y, widthToUse, heightToUse;
layoutMenuItems (parentArea.getWidth() - 24, maxMenuHeight, widthToUse, heightToUse); layoutMenuItems (parentArea.getWidth() - 24, maxMenuHeight, widthToUse, heightToUse);
@@ -656,8 +656,8 @@ public:
} }
} }
const int biggestSpace = jmax (parentArea.getRight() - target.getRight(),
target.getX() - parentArea.getX()) - 32;
auto biggestSpace = jmax (parentArea.getRight() - target.getRight(),
target.getX() - parentArea.getX()) - 32;
if (biggestSpace < widthToUse) if (biggestSpace < widthToUse)
{ {
@@ -696,13 +696,12 @@ public:
{ {
numColumns = options.getMinimumNumColumns(); numColumns = options.getMinimumNumColumns();
contentHeight = 0; contentHeight = 0;
int totalW;
auto maximumNumColumns = options.getMaximumNumColumns() > 0 ? options.getMaximumNumColumns() : 7; auto maximumNumColumns = options.getMaximumNumColumns() > 0 ? options.getMaximumNumColumns() : 7;
for (;;) for (;;)
{ {
totalW = workOutBestSize (maxMenuW);
auto totalW = workOutBestSize (maxMenuW);
if (totalW > maxMenuW) if (totalW > maxMenuW)
{ {
@@ -737,8 +736,8 @@ public:
{ {
int colW = options.getStandardItemHeight(), colH = 0; int colW = options.getStandardItemHeight(), colH = 0;
const int numChildren = jmin (items.size() - childNum,
(items.size() + numColumns - 1) / numColumns);
auto numChildren = jmin (items.size() - childNum,
(items.size() + numColumns - 1) / numColumns);
for (int i = numChildren; --i >= 0;) for (int i = numChildren; --i >= 0;)
{ {
@@ -791,8 +790,7 @@ public:
currentY); currentY);
auto parentArea = getParentArea (windowPos.getPosition()); auto parentArea = getParentArea (windowPos.getPosition());
int deltaY = wantedY - currentY;
auto deltaY = wantedY - currentY;
windowPos.setSize (jmin (windowPos.getWidth(), parentArea.getWidth()), windowPos.setSize (jmin (windowPos.getWidth(), parentArea.getWidth()),
jmin (windowPos.getHeight(), parentArea.getHeight())); jmin (windowPos.getHeight(), parentArea.getHeight()));
@@ -825,7 +823,7 @@ public:
} }
else if (childYOffset > 0) else if (childYOffset > 0)
{ {
const int spaceAtBottom = r.getHeight() - (contentHeight - childYOffset);
auto spaceAtBottom = r.getHeight() - (contentHeight - childYOffset);
if (spaceAtBottom > 0) if (spaceAtBottom > 0)
r.setSize (r.getWidth(), r.getHeight() - spaceAtBottom); r.setSize (r.getWidth(), r.getHeight() - spaceAtBottom);
@@ -835,7 +833,7 @@ public:
updateYPositions(); updateYPositions();
} }
void alterChildYPos (const int delta)
void alterChildYPos (int delta)
{ {
if (canScroll()) if (canScroll())
{ {
@@ -865,12 +863,11 @@ public:
for (int col = 0; col < numColumns; ++col) for (int col = 0; col < numColumns; ++col)
{ {
const int numChildren = jmin (items.size() - childNum,
(items.size() + numColumns - 1) / numColumns);
auto numChildren = jmin (items.size() - childNum,
(items.size() + numColumns - 1) / numColumns);
const int colW = columnWidths [col];
int y = getLookAndFeel().getPopupMenuBorderSize() - (childYOffset + (getY() - windowPos.getY()));
auto colW = columnWidths[col];
auto y = getLookAndFeel().getPopupMenuBorderSize() - (childYOffset + (getY() - windowPos.getY()));
for (int i = 0; i < numChildren; ++i) for (int i = 0; i < numChildren; ++i)
{ {
@@ -886,7 +883,7 @@ public:
return x; return x;
} }
void setCurrentlyHighlightedChild (ItemComponent* const child)
void setCurrentlyHighlightedChild (ItemComponent* child)
{ {
if (currentChild != nullptr) if (currentChild != nullptr)
currentChild->setHighlighted (false); currentChild->setHighlighted (false);
@@ -902,7 +899,7 @@ public:
bool isSubMenuVisible() const noexcept { return activeSubMenu != nullptr && activeSubMenu->isVisible(); } bool isSubMenuVisible() const noexcept { return activeSubMenu != nullptr && activeSubMenu->isVisible(); }
bool showSubMenuFor (ItemComponent* const childComp)
bool showSubMenuFor (ItemComponent* childComp)
{ {
activeSubMenu = nullptr; activeSubMenu = nullptr;
@@ -935,11 +932,11 @@ public:
} }
} }
void selectNextItem (const int delta)
void selectNextItem (int delta)
{ {
disableTimerUntilMouseMoves(); disableTimerUntilMouseMoves();
int start = jmax (0, items.indexOf (currentChild));
auto start = jmax (0, items.indexOf (currentChild));
for (int i = items.size(); --i >= 0;) for (int i = items.size(); --i >= 0;)
{ {
@@ -1135,6 +1132,7 @@ private:
if (! isMovingTowardsMenu) if (! isMovingTowardsMenu)
{ {
auto* c = window.getComponentAt (localMousePos); auto* c = window.getComponentAt (localMousePos);
if (c == &window) if (c == &window)
c = nullptr; c = nullptr;


Loading…
Cancel
Save