From 7755c670846cad5447dfec9b1e0441985c52900e Mon Sep 17 00:00:00 2001 From: Andrew Belt Date: Fri, 9 Feb 2018 11:49:42 -0500 Subject: [PATCH] Divide widgets.hpp to widgets.hpp and ui.hpp --- include/app.hpp | 1 + include/rack.hpp | 2 + include/ui.hpp | 200 ++++++++++++++++++++++++++ include/widgets.hpp | 190 ------------------------ src/ui.cpp | 9 ++ src/{widgets => ui}/Button.cpp | 2 +- src/{widgets => ui}/ChoiceButton.cpp | 2 +- src/{widgets => ui}/Label.cpp | 2 +- src/{widgets => ui}/Menu.cpp | 2 +- src/{widgets => ui}/MenuItem.cpp | 2 +- src/{widgets => ui}/MenuLabel.cpp | 2 +- src/{widgets => ui}/MenuOverlay.cpp | 2 +- src/{widgets => ui}/PasswordField.cpp | 2 +- src/{widgets => ui}/ProgressBar.cpp | 2 +- src/{widgets => ui}/RadioButton.cpp | 2 +- src/{widgets => ui}/Scene.cpp | 0 src/{widgets => ui}/ScrollBar.cpp | 2 +- src/{widgets => ui}/ScrollWidget.cpp | 2 +- src/{widgets => ui}/Slider.cpp | 2 +- src/{widgets => ui}/TextField.cpp | 2 +- src/{widgets => ui}/Tooltip.cpp | 2 +- src/{widgets => ui}/Window.cpp | 2 +- src/widgets.cpp | 3 +- 23 files changed, 229 insertions(+), 208 deletions(-) create mode 100644 include/ui.hpp create mode 100644 src/ui.cpp rename src/{widgets => ui}/Button.cpp (96%) rename src/{widgets => ui}/ChoiceButton.cpp (88%) rename src/{widgets => ui}/Label.cpp (86%) rename src/{widgets => ui}/Menu.cpp (98%) rename src/{widgets => ui}/MenuItem.cpp (98%) rename src/{widgets => ui}/MenuLabel.cpp (94%) rename src/{widgets => ui}/MenuOverlay.cpp (95%) rename src/{widgets => ui}/PasswordField.cpp (89%) rename src/{widgets => ui}/ProgressBar.cpp (91%) rename src/{widgets => ui}/RadioButton.cpp (95%) rename src/{widgets => ui}/Scene.cpp (100%) rename src/{widgets => ui}/ScrollBar.cpp (96%) rename src/{widgets => ui}/ScrollWidget.cpp (99%) rename src/{widgets => ui}/Slider.cpp (97%) rename src/{widgets => ui}/TextField.cpp (99%) rename src/{widgets => ui}/Tooltip.cpp (93%) rename src/{widgets => ui}/Window.cpp (93%) diff --git a/include/app.hpp b/include/app.hpp index 0f122e44..637d6506 100644 --- a/include/app.hpp +++ b/include/app.hpp @@ -2,6 +2,7 @@ #include #include #include "widgets.hpp" +#include "ui.hpp" static const float SVG_DPI = 75.0; diff --git a/include/rack.hpp b/include/rack.hpp index 404f4f7f..e2868985 100644 --- a/include/rack.hpp +++ b/include/rack.hpp @@ -5,7 +5,9 @@ #include "asset.hpp" #include "plugin.hpp" #include "engine.hpp" +#include "widgets.hpp" #include "app.hpp" +#include "ui.hpp" #include "componentlibrary.hpp" diff --git a/include/ui.hpp b/include/ui.hpp new file mode 100644 index 00000000..4d74b7d8 --- /dev/null +++ b/include/ui.hpp @@ -0,0 +1,200 @@ +#pragma once +#include "widgets.hpp" +#include "../ext/oui-blendish/blendish.h" + + +namespace rack { + + +struct Label : Widget { + std::string text; + Label() { + box.size.y = BND_WIDGET_HEIGHT; + } + void draw(NVGcontext *vg) override; +}; + +/** Deletes itself from parent when clicked */ +struct MenuOverlay : OpaqueWidget { + void step() override; + void onMouseDown(EventMouseDown &e) override; + void onHoverKey(EventHoverKey &e) override; +}; + +struct MenuEntry; + +struct Menu : OpaqueWidget { + Menu *parentMenu = NULL; + Menu *childMenu = NULL; + /** The entry which created the child menu */ + MenuEntry *activeEntry = NULL; + + Menu() { + box.size = Vec(0, 0); + } + ~Menu(); + // Resizes menu and calls addChild() + void pushChild(Widget *child) DEPRECATED { + addChild(child); + } + void setChildMenu(Menu *menu); + void step() override; + void draw(NVGcontext *vg) override; + void onScroll(EventScroll &e) override; +}; + +struct MenuEntry : OpaqueWidget { + std::string text; + MenuEntry() { + box.size = Vec(0, BND_WIDGET_HEIGHT); + } +}; + +struct MenuLabel : MenuEntry { + void draw(NVGcontext *vg) override; + void step() override; +}; + +struct MenuItem : MenuEntry { + std::string rightText; + void draw(NVGcontext *vg) override; + void step() override; + virtual Menu *createChildMenu() {return NULL;} + void onMouseEnter(EventMouseEnter &e) override; + void onDragDrop(EventDragDrop &e) override; +}; + +struct WindowOverlay : OpaqueWidget { +}; + +struct Window : OpaqueWidget { + std::string title; + void draw(NVGcontext *vg) override; + void onDragMove(EventDragMove &e) override; +}; + +struct Button : OpaqueWidget { + std::string text; + BNDwidgetState state = BND_DEFAULT; + + Button() { + box.size.y = BND_WIDGET_HEIGHT; + } + void draw(NVGcontext *vg) override; + void onMouseEnter(EventMouseEnter &e) override; + void onMouseLeave(EventMouseLeave &e) override; + void onDragStart(EventDragStart &e) override; + void onDragEnd(EventDragEnd &e) override; + void onDragDrop(EventDragDrop &e) override; +}; + +struct ChoiceButton : Button { + void draw(NVGcontext *vg) override; +}; + +struct RadioButton : OpaqueWidget, QuantityWidget { + BNDwidgetState state = BND_DEFAULT; + + RadioButton() { + box.size.y = BND_WIDGET_HEIGHT; + } + void draw(NVGcontext *vg) override; + void onMouseEnter(EventMouseEnter &e) override; + void onMouseLeave(EventMouseLeave &e) override; + void onDragDrop(EventDragDrop &e) override; +}; + +struct Slider : OpaqueWidget, QuantityWidget { + BNDwidgetState state = BND_DEFAULT; + + Slider() { + box.size.y = BND_WIDGET_HEIGHT; + } + void draw(NVGcontext *vg) override; + void onDragStart(EventDragStart &e) override; + void onDragMove(EventDragMove &e) override; + void onDragEnd(EventDragEnd &e) override; + void onMouseDown(EventMouseDown &e) override; +}; + +/** Parent must be a ScrollWidget */ +struct ScrollBar : OpaqueWidget { + enum { VERTICAL, HORIZONTAL } orientation; + BNDwidgetState state = BND_DEFAULT; + float offset = 0.0; + float size = 0.0; + + ScrollBar() { + box.size = Vec(BND_SCROLLBAR_WIDTH, BND_SCROLLBAR_HEIGHT); + } + void draw(NVGcontext *vg) override; + void onDragStart(EventDragStart &e) override; + void onDragMove(EventDragMove &e) override; + void onDragEnd(EventDragEnd &e) override; +}; + +/** Handles a container with ScrollBar */ +struct ScrollWidget : OpaqueWidget { + Widget *container; + ScrollBar *horizontalScrollBar; + ScrollBar *verticalScrollBar; + Vec offset; + + ScrollWidget(); + void draw(NVGcontext *vg) override; + void step() override; + void onMouseMove(EventMouseMove &e) override; + void onScroll(EventScroll &e) override; +}; + +struct TextField : OpaqueWidget { + std::string text; + std::string placeholder; + bool multiline = false; + int begin = 0; + int end = 0; + + TextField() { + box.size.y = BND_WIDGET_HEIGHT; + } + void draw(NVGcontext *vg) override; + void onMouseDown(EventMouseDown &e) override; + void onFocus(EventFocus &e) override; + void onText(EventText &e) override; + void onKey(EventKey &e) override; + void insertText(std::string newText); + virtual void onTextChange() {} +}; + +struct PasswordField : TextField { + void draw(NVGcontext *vg) override; +}; + +struct ProgressBar : TransparentWidget, QuantityWidget { + ProgressBar() { + box.size.y = BND_WIDGET_HEIGHT; + } + void draw(NVGcontext *vg) override; +}; + +struct Tooltip : Widget { + void step() override; + void draw(NVGcontext *vg) override; +}; + +struct Scene : OpaqueWidget { + Widget *overlay = NULL; + void setOverlay(Widget *w); + Menu *createMenu(); + void step() override; +}; + + +//////////////////// +// globals +//////////////////// + +extern Scene *gScene; + + +} // namespace rack diff --git a/include/widgets.hpp b/include/widgets.hpp index 832eeddd..1201eacd 100644 --- a/include/widgets.hpp +++ b/include/widgets.hpp @@ -3,7 +3,6 @@ #include #include "../ext/nanovg/src/nanovg.h" -#include "../ext/oui-blendish/blendish.h" #include "../ext/nanosvg/src/nanosvg.h" #include "util/common.hpp" @@ -279,193 +278,6 @@ struct QuantityWidget : virtual Widget { std::string getText(); }; -//////////////////// -// GUI widgets -//////////////////// - -struct Label : Widget { - std::string text; - Label() { - box.size.y = BND_WIDGET_HEIGHT; - } - void draw(NVGcontext *vg) override; -}; - -/** Deletes itself from parent when clicked */ -struct MenuOverlay : OpaqueWidget { - void step() override; - void onMouseDown(EventMouseDown &e) override; - void onHoverKey(EventHoverKey &e) override; -}; - -struct MenuEntry; - -struct Menu : OpaqueWidget { - Menu *parentMenu = NULL; - Menu *childMenu = NULL; - /** The entry which created the child menu */ - MenuEntry *activeEntry = NULL; - - Menu() { - box.size = Vec(0, 0); - } - ~Menu(); - // Resizes menu and calls addChild() - void pushChild(Widget *child) DEPRECATED { - addChild(child); - } - void setChildMenu(Menu *menu); - void step() override; - void draw(NVGcontext *vg) override; - void onScroll(EventScroll &e) override; -}; - -struct MenuEntry : OpaqueWidget { - std::string text; - MenuEntry() { - box.size = Vec(0, BND_WIDGET_HEIGHT); - } -}; - -struct MenuLabel : MenuEntry { - void draw(NVGcontext *vg) override; - void step() override; -}; - -struct MenuItem : MenuEntry { - std::string rightText; - void draw(NVGcontext *vg) override; - void step() override; - virtual Menu *createChildMenu() {return NULL;} - void onMouseEnter(EventMouseEnter &e) override; - void onDragDrop(EventDragDrop &e) override; -}; - -struct WindowOverlay : OpaqueWidget { -}; - -struct Window : OpaqueWidget { - std::string title; - void draw(NVGcontext *vg) override; - void onDragMove(EventDragMove &e) override; -}; - -struct Button : OpaqueWidget { - std::string text; - BNDwidgetState state = BND_DEFAULT; - - Button() { - box.size.y = BND_WIDGET_HEIGHT; - } - void draw(NVGcontext *vg) override; - void onMouseEnter(EventMouseEnter &e) override; - void onMouseLeave(EventMouseLeave &e) override; - void onDragStart(EventDragStart &e) override; - void onDragEnd(EventDragEnd &e) override; - void onDragDrop(EventDragDrop &e) override; -}; - -struct ChoiceButton : Button { - void draw(NVGcontext *vg) override; -}; - -struct RadioButton : OpaqueWidget, QuantityWidget { - BNDwidgetState state = BND_DEFAULT; - - RadioButton() { - box.size.y = BND_WIDGET_HEIGHT; - } - void draw(NVGcontext *vg) override; - void onMouseEnter(EventMouseEnter &e) override; - void onMouseLeave(EventMouseLeave &e) override; - void onDragDrop(EventDragDrop &e) override; -}; - -struct Slider : OpaqueWidget, QuantityWidget { - BNDwidgetState state = BND_DEFAULT; - - Slider() { - box.size.y = BND_WIDGET_HEIGHT; - } - void draw(NVGcontext *vg) override; - void onDragStart(EventDragStart &e) override; - void onDragMove(EventDragMove &e) override; - void onDragEnd(EventDragEnd &e) override; - void onMouseDown(EventMouseDown &e) override; -}; - -/** Parent must be a ScrollWidget */ -struct ScrollBar : OpaqueWidget { - enum { VERTICAL, HORIZONTAL } orientation; - BNDwidgetState state = BND_DEFAULT; - float offset = 0.0; - float size = 0.0; - - ScrollBar() { - box.size = Vec(BND_SCROLLBAR_WIDTH, BND_SCROLLBAR_HEIGHT); - } - void draw(NVGcontext *vg) override; - void onDragStart(EventDragStart &e) override; - void onDragMove(EventDragMove &e) override; - void onDragEnd(EventDragEnd &e) override; -}; - -/** Handles a container with ScrollBar */ -struct ScrollWidget : OpaqueWidget { - Widget *container; - ScrollBar *horizontalScrollBar; - ScrollBar *verticalScrollBar; - Vec offset; - - ScrollWidget(); - void draw(NVGcontext *vg) override; - void step() override; - void onMouseMove(EventMouseMove &e) override; - void onScroll(EventScroll &e) override; -}; - -struct TextField : OpaqueWidget { - std::string text; - std::string placeholder; - bool multiline = false; - int begin = 0; - int end = 0; - - TextField() { - box.size.y = BND_WIDGET_HEIGHT; - } - void draw(NVGcontext *vg) override; - void onMouseDown(EventMouseDown &e) override; - void onFocus(EventFocus &e) override; - void onText(EventText &e) override; - void onKey(EventKey &e) override; - void insertText(std::string newText); - virtual void onTextChange() {} -}; - -struct PasswordField : TextField { - void draw(NVGcontext *vg) override; -}; - -struct ProgressBar : TransparentWidget, QuantityWidget { - ProgressBar() { - box.size.y = BND_WIDGET_HEIGHT; - } - void draw(NVGcontext *vg) override; -}; - -struct Tooltip : Widget { - void step() override; - void draw(NVGcontext *vg) override; -}; - -struct Scene : OpaqueWidget { - Widget *overlay = NULL; - void setOverlay(Widget *w); - Menu *createMenu(); - void step() override; -}; - //////////////////// // globals @@ -476,7 +288,5 @@ extern Widget *gDraggedWidget; extern Widget *gDragHoveredWidget; extern Widget *gFocusedWidget; -extern Scene *gScene; - } // namespace rack diff --git a/src/ui.cpp b/src/ui.cpp new file mode 100644 index 00000000..7e94b5ba --- /dev/null +++ b/src/ui.cpp @@ -0,0 +1,9 @@ +#include "ui.hpp" + +namespace rack { + + +Scene *gScene = NULL; + + +} // namespace rack diff --git a/src/widgets/Button.cpp b/src/ui/Button.cpp similarity index 96% rename from src/widgets/Button.cpp rename to src/ui/Button.cpp index d2fa4f2a..4491c44b 100644 --- a/src/widgets/Button.cpp +++ b/src/ui/Button.cpp @@ -1,4 +1,4 @@ -#include "widgets.hpp" +#include "ui.hpp" namespace rack { diff --git a/src/widgets/ChoiceButton.cpp b/src/ui/ChoiceButton.cpp similarity index 88% rename from src/widgets/ChoiceButton.cpp rename to src/ui/ChoiceButton.cpp index e140dea4..db68b680 100644 --- a/src/widgets/ChoiceButton.cpp +++ b/src/ui/ChoiceButton.cpp @@ -1,4 +1,4 @@ -#include "widgets.hpp" +#include "ui.hpp" namespace rack { diff --git a/src/widgets/Label.cpp b/src/ui/Label.cpp similarity index 86% rename from src/widgets/Label.cpp rename to src/ui/Label.cpp index 07b4d132..36b70081 100644 --- a/src/widgets/Label.cpp +++ b/src/ui/Label.cpp @@ -1,4 +1,4 @@ -#include "widgets.hpp" +#include "ui.hpp" namespace rack { diff --git a/src/widgets/Menu.cpp b/src/ui/Menu.cpp similarity index 98% rename from src/widgets/Menu.cpp rename to src/ui/Menu.cpp index 91a849f0..cc53b5fc 100644 --- a/src/widgets/Menu.cpp +++ b/src/ui/Menu.cpp @@ -1,4 +1,4 @@ -#include "widgets.hpp" +#include "ui.hpp" namespace rack { diff --git a/src/widgets/MenuItem.cpp b/src/ui/MenuItem.cpp similarity index 98% rename from src/widgets/MenuItem.cpp rename to src/ui/MenuItem.cpp index b2ff5c8c..4a0270f8 100644 --- a/src/widgets/MenuItem.cpp +++ b/src/ui/MenuItem.cpp @@ -1,4 +1,4 @@ -#include "widgets.hpp" +#include "ui.hpp" #include "gui.hpp" diff --git a/src/widgets/MenuLabel.cpp b/src/ui/MenuLabel.cpp similarity index 94% rename from src/widgets/MenuLabel.cpp rename to src/ui/MenuLabel.cpp index 9eca1293..2df80f72 100644 --- a/src/widgets/MenuLabel.cpp +++ b/src/ui/MenuLabel.cpp @@ -1,4 +1,4 @@ -#include "widgets.hpp" +#include "ui.hpp" #include "gui.hpp" diff --git a/src/widgets/MenuOverlay.cpp b/src/ui/MenuOverlay.cpp similarity index 95% rename from src/widgets/MenuOverlay.cpp rename to src/ui/MenuOverlay.cpp index 21453a0d..621cff0e 100644 --- a/src/widgets/MenuOverlay.cpp +++ b/src/ui/MenuOverlay.cpp @@ -1,4 +1,4 @@ -#include "widgets.hpp" +#include "ui.hpp" namespace rack { diff --git a/src/widgets/PasswordField.cpp b/src/ui/PasswordField.cpp similarity index 89% rename from src/widgets/PasswordField.cpp rename to src/ui/PasswordField.cpp index 738d0239..c23412cb 100644 --- a/src/widgets/PasswordField.cpp +++ b/src/ui/PasswordField.cpp @@ -1,4 +1,4 @@ -#include "widgets.hpp" +#include "ui.hpp" namespace rack { diff --git a/src/widgets/ProgressBar.cpp b/src/ui/ProgressBar.cpp similarity index 91% rename from src/widgets/ProgressBar.cpp rename to src/ui/ProgressBar.cpp index c99b0246..33b33f59 100644 --- a/src/widgets/ProgressBar.cpp +++ b/src/ui/ProgressBar.cpp @@ -1,4 +1,4 @@ -#include "widgets.hpp" +#include "ui.hpp" namespace rack { diff --git a/src/widgets/RadioButton.cpp b/src/ui/RadioButton.cpp similarity index 95% rename from src/widgets/RadioButton.cpp rename to src/ui/RadioButton.cpp index fb7192a6..18d4220e 100644 --- a/src/widgets/RadioButton.cpp +++ b/src/ui/RadioButton.cpp @@ -1,4 +1,4 @@ -#include "widgets.hpp" +#include "ui.hpp" namespace rack { diff --git a/src/widgets/Scene.cpp b/src/ui/Scene.cpp similarity index 100% rename from src/widgets/Scene.cpp rename to src/ui/Scene.cpp diff --git a/src/widgets/ScrollBar.cpp b/src/ui/ScrollBar.cpp similarity index 96% rename from src/widgets/ScrollBar.cpp rename to src/ui/ScrollBar.cpp index 2b7dd845..ba46b799 100644 --- a/src/widgets/ScrollBar.cpp +++ b/src/ui/ScrollBar.cpp @@ -1,4 +1,4 @@ -#include "widgets.hpp" +#include "ui.hpp" #include "gui.hpp" diff --git a/src/widgets/ScrollWidget.cpp b/src/ui/ScrollWidget.cpp similarity index 99% rename from src/widgets/ScrollWidget.cpp rename to src/ui/ScrollWidget.cpp index 1763fbac..a738f54b 100644 --- a/src/widgets/ScrollWidget.cpp +++ b/src/ui/ScrollWidget.cpp @@ -1,4 +1,4 @@ -#include "widgets.hpp" +#include "ui.hpp" #include "gui.hpp" diff --git a/src/widgets/Slider.cpp b/src/ui/Slider.cpp similarity index 97% rename from src/widgets/Slider.cpp rename to src/ui/Slider.cpp index 16e46911..c889b843 100644 --- a/src/widgets/Slider.cpp +++ b/src/ui/Slider.cpp @@ -1,4 +1,4 @@ -#include "widgets.hpp" +#include "ui.hpp" #include "gui.hpp" diff --git a/src/widgets/TextField.cpp b/src/ui/TextField.cpp similarity index 99% rename from src/widgets/TextField.cpp rename to src/ui/TextField.cpp index 22a85455..54757e85 100644 --- a/src/widgets/TextField.cpp +++ b/src/ui/TextField.cpp @@ -1,4 +1,4 @@ -#include "widgets.hpp" +#include "ui.hpp" // for gVg #include "gui.hpp" // for key codes diff --git a/src/widgets/Tooltip.cpp b/src/ui/Tooltip.cpp similarity index 93% rename from src/widgets/Tooltip.cpp rename to src/ui/Tooltip.cpp index d6184fab..6e555f18 100644 --- a/src/widgets/Tooltip.cpp +++ b/src/ui/Tooltip.cpp @@ -1,4 +1,4 @@ -#include "widgets.hpp" +#include "ui.hpp" #include "gui.hpp" diff --git a/src/widgets/Window.cpp b/src/ui/Window.cpp similarity index 93% rename from src/widgets/Window.cpp rename to src/ui/Window.cpp index dab954be..b95f94c7 100644 --- a/src/widgets/Window.cpp +++ b/src/ui/Window.cpp @@ -1,4 +1,4 @@ -#include "widgets.hpp" +#include "ui.hpp" namespace rack { diff --git a/src/widgets.cpp b/src/widgets.cpp index 037fc173..689ecd29 100644 --- a/src/widgets.cpp +++ b/src/widgets.cpp @@ -2,12 +2,11 @@ namespace rack { + Widget *gHoveredWidget = NULL; Widget *gDraggedWidget = NULL; Widget *gDragHoveredWidget = NULL; Widget *gFocusedWidget = NULL; -Scene *gScene = NULL; - } // namespace rack