diff --git a/plugins/editor/layout/main.fl b/plugins/editor/layout/main.fl index da053746..46b62c62 100644 --- a/plugins/editor/layout/main.fl +++ b/plugins/editor/layout/main.fl @@ -24,18 +24,18 @@ widget_class mainView {open image {../resources/logo_text_shaded.png} xywh {35 9 120 60} class AboutButton } - Fl_Button {} { + Fl_Button {panelButtons_[kPanelGeneral]} { comment {tag=kTagFirstChangePanel+kPanelGeneral} xywh {36 73 32 32} labelsize 30 class HomeButton } - Fl_Button {} { + Fl_Button {panelButtons_[kPanelControls]} { comment {tag=kTagFirstChangePanel+kPanelControls} xywh {76 73 32 32} labelsize 30 class CCButton } - Fl_Button {} { - comment {tag=kTagFirstChangePanel+kPanelSettings} + Fl_Button {panelButtons_[kPanelSettings]} { + comment {tag=kTagFirstChangePanel+kPanelSettings} selected xywh {116 73 32 32} labelsize 30 class SettingsButton } @@ -220,7 +220,7 @@ widget_class mainView {open xywh {5 110 790 285} box ROUNDED_BOX class RoundedGroup } { - Fl_Group controlsPanel_ {selected + Fl_Group controlsPanel_ { xywh {5 110 790 285} box THIN_DOWN_FRAME labelsize 12 class ControlsPanel } {} diff --git a/plugins/editor/src/editor/DlgAbout.cpp b/plugins/editor/src/editor/DlgAbout.cpp index ba79010e..731a2a55 100644 --- a/plugins/editor/src/editor/DlgAbout.cpp +++ b/plugins/editor/src/editor/DlgAbout.cpp @@ -113,7 +113,7 @@ SAboutDialog::SAboutDialog(const CRect& bounds) STextButton* btn = new STextButton(bounds, this, tag, glyph); btn->setFont(makeOwned("Sfizz Misc Icons", fontsize)); btn->setTextColor(kWhiteCColor); - btn->setHoverColor(CColor(0xfd, 0x98, 0x00, 0xff)); + btn->setHighlightColor(CColor(0xfd, 0x98, 0x00, 0xff)); btn->setFrameColor(CColor(0x00, 0x00, 0x00, 0x00)); btn->setFrameColorHighlighted(CColor(0x00, 0x00, 0x00, 0x00)); btn->setGradient(nullptr); diff --git a/plugins/editor/src/editor/Editor.cpp b/plugins/editor/src/editor/Editor.cpp index 7e55c6b4..50e42665 100644 --- a/plugins/editor/src/editor/Editor.cpp +++ b/plugins/editor/src/editor/Editor.cpp @@ -73,6 +73,7 @@ struct Editor::Impl : EditorController::Receiver, unsigned activePanel_ = 0; CViewContainer* subPanels_[kNumPanels] = {}; + STextButton* panelButtons_[kNumPanels] = {}; enum { kTagLoadSfzFile, @@ -238,6 +239,7 @@ struct Editor::Impl : EditorController::Receiver, void performCCEndEdit(unsigned cc); void setActivePanel(unsigned panelId); + void setupCurrentPanel(); void applyBackgroundForCurrentPanel(); static void formatLabel(CTextLabel* label, const char* fmt, ...); @@ -724,7 +726,7 @@ void Editor::Impl::createFrameContents() OnThemeChanged.push_back([button, palette]() { button->setTextColor(palette->text); button->setInactiveColor(palette->inactiveText); - button->setHoverColor(palette->highlightedText); + button->setHighlightColor(palette->highlightedText); }); button->setFrameColor(CColor(0x00, 0x00, 0x00, 0x00)); button->setFrameColorHighlighted(CColor(0x00, 0x00, 0x00, 0x00)); @@ -741,7 +743,7 @@ void Editor::Impl::createFrameContents() OnThemeChanged.push_back([button, palette]() { button->setTextColor(palette->valueText); button->setInactiveColor(palette->inactiveText); - button->setHoverColor(palette->highlightedText); + button->setHighlightColor(palette->highlightedText); SharedPointer gradient = owned(CGradient::create(0.0, 1.0, palette->valueBackground, palette->valueBackground)); button->setGradient(gradient); button->setGradientHighlighted(gradient); @@ -783,7 +785,7 @@ void Editor::Impl::createFrameContents() btn->setFont(makeOwned("Sfizz Fluent System F20", fontsize)); OnThemeChanged.push_back([btn, palette]() { btn->setTextColor(palette->icon); - btn->setHoverColor(palette->iconHighlight); + btn->setHighlightColor(palette->iconHighlight); }); btn->setFrameColor(CColor(0x00, 0x00, 0x00, 0x00)); btn->setFrameColorHighlighted(CColor(0x00, 0x00, 0x00, 0x00)); @@ -1156,7 +1158,7 @@ void Editor::Impl::createFrameContents() panel->setVisible(currentPanel == activePanel_); } - applyBackgroundForCurrentPanel(); + setupCurrentPanel(); if (COptionMenu* menu = themeMenu_) { const std::vector& names = Theme::getAvailableNames(); @@ -1684,6 +1686,16 @@ void Editor::Impl::updateBackgroundImage(const char* filepath) applyBackgroundForCurrentPanel(); } +void Editor::Impl::setupCurrentPanel() +{ + for (unsigned i = 0; i < kNumPanels; ++i) { + if (STextButton* button = panelButtons_[i]) + button->setHighlighted(i == activePanel_); + } + + applyBackgroundForCurrentPanel(); +} + void Editor::Impl::applyBackgroundForCurrentPanel() { CBitmap* bitmap; @@ -1745,7 +1757,7 @@ void Editor::Impl::setActivePanel(unsigned panelId) if (subPanels_[panelId]) subPanels_[panelId]->setVisible(true); activePanel_ = panelId; - applyBackgroundForCurrentPanel(); + setupCurrentPanel(); } } diff --git a/plugins/editor/src/editor/GUIComponents.cpp b/plugins/editor/src/editor/GUIComponents.cpp index 5a179fae..a70f70e2 100644 --- a/plugins/editor/src/editor/GUIComponents.cpp +++ b/plugins/editor/src/editor/GUIComponents.cpp @@ -415,9 +415,9 @@ void SActionMenu::onItemClicked(int32_t index) } /// -void STextButton::setHoverColor(const CColor& color) +void STextButton::setHighlightColor(const CColor& color) { - hoverColor_ = color; + highlightColor_ = color; invalid(); } @@ -433,11 +433,19 @@ void STextButton::setInactive(bool b) invalid(); } +void STextButton::setHighlighted(bool b) +{ + highlighted_ = b; + invalid(); +} + void STextButton::draw(CDrawContext* context) { CColor backupColor = textColor; - if (hovered_) - textColor = hoverColor_; // textColor is protected + if (inactive_) + textColor = inactiveColor_; // textColor is protected + else if (hovered_ || highlighted_) + textColor = highlightColor_; else if (inactive_) textColor = inactiveColor_; CTextButton::draw(context); diff --git a/plugins/editor/src/editor/GUIComponents.h b/plugins/editor/src/editor/GUIComponents.h index fe577648..b3cbc056 100644 --- a/plugins/editor/src/editor/GUIComponents.h +++ b/plugins/editor/src/editor/GUIComponents.h @@ -187,12 +187,14 @@ public: STextButton(const CRect& size, IControlListener* listener = nullptr, int32_t tag = -1, UTF8StringPtr title = nullptr) : CTextButton(size, listener, tag, title) {} - CColor getHoverColor() const { return hoverColor_; } - void setHoverColor(const CColor& color); + CColor getHighlightColor() const { return highlightColor_; } + void setHighlightColor(const CColor& color); CColor getInactiveColor() const { return inactiveColor_; } void setInactiveColor(const CColor& color); bool isInactive() const { return inactive_; } void setInactive(bool b); + bool isHighlighted() const { return highlighted_; } + void setHighlighted(bool b); CMouseEventResult onMouseEntered (CPoint& where, const CButtonState& buttons) override; CMouseEventResult onMouseExited (CPoint& where, const CButtonState& buttons) override; void draw(CDrawContext* context) override; @@ -201,8 +203,9 @@ public: std::function OnHoverLeave; private: - CColor hoverColor_; + CColor highlightColor_; bool hovered_ { false }; + bool highlighted_ { false }; CColor inactiveColor_; bool inactive_ { false }; }; diff --git a/plugins/editor/src/editor/layout/main.hpp b/plugins/editor/src/editor/layout/main.hpp index 3e75eb92..7a6a409d 100644 --- a/plugins/editor/src/editor/layout/main.hpp +++ b/plugins/editor/src/editor/layout/main.hpp @@ -12,10 +12,13 @@ view__2->addView(view__3); auto* const view__4 = createAboutButton(CRect(30, 5, 150, 65), kTagAbout, "", kCenterText, 14); view__3->addView(view__4); auto* const view__5 = createHomeButton(CRect(31, 69, 63, 101), kTagFirstChangePanel+kPanelGeneral, "", kCenterText, 30); +panelButtons_[kPanelGeneral] = view__5; view__3->addView(view__5); auto* const view__6 = createCCButton(CRect(71, 69, 103, 101), kTagFirstChangePanel+kPanelControls, "", kCenterText, 30); +panelButtons_[kPanelControls] = view__6; view__3->addView(view__6); auto* const view__7 = createSettingsButton(CRect(111, 69, 143, 101), kTagFirstChangePanel+kPanelSettings, "", kCenterText, 30); +panelButtons_[kPanelSettings] = view__7; view__3->addView(view__7); auto* const view__8 = createRoundedGroup(CRect(185, 5, 565, 105), -1, "", kCenterText, 14); view__2->addView(view__8);