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)