| @@ -1,18 +1,22 @@ | |||||
| *.a | *.a | ||||
| *.d | |||||
| *.o | *.o | ||||
| *.exe | *.exe | ||||
| *.dll | *.dll | ||||
| *.dylib | *.dylib | ||||
| *.so | *.so | ||||
| *.zip | |||||
| .kdev_include_paths | .kdev_include_paths | ||||
| *.kdev4 | *.kdev4 | ||||
| examples/app | examples/app | ||||
| examples/blendish | |||||
| examples/color | examples/color | ||||
| examples/demo | examples/demo | ||||
| examples/demo-multi | examples/demo-multi | ||||
| examples/demo-subwidgets | |||||
| examples/file-browser | examples/file-browser | ||||
| examples/images | examples/images | ||||
| examples/nanovg | examples/nanovg | ||||
| @@ -1 +1 @@ | |||||
| Subproject commit 3a77a1144f4cb53ded4fb9194eded380bdfa9316 | |||||
| Subproject commit c6789d1889cfdb9fef784f19ab452ff70723ffc2 | |||||
| @@ -8,7 +8,7 @@ include ../dpf/dgl/Makefile.mk | |||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| BUILD_CXX_FLAGS += -I../dpf/dgl | |||||
| BUILD_CXX_FLAGS += -I../dpf/distrho -I../dpf/dgl | |||||
| LINK_FLAGS += -L../dpf -ldgl $(DGL_LIBS) | LINK_FLAGS += -L../dpf -ldgl $(DGL_LIBS) | ||||
| WINDRES ?= windres | WINDRES ?= windres | ||||
| @@ -16,9 +16,10 @@ WINDRES ?= windres | |||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| ifeq ($(WIN32),true) | ifeq ($(WIN32),true) | ||||
| TARGETS = app.exe color.exe demo.exe demo-multi images.exe nanovg.exe rectangles.exe shapes.exe text.exe | |||||
| TARGETS = app.exe color.exe demo.exe demo-multi demo-subwidgets,exe images.exe nanovg.exe rectangles.exe shapes.exe text.exe | |||||
| else | else | ||||
| TARGETS = app blendish color demo demo-multi images nanovg nanovg2 rectangles shapes text | |||||
| TARGETS = app blendish color demo demo-multi demo-subwidgets images nanovg nanovg2 rectangles shapes text | |||||
| # TARGETS = blendish demo-subwidgets | |||||
| endif | endif | ||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| @@ -54,6 +55,9 @@ demo: demo.cpp widgets/* ../dpf/dgl/* | |||||
| demo-multi: demo-multi.cpp widgets/* ../dpf/dgl/* | demo-multi: demo-multi.cpp widgets/* ../dpf/dgl/* | ||||
| $(CXX) $< $(BUILD_CXX_FLAGS) $(LINK_FLAGS) -o $@ | $(CXX) $< $(BUILD_CXX_FLAGS) $(LINK_FLAGS) -o $@ | ||||
| demo-subwidgets: demo-subwidgets.cpp widgets/* ../dpf/dgl/* | |||||
| $(CXX) $< $(BUILD_CXX_FLAGS) $(LINK_FLAGS) -o $@ | |||||
| images: images.cpp widgets/ExampleImagesWidget.hpp images_res/* ../dpf/dgl/* | images: images.cpp widgets/ExampleImagesWidget.hpp images_res/* ../dpf/dgl/* | ||||
| $(CXX) $< $(BUILD_CXX_FLAGS) $(LINK_FLAGS) -o $@ | $(CXX) $< $(BUILD_CXX_FLAGS) $(LINK_FLAGS) -o $@ | ||||
| @@ -18,14 +18,138 @@ | |||||
| // DGL Stuff | // DGL Stuff | ||||
| #include "NanoVG.hpp" | #include "NanoVG.hpp" | ||||
| #include "Widget.hpp" | |||||
| #include "StandaloneWindow.hpp" | #include "StandaloneWindow.hpp" | ||||
| #include "extra/ScopedPointer.hpp" | |||||
| #include "src/nanovg/nanovg.h" | |||||
| #include "src/oui-blendish/blendish.h" | |||||
| // ------------------------------------------------------ | // ------------------------------------------------------ | ||||
| // use namespace | // use namespace | ||||
| using DGL::NanoWidget; | |||||
| using DGL::StandaloneWindow; | |||||
| using DGL::Window; | |||||
| USE_NAMESPACE_DISTRHO; | |||||
| USE_NAMESPACE_DGL; | |||||
| // ------------------------------------------------------ | |||||
| // Test | |||||
| class BlenderOption : public NanoWidget | |||||
| { | |||||
| public: | |||||
| BlenderOption(NanoWidget* groupWidget) | |||||
| : NanoWidget(groupWidget), | |||||
| state(BND_DEFAULT), | |||||
| area(10, 10, 200, BND_WIDGET_HEIGHT) {} | |||||
| protected: | |||||
| bool onMouse(const MouseEvent& e) | |||||
| { | |||||
| if (! e.press) | |||||
| return false; | |||||
| if (! area.contains(e.pos)) | |||||
| return false; | |||||
| if (state == BND_ACTIVE) | |||||
| state = BND_HOVER; | |||||
| else | |||||
| state = BND_ACTIVE; | |||||
| repaint(); | |||||
| return true; | |||||
| } | |||||
| bool onMotion(const MotionEvent& e) | |||||
| { | |||||
| if (! area.contains(e.pos)) | |||||
| { | |||||
| if (state == BND_HOVER) | |||||
| { | |||||
| state = BND_DEFAULT; | |||||
| repaint(); | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| if (state == BND_DEFAULT) | |||||
| { | |||||
| state = BND_HOVER; | |||||
| repaint(); | |||||
| } | |||||
| return true; | |||||
| } | |||||
| void onNanoDisplay() override | |||||
| { | |||||
| bndOptionButton(getContext(), 10, 10, 200, BND_WIDGET_HEIGHT, state, "checkbox whoohoo!"); | |||||
| } | |||||
| private: | |||||
| BNDwidgetState state; | |||||
| Rectangle<int> area; | |||||
| }; | |||||
| class BlenderRadioBox : public NanoWidget | |||||
| { | |||||
| public: | |||||
| BlenderRadioBox(NanoWidget* groupWidget) | |||||
| : NanoWidget(groupWidget), | |||||
| state(BND_DEFAULT), | |||||
| area(10, 40, 200, BND_WIDGET_HEIGHT) {} | |||||
| protected: | |||||
| bool onMouse(const MouseEvent& e) | |||||
| { | |||||
| if (! e.press) | |||||
| return false; | |||||
| if (! area.contains(e.pos)) | |||||
| return false; | |||||
| if (state == BND_ACTIVE) | |||||
| state = BND_HOVER; | |||||
| else | |||||
| state = BND_ACTIVE; | |||||
| repaint(); | |||||
| return true; | |||||
| } | |||||
| bool onMotion(const MotionEvent& e) | |||||
| { | |||||
| if (! area.contains(e.pos)) | |||||
| { | |||||
| if (state == BND_HOVER) | |||||
| { | |||||
| state = BND_DEFAULT; | |||||
| repaint(); | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| if (state == BND_DEFAULT) | |||||
| { | |||||
| state = BND_HOVER; | |||||
| repaint(); | |||||
| } | |||||
| return true; | |||||
| } | |||||
| void onNanoDisplay() override | |||||
| { | |||||
| bndRadioButton(getContext(), 10, 40, 200, BND_WIDGET_HEIGHT, 0, state, BND_ICON_NONE, "radio blender style yeah"); | |||||
| } | |||||
| private: | |||||
| BNDwidgetState state; | |||||
| Rectangle<int> area; | |||||
| }; | |||||
| // ------------------------------------------------------ | // ------------------------------------------------------ | ||||
| // Test | // Test | ||||
| @@ -34,14 +158,26 @@ class TestWidget : public NanoWidget | |||||
| { | { | ||||
| public: | public: | ||||
| TestWidget(Window& parent) | TestWidget(Window& parent) | ||||
| : NanoWidget(parent) | |||||
| : NanoWidget(parent, NanoVG::CREATE_ANTIALIAS|NanoVG::CREATE_STENCIL_STROKES), | |||||
| opt(this), | |||||
| rb(this) | |||||
| { | { | ||||
| NVGcontext* const context(getContext()); | |||||
| bndSetFont(nvgCreateFont(context, "system", "./blendish_res/DejaVuSans.ttf")); | |||||
| bndSetIconImage(nvgCreateImage(context, "./blendish_res/blender_icons16.png", 0)); | |||||
| } | } | ||||
| protected: | protected: | ||||
| void onNanoDisplay() override | void onNanoDisplay() override | ||||
| { | { | ||||
| glClearColor(0.3f, 0.3f, 0.32f, 1.0f); | |||||
| glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT); | |||||
| } | } | ||||
| private: | |||||
| BlenderOption opt; | |||||
| BlenderRadioBox rb; | |||||
| }; | }; | ||||
| // ------------------------------------------------------ | // ------------------------------------------------------ | ||||
| @@ -0,0 +1,94 @@ | |||||
| /* | |||||
| * DISTRHO Plugin Framework (DPF) | |||||
| * Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * Permission to use, copy, modify, and/or distribute this software for any purpose with | |||||
| * or without fee is hereby granted, provided that the above copyright notice and this | |||||
| * permission notice appear in all copies. | |||||
| * | |||||
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||||
| * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||||
| * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||||
| * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||||
| * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||||
| * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
| */ | |||||
| // ------------------------------------------------------ | |||||
| // DGL Stuff | |||||
| #include "StandaloneWindow.hpp" | |||||
| #include "widgets/ExampleColorWidget.hpp" | |||||
| #include "widgets/ExampleRectanglesWidget.hpp" | |||||
| #include "widgets/ExampleShapesWidget.hpp" | |||||
| #include "widgets/ExampleTextWidget.hpp" | |||||
| // ------------------------------------------------------ | |||||
| // use namespace | |||||
| using DGL::Size; | |||||
| using DGL::StandaloneWindow; | |||||
| using DGL::Widget; | |||||
| using DGL::Window; | |||||
| // ------------------------------------------------------ | |||||
| // SubWidgets | |||||
| class SubWidgets : public Widget | |||||
| { | |||||
| public: | |||||
| SubWidgets(Window& parent) | |||||
| : Widget(parent), | |||||
| wColor(this), | |||||
| wRects(this), | |||||
| wShapes(this), | |||||
| wText(this) | |||||
| { | |||||
| } | |||||
| protected: | |||||
| void onDisplay() override | |||||
| { | |||||
| } | |||||
| void onResize(const ResizeEvent& e) override | |||||
| { | |||||
| const uint w = e.size.getWidth()/2; | |||||
| const uint h = e.size.getHeight()/2; | |||||
| wColor.setAbsolutePos(0, 0); | |||||
| wColor.setSize(w, h); | |||||
| wRects.setAbsolutePos(w, 0); | |||||
| wRects.setSize(w, h); | |||||
| wShapes.setAbsolutePos(0, h); | |||||
| wShapes.setSize(w, h); | |||||
| wText.setAbsolutePos(w, h); | |||||
| wText.setSize(w, h); | |||||
| } | |||||
| private: | |||||
| ExampleColorWidget wColor; | |||||
| ExampleRectanglesWidget wRects; | |||||
| ExampleShapesWidget wShapes; | |||||
| ExampleTextWidget wText; | |||||
| }; | |||||
| // ------------------------------------------------------ | |||||
| // main entry point | |||||
| int main() | |||||
| { | |||||
| StandaloneWindow swin; | |||||
| SubWidgets swid(swin); | |||||
| swin.setSize(600, 600); | |||||
| swin.setTitle("SubWidgets"); | |||||
| swin.exec(); | |||||
| return 0; | |||||
| } | |||||
| // ------------------------------------------------------ | |||||
| @@ -49,6 +49,17 @@ public: | |||||
| parent.addIdleCallback(this); | parent.addIdleCallback(this); | ||||
| } | } | ||||
| ExampleColorWidget(Widget* groupWidget) | |||||
| : Widget(groupWidget), | |||||
| cur('r'), | |||||
| reverse(false), | |||||
| r(0), g(0), b(0) | |||||
| { | |||||
| setSize(300, 300); | |||||
| groupWidget->getParentWindow().addIdleCallback(this); | |||||
| } | |||||
| protected: | protected: | ||||
| void idleCallback() noexcept override | void idleCallback() noexcept override | ||||
| { | { | ||||
| @@ -45,6 +45,15 @@ public: | |||||
| fClicked[i] = false; | fClicked[i] = false; | ||||
| } | } | ||||
| ExampleRectanglesWidget(Widget* groupWidget) | |||||
| : Widget(groupWidget) | |||||
| { | |||||
| setSize(300, 300); | |||||
| for (int i=0; i<9; ++i) | |||||
| fClicked[i] = false; | |||||
| } | |||||
| protected: | protected: | ||||
| void onDisplay() override | void onDisplay() override | ||||
| { | { | ||||
| @@ -44,6 +44,12 @@ public: | |||||
| setSize(300, 300); | setSize(300, 300); | ||||
| } | } | ||||
| ExampleShapesWidget(Widget* groupWidget) | |||||
| : Widget(groupWidget) | |||||
| { | |||||
| setSize(300, 300); | |||||
| } | |||||
| protected: | protected: | ||||
| void onDisplay() override | void onDisplay() override | ||||
| { | { | ||||
| @@ -41,6 +41,13 @@ public: | |||||
| setSize(500, 300); | setSize(500, 300); | ||||
| } | } | ||||
| ExampleTextWidget(Widget* groupWidget) | |||||
| : NanoWidget(groupWidget), | |||||
| fFont(createFontFromFile("sans", "./nanovg_res/Roboto-Regular.ttf")) | |||||
| { | |||||
| setSize(500, 300); | |||||
| } | |||||
| protected: | protected: | ||||
| void onNanoDisplay() override | void onNanoDisplay() override | ||||
| { | { | ||||