| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,23 +0,0 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 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. | |||
| */ | |||
| #ifndef DGL_IMAGE_ABOUT_WINDOW_HPP_INCLUDED | |||
| #define DGL_IMAGE_ABOUT_WINDOW_HPP_INCLUDED | |||
| #warning This is a deprecated file, please include ImageWidgets.hpp instead. | |||
| #include "ImageWidgets.hpp" | |||
| #endif // DGL_IMAGE_ABOUT_WINDOW_HPP_INCLUDED | |||
| @@ -1,23 +0,0 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 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. | |||
| */ | |||
| #ifndef DGL_IMAGE_BUTTON_HPP_INCLUDED | |||
| #define DGL_IMAGE_BUTTON_HPP_INCLUDED | |||
| #warning This is a deprecated file, please include ImageWidgets.hpp instead. | |||
| #include "ImageWidgets.hpp" | |||
| #endif // DGL_IMAGE_BUTTON_HPP_INCLUDED | |||
| @@ -1,23 +0,0 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 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. | |||
| */ | |||
| #ifndef DGL_IMAGE_KNOB_HPP_INCLUDED | |||
| #define DGL_IMAGE_KNOB_HPP_INCLUDED | |||
| #warning This is a deprecated file, please include ImageWidgets.hpp instead. | |||
| #include "ImageWidgets.hpp" | |||
| #endif // DGL_IMAGE_KNOB_HPP_INCLUDED | |||
| @@ -1,23 +0,0 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 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. | |||
| */ | |||
| #ifndef DGL_IMAGE_SLIDER_HPP_INCLUDED | |||
| #define DGL_IMAGE_SLIDER_HPP_INCLUDED | |||
| #warning This is a deprecated file, please include ImageWidgets.hpp instead. | |||
| #include "ImageWidgets.hpp" | |||
| #endif // DGL_IMAGE_SLIDER_HPP_INCLUDED | |||
| @@ -1,23 +0,0 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 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. | |||
| */ | |||
| #ifndef DGL_IMAGE_SWITCH_HPP_INCLUDED | |||
| #define DGL_IMAGE_SWITCH_HPP_INCLUDED | |||
| #warning This is a deprecated file, please include ImageWidgets.hpp instead. | |||
| #include "ImageWidgets.hpp" | |||
| #endif // DGL_IMAGE_SWITCH_HPP_INCLUDED | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -15,9 +15,6 @@ BUILD_CXX_FLAGS += $(DGL_FLAGS) -Isrc | |||
| # needed by sofd right now, fix later | |||
| BUILD_CXX_FLAGS += -Wno-type-limits -fpermissive | |||
| # needed by oui-blendish | |||
| BUILD_CXX_FLAGS += -Wno-unused-parameter | |||
| # ---------------------------------------------------------------------------------------------------------------------------- | |||
| OBJS = \ | |||
| @@ -27,7 +24,6 @@ OBJS = \ | |||
| $(OBJDIR)/Image.cpp.o \ | |||
| $(OBJDIR)/ImageWidgets.cpp.o \ | |||
| $(OBJDIR)/NanoVG.cpp.o \ | |||
| $(OBJDIR)/NanoWidgets.cpp.o \ | |||
| $(OBJDIR)/Resources.cpp.o \ | |||
| $(OBJDIR)/Widget.cpp.o | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,77 +0,0 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 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. | |||
| */ | |||
| #ifndef DGL_NANO_WIDGETS_HPP_INCLUDED | |||
| #define DGL_NANO_WIDGETS_HPP_INCLUDED | |||
| #include "NanoVG.hpp" | |||
| START_NAMESPACE_DGL | |||
| // ----------------------------------------------------------------------- | |||
| class BlendishWidget : public NanoWidget | |||
| { | |||
| public: | |||
| explicit BlendishWidget(Window& parent); | |||
| explicit BlendishWidget(NanoWidget* widget); | |||
| void loadSharedResources() override; | |||
| }; | |||
| // ----------------------------------------------------------------------- | |||
| class BlendishButton : public BlendishWidget | |||
| { | |||
| public: | |||
| class Callback | |||
| { | |||
| public: | |||
| virtual ~Callback() {} | |||
| virtual void blendishButtonClicked(BlendishButton* blendishButton, int button) = 0; | |||
| }; | |||
| explicit BlendishButton(Window& parent, const char* text = "", int iconId = -1); | |||
| explicit BlendishButton(NanoWidget* widget, const char* text = "", int iconId = -1); | |||
| ~BlendishButton() override; | |||
| int getIconId() const noexcept; | |||
| void setIconId(int iconId) noexcept; | |||
| const char* getText() const noexcept; | |||
| void setText(const char* text) noexcept; | |||
| void setCallback(Callback* callback) noexcept; | |||
| protected: | |||
| void onNanoDisplay() override; | |||
| bool onMouse(const MouseEvent&) override; | |||
| bool onMotion(const MotionEvent&) override; | |||
| private: | |||
| struct PrivateData; | |||
| PrivateData* const pData; | |||
| void _updateBounds(); | |||
| DISTRHO_LEAK_DETECTOR(BlendishButton) | |||
| }; | |||
| // ----------------------------------------------------------------------- | |||
| END_NAMESPACE_DGL | |||
| #endif // DGL_NANO_WIDGETS_HPP_INCLUDED | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -18,7 +18,6 @@ | |||
| #define DGL_COMMON_HPP_INCLUDED | |||
| #include "../ImageWidgets.hpp" | |||
| #include "../NanoWidgets.hpp" | |||
| START_NAMESPACE_DGL | |||
| @@ -35,15 +34,13 @@ struct ButtonImpl { | |||
| int state; | |||
| Widget* self; | |||
| BlendishButton::Callback* callback_b; | |||
| ImageButton::Callback* callback_i; | |||
| ImageButton::Callback* callback_img; | |||
| ButtonImpl(Widget* const s) noexcept | |||
| : button(-1), | |||
| state(kStateNormal), | |||
| self(s), | |||
| callback_b(nullptr), | |||
| callback_i(nullptr) {} | |||
| callback_img(nullptr) {} | |||
| bool onMouse(const Widget::MouseEvent& ev) | |||
| { | |||
| @@ -68,10 +65,8 @@ struct ButtonImpl { | |||
| state = kStateHover; | |||
| self->repaint(); | |||
| if (callback_b != nullptr) | |||
| callback_b->blendishButtonClicked((BlendishButton*)self, button2); | |||
| if (callback_i != nullptr) | |||
| callback_i->imageButtonClicked((ImageButton*)self, button2); | |||
| if (callback_img != nullptr) | |||
| callback_img->imageButtonClicked((ImageButton*)self, button2); | |||
| return true; | |||
| } | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -159,7 +159,7 @@ ImageButton::~ImageButton() | |||
| void ImageButton::setCallback(Callback* callback) noexcept | |||
| { | |||
| pData->impl.callback_i = callback; | |||
| pData->impl.callback_img = callback; | |||
| } | |||
| void ImageButton::onDisplay() | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,152 +0,0 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 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. | |||
| */ | |||
| #include "Common.hpp" | |||
| #include "Resources.hpp" | |||
| #define BLENDISH_IMPLEMENTATION | |||
| #include "nanovg/nanovg.h" | |||
| #include "oui-blendish/blendish.h" | |||
| #include "../distrho/extra/String.hpp" | |||
| START_NAMESPACE_DGL | |||
| // ----------------------------------------------------------------------- | |||
| BlendishWidget::BlendishWidget(Window& parent) | |||
| : NanoWidget(parent) | |||
| { | |||
| loadSharedResources(); | |||
| } | |||
| BlendishWidget::BlendishWidget(NanoWidget* widget) | |||
| : NanoWidget(widget) | |||
| { | |||
| loadSharedResources(); | |||
| } | |||
| void BlendishWidget::loadSharedResources() | |||
| { | |||
| if (nvgFindFont(fContext, NANOVG_DEJAVU_SANS_TTF) >= 0) | |||
| return; | |||
| using namespace dpf_resources; | |||
| bndSetFont(nvgCreateFontMem(fContext, NANOVG_DEJAVU_SANS_TTF, (const uchar*)dejavusans_ttf, dejavusans_ttf_size, 0)); | |||
| bndSetIconImage(nvgCreateImageMem(fContext, 0, (const uchar*)blender_icons16_png, blender_icons16_png_size)); | |||
| } | |||
| // ----------------------------------------------------------------------- | |||
| struct BlendishButton::PrivateData { | |||
| ButtonImpl impl; | |||
| int iconId; | |||
| DISTRHO_NAMESPACE::String text; | |||
| PrivateData(Widget* const s, const char* const t, const int i) noexcept | |||
| : impl(s), | |||
| iconId(i), | |||
| text(t) {} | |||
| DISTRHO_DECLARE_NON_COPY_STRUCT(PrivateData) | |||
| }; | |||
| // ----------------------------------------------------------------------- | |||
| BlendishButton::BlendishButton(Window& parent, const char* text, int iconId) | |||
| : BlendishWidget(parent), | |||
| pData(new PrivateData(this, text, iconId)) | |||
| { | |||
| _updateBounds(); | |||
| } | |||
| BlendishButton::BlendishButton(NanoWidget* widget, const char* text, int iconId) | |||
| : BlendishWidget(widget), | |||
| pData(new PrivateData(this, text, iconId)) | |||
| { | |||
| _updateBounds(); | |||
| } | |||
| BlendishButton::~BlendishButton() | |||
| { | |||
| delete pData; | |||
| } | |||
| int BlendishButton::getIconId() const noexcept | |||
| { | |||
| return pData->iconId; | |||
| } | |||
| void BlendishButton::setIconId(int iconId) noexcept | |||
| { | |||
| if (pData->iconId == iconId) | |||
| return; | |||
| pData->iconId = iconId; | |||
| _updateBounds(); | |||
| repaint(); | |||
| } | |||
| const char* BlendishButton::getText() const noexcept | |||
| { | |||
| return pData->text; | |||
| } | |||
| void BlendishButton::setText(const char* text) noexcept | |||
| { | |||
| if (pData->text == text) | |||
| return; | |||
| pData->text = text; | |||
| _updateBounds(); | |||
| repaint(); | |||
| } | |||
| void BlendishButton::setCallback(Callback* callback) noexcept | |||
| { | |||
| pData->impl.callback_b = callback; | |||
| } | |||
| void BlendishButton::onNanoDisplay() | |||
| { | |||
| bndToolButton(getContext(), | |||
| getAbsoluteX(), getAbsoluteY(), getWidth(), getHeight(), | |||
| 0, static_cast<BNDwidgetState>(pData->impl.state), pData->iconId, pData->text); | |||
| } | |||
| bool BlendishButton::onMouse(const MouseEvent& ev) | |||
| { | |||
| return pData->impl.onMouse(ev); | |||
| } | |||
| bool BlendishButton::onMotion(const MotionEvent& ev) | |||
| { | |||
| return pData->impl.onMotion(ev); | |||
| } | |||
| void BlendishButton::_updateBounds() | |||
| { | |||
| const float width = bndLabelWidth (getContext(), pData->iconId, pData->text); | |||
| const float height = bndLabelHeight(getContext(), pData->iconId, pData->text, width); | |||
| setSize(width, height); | |||
| } | |||
| // ----------------------------------------------------------------------- | |||
| END_NAMESPACE_DGL | |||
| // ----------------------------------------------------------------------- | |||
| @@ -5,11 +5,8 @@ | |||
| namespace dpf_resources | |||
| { | |||
| extern const char* blender_icons16_png; | |||
| const unsigned int blender_icons16_png_size = 250706; | |||
| extern const char* dejavusans_ttf; | |||
| const unsigned int dejavusans_ttf_size = 741536; | |||
| extern const char* dejavusans_ttf; | |||
| const unsigned int dejavusans_ttf_size = 741536; | |||
| }; | |||
| #endif | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,21 +0,0 @@ | |||
| Blendish - Blender 2.5 UI based theming functions for NanoVG | |||
| Copyright (c) 2014 Leonard Ritter <leonard.ritter@duangle.com> | |||
| Permission is hereby granted, free of charge, to any person obtaining a copy | |||
| of this software and associated documentation files (the "Software"), to deal | |||
| in the Software without restriction, including without limitation the rights | |||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
| copies of the Software, and to permit persons to whom the Software is | |||
| furnished to do so, subject to the following conditions: | |||
| The above copyright notice and this permission notice shall be included in | |||
| all copies or substantial portions of the Software. | |||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||
| THE SOFTWARE. | |||
| @@ -1,280 +0,0 @@ | |||
| GNU GENERAL PUBLIC LICENSE | |||
| Version 2, June 1991 | |||
| Copyright (C) 1989, 1991 Free Software Foundation, Inc. | |||
| 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |||
| Everyone is permitted to copy and distribute verbatim copies | |||
| of this license document, but changing it is not allowed. | |||
| Preamble | |||
| The licenses for most software are designed to take away your | |||
| freedom to share and change it. By contrast, the GNU General Public | |||
| License is intended to guarantee your freedom to share and change free | |||
| software--to make sure the software is free for all its users. This | |||
| General Public License applies to most of the Free Software | |||
| Foundation's software and to any other program whose authors commit to | |||
| using it. (Some other Free Software Foundation software is covered by | |||
| the GNU Library General Public License instead.) You can apply it to | |||
| your programs, too. | |||
| When we speak of free software, we are referring to freedom, not | |||
| price. Our General Public Licenses are designed to make sure that you | |||
| have the freedom to distribute copies of free software (and charge for | |||
| this service if you wish), that you receive source code or can get it | |||
| if you want it, that you can change the software or use pieces of it | |||
| in new free programs; and that you know you can do these things. | |||
| To protect your rights, we need to make restrictions that forbid | |||
| anyone to deny you these rights or to ask you to surrender the rights. | |||
| These restrictions translate to certain responsibilities for you if you | |||
| distribute copies of the software, or if you modify it. | |||
| For example, if you distribute copies of such a program, whether | |||
| gratis or for a fee, you must give the recipients all the rights that | |||
| you have. You must make sure that they, too, receive or can get the | |||
| source code. And you must show them these terms so they know their | |||
| rights. | |||
| We protect your rights with two steps: (1) copyright the software, and | |||
| (2) offer you this license which gives you legal permission to copy, | |||
| distribute and/or modify the software. | |||
| Also, for each author's protection and ours, we want to make certain | |||
| that everyone understands that there is no warranty for this free | |||
| software. If the software is modified by someone else and passed on, we | |||
| want its recipients to know that what they have is not the original, so | |||
| that any problems introduced by others will not reflect on the original | |||
| authors' reputations. | |||
| Finally, any free program is threatened constantly by software | |||
| patents. We wish to avoid the danger that redistributors of a free | |||
| program will individually obtain patent licenses, in effect making the | |||
| program proprietary. To prevent this, we have made it clear that any | |||
| patent must be licensed for everyone's free use or not licensed at all. | |||
| The precise terms and conditions for copying, distribution and | |||
| modification follow. | |||
| GNU GENERAL PUBLIC LICENSE | |||
| TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | |||
| 0. This License applies to any program or other work which contains | |||
| a notice placed by the copyright holder saying it may be distributed | |||
| under the terms of this General Public License. The "Program", below, | |||
| refers to any such program or work, and a "work based on the Program" | |||
| means either the Program or any derivative work under copyright law: | |||
| that is to say, a work containing the Program or a portion of it, | |||
| either verbatim or with modifications and/or translated into another | |||
| language. (Hereinafter, translation is included without limitation in | |||
| the term "modification".) Each licensee is addressed as "you". | |||
| Activities other than copying, distribution and modification are not | |||
| covered by this License; they are outside its scope. The act of | |||
| running the Program is not restricted, and the output from the Program | |||
| is covered only if its contents constitute a work based on the | |||
| Program (independent of having been made by running the Program). | |||
| Whether that is true depends on what the Program does. | |||
| 1. You may copy and distribute verbatim copies of the Program's | |||
| source code as you receive it, in any medium, provided that you | |||
| conspicuously and appropriately publish on each copy an appropriate | |||
| copyright notice and disclaimer of warranty; keep intact all the | |||
| notices that refer to this License and to the absence of any warranty; | |||
| and give any other recipients of the Program a copy of this License | |||
| along with the Program. | |||
| You may charge a fee for the physical act of transferring a copy, and | |||
| you may at your option offer warranty protection in exchange for a fee. | |||
| 2. You may modify your copy or copies of the Program or any portion | |||
| of it, thus forming a work based on the Program, and copy and | |||
| distribute such modifications or work under the terms of Section 1 | |||
| above, provided that you also meet all of these conditions: | |||
| a) You must cause the modified files to carry prominent notices | |||
| stating that you changed the files and the date of any change. | |||
| b) You must cause any work that you distribute or publish, that in | |||
| whole or in part contains or is derived from the Program or any | |||
| part thereof, to be licensed as a whole at no charge to all third | |||
| parties under the terms of this License. | |||
| c) If the modified program normally reads commands interactively | |||
| when run, you must cause it, when started running for such | |||
| interactive use in the most ordinary way, to print or display an | |||
| announcement including an appropriate copyright notice and a | |||
| notice that there is no warranty (or else, saying that you provide | |||
| a warranty) and that users may redistribute the program under | |||
| these conditions, and telling the user how to view a copy of this | |||
| License. (Exception: if the Program itself is interactive but | |||
| does not normally print such an announcement, your work based on | |||
| the Program is not required to print an announcement.) | |||
| These requirements apply to the modified work as a whole. If | |||
| identifiable sections of that work are not derived from the Program, | |||
| and can be reasonably considered independent and separate works in | |||
| themselves, then this License, and its terms, do not apply to those | |||
| sections when you distribute them as separate works. But when you | |||
| distribute the same sections as part of a whole which is a work based | |||
| on the Program, the distribution of the whole must be on the terms of | |||
| this License, whose permissions for other licensees extend to the | |||
| entire whole, and thus to each and every part regardless of who wrote it. | |||
| Thus, it is not the intent of this section to claim rights or contest | |||
| your rights to work written entirely by you; rather, the intent is to | |||
| exercise the right to control the distribution of derivative or | |||
| collective works based on the Program. | |||
| In addition, mere aggregation of another work not based on the Program | |||
| with the Program (or with a work based on the Program) on a volume of | |||
| a storage or distribution medium does not bring the other work under | |||
| the scope of this License. | |||
| 3. You may copy and distribute the Program (or a work based on it, | |||
| under Section 2) in object code or executable form under the terms of | |||
| Sections 1 and 2 above provided that you also do one of the following: | |||
| a) Accompany it with the complete corresponding machine-readable | |||
| source code, which must be distributed under the terms of Sections | |||
| 1 and 2 above on a medium customarily used for software interchange; or, | |||
| b) Accompany it with a written offer, valid for at least three | |||
| years, to give any third party, for a charge no more than your | |||
| cost of physically performing source distribution, a complete | |||
| machine-readable copy of the corresponding source code, to be | |||
| distributed under the terms of Sections 1 and 2 above on a medium | |||
| customarily used for software interchange; or, | |||
| c) Accompany it with the information you received as to the offer | |||
| to distribute corresponding source code. (This alternative is | |||
| allowed only for noncommercial distribution and only if you | |||
| received the program in object code or executable form with such | |||
| an offer, in accord with Subsection b above.) | |||
| The source code for a work means the preferred form of the work for | |||
| making modifications to it. For an executable work, complete source | |||
| code means all the source code for all modules it contains, plus any | |||
| associated interface definition files, plus the scripts used to | |||
| control compilation and installation of the executable. However, as a | |||
| special exception, the source code distributed need not include | |||
| anything that is normally distributed (in either source or binary | |||
| form) with the major components (compiler, kernel, and so on) of the | |||
| operating system on which the executable runs, unless that component | |||
| itself accompanies the executable. | |||
| If distribution of executable or object code is made by offering | |||
| access to copy from a designated place, then offering equivalent | |||
| access to copy the source code from the same place counts as | |||
| distribution of the source code, even though third parties are not | |||
| compelled to copy the source along with the object code. | |||
| 4. You may not copy, modify, sublicense, or distribute the Program | |||
| except as expressly provided under this License. Any attempt | |||
| otherwise to copy, modify, sublicense or distribute the Program is | |||
| void, and will automatically terminate your rights under this License. | |||
| However, parties who have received copies, or rights, from you under | |||
| this License will not have their licenses terminated so long as such | |||
| parties remain in full compliance. | |||
| 5. You are not required to accept this License, since you have not | |||
| signed it. However, nothing else grants you permission to modify or | |||
| distribute the Program or its derivative works. These actions are | |||
| prohibited by law if you do not accept this License. Therefore, by | |||
| modifying or distributing the Program (or any work based on the | |||
| Program), you indicate your acceptance of this License to do so, and | |||
| all its terms and conditions for copying, distributing or modifying | |||
| the Program or works based on it. | |||
| 6. Each time you redistribute the Program (or any work based on the | |||
| Program), the recipient automatically receives a license from the | |||
| original licensor to copy, distribute or modify the Program subject to | |||
| these terms and conditions. You may not impose any further | |||
| restrictions on the recipients' exercise of the rights granted herein. | |||
| You are not responsible for enforcing compliance by third parties to | |||
| this License. | |||
| 7. If, as a consequence of a court judgment or allegation of patent | |||
| infringement or for any other reason (not limited to patent issues), | |||
| conditions are imposed on you (whether by court order, agreement or | |||
| otherwise) that contradict the conditions of this License, they do not | |||
| excuse you from the conditions of this License. If you cannot | |||
| distribute so as to satisfy simultaneously your obligations under this | |||
| License and any other pertinent obligations, then as a consequence you | |||
| may not distribute the Program at all. For example, if a patent | |||
| license would not permit royalty-free redistribution of the Program by | |||
| all those who receive copies directly or indirectly through you, then | |||
| the only way you could satisfy both it and this License would be to | |||
| refrain entirely from distribution of the Program. | |||
| If any portion of this section is held invalid or unenforceable under | |||
| any particular circumstance, the balance of the section is intended to | |||
| apply and the section as a whole is intended to apply in other | |||
| circumstances. | |||
| It is not the purpose of this section to induce you to infringe any | |||
| patents or other property right claims or to contest validity of any | |||
| such claims; this section has the sole purpose of protecting the | |||
| integrity of the free software distribution system, which is | |||
| implemented by public license practices. Many people have made | |||
| generous contributions to the wide range of software distributed | |||
| through that system in reliance on consistent application of that | |||
| system; it is up to the author/donor to decide if he or she is willing | |||
| to distribute software through any other system and a licensee cannot | |||
| impose that choice. | |||
| This section is intended to make thoroughly clear what is believed to | |||
| be a consequence of the rest of this License. | |||
| 8. If the distribution and/or use of the Program is restricted in | |||
| certain countries either by patents or by copyrighted interfaces, the | |||
| original copyright holder who places the Program under this License | |||
| may add an explicit geographical distribution limitation excluding | |||
| those countries, so that distribution is permitted only in or among | |||
| countries not thus excluded. In such case, this License incorporates | |||
| the limitation as if written in the body of this License. | |||
| 9. The Free Software Foundation may publish revised and/or new versions | |||
| of the General Public License from time to time. Such new versions will | |||
| be similar in spirit to the present version, but may differ in detail to | |||
| address new problems or concerns. | |||
| Each version is given a distinguishing version number. If the Program | |||
| specifies a version number of this License which applies to it and "any | |||
| later version", you have the option of following the terms and conditions | |||
| either of that version or of any later version published by the Free | |||
| Software Foundation. If the Program does not specify a version number of | |||
| this License, you may choose any version ever published by the Free Software | |||
| Foundation. | |||
| 10. If you wish to incorporate parts of the Program into other free | |||
| programs whose distribution conditions are different, write to the author | |||
| to ask for permission. For software which is copyrighted by the Free | |||
| Software Foundation, write to the Free Software Foundation; we sometimes | |||
| make exceptions for this. Our decision will be guided by the two goals | |||
| of preserving the free status of all derivatives of our free software and | |||
| of promoting the sharing and reuse of software generally. | |||
| NO WARRANTY | |||
| 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY | |||
| FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN | |||
| OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES | |||
| PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED | |||
| OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |||
| MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS | |||
| TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE | |||
| PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, | |||
| REPAIR OR CORRECTION. | |||
| 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | |||
| WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR | |||
| REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, | |||
| INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING | |||
| OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED | |||
| TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY | |||
| YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER | |||
| PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE | |||
| POSSIBILITY OF SUCH DAMAGES. | |||
| END OF TERMS AND CONDITIONS | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -20,7 +20,10 @@ | |||
| #include "extra/LeakDetector.hpp" | |||
| #include "src/DistrhoPluginChecks.h" | |||
| #if DISTRHO_UI_USE_NANOVG | |||
| #ifndef HAVE_DGL | |||
| # include "extra/ExternalWindow.hpp" | |||
| typedef DISTRHO_NAMESPACE::ExternalWindow UIWidget; | |||
| #elif DISTRHO_UI_USE_NANOVG | |||
| # include "../dgl/NanoVG.hpp" | |||
| typedef DGL::NanoWidget UIWidget; | |||
| #else | |||
| @@ -41,9 +44,8 @@ START_NAMESPACE_DISTRHO | |||
| /** | |||
| DPF UI class from where UI instances are created. | |||
| TODO. | |||
| must call setSize during construction, | |||
| @note You must call setSize during construction, | |||
| @TODO Detailed information about this class. | |||
| */ | |||
| class UI : public UIWidget | |||
| { | |||
| @@ -69,25 +71,29 @@ public: | |||
| double getSampleRate() const noexcept; | |||
| /** | |||
| TODO: Document this. | |||
| editParameter. | |||
| @TODO Document this. | |||
| */ | |||
| void editParameter(uint32_t index, bool started); | |||
| /** | |||
| TODO: Document this. | |||
| setParameterValue. | |||
| @TODO Document this. | |||
| */ | |||
| void setParameterValue(uint32_t index, float value); | |||
| #if DISTRHO_PLUGIN_WANT_STATE | |||
| /** | |||
| TODO: Document this. | |||
| setState. | |||
| @TODO Document this. | |||
| */ | |||
| void setState(const char* key, const char* value); | |||
| #endif | |||
| #if DISTRHO_PLUGIN_IS_SYNTH | |||
| /** | |||
| TODO: Document this. | |||
| sendNote. | |||
| @TODO Document this. | |||
| */ | |||
| void sendNote(uint8_t channel, uint8_t note, uint8_t velocity); | |||
| #endif | |||
| @@ -97,11 +103,24 @@ public: | |||
| * Direct DSP access - DO NOT USE THIS UNLESS STRICTLY NECESSARY!! */ | |||
| /** | |||
| TODO: Document this. | |||
| getPluginInstancePointer. | |||
| @TODO Document this. | |||
| */ | |||
| void* getPluginInstancePointer() const noexcept; | |||
| #endif | |||
| #if DISTRHO_PLUGIN_HAS_EMBED_UI && DISTRHO_PLUGIN_HAS_EXTERNAL_UI | |||
| /* -------------------------------------------------------------------------------------------------------- | |||
| * External embeddable UI helpers */ | |||
| /** | |||
| Get the Window Id that will be used for the next created window. | |||
| @note: This function is only valid during createUI(), | |||
| it will return 0 when called from anywhere else. | |||
| */ | |||
| static uintptr_t getNextWindowId() noexcept; | |||
| #endif | |||
| protected: | |||
| /* -------------------------------------------------------------------------------------------------------- | |||
| * DSP/Plugin Callbacks */ | |||
| @@ -137,11 +156,13 @@ protected: | |||
| */ | |||
| virtual void sampleRateChanged(double newSampleRate); | |||
| #ifdef HAVE_DGL | |||
| /* -------------------------------------------------------------------------------------------------------- | |||
| * UI Callbacks (optional) */ | |||
| /** | |||
| TODO: Document this. | |||
| uiIdle. | |||
| @TODO Document this. | |||
| */ | |||
| virtual void uiIdle() {} | |||
| @@ -167,6 +188,7 @@ protected: | |||
| @see Widget::onResize(const ResizeEvent&) | |||
| */ | |||
| void onResize(const ResizeEvent& ev) override; | |||
| #endif | |||
| // ------------------------------------------------------------------------------------------------------- | |||
| @@ -176,11 +198,13 @@ private: | |||
| friend class UIExporter; | |||
| friend class UIExporterWindow; | |||
| #ifdef HAVE_DGL | |||
| // these should not be used | |||
| void setAbsoluteX(int) const noexcept {} | |||
| void setAbsoluteY(int) const noexcept {} | |||
| void setAbsolutePos(int, int) const noexcept {} | |||
| void setAbsolutePos(const DGL::Point<int>&) const noexcept {} | |||
| #endif | |||
| DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(UI) | |||
| }; | |||
| @@ -196,7 +220,8 @@ private: | |||
| */ | |||
| /** | |||
| TODO. | |||
| createUI. | |||
| @TODO Document this. | |||
| */ | |||
| extern UI* createUI(); | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -24,7 +24,30 @@ | |||
| // ----------------------------------------------------------------------- | |||
| // base64 stuff, based on http://www.adp-gmbh.ch/cpp/common/base64.html | |||
| // Copyright (C) 2004-2008 René Nyffenegger | |||
| /* | |||
| Copyright (C) 2004-2008 René Nyffenegger | |||
| This source code is provided 'as-is', without any express or implied | |||
| warranty. In no event will the author be held liable for any damages | |||
| arising from the use of this software. | |||
| Permission is granted to anyone to use this software for any purpose, | |||
| including commercial applications, and to alter it and redistribute it | |||
| freely, subject to the following restrictions: | |||
| 1. The origin of this source code must not be misrepresented; you must not | |||
| claim that you wrote the original source code. If you use this source code | |||
| in a product, an acknowledgment in the product documentation would be | |||
| appreciated but is not required. | |||
| 2. Altered source versions must be plainly marked as such, and must not be | |||
| misrepresented as being the original source code. | |||
| 3. This notice may not be removed or altered from any source distribution. | |||
| René Nyffenegger rene.nyffenegger@adp-gmbh.ch | |||
| */ | |||
| // ----------------------------------------------------------------------- | |||
| // Helpers | |||
| @@ -0,0 +1,171 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2016 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. | |||
| */ | |||
| #ifndef DISTRHO_EXTERNAL_WINDOW_HPP_INCLUDED | |||
| #define DISTRHO_EXTERNAL_WINDOW_HPP_INCLUDED | |||
| #include "String.hpp" | |||
| #ifdef DISTRHO_OS_UNIX | |||
| # include <cerrno> | |||
| # include <sys/wait.h> | |||
| # include <unistd.h> | |||
| #else | |||
| # error Unsupported platform! | |||
| #endif | |||
| START_NAMESPACE_DISTRHO | |||
| // ----------------------------------------------------------------------- | |||
| // ExternalWindow class | |||
| class ExternalWindow | |||
| { | |||
| public: | |||
| ExternalWindow(const uint w = 1, const uint h = 1, const char* const t = "") | |||
| : width(w), | |||
| height(h), | |||
| title(t), | |||
| pid(0) {} | |||
| virtual ~ExternalWindow() | |||
| { | |||
| terminateAndWaitForProcess(); | |||
| } | |||
| uint getWidth() const noexcept | |||
| { | |||
| return width; | |||
| } | |||
| uint getHeight() const noexcept | |||
| { | |||
| return height; | |||
| } | |||
| const char* getTitle() const noexcept | |||
| { | |||
| return title; | |||
| } | |||
| void setTitle(const char* const t) noexcept | |||
| { | |||
| title = t; | |||
| } | |||
| bool isRunning() noexcept | |||
| { | |||
| if (pid <= 0) | |||
| return false; | |||
| const pid_t p = ::waitpid(pid, nullptr, WNOHANG); | |||
| if (p == pid || (p == -1 && errno == ECHILD)) | |||
| { | |||
| printf("NOTICE: Child process exited while idle\n"); | |||
| pid = 0; | |||
| return false; | |||
| } | |||
| return true; | |||
| } | |||
| protected: | |||
| bool startExternalProcess(const char* args[]) | |||
| { | |||
| terminateAndWaitForProcess(); | |||
| pid = vfork(); | |||
| switch (pid) | |||
| { | |||
| case 0: | |||
| execvp(args[0], (char**)args); | |||
| _exit(1); | |||
| return false; | |||
| case -1: | |||
| printf("Could not start external ui\n"); | |||
| return false; | |||
| default: | |||
| return true; | |||
| } | |||
| } | |||
| private: | |||
| uint width; | |||
| uint height; | |||
| String title; | |||
| pid_t pid; | |||
| friend class UIExporter; | |||
| void terminateAndWaitForProcess() | |||
| { | |||
| if (pid <= 0) | |||
| return; | |||
| printf("Waiting for previous process to stop,,,\n"); | |||
| bool sendTerm = true; | |||
| for (pid_t p;;) | |||
| { | |||
| p = ::waitpid(pid, nullptr, WNOHANG); | |||
| switch (p) | |||
| { | |||
| case 0: | |||
| if (sendTerm) | |||
| { | |||
| sendTerm = false; | |||
| ::kill(pid, SIGTERM); | |||
| } | |||
| break; | |||
| case -1: | |||
| if (errno == ECHILD) | |||
| { | |||
| printf("Done! (no such process)\n"); | |||
| pid = 0; | |||
| return; | |||
| } | |||
| break; | |||
| default: | |||
| if (p == pid) | |||
| { | |||
| printf("Done! (clean wait)\n"); | |||
| pid = 0; | |||
| return; | |||
| } | |||
| break; | |||
| } | |||
| // 5 msec | |||
| usleep(5*1000); | |||
| } | |||
| } | |||
| DISTRHO_DECLARE_NON_COPY_CLASS(ExternalWindow) | |||
| }; | |||
| // ----------------------------------------------------------------------- | |||
| END_NAMESPACE_DISTRHO | |||
| #endif // DISTRHO_EXTERNAL_WINDOW_HPP_INCLUDED | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -54,11 +54,20 @@ public: | |||
| /* | |||
| * Simple char string. | |||
| */ | |||
| explicit String(char* const strBuf) noexcept | |||
| explicit String(char* const strBuf, const bool copyData = true) noexcept | |||
| : fBuffer(_null()), | |||
| fBufferLen(0) | |||
| { | |||
| _dup(strBuf); | |||
| if (copyData || strBuf == nullptr) | |||
| { | |||
| _dup(strBuf); | |||
| } | |||
| else | |||
| { | |||
| fBuffer = strBuf; | |||
| fBufferLen = std::strlen(strBuf); | |||
| } | |||
| } | |||
| /* | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -42,6 +42,10 @@ | |||
| # endif | |||
| #endif | |||
| #if defined(DISTRHO_OS_LINUX) || defined(DISTRHO_OS_MAC) | |||
| # define DISTRHO_OS_UNIX | |||
| #endif | |||
| #ifndef DISTRHO_DLL_EXTENSION | |||
| # define DISTRHO_DLL_EXTENSION "so" | |||
| #endif | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU Lesser General Public | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -45,6 +45,10 @@ | |||
| # define DISTRHO_PLUGIN_HAS_UI 0 | |||
| #endif | |||
| #ifndef DISTRHO_PLUGIN_HAS_EXTERNAL_UI | |||
| # define DISTRHO_PLUGIN_HAS_EXTERNAL_UI 0 | |||
| #endif | |||
| #ifndef DISTRHO_PLUGIN_IS_RT_SAFE | |||
| # define DISTRHO_PLUGIN_IS_RT_SAFE 0 | |||
| #endif | |||
| @@ -85,6 +89,17 @@ | |||
| # define DISTRHO_UI_USE_NANOVG 0 | |||
| #endif | |||
| // ----------------------------------------------------------------------- | |||
| // Define DISTRHO_PLUGIN_HAS_EMBED_UI if needed | |||
| #ifndef DISTRHO_PLUGIN_HAS_EMBED_UI | |||
| # ifdef HAVE_DGL | |||
| # define DISTRHO_PLUGIN_HAS_EMBED_UI 1 | |||
| # else | |||
| # define DISTRHO_PLUGIN_HAS_EMBED_UI 0 | |||
| # endif | |||
| #endif | |||
| // ----------------------------------------------------------------------- | |||
| // Define DISTRHO_UI_URI if needed | |||
| @@ -117,9 +132,9 @@ | |||
| #endif | |||
| // ----------------------------------------------------------------------- | |||
| // Disable UI if DGL is not available | |||
| // Disable UI if DGL or External UI is not available | |||
| #if DISTRHO_PLUGIN_HAS_UI && ! defined(HAVE_DGL) | |||
| #if DISTRHO_PLUGIN_HAS_UI && ! DISTRHO_PLUGIN_HAS_EXTERNAL_UI && ! defined(HAVE_DGL) | |||
| # undef DISTRHO_PLUGIN_HAS_UI | |||
| # define DISTRHO_PLUGIN_HAS_UI 0 | |||
| #endif | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU Lesser General Public | |||
| @@ -16,7 +16,7 @@ | |||
| #include "DistrhoPluginInternal.hpp" | |||
| #if DISTRHO_PLUGIN_HAS_UI && ! defined(HAVE_DGL) | |||
| #if DISTRHO_PLUGIN_HAS_UI && ! DISTRHO_PLUGIN_HAS_EMBED_UI | |||
| # undef DISTRHO_PLUGIN_HAS_UI | |||
| # define DISTRHO_PLUGIN_HAS_UI 0 | |||
| #endif | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -49,12 +49,7 @@ | |||
| # define DISTRHO_PLUGIN_USES_MODGUI 0 | |||
| #endif | |||
| #if DISTRHO_PLUGIN_HAS_UI && ! defined(HAVE_DGL) | |||
| # undef DISTRHO_PLUGIN_HAS_UI | |||
| # define DISTRHO_PLUGIN_HAS_UI 0 | |||
| #endif | |||
| #if DISTRHO_PLUGIN_HAS_UI | |||
| #if DISTRHO_PLUGIN_HAS_EMBED_UI | |||
| # if DISTRHO_OS_HAIKU | |||
| # define DISTRHO_LV2_UI_TYPE "BeUI" | |||
| # elif DISTRHO_OS_MAC | |||
| @@ -64,6 +59,8 @@ | |||
| # else | |||
| # define DISTRHO_LV2_UI_TYPE "X11UI" | |||
| # endif | |||
| #else | |||
| # define DISTRHO_LV2_UI_TYPE "UI" | |||
| #endif | |||
| #define DISTRHO_LV2_USE_EVENTS_IN (DISTRHO_PLUGIN_WANT_MIDI_INPUT || DISTRHO_PLUGIN_WANT_TIMEPOS || (DISTRHO_PLUGIN_WANT_STATE && DISTRHO_PLUGIN_HAS_UI)) | |||
| @@ -137,10 +134,12 @@ void lv2_generate_ttl(const char* const basename) | |||
| manifestString += " ui:showInterface ;\n"; | |||
| # endif | |||
| manifestString += "\n"; | |||
| # if DISTRHO_PLUGIN_HAS_EMBED_UI | |||
| manifestString += " lv2:optionalFeature ui:noUserResize ,\n"; | |||
| manifestString += " ui:resize ,\n"; | |||
| manifestString += " ui:touch ;\n"; | |||
| manifestString += "\n"; | |||
| # endif | |||
| manifestString += " lv2:requiredFeature <" LV2_DATA_ACCESS_URI "> ,\n"; | |||
| manifestString += " <" LV2_INSTANCE_ACCESS_URI "> ,\n"; | |||
| manifestString += " <" LV2_OPTIONS__options "> ,\n"; | |||
| @@ -558,10 +557,12 @@ void lv2_generate_ttl(const char* const basename) | |||
| uiString += " ui:showInterface ;\n"; | |||
| # endif | |||
| uiString += "\n"; | |||
| # if DISTRHO_PLUGIN_HAS_EMBED_UI | |||
| uiString += " lv2:optionalFeature ui:noUserResize ,\n"; | |||
| uiString += " ui:resize ,\n"; | |||
| uiString += " ui:touch ;\n"; | |||
| uiString += "\n"; | |||
| # endif | |||
| uiString += " lv2:requiredFeature <" LV2_OPTIONS__options "> ,\n"; | |||
| uiString += " <" LV2_URID__map "> .\n"; | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -16,7 +16,7 @@ | |||
| #include "DistrhoPluginInternal.hpp" | |||
| #if DISTRHO_PLUGIN_HAS_UI && ! defined(HAVE_DGL) | |||
| #if DISTRHO_PLUGIN_HAS_UI && ! DISTRHO_PLUGIN_HAS_EMBED_UI | |||
| # undef DISTRHO_PLUGIN_HAS_UI | |||
| # define DISTRHO_PLUGIN_HAS_UI 0 | |||
| #endif | |||
| @@ -340,6 +340,10 @@ public: | |||
| intptr_t vst_dispatcher(const int32_t opcode, const int32_t index, const intptr_t value, void* const ptr, const float opt) | |||
| { | |||
| #if DISTRHO_PLUGIN_WANT_STATE | |||
| intptr_t ret = 0; | |||
| #endif | |||
| switch (opcode) | |||
| { | |||
| case effGetProgram: | |||
| @@ -512,7 +516,7 @@ public: | |||
| { | |||
| fStateChunk = new char[1]; | |||
| fStateChunk[0] = '\0'; | |||
| return 1; | |||
| ret = 1; | |||
| } | |||
| else | |||
| { | |||
| @@ -546,7 +550,7 @@ public: | |||
| fStateChunk = new char[chunkSize]; | |||
| std::memcpy(fStateChunk, chunkStr.buffer(), chunkStr.length()); | |||
| fStateChunk[chunkSize] = '\0'; | |||
| fStateChunk[chunkSize-1] = '\0'; | |||
| for (std::size_t i=0; i<chunkSize; ++i) | |||
| { | |||
| @@ -554,11 +558,11 @@ public: | |||
| fStateChunk[i] = '\0'; | |||
| } | |||
| return chunkSize; | |||
| ret = chunkSize; | |||
| } | |||
| *(void**)ptr = fStateChunk; | |||
| break; | |||
| return ret; | |||
| case effSetChunk: | |||
| { | |||
| @@ -634,36 +638,38 @@ public: | |||
| } | |||
| break; | |||
| #if DISTRHO_PLUGIN_WANT_MIDI_INPUT || DISTRHO_PLUGIN_WANT_MIDI_OUTPUT || DISTRHO_PLUGIN_WANT_TIMEPOS || DISTRHO_OS_MAC | |||
| case effCanDo: | |||
| if (const char* const canDo = (const char*)ptr) | |||
| { | |||
| # if DISTRHO_OS_MAC && DISTRHO_PLUGIN_HAS_UI | |||
| #if DISTRHO_OS_MAC && DISTRHO_PLUGIN_HAS_UI | |||
| if (std::strcmp(canDo, "hasCockosViewAsConfig") == 0) | |||
| { | |||
| fUsingNsView = true; | |||
| return 0xbeef0000; | |||
| } | |||
| # endif | |||
| # if DISTRHO_PLUGIN_WANT_MIDI_INPUT | |||
| if (std::strcmp(canDo, "receiveVstEvents") == 0) | |||
| return 1; | |||
| if (std::strcmp(canDo, "receiveVstMidiEvent") == 0) | |||
| return 1; | |||
| # endif | |||
| # if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT | |||
| if (std::strcmp(canDo, "sendVstEvents") == 0) | |||
| #endif | |||
| if (std::strcmp(canDo, "receiveVstEvents") == 0 || | |||
| std::strcmp(canDo, "receiveVstMidiEvent") == 0) | |||
| #if DISTRHO_PLUGIN_WANT_MIDI_INPUT | |||
| return 1; | |||
| if (std::strcmp(canDo, "sendVstMidiEvent") == 0) | |||
| #else | |||
| return -1; | |||
| #endif | |||
| if (std::strcmp(canDo, "sendVstEvents") == 0 || | |||
| std::strcmp(canDo, "sendVstMidiEvent") == 0) | |||
| #if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT | |||
| return 1; | |||
| # endif | |||
| # if DISTRHO_PLUGIN_WANT_TIMEPOS | |||
| #else | |||
| return -1; | |||
| #endif | |||
| if (std::strcmp(canDo, "receiveVstTimeInfo") == 0) | |||
| #if DISTRHO_PLUGIN_WANT_TIMEPOS | |||
| return 1; | |||
| # endif | |||
| #else | |||
| return -1; | |||
| #endif | |||
| } | |||
| break; | |||
| #endif | |||
| //case effStartProcess: | |||
| //case effStopProcess: | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -15,20 +15,27 @@ | |||
| */ | |||
| #include "DistrhoUIInternal.hpp" | |||
| #include "src/WidgetPrivateData.hpp" | |||
| #ifdef HAVE_DGL | |||
| # include "src/WidgetPrivateData.hpp" | |||
| #endif | |||
| START_NAMESPACE_DISTRHO | |||
| /* ------------------------------------------------------------------------------------------------------------ | |||
| * Static data, see DistrhoUIInternal.hpp */ | |||
| double d_lastUiSampleRate = 0.0; | |||
| void* d_lastUiDspPtr = nullptr; | |||
| Window* d_lastUiWindow = nullptr; | |||
| double d_lastUiSampleRate = 0.0; | |||
| void* d_lastUiDspPtr = nullptr; | |||
| #ifdef HAVE_DGL | |||
| Window* d_lastUiWindow = nullptr; | |||
| #endif | |||
| uintptr_t g_nextWindowId = 0; | |||
| /* ------------------------------------------------------------------------------------------------------------ | |||
| * UI */ | |||
| #ifdef HAVE_DGL | |||
| UI::UI(uint width, uint height) | |||
| : UIWidget(*d_lastUiWindow), | |||
| pData(new PrivateData()) | |||
| @@ -38,6 +45,11 @@ UI::UI(uint width, uint height) | |||
| if (width > 0 && height > 0) | |||
| setSize(width, height); | |||
| } | |||
| #else | |||
| UI::UI(uint width, uint height) | |||
| : UIWidget(width, height), | |||
| pData(new PrivateData()) {} | |||
| #endif | |||
| UI::~UI() | |||
| { | |||
| @@ -86,11 +98,22 @@ void* UI::getPluginInstancePointer() const noexcept | |||
| } | |||
| #endif | |||
| #if DISTRHO_PLUGIN_HAS_EMBED_UI && DISTRHO_PLUGIN_HAS_EXTERNAL_UI | |||
| /* ------------------------------------------------------------------------------------------------------------ | |||
| * External embeddable UI helpers */ | |||
| uintptr_t UI::getNextWindowId() noexcept | |||
| { | |||
| return g_nextWindowId; | |||
| } | |||
| #endif | |||
| /* ------------------------------------------------------------------------------------------------------------ | |||
| * DSP/Plugin Callbacks (optional) */ | |||
| void UI::sampleRateChanged(double) {} | |||
| #ifdef HAVE_DGL | |||
| /* ------------------------------------------------------------------------------------------------------------ | |||
| * UI Callbacks (optional) */ | |||
| @@ -117,6 +140,7 @@ void UI::onResize(const ResizeEvent& ev) | |||
| { | |||
| pData->setSizeCallback(ev.size.getWidth(), ev.size.getHeight()); | |||
| } | |||
| #endif | |||
| // ----------------------------------------------------------------------------------------------------------- | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||
| @@ -18,21 +18,26 @@ | |||
| #define DISTRHO_UI_INTERNAL_HPP_INCLUDED | |||
| #include "../DistrhoUI.hpp" | |||
| #include "../../dgl/Application.hpp" | |||
| #include "../../dgl/Window.hpp" | |||
| #ifdef HAVE_DGL | |||
| # include "../../dgl/Application.hpp" | |||
| # include "../../dgl/Window.hpp" | |||
| using DGL::Application; | |||
| using DGL::IdleCallback; | |||
| using DGL::Window; | |||
| #endif | |||
| START_NAMESPACE_DISTRHO | |||
| // ----------------------------------------------------------------------- | |||
| // Static data, see DistrhoUI.cpp | |||
| extern double d_lastUiSampleRate; | |||
| extern void* d_lastUiDspPtr; | |||
| extern Window* d_lastUiWindow; | |||
| extern double d_lastUiSampleRate; | |||
| extern void* d_lastUiDspPtr; | |||
| #ifdef HAVE_DGL | |||
| extern Window* d_lastUiWindow; | |||
| #endif | |||
| extern uintptr_t g_nextWindowId; | |||
| // ----------------------------------------------------------------------- | |||
| // UI callbacks | |||
| @@ -128,6 +133,7 @@ struct UI::PrivateData { | |||
| // ----------------------------------------------------------------------- | |||
| // Plugin Window, needed to take care of resize properly | |||
| #ifdef HAVE_DGL | |||
| static inline | |||
| UI* createUiWrapper(void* const dspPtr, Window* const window) | |||
| { | |||
| @@ -191,6 +197,18 @@ private: | |||
| UI* const fUI; | |||
| bool fIsReady; | |||
| }; | |||
| #else | |||
| static inline | |||
| UI* createUiWrapper(void* const dspPtr, const uintptr_t winId) | |||
| { | |||
| d_lastUiDspPtr = dspPtr; | |||
| g_nextWindowId = winId; | |||
| UI* const ret = createUI(); | |||
| d_lastUiDspPtr = nullptr; | |||
| g_nextWindowId = 0; | |||
| return ret; | |||
| } | |||
| #endif | |||
| // ----------------------------------------------------------------------- | |||
| // UI exporter class | |||
| @@ -201,10 +219,14 @@ public: | |||
| UIExporter(void* const ptr, const intptr_t winId, | |||
| const editParamFunc editParamCall, const setParamFunc setParamCall, const setStateFunc setStateCall, const sendNoteFunc sendNoteCall, const setSizeFunc setSizeCall, | |||
| void* const dspPtr = nullptr) | |||
| #ifdef HAVE_DGL | |||
| : glApp(), | |||
| glWindow(glApp, winId, dspPtr), | |||
| fChangingSize(false), | |||
| fUI(glWindow.getUI()), | |||
| #else | |||
| : fUI(createUiWrapper(dspPtr, winId)), | |||
| #endif | |||
| fData((fUI != nullptr) ? fUI->pData : nullptr) | |||
| { | |||
| DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); | |||
| @@ -222,24 +244,43 @@ public: | |||
| uint getWidth() const noexcept | |||
| { | |||
| #ifdef HAVE_DGL | |||
| return glWindow.getWidth(); | |||
| #else | |||
| DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr, 1); | |||
| return fUI->getWidth(); | |||
| #endif | |||
| } | |||
| uint getHeight() const noexcept | |||
| { | |||
| #ifdef HAVE_DGL | |||
| return glWindow.getHeight(); | |||
| #else | |||
| DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr, 1); | |||
| return fUI->getHeight(); | |||
| #endif | |||
| } | |||
| bool isVisible() const noexcept | |||
| { | |||
| #ifdef HAVE_DGL | |||
| return glWindow.isVisible(); | |||
| #else | |||
| DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr, false); | |||
| return fUI->isRunning(); | |||
| #endif | |||
| } | |||
| // ------------------------------------------------------------------- | |||
| intptr_t getWindowId() const noexcept | |||
| { | |||
| #ifdef HAVE_DGL | |||
| return glWindow.getWindowId(); | |||
| #else | |||
| return 0; | |||
| #endif | |||
| } | |||
| // ------------------------------------------------------------------- | |||
| @@ -282,6 +323,7 @@ public: | |||
| // ------------------------------------------------------------------- | |||
| #ifdef HAVE_DGL | |||
| void exec(IdleCallback* const cb) | |||
| { | |||
| DISTRHO_SAFE_ASSERT_RETURN(cb != nullptr,); | |||
| @@ -297,27 +339,48 @@ public: | |||
| if (glWindow.isReady()) | |||
| fUI->uiIdle(); | |||
| } | |||
| #endif | |||
| bool idle() | |||
| { | |||
| DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr, false); | |||
| #ifdef HAVE_DGL | |||
| glApp.idle(); | |||
| if (glWindow.isReady()) | |||
| fUI->uiIdle(); | |||
| return ! glApp.isQuiting(); | |||
| #else | |||
| return fUI->isRunning(); | |||
| #endif | |||
| } | |||
| void quit() | |||
| { | |||
| #ifdef HAVE_DGL | |||
| glWindow.close(); | |||
| glApp.quit(); | |||
| #else | |||
| DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); | |||
| fUI->terminateAndWaitForProcess(); | |||
| #endif | |||
| } | |||
| // ------------------------------------------------------------------- | |||
| void setWindowTitle(const char* const uiTitle) | |||
| { | |||
| #ifdef HAVE_DGL | |||
| glWindow.setTitle(uiTitle); | |||
| #else | |||
| DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); | |||
| fUI->setTitle(uiTitle); | |||
| #endif | |||
| } | |||
| #ifdef HAVE_DGL | |||
| void setWindowSize(const uint width, const uint height, const bool updateUI = false) | |||
| { | |||
| DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); | |||
| @@ -333,11 +396,6 @@ public: | |||
| fChangingSize = false; | |||
| } | |||
| void setWindowTitle(const char* const uiTitle) | |||
| { | |||
| glWindow.setTitle(uiTitle); | |||
| } | |||
| void setWindowTransientWinId(const uintptr_t winId) | |||
| { | |||
| glWindow.setTransientWinId(winId); | |||
| @@ -349,6 +407,11 @@ public: | |||
| return ! glApp.isQuiting(); | |||
| } | |||
| #else | |||
| void setWindowSize(const uint width, const uint height, const bool updateUI = false) {} | |||
| void setWindowTransientWinId(const uintptr_t winId) {} | |||
| bool setWindowVisible(const bool yesNo) { return true; } | |||
| #endif | |||
| // ------------------------------------------------------------------- | |||
| @@ -368,6 +431,7 @@ public: | |||
| } | |||
| private: | |||
| #ifdef HAVE_DGL | |||
| // ------------------------------------------------------------------- | |||
| // DGL Application and Window for this widget | |||
| @@ -376,6 +440,7 @@ private: | |||
| // prevent recursion | |||
| bool fChangingSize; | |||
| #endif | |||
| // ------------------------------------------------------------------- | |||
| // Widget and DistrhoUI data | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2016 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 | |||