| @@ -27,14 +27,21 @@ jobs: | |||||
| run: | | run: | | ||||
| make clean >/dev/null | make clean >/dev/null | ||||
| make -j $(nproc) | make -j $(nproc) | ||||
| - name: No namespace build | |||||
| - name: As C++98 mode | |||||
| env: | |||||
| CFLAGS: -Werror | |||||
| CXXFLAGS: -Werror -std=gnu++98 | |||||
| run: | | |||||
| make clean >/dev/null | |||||
| make -j $(nproc) VST3_FILENAME= | |||||
| - name: No namespace | |||||
| env: | env: | ||||
| CFLAGS: -Werror | CFLAGS: -Werror | ||||
| CXXFLAGS: -Werror -DDONT_SET_USING_DISTRHO_NAMESPACE -DDONT_SET_USING_DGL_NAMESPACE | CXXFLAGS: -Werror -DDONT_SET_USING_DISTRHO_NAMESPACE -DDONT_SET_USING_DGL_NAMESPACE | ||||
| run: | | run: | | ||||
| make clean >/dev/null | make clean >/dev/null | ||||
| make -j $(nproc) | make -j $(nproc) | ||||
| - name: Custom namespace build | |||||
| - name: Custom namespace | |||||
| env: | env: | ||||
| CFLAGS: -Werror | CFLAGS: -Werror | ||||
| CXXFLAGS: -Werror -DDISTRHO_NAMESPACE=WubbWubb -DDGL_NAMESPACE=DabDab | CXXFLAGS: -Werror -DDISTRHO_NAMESPACE=WubbWubb -DDGL_NAMESPACE=DabDab | ||||
| @@ -58,7 +58,13 @@ struct RtAudioBridge { | |||||
| void* jackProcessArg = nullptr; | void* jackProcessArg = nullptr; | ||||
| // Runtime buffers | // Runtime buffers | ||||
| #if DISTRHO_PLUGIN_NUM_INPUTS+DISTRHO_PLUGIN_NUM_OUTPUTS > 0 | |||||
| float* audioBuffers[DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS]; | float* audioBuffers[DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS]; | ||||
| #endif | |||||
| #if DISTRHO_PLUGIN_WANT_MIDI_INPUT | |||||
| #endif | |||||
| #if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT | |||||
| #endif | |||||
| // TODO midi buffer, likely using ringbuffer class | // TODO midi buffer, likely using ringbuffer class | ||||
| @@ -164,6 +170,11 @@ struct RtAudioBridge { | |||||
| #endif | #endif | ||||
| return nullptr; | return nullptr; | ||||
| #if DISTRHO_PLUGIN_NUM_INPUTS+DISTRHO_PLUGIN_NUM_OUTPUTS > 0 | |||||
| // unused | |||||
| (void)portMask; | |||||
| #endif | |||||
| } | } | ||||
| static int RtAudioCallback(void* const outputBuffer, | static int RtAudioCallback(void* const outputBuffer, | ||||
| @@ -1,86 +0,0 @@ | |||||
| /* | |||||
| * DISTRHO Plugin Framework (DPF) | |||||
| * Copyright (C) 2012-2021 Filipe Coelho <falktx@falktx.com> | |||||
| * Copyright (C) 2019-2021 Jean Pierre Cimalando <jp-dev@inbox.ru> | |||||
| * | |||||
| * 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 "DemoWidgetClickable.hpp" | |||||
| START_NAMESPACE_DGL | |||||
| // ----------------------------------------------------------------------- | |||||
| DemoWidgetClickable::DemoWidgetClickable(SubWidget* parent) | |||||
| : CairoSubWidget(parent) {} | |||||
| DemoWidgetClickable::DemoWidgetClickable(TopLevelWidget* parent) | |||||
| : CairoSubWidget(parent) {} | |||||
| void DemoWidgetClickable::onCairoDisplay(const CairoGraphicsContext& context) | |||||
| { | |||||
| cairo_t* cr = context.handle; | |||||
| Size<uint> sz = getSize(); | |||||
| int w = sz.getWidth(); | |||||
| int h = sz.getHeight(); | |||||
| switch (fColorId) | |||||
| { | |||||
| case 0: | |||||
| cairo_set_source_rgb(cr, 0.75, 0.0, 0.0); | |||||
| break; | |||||
| case 1: | |||||
| cairo_set_source_rgb(cr, 0.0, 0.75, 0.0); | |||||
| break; | |||||
| case 2: | |||||
| cairo_set_source_rgb(cr, 0.0, 0.0, 0.75); | |||||
| break; | |||||
| } | |||||
| cairo_rectangle(cr, 0, 0, w, h); | |||||
| cairo_fill(cr); | |||||
| cairo_set_source_rgb(cr, 0.9, 0.9, 0.9); | |||||
| cairo_new_path(cr); | |||||
| cairo_move_to(cr, 0.25 * w, 0.25 * h); | |||||
| cairo_line_to(cr, 0.75 * w, 0.75 * h); | |||||
| cairo_stroke(cr); | |||||
| cairo_new_path(cr); | |||||
| cairo_move_to(cr, 0.75 * w, 0.25 * h); | |||||
| cairo_line_to(cr, 0.25 * w, 0.75 * h); | |||||
| cairo_stroke(cr); | |||||
| } | |||||
| bool DemoWidgetClickable::onMouse(const MouseEvent& event) | |||||
| { | |||||
| if (event.press) | |||||
| { | |||||
| int w = getWidth(); | |||||
| int h = getHeight(); | |||||
| int mx = event.pos.getX(); | |||||
| int my = event.pos.getY(); | |||||
| bool inside = mx >= 0 && my >= 0 && mx < w && my < h; | |||||
| if (inside) | |||||
| { | |||||
| fColorId = (fColorId + 1) % 3; | |||||
| repaint(); | |||||
| } | |||||
| } | |||||
| return Widget::onMouse(event); | |||||
| } | |||||
| // ----------------------------------------------------------------------- | |||||
| END_NAMESPACE_DGL | |||||
| @@ -26,14 +26,72 @@ START_NAMESPACE_DGL | |||||
| class DemoWidgetClickable : public CairoSubWidget | class DemoWidgetClickable : public CairoSubWidget | ||||
| { | { | ||||
| public: | public: | ||||
| explicit DemoWidgetClickable(SubWidget* group); | |||||
| explicit DemoWidgetClickable(TopLevelWidget* parent); | |||||
| explicit DemoWidgetClickable(SubWidget* const parent) | |||||
| : CairoSubWidget(parent), | |||||
| colorId(0) {} | |||||
| explicit DemoWidgetClickable(TopLevelWidget* const parent) | |||||
| : CairoSubWidget(parent), | |||||
| colorId(0) {} | |||||
| protected: | protected: | ||||
| void onCairoDisplay(const CairoGraphicsContext& context) override; | |||||
| bool onMouse(const MouseEvent& event) override; | |||||
| void onCairoDisplay(const CairoGraphicsContext& context) override | |||||
| { | |||||
| cairo_t* const cr = context.handle; | |||||
| const Size<uint> sz = getSize(); | |||||
| const int w = sz.getWidth(); | |||||
| const int h = sz.getHeight(); | |||||
| switch (colorId) | |||||
| { | |||||
| case 0: | |||||
| cairo_set_source_rgb(cr, 0.75, 0.0, 0.0); | |||||
| break; | |||||
| case 1: | |||||
| cairo_set_source_rgb(cr, 0.0, 0.75, 0.0); | |||||
| break; | |||||
| case 2: | |||||
| cairo_set_source_rgb(cr, 0.0, 0.0, 0.75); | |||||
| break; | |||||
| } | |||||
| cairo_rectangle(cr, 0, 0, w, h); | |||||
| cairo_fill(cr); | |||||
| cairo_set_source_rgb(cr, 0.9, 0.9, 0.9); | |||||
| cairo_new_path(cr); | |||||
| cairo_move_to(cr, 0.25 * w, 0.25 * h); | |||||
| cairo_line_to(cr, 0.75 * w, 0.75 * h); | |||||
| cairo_stroke(cr); | |||||
| cairo_new_path(cr); | |||||
| cairo_move_to(cr, 0.75 * w, 0.25 * h); | |||||
| cairo_line_to(cr, 0.25 * w, 0.75 * h); | |||||
| cairo_stroke(cr); | |||||
| } | |||||
| bool onMouse(const MouseEvent& event) override | |||||
| { | |||||
| if (event.press) | |||||
| { | |||||
| const int w = getWidth(); | |||||
| const int h = getHeight(); | |||||
| const int mx = event.pos.getX(); | |||||
| const int my = event.pos.getY(); | |||||
| // inside | |||||
| if (mx >= 0 && my >= 0 && mx < w && my < h) | |||||
| { | |||||
| colorId = (colorId + 1) % 3; | |||||
| repaint(); | |||||
| } | |||||
| } | |||||
| return Widget::onMouse(event); | |||||
| } | |||||
| private: | private: | ||||
| unsigned fColorId = 0; | |||||
| uint colorId; | |||||
| }; | }; | ||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| @@ -18,7 +18,6 @@ FILES_DSP = \ | |||||
| FILES_UI = \ | FILES_UI = \ | ||||
| Artwork.cpp \ | Artwork.cpp \ | ||||
| DemoWidgetBanner.cpp \ | DemoWidgetBanner.cpp \ | ||||
| DemoWidgetClickable.cpp \ | |||||
| CairoExampleUI.cpp | CairoExampleUI.cpp | ||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||