From dfabbb87ce64b006f99e391f3dbe2548636cc52c Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 13 Oct 2015 11:10:48 +0200 Subject: [PATCH] Update DPF and Nekobi --- dpf/dgl/src/Window.cpp | 36 +++++++++++++++++++------- dpf/dgl/src/nanovg/stb_image.h | 16 ++++++------ dpf/dgl/src/pugl/pugl.h | 6 +++-- dpf/dgl/src/pugl/pugl_x11.c | 19 +++++++++++--- dpf/distrho/src/DistrhoPluginJack.cpp | 13 +++++++--- get-plugins.sh | 2 +- plugins/Nekobi/DistrhoPluginNekobi.cpp | 2 +- plugins/Nekobi/DistrhoUINekobi.hpp | 5 +--- 8 files changed, 67 insertions(+), 32 deletions(-) diff --git a/dpf/dgl/src/Window.cpp b/dpf/dgl/src/Window.cpp index 0759959..351d774 100644 --- a/dpf/dgl/src/Window.cpp +++ b/dpf/dgl/src/Window.cpp @@ -264,6 +264,12 @@ struct Window::PrivateData { fView = nullptr; } + if (fTitle != nullptr) + { + std::free(fTitle); + fTitle = nullptr; + } + #if defined(DISTRHO_OS_WINDOWS) hwnd = 0; #elif defined(DISTRHO_OS_MAC) @@ -677,12 +683,15 @@ struct Window::PrivateData { fSelf->onDisplayAfter(); } - void onPuglKeyboard(const bool press, const uint key) + int onPuglKeyboard(const bool press, const uint key) { DBGp("PUGL: onKeyboard : %i %i\n", press, key); if (fModal.childFocus != nullptr) - return fModal.childFocus->focus(); + { + fModal.childFocus->focus(); + return 0; + } Widget::KeyboardEvent ev; ev.press = press; @@ -695,16 +704,21 @@ struct Window::PrivateData { Widget* const widget(*rit); if (widget->isVisible() && widget->onKeyboard(ev)) - break; + return 0; } + + return 1; } - void onPuglSpecial(const bool press, const Key key) + int onPuglSpecial(const bool press, const Key key) { DBGp("PUGL: onSpecial : %i %i\n", press, key); if (fModal.childFocus != nullptr) - return fModal.childFocus->focus(); + { + fModal.childFocus->focus(); + return 0; + } Widget::SpecialEvent ev; ev.press = press; @@ -717,8 +731,10 @@ struct Window::PrivateData { Widget* const widget(*rit); if (widget->isVisible() && widget->onSpecial(ev)) - break; + return 0; } + + return 1; } void onPuglMouse(const int button, const bool press, const int x, const int y) @@ -889,14 +905,14 @@ struct Window::PrivateData { handlePtr->onPuglDisplay(); } - static void onKeyboardCallback(PuglView* view, bool press, uint32_t key) + static int onKeyboardCallback(PuglView* view, bool press, uint32_t key) { - handlePtr->onPuglKeyboard(press, key); + return handlePtr->onPuglKeyboard(press, key); } - static void onSpecialCallback(PuglView* view, bool press, PuglKey key) + static int onSpecialCallback(PuglView* view, bool press, PuglKey key) { - handlePtr->onPuglSpecial(press, static_cast(key)); + return handlePtr->onPuglSpecial(press, static_cast(key)); } static void onMouseCallback(PuglView* view, int button, bool press, int x, int y) diff --git a/dpf/dgl/src/nanovg/stb_image.h b/dpf/dgl/src/nanovg/stb_image.h index a5868ea..c180e3d 100644 --- a/dpf/dgl/src/nanovg/stb_image.h +++ b/dpf/dgl/src/nanovg/stb_image.h @@ -2280,13 +2280,13 @@ static void stbi__init_zdefaults(void) static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) { - int final, type; + int final_, type; if (parse_header) if (!stbi__parse_zlib_header(a)) return 0; a->num_bits = 0; a->code_buffer = 0; do { - final = stbi__zreceive(a,1); + final_ = stbi__zreceive(a,1); type = stbi__zreceive(a,2); if (type == 0) { if (!stbi__parse_uncomperssed_block(a)) return 0; @@ -2303,7 +2303,7 @@ static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) } if (!stbi__parse_huffman_block(a)) return 0; } - } while (!final); + } while (!final_); return 1; } @@ -2535,13 +2535,13 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r static int stbi__create_png_image(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, int interlaced) { - stbi_uc *final; + stbi_uc *final_; int p; if (!interlaced) return stbi__create_png_image_raw(a, raw, raw_len, out_n, a->s->img_x, a->s->img_y); // de-interlacing - final = (stbi_uc *) malloc(a->s->img_x * a->s->img_y * out_n); + final_ = (stbi_uc *) malloc(a->s->img_x * a->s->img_y * out_n); for (p=0; p < 7; ++p) { int xorig[] = { 0,4,0,2,0,1,0 }; int yorig[] = { 0,0,4,0,2,0,1 }; @@ -2553,19 +2553,19 @@ static int stbi__create_png_image(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_l y = (a->s->img_y - yorig[p] + yspc[p]-1) / yspc[p]; if (x && y) { if (!stbi__create_png_image_raw(a, raw, raw_len, out_n, x, y)) { - free(final); + free(final_); return 0; } for (j=0; j < y; ++j) for (i=0; i < x; ++i) - memcpy(final + (j*yspc[p]+yorig[p])*a->s->img_x*out_n + (i*xspc[p]+xorig[p])*out_n, + memcpy(final_ + (j*yspc[p]+yorig[p])*a->s->img_x*out_n + (i*xspc[p]+xorig[p])*out_n, a->out + (j*x+i)*out_n, out_n); free(a->out); raw += (x*out_n+1)*y; raw_len -= (x*out_n+1)*y; } } - a->out = final; + a->out = final_; return 1; } diff --git a/dpf/dgl/src/pugl/pugl.h b/dpf/dgl/src/pugl/pugl.h index 3ee1c43..42518e1 100644 --- a/dpf/dgl/src/pugl/pugl.h +++ b/dpf/dgl/src/pugl/pugl.h @@ -74,8 +74,9 @@ typedef void (*PuglDisplayFunc)(PuglView* view); @param view The view the event occured in. @param press True if the key was pressed, false if released. @param key Unicode point of the key pressed. + @return 0 if event was handled, otherwise send event to parent window. */ -typedef void (*PuglKeyboardFunc)(PuglView* view, bool press, uint32_t key); +typedef int (*PuglKeyboardFunc)(PuglView* view, bool press, uint32_t key); /** A function called when the pointer moves. @@ -129,8 +130,9 @@ typedef void (*PuglScrollFunc)(PuglView* view, int x, int y, float dx, float dy) @param view The view the event occured in. @param press True if the key was pressed, false if released. @param key The key pressed. + @return 0 if event was handled, otherwise send event to parent window. */ -typedef void (*PuglSpecialFunc)(PuglView* view, bool press, PuglKey key); +typedef int (*PuglSpecialFunc)(PuglView* view, bool press, PuglKey key); /** A function called when a filename is selected via file-browser. diff --git a/dpf/dgl/src/pugl/pugl_x11.c b/dpf/dgl/src/pugl/pugl_x11.c index d0cd881..7066351 100644 --- a/dpf/dgl/src/pugl/pugl_x11.c +++ b/dpf/dgl/src/pugl/pugl_x11.c @@ -430,6 +430,7 @@ dispatchKey(PuglView* view, XEvent* event, bool press) { KeySym sym; char str[5]; + PuglKey special; const int n = XLookupString(&event->xkey, str, 4, &sym, NULL); if (sym == XK_Escape && view->closeFunc && !press && !view->parent) { @@ -438,18 +439,30 @@ dispatchKey(PuglView* view, XEvent* event, bool press) return; } if (n == 0) { + goto send_event; return; } if (n > 1) { fprintf(stderr, "warning: Unsupported multi-byte key %X\n", (int)sym); + goto send_event; return; } - const PuglKey special = keySymToSpecial(sym); + special = keySymToSpecial(sym); if (special && view->specialFunc) { - view->specialFunc(view, press, special); + if (view->specialFunc(view, press, special) == 0) { + return; + } } else if (!special && view->keyboardFunc) { - view->keyboardFunc(view, press, str[0]); + if (view->keyboardFunc(view, press, str[0]) == 0) { + return; + } + } + +send_event: + if (view->parent) { + event->xany.window = view->parent; + XSendEvent(view->impl->display, view->parent, True, press ? KeyPressMask : KeyReleaseMask, event); } } diff --git a/dpf/distrho/src/DistrhoPluginJack.cpp b/dpf/distrho/src/DistrhoPluginJack.cpp index 7aa97cb..511053b 100644 --- a/dpf/distrho/src/DistrhoPluginJack.cpp +++ b/dpf/distrho/src/DistrhoPluginJack.cpp @@ -184,13 +184,20 @@ public: ~PluginJack() { - if (fClient == nullptr) - return; + if (fClient != nullptr) + jack_deactivate(fClient); - jack_deactivate(fClient); + if (fLastOutputValues != nullptr) + { + delete[] fLastOutputValues; + fLastOutputValues = nullptr; + } fPlugin.deactivate(); + if (fClient == nullptr) + return; + #if DISTRHO_PLUGIN_IS_SYNTH jack_port_unregister(fClient, fPortMidiIn); fPortMidiIn = nullptr; diff --git a/get-plugins.sh b/get-plugins.sh index 69722e3..8e29b7c 100755 --- a/get-plugins.sh +++ b/get-plugins.sh @@ -2,7 +2,7 @@ set -e -PLUGINS=("Mini-Series" "MVerb" "Nekobi" "ProM" "ndc-Plugs") +PLUGINS=("Kars" "Mini-Series" "MVerb" "Nekobi" "ProM" "ndc-Plugs") if [ ! -f Makefile ]; then echo "Makefile not found, please run this script from DPF-Plugins root source dir" diff --git a/plugins/Nekobi/DistrhoPluginNekobi.cpp b/plugins/Nekobi/DistrhoPluginNekobi.cpp index 76d2587..0081f0e 100644 --- a/plugins/Nekobi/DistrhoPluginNekobi.cpp +++ b/plugins/Nekobi/DistrhoPluginNekobi.cpp @@ -163,7 +163,7 @@ void DistrhoPluginNekobi::initParameter(uint32_t index, Parameter& parameter) switch (index) { case paramWaveform: - parameter.hints = kParameterIsAutomable|kParameterIsBoolean; + parameter.hints = kParameterIsAutomable|kParameterIsInteger; parameter.name = "Waveform"; parameter.symbol = "waveform"; parameter.ranges.def = 0.0f; diff --git a/plugins/Nekobi/DistrhoUINekobi.hpp b/plugins/Nekobi/DistrhoUINekobi.hpp index c07c20a..af34e38 100644 --- a/plugins/Nekobi/DistrhoUINekobi.hpp +++ b/plugins/Nekobi/DistrhoUINekobi.hpp @@ -20,10 +20,7 @@ #include "DistrhoUI.hpp" -#include "ImageAboutWindow.hpp" -#include "ImageButton.hpp" -#include "ImageKnob.hpp" -#include "ImageSlider.hpp" +#include "ImageWidgets.hpp" #include "DistrhoArtworkNekobi.hpp" #include "NekoWidget.hpp"