From f3181efc1bc5828828a428897dae7cbbfbbcf229 Mon Sep 17 00:00:00 2001 From: Andrew Belt Date: Tue, 16 Apr 2019 03:28:36 -0400 Subject: [PATCH] Add shadows to SvgButton and SvgSwitch. Rearrange ModuleWidget context menu items. --- include/app/SvgButton.hpp | 2 + include/app/SvgKnob.hpp | 2 +- include/app/SvgPort.hpp | 2 +- include/app/SvgSwitch.hpp | 2 + src/app/ModuleWidget.cpp | 81 ++++++++++++++++++++------------------- src/app/SvgButton.cpp | 7 ++++ src/app/SvgPort.cpp | 4 +- src/app/SvgSwitch.cpp | 7 ++++ 8 files changed, 64 insertions(+), 43 deletions(-) diff --git a/include/app/SvgButton.hpp b/include/app/SvgButton.hpp index 6754484b..55d8bc9f 100644 --- a/include/app/SvgButton.hpp +++ b/include/app/SvgButton.hpp @@ -2,6 +2,7 @@ #include "app/common.hpp" #include "widget/OpaqueWidget.hpp" #include "widget/FramebufferWidget.hpp" +#include "app/CircularShadow.hpp" #include "widget/SvgWidget.hpp" @@ -11,6 +12,7 @@ namespace app { struct SvgButton : widget::OpaqueWidget { widget::FramebufferWidget *fb; + CircularShadow *shadow; widget::SvgWidget *sw; std::vector> frames; diff --git a/include/app/SvgKnob.hpp b/include/app/SvgKnob.hpp index 1d2ded16..7b7b3fb0 100644 --- a/include/app/SvgKnob.hpp +++ b/include/app/SvgKnob.hpp @@ -14,9 +14,9 @@ namespace app { /** A knob which rotates an SVG and caches it in a framebuffer */ struct SvgKnob : Knob { widget::FramebufferWidget *fb; + CircularShadow *shadow; widget::TransformWidget *tw; widget::SvgWidget *sw; - CircularShadow *shadow; /** Angles in radians */ float minAngle, maxAngle; diff --git a/include/app/SvgPort.hpp b/include/app/SvgPort.hpp index b86b33eb..1e740d55 100644 --- a/include/app/SvgPort.hpp +++ b/include/app/SvgPort.hpp @@ -12,8 +12,8 @@ namespace app { struct SvgPort : PortWidget { widget::FramebufferWidget *fb; - widget::SvgWidget *sw; CircularShadow *shadow; + widget::SvgWidget *sw; SvgPort(); void setSvg(std::shared_ptr svg); diff --git a/include/app/SvgSwitch.hpp b/include/app/SvgSwitch.hpp index 51927168..610b6246 100644 --- a/include/app/SvgSwitch.hpp +++ b/include/app/SvgSwitch.hpp @@ -2,6 +2,7 @@ #include "app/common.hpp" #include "widget/FramebufferWidget.hpp" #include "widget/SvgWidget.hpp" +#include "app/CircularShadow.hpp" #include "app/Switch.hpp" @@ -12,6 +13,7 @@ namespace app { /** A ParamWidget with multiple frames corresponding to its value */ struct SvgSwitch : Switch { widget::FramebufferWidget *fb; + CircularShadow *shadow; widget::SvgWidget *sw; std::vector> frames; diff --git a/src/app/ModuleWidget.cpp b/src/app/ModuleWidget.cpp index 8829ec66..08284b58 100644 --- a/src/app/ModuleWidget.cpp +++ b/src/app/ModuleWidget.cpp @@ -162,7 +162,7 @@ struct ModuleLoadItem : ui::MenuItem { }; -struct ModulePresetItem : ui::MenuItem { +struct ModulePresetPathItem : ui::MenuItem { ModuleWidget *moduleWidget; std::string presetPath; void onAction(const widget::ActionEvent &e) override { @@ -171,18 +171,45 @@ struct ModulePresetItem : ui::MenuItem { }; -struct ModuleListPresetsItem : ui::MenuItem { +struct ModulePresetItem : ui::MenuItem { ModuleWidget *moduleWidget; ui::Menu *createChildMenu() override { ui::Menu *menu = new ui::Menu; - for (const std::string &presetPath : moduleWidget->model->presetPaths) { - ModulePresetItem *presetItem = new ModulePresetItem; - std::string presetName = string::basename(string::filename(presetPath)); - presetItem->text = presetName; - presetItem->presetPath = presetPath; - presetItem->moduleWidget = moduleWidget; - menu->addChild(presetItem); + ModuleCopyItem *copyItem = new ModuleCopyItem; + copyItem->text = "Copy"; + copyItem->rightText = WINDOW_MOD_CTRL_NAME "+C"; + copyItem->moduleWidget = moduleWidget; + menu->addChild(copyItem); + + ModulePasteItem *pasteItem = new ModulePasteItem; + pasteItem->text = "Paste"; + pasteItem->rightText = WINDOW_MOD_CTRL_NAME "+V"; + pasteItem->moduleWidget = moduleWidget; + menu->addChild(pasteItem); + + ModuleLoadItem *loadItem = new ModuleLoadItem; + loadItem->text = "Open"; + loadItem->moduleWidget = moduleWidget; + menu->addChild(loadItem); + + ModuleSaveItem *saveItem = new ModuleSaveItem; + saveItem->text = "Save as"; + saveItem->moduleWidget = moduleWidget; + menu->addChild(saveItem); + + if (!moduleWidget->model->presetPaths.empty()) { + menu->addChild(new MenuEntry); + menu->addChild(createMenuLabel("Factory presets")); + + for (const std::string &presetPath : moduleWidget->model->presetPaths) { + ModulePresetPathItem *presetItem = new ModulePresetPathItem; + std::string presetName = string::basename(string::filename(presetPath)); + presetItem->text = presetName; + presetItem->presetPath = presetPath; + presetItem->moduleWidget = moduleWidget; + menu->addChild(presetItem); + } } return menu; @@ -783,6 +810,12 @@ void ModuleWidget::createContextMenu() { pluginItem->plugin = model->plugin; menu->addChild(pluginItem); + ModulePresetItem *presetsItem = new ModulePresetItem; + presetsItem->text = "Presets"; + presetsItem->rightText = RIGHT_ARROW; + presetsItem->moduleWidget = this; + menu->addChild(presetsItem); + ModuleResetItem *resetItem = new ModuleResetItem; resetItem->text = "Initialize"; resetItem->rightText = WINDOW_MOD_CTRL_NAME "+I"; @@ -807,36 +840,6 @@ void ModuleWidget::createContextMenu() { cloneItem->moduleWidget = this; menu->addChild(cloneItem); - if (!model->presetPaths.empty()) { - ModuleListPresetsItem *presetsItem = new ModuleListPresetsItem; - presetsItem->text = "Factory presets"; - presetsItem->rightText = RIGHT_ARROW; - presetsItem->moduleWidget = this; - menu->addChild(presetsItem); - } - - ModuleCopyItem *copyItem = new ModuleCopyItem; - copyItem->text = "Copy preset"; - copyItem->rightText = WINDOW_MOD_CTRL_NAME "+C"; - copyItem->moduleWidget = this; - menu->addChild(copyItem); - - ModulePasteItem *pasteItem = new ModulePasteItem; - pasteItem->text = "Paste preset"; - pasteItem->rightText = WINDOW_MOD_CTRL_NAME "+V"; - pasteItem->moduleWidget = this; - menu->addChild(pasteItem); - - ModuleLoadItem *loadItem = new ModuleLoadItem; - loadItem->text = "Open preset"; - loadItem->moduleWidget = this; - menu->addChild(loadItem); - - ModuleSaveItem *saveItem = new ModuleSaveItem; - saveItem->text = "Save preset as"; - saveItem->moduleWidget = this; - menu->addChild(saveItem); - ModuleBypassItem *bypassItem = new ModuleBypassItem; bypassItem->text = "Disable"; bypassItem->rightText = WINDOW_MOD_CTRL_NAME "+E"; diff --git a/src/app/SvgButton.cpp b/src/app/SvgButton.cpp index 5a68a32b..21f7e135 100644 --- a/src/app/SvgButton.cpp +++ b/src/app/SvgButton.cpp @@ -9,6 +9,10 @@ SvgButton::SvgButton() { fb = new widget::FramebufferWidget; addChild(fb); + shadow = new CircularShadow; + fb->addChild(shadow); + shadow->box.size = math::Vec(); + sw = new widget::SvgWidget; fb->addChild(sw); } @@ -20,6 +24,9 @@ void SvgButton::addFrame(std::shared_ptr svg) { sw->setSvg(svg); box.size = sw->box.size; fb->box.size = sw->box.size; + // Move shadow downward by 10% + shadow->box.size = sw->box.size; + shadow->box.pos = math::Vec(0, sw->box.size.y * 0.10); } } diff --git a/src/app/SvgPort.cpp b/src/app/SvgPort.cpp index ac6f7b71..ef4a4491 100644 --- a/src/app/SvgPort.cpp +++ b/src/app/SvgPort.cpp @@ -23,10 +23,10 @@ void SvgPort::setSvg(std::shared_ptr svg) { sw->setSvg(svg); fb->box.size = sw->box.size; box.size = sw->box.size; - shadow->box.size = sw->box.size; // Move shadow downward by 10% + shadow->box.size = sw->box.size; shadow->box.pos = math::Vec(0, sw->box.size.y * 0.10); - // shadow->box = shadow->box.grow(math::Vec(2, 2)); + fb->dirty = true; } diff --git a/src/app/SvgSwitch.cpp b/src/app/SvgSwitch.cpp index 990f69d5..3b819df0 100644 --- a/src/app/SvgSwitch.cpp +++ b/src/app/SvgSwitch.cpp @@ -9,6 +9,10 @@ SvgSwitch::SvgSwitch() { fb = new widget::FramebufferWidget; addChild(fb); + shadow = new CircularShadow; + fb->addChild(shadow); + shadow->box.size = math::Vec(); + sw = new widget::SvgWidget; fb->addChild(sw); } @@ -20,6 +24,9 @@ void SvgSwitch::addFrame(std::shared_ptr svg) { sw->setSvg(svg); box.size = sw->box.size; fb->box.size = sw->box.size; + // Move shadow downward by 10% + shadow->box.size = sw->box.size; + shadow->box.pos = math::Vec(0, sw->box.size.y * 0.10); } }