diff --git a/resources/classic-skin-svgs/bmp00188.svg b/resources/classic-skin-svgs/bmp00188.svg new file mode 100644 index 00000000000..e8e11845648 --- /dev/null +++ b/resources/classic-skin-svgs/bmp00188.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/common/resource.h b/src/common/resource.h index 2c0fc197d44..4460bd2622a 100644 --- a/src/common/resource.h +++ b/src/common/resource.h @@ -49,6 +49,7 @@ #define IDB_MODMENU_ICONS 185 #define IDB_FAVORITE_BUTTON 186 #define IDB_SEARCH_BUTTON 187 +#define IDB_FAVORITE_MENU_ICON 188 // == SVG == Do not remove this comment - it indicates the start of the automated SVG adding block #define IDB_MSEG_NODES 301 diff --git a/src/surge-xt/gui/SurgeImageStore.cpp b/src/surge-xt/gui/SurgeImageStore.cpp index 8948599686a..d25775c0123 100644 --- a/src/surge-xt/gui/SurgeImageStore.cpp +++ b/src/surge-xt/gui/SurgeImageStore.cpp @@ -90,6 +90,7 @@ void SurgeImageStore::setupBuiltinBitmaps() addEntry(IDB_MODMENU_ICONS); addEntry(IDB_FAVORITE_BUTTON); addEntry(IDB_SEARCH_BUTTON); + addEntry(IDB_FAVORITE_MENU_ICON); // == SVG == Do not remove this comment - it indicates the start of the automated SVG adding // block diff --git a/src/surge-xt/gui/SurgeJUCELookAndFeel.cpp b/src/surge-xt/gui/SurgeJUCELookAndFeel.cpp index f50f95d3873..5b53554f3e3 100644 --- a/src/surge-xt/gui/SurgeJUCELookAndFeel.cpp +++ b/src/surge-xt/gui/SurgeJUCELookAndFeel.cpp @@ -292,6 +292,11 @@ Button *SurgeJUCELookAndFeel::createDocumentWindowButton(int buttonType) return nullptr; } +juce::Font SurgeJUCELookAndFeel::getPopupMenuFont() +{ + // return Surge::GUI::getFontManager()->getLatoAtSize(15); + return juce::LookAndFeel_V4::getPopupMenuFont(); +} // overridden here just to make the shortcut text same size as normal menu entry text void SurgeJUCELookAndFeel::drawPopupMenuItem(Graphics &g, const Rectangle &area, const bool isSeparator, const bool isActive, @@ -342,10 +347,10 @@ void SurgeJUCELookAndFeel::drawPopupMenuItem(Graphics &g, const Rectangle & if (icon != nullptr) { - icon->drawWithin(g, iconArea, + icon->drawWithin(g, iconArea.translated(-2, 0), RectanglePlacement::centred | RectanglePlacement::onlyReduceInSize, 1.0f); - r.removeFromLeft(roundToInt(maxFontHeight * 0.5f)); + // r.removeFromLeft(roundToInt(maxFontHeight * 0.5f)); } else if (isTicked) { diff --git a/src/surge-xt/gui/SurgeJUCELookAndFeel.h b/src/surge-xt/gui/SurgeJUCELookAndFeel.h index 484bdc163b3..4a44db0f07a 100644 --- a/src/surge-xt/gui/SurgeJUCELookAndFeel.h +++ b/src/surge-xt/gui/SurgeJUCELookAndFeel.h @@ -38,6 +38,7 @@ class SurgeJUCELookAndFeel : public juce::LookAndFeel_V4, public Surge::GUI::Ski void onSkinChanged() override; + juce::Font getPopupMenuFont() override; void drawPopupMenuBackgroundWithOptions(juce::Graphics &g, int w, int h, const juce::PopupMenu::Options &o) override; void drawPopupMenuItem(juce::Graphics &g, const juce::Rectangle &area, diff --git a/src/surge-xt/gui/widgets/PatchSelector.cpp b/src/surge-xt/gui/widgets/PatchSelector.cpp index 87218c040a5..c156beabbad 100644 --- a/src/surge-xt/gui/widgets/PatchSelector.cpp +++ b/src/surge-xt/gui/widgets/PatchSelector.cpp @@ -820,7 +820,17 @@ bool PatchSelector::populatePatchMenuForCategory(int c, juce::PopupMenu &context amIChecked = true; } - subMenu->addItem(name, true, thisCheck, [this, p]() { this->loadPatch(p); }); + bool isFav = storage->patch_list[p].isFavorite; + auto item = juce::PopupMenu::Item(name).setEnabled(true).setTicked(thisCheck).setAction( + [this, p]() { this->loadPatch(p); }); + + if (isFav && associatedBitmapStore) + { + auto img = associatedBitmapStore->getImage(IDB_FAVORITE_MENU_ICON); + if (img && img->getDrawableButUseWithCaution()) + item.setImage(img->getDrawableButUseWithCaution()->createCopy()); + } + subMenu->addItem(item); sub++; if (sub != 0 && sub % 32 == 0)