Browse Source

Update DPF and plugins, enabling VST3

Signed-off-by: falkTX <falktx@falktx.com>
tags/v1.5
falkTX 3 years ago
parent
commit
bd9f61299c
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
18 changed files with 279 additions and 154 deletions
  1. +95
    -4
      dpf/cmake/DPF-plugin.cmake
  2. +0
    -1
      dpf/dgl/src/.kdev_include_paths
  3. +62
    -20
      dpf/distrho/src/DistrhoPluginVST3.cpp
  4. +28
    -7
      dpf/distrho/src/DistrhoUIVST3.cpp
  5. +24
    -17
      dpf/tests/Demo.cpp
  6. +15
    -6
      dpf/tests/FileBrowserDialog.cpp
  7. +1
    -1
      dpf/tests/NanoImage.cpp
  8. +27
    -4
      dpf/tests/widgets/ExampleTextWidget.hpp
  9. +2
    -1
      plugins/MVerb/DistrhoPluginInfo.h
  10. +1
    -6
      plugins/MVerb/Makefile
  11. +6
    -45
      plugins/ProM/DistrhoUIProM.cpp
  12. +0
    -1
      plugins/ProM/DistrhoUIProM.hpp
  13. +1
    -3
      plugins/ProM/Makefile
  14. +5
    -0
      plugins/ProM/ResizeHandle.hpp
  15. +1
    -0
      plugins/glBars/DistrhoPluginInfo.h
  16. +7
    -32
      plugins/glBars/DistrhoUIGLBars.cpp
  17. +3
    -2
      plugins/glBars/DistrhoUIGLBars.hpp
  18. +1
    -4
      plugins/glBars/Makefile

+ 95
- 4
dpf/cmake/DPF-plugin.cmake View File

@@ -22,7 +22,7 @@
# add_subdirectory(DPF) # add_subdirectory(DPF)
# #
# dpf_add_plugin(MyPlugin # dpf_add_plugin(MyPlugin
# TARGETS lv2 vst2
# TARGETS lv2 vst2 vst3
# UI_TYPE opengl # UI_TYPE opengl
# FILES_DSP # FILES_DSP
# src/MyPlugin.cpp # src/MyPlugin.cpp
@@ -71,7 +71,7 @@ include(CMakeParseArguments)
# #
# `TARGETS` <tgt1>...<tgtN> # `TARGETS` <tgt1>...<tgtN>
# a list of one of more of the following target types: # a list of one of more of the following target types:
# `jack`, `ladspa`, `dssi`, `lv2`, `vst2`
# `jack`, `ladspa`, `dssi`, `lv2`, `vst2`, `vst3`
# #
# `UI_TYPE` <type> # `UI_TYPE` <type>
# the user interface type: `opengl` (default), `cairo` # the user interface type: `opengl` (default), `cairo`
@@ -153,6 +153,8 @@ function(dpf_add_plugin NAME)
dpf__build_lv2("${NAME}" "${_dgl_library}" "${_dpf_plugin_MONOLITHIC}") dpf__build_lv2("${NAME}" "${_dgl_library}" "${_dpf_plugin_MONOLITHIC}")
elseif(_target STREQUAL "vst2") elseif(_target STREQUAL "vst2")
dpf__build_vst2("${NAME}" "${_dgl_library}") dpf__build_vst2("${NAME}" "${_dgl_library}")
elseif(_target STREQUAL "vst3")
dpf__build_vst3("${NAME}" "${_dgl_library}")
else() else()
message(FATAL_ERROR "Unrecognized target type for plugin: ${_target}") message(FATAL_ERROR "Unrecognized target type for plugin: ${_target}")
endif() endif()
@@ -199,7 +201,7 @@ endfunction()
# dpf__build_ladspa # dpf__build_ladspa
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# #
# Add build rules for a DSSI plugin.
# Add build rules for a LADSPA plugin.
# #
function(dpf__build_ladspa NAME) function(dpf__build_ladspa NAME)
dpf__create_dummy_source_list(_no_srcs) dpf__create_dummy_source_list(_no_srcs)
@@ -259,7 +261,7 @@ endfunction()
# dpf__build_lv2 # dpf__build_lv2
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# #
# Add build rules for a LV2 plugin.
# Add build rules for an LV2 plugin.
# #
function(dpf__build_lv2 NAME DGL_LIBRARY MONOLITHIC) function(dpf__build_lv2 NAME DGL_LIBRARY MONOLITHIC)
dpf__create_dummy_source_list(_no_srcs) dpf__create_dummy_source_list(_no_srcs)
@@ -339,6 +341,95 @@ function(dpf__build_vst2 NAME DGL_LIBRARY)
endif() endif()
endfunction() endfunction()


# dpf__determine_vst3_package_architecture
# ------------------------------------------------------------------------------
#
# Determines the package architecture for a VST3 plugin target.
#
function(dpf__determine_vst3_package_architecture OUTPUT_VARIABLE)
# if set by variable, override the detection
if(DPF_VST3_ARCHITECTURE)
set("${OUTPUT_VARIABLE}" "${DPF_VST3_ARCHITECTURE}" PARENT_SCOPE)
return()
endif()

# not used on Apple, which supports universal binary
if(APPLE)
set("${OUTPUT_VARIABLE}" "universal" PARENT_SCOPE)
return()
endif()

# identify the target processor (special case of MSVC, problematic sometimes)
if(MSVC)
set(vst3_system_arch "${MSVC_CXX_ARCHITECTURE_ID}")
else()
set(vst3_system_arch "${CMAKE_SYSTEM_PROCESSOR}")
endif()

# transform the processor name to a format that VST3 recognizes
if(vst3_system_arch MATCHES "^(x86_64|amd64|AMD64|x64|X64)$")
set(vst3_package_arch "x86_64")
elseif(vst3_system_arch MATCHES "^(i.86|x86|X86)$")
if(WIN32)
set(vst3_package_arch "x86")
else()
set(vst3_package_arch "i386")
endif()
elseif(vst3_system_arch MATCHES "^(armv[3-8][a-z]*)$")
set(vst3_package_arch "${vst3_system_arch}")
elseif(vst3_system_arch MATCHES "^(aarch64)$")
set(vst3_package_arch "aarch64")
else()
message(FATAL_ERROR "We don't know this architecture for VST3: ${vst3_system_arch}.")
endif()

# TODO: the detections for Windows arm/arm64 when supported

set("${OUTPUT_VARIABLE}" "${vst3_package_arch}" PARENT_SCOPE)
endfunction()

# dpf__build_vst3
# ------------------------------------------------------------------------------
#
# Add build rules for a VST3 plugin.
#
function(dpf__build_vst3 NAME DGL_LIBRARY)
dpf__determine_vst3_package_architecture(vst3_arch)

dpf__create_dummy_source_list(_no_srcs)

dpf__add_module("${NAME}-vst3" ${_no_srcs})
dpf__add_plugin_main("${NAME}-vst3" "vst3")
dpf__add_ui_main("${NAME}-vst3" "vst3" "${DGL_LIBRARY}")
dpf__set_module_export_list("${NAME}-vst3" "vst3")
target_link_libraries("${NAME}-vst3" PRIVATE "${NAME}-dsp" "${NAME}-ui")
set_target_properties("${NAME}-vst3" PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/obj/vst3/$<0:>"
OUTPUT_NAME "${NAME}"
PREFIX "")

if(APPLE)
set_target_properties("${NAME}-vst3" PROPERTIES
LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin/${NAME}.vst3/Contents/MacOS/$<0:>"
SUFFIX "")
elseif(WIN32)
set_target_properties("${NAME}-vst3" PROPERTIES
LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin/${NAME}.vst3/Contents/${vst3_arch}-win/$<0:>")
else()
set_target_properties("${NAME}-vst3" PROPERTIES
LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin/${NAME}.vst3/Contents/${vst3_arch}-linux/$<0:>")
endif()

if(APPLE)
# Uses the same macOS bundle template as VST2
set(INFO_PLIST_PROJECT_NAME "${NAME}")
configure_file("${DPF_ROOT_DIR}/utils/plugin.vst/Contents/Info.plist"
"${PROJECT_BINARY_DIR}/bin/${NAME}.vst3/Contents/Info.plist" @ONLY)
file(COPY "${DPF_ROOT_DIR}/utils/plugin.vst/Contents/PkgInfo"
DESTINATION "${PROJECT_BINARY_DIR}/bin/${NAME}.vst3/Contents")
endif()
endfunction()

# dpf__add_dgl_cairo # dpf__add_dgl_cairo
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# #


+ 0
- 1
dpf/dgl/src/.kdev_include_paths View File

@@ -1 +0,0 @@
pugl-upstream/include/

+ 62
- 20
dpf/distrho/src/DistrhoPluginVST3.cpp View File

@@ -310,9 +310,9 @@ ScopedUTF16String::ScopedUTF16String(const char* const s) noexcept
: str(nullptr) : str(nullptr)
{ {
const size_t len = strlen(s); const size_t len = strlen(s);
str = (int16_t*)malloc(sizeof(int16_t) * len);
str = (int16_t*)malloc(sizeof(int16_t) * (len + 1));
DISTRHO_SAFE_ASSERT_RETURN(str != nullptr,); DISTRHO_SAFE_ASSERT_RETURN(str != nullptr,);
strncpy_utf16(str, s, len);
strncpy_utf16(str, s, len + 1);
} }


ScopedUTF16String::~ScopedUTF16String() noexcept ScopedUTF16String::~ScopedUTF16String() noexcept
@@ -1402,11 +1402,11 @@ public:
v3_result getParameterInfo(int32_t rindex, v3_param_info* const info) const noexcept v3_result getParameterInfo(int32_t rindex, v3_param_info* const info) const noexcept
{ {
DISTRHO_SAFE_ASSERT_RETURN(rindex >= 0, V3_INVALID_ARG); DISTRHO_SAFE_ASSERT_RETURN(rindex >= 0, V3_INVALID_ARG);
std::memset(info, 0, sizeof(v3_param_info));


#if DISTRHO_PLUGIN_WANT_PROGRAMS #if DISTRHO_PLUGIN_WANT_PROGRAMS
if (rindex == 0) if (rindex == 0)
{ {
std::memset(info, 0, sizeof(v3_param_info));
info->param_id = rindex; info->param_id = rindex;
info->flags = V3_PARAM_CAN_AUTOMATE | V3_PARAM_IS_LIST | V3_PARAM_PROGRAM_CHANGE; info->flags = V3_PARAM_CAN_AUTOMATE | V3_PARAM_IS_LIST | V3_PARAM_PROGRAM_CHANGE;
info->step_count = fProgramCountMinusOne; info->step_count = fProgramCountMinusOne;
@@ -1417,10 +1417,12 @@ public:
--rindex; --rindex;
#endif #endif
#if DISTRHO_PLUGIN_WANT_MIDI_INPUT #if DISTRHO_PLUGIN_WANT_MIDI_INPUT
if (rindex <= 130*16)
if (rindex < 130*16)
{ {
std::memset(info, 0, sizeof(v3_param_info));
info->param_id = rindex; info->param_id = rindex;
# if DISTRHO_PLUGIN_WANT_PROGRAMS
++info->param_id;
# endif
info->flags = V3_PARAM_CAN_AUTOMATE | V3_PARAM_IS_HIDDEN; info->flags = V3_PARAM_CAN_AUTOMATE | V3_PARAM_IS_HIDDEN;
info->step_count = 127; info->step_count = 127;
char ccstr[24]; char ccstr[24];
@@ -1465,7 +1467,6 @@ public:
if ((hints & kParameterIsInteger) && ranges.max - ranges.min > 1) if ((hints & kParameterIsInteger) && ranges.max - ranges.min > 1)
step_count = ranges.max - ranges.min - 1; step_count = ranges.max - ranges.min - 1;


std::memset(info, 0, sizeof(v3_param_info));
info->param_id = index + fParameterOffset; info->param_id = index + fParameterOffset;
info->flags = flags; info->flags = flags;
info->step_count = step_count; info->step_count = step_count;
@@ -1493,7 +1494,7 @@ public:
--rindex; --rindex;
#endif #endif
#if DISTRHO_PLUGIN_WANT_MIDI_INPUT #if DISTRHO_PLUGIN_WANT_MIDI_INPUT
if (rindex <= 130*16)
if (rindex < 130*16)
{ {
snprintf_f32_utf16(output, std::round(normalised * 127), 128); snprintf_f32_utf16(output, std::round(normalised * 127), 128);
return V3_OK; return V3_OK;
@@ -1519,7 +1520,7 @@ public:
--rindex; --rindex;
#endif #endif
#if DISTRHO_PLUGIN_WANT_MIDI_INPUT #if DISTRHO_PLUGIN_WANT_MIDI_INPUT
if (rindex <= 130*16)
if (rindex < 130*16)
{ {
// TODO // TODO
return V3_NOT_IMPLEMENTED; return V3_NOT_IMPLEMENTED;
@@ -1542,7 +1543,7 @@ public:
--rindex; --rindex;
#endif #endif
#if DISTRHO_PLUGIN_WANT_MIDI_INPUT #if DISTRHO_PLUGIN_WANT_MIDI_INPUT
if (rindex <= 130*16)
if (rindex < 130*16)
return std::round(normalised * 127); return std::round(normalised * 127);
rindex -= 130*16; rindex -= 130*16;
#endif #endif
@@ -1561,7 +1562,7 @@ public:
--rindex; --rindex;
#endif #endif
#if DISTRHO_PLUGIN_WANT_MIDI_INPUT #if DISTRHO_PLUGIN_WANT_MIDI_INPUT
if (rindex <= 130*16)
if (rindex < 130*16)
return std::max(0.0, std::min(1.0, plain / 127)); return std::max(0.0, std::min(1.0, plain / 127));
rindex -= 130*16; rindex -= 130*16;
#endif #endif
@@ -1580,7 +1581,7 @@ public:
--rindex; --rindex;
#endif #endif
#if DISTRHO_PLUGIN_WANT_MIDI_INPUT #if DISTRHO_PLUGIN_WANT_MIDI_INPUT
if (rindex <= 130*16)
if (rindex < 130*16)
{ {
// TODO // TODO
return 0.0; return 0.0;
@@ -1625,7 +1626,7 @@ public:
--rindex; --rindex;
#endif #endif
#if DISTRHO_PLUGIN_WANT_MIDI_INPUT #if DISTRHO_PLUGIN_WANT_MIDI_INPUT
if (rindex <= 130*16)
if (rindex < 130*16)
{ {
// TODO // TODO
fChangedParameterValues[rindex] = true; fChangedParameterValues[rindex] = true;
@@ -1775,7 +1776,7 @@ public:
--rindex; --rindex;
# endif # endif
# if DISTRHO_PLUGIN_WANT_MIDI_INPUT # if DISTRHO_PLUGIN_WANT_MIDI_INPUT
if (rindex <= 130*16)
if (rindex < 130*16)
continue; continue;
rindex -= 130*16; rindex -= 130*16;
# endif # endif
@@ -1835,26 +1836,42 @@ public:
# if DISTRHO_PLUGIN_WANT_STATE # if DISTRHO_PLUGIN_WANT_STATE
if (std::strcmp(msgid, "state-set") == 0) if (std::strcmp(msgid, "state-set") == 0)
{ {
int16_t* key16;
int16_t* value16;
uint32_t keySize, valueSize;
int64_t keyLength = -1;
int64_t valueLength = -1;
v3_result res; v3_result res;


res = v3_cpp_obj(attrs)->get_binary(attrs, "key", (const void**)&key16, &keySize);
res = v3_cpp_obj(attrs)->get_int(attrs, "key:length", &keyLength);
DISTRHO_SAFE_ASSERT_INT_RETURN(res == V3_OK, res, res);
DISTRHO_SAFE_ASSERT_INT_RETURN(keyLength >= 0, keyLength, V3_INTERNAL_ERR);

res = v3_cpp_obj(attrs)->get_int(attrs, "value:length", &valueLength);
DISTRHO_SAFE_ASSERT_INT_RETURN(res == V3_OK, res, res);
DISTRHO_SAFE_ASSERT_INT_RETURN(valueLength >= 0, valueLength, V3_INTERNAL_ERR);

int16_t* const key16 = (int16_t*)std::malloc(sizeof(int16_t)*(keyLength + 1));
DISTRHO_SAFE_ASSERT_RETURN(key16 != nullptr, V3_NOMEM);

int16_t* const value16 = (int16_t*)std::malloc(sizeof(int16_t)*(valueLength + 1));
DISTRHO_SAFE_ASSERT_RETURN(value16 != nullptr, V3_NOMEM);

res = v3_cpp_obj(attrs)->get_string(attrs, "key", key16, sizeof(int16_t)*keyLength);
DISTRHO_SAFE_ASSERT_INT_RETURN(res == V3_OK, res, res); DISTRHO_SAFE_ASSERT_INT_RETURN(res == V3_OK, res, res);


res = v3_cpp_obj(attrs)->get_binary(attrs, "value", (const void**)&value16, &valueSize);
res = v3_cpp_obj(attrs)->get_string(attrs, "value", value16, sizeof(int16_t)*valueLength);
DISTRHO_SAFE_ASSERT_INT_RETURN(res == V3_OK, res, res); DISTRHO_SAFE_ASSERT_INT_RETURN(res == V3_OK, res, res);


// do cheap inline conversion // do cheap inline conversion
char* const key = (char*)key16; char* const key = (char*)key16;
char* const value = (char*)value16; char* const value = (char*)value16;


for (uint32_t i=0; i<keySize/sizeof(int16_t); ++i)
for (int64_t i=0; i<keyLength; ++i)
key[i] = key16[i]; key[i] = key16[i];
for (uint32_t i=0; i<valueSize/sizeof(int16_t); ++i)
for (int64_t i=0; i<valueLength; ++i)
value[i] = value16[i]; value[i] = value16[i];


key[keyLength] = '\0';
value[valueLength] = '\0';

fPlugin.setState(key, value); fPlugin.setState(key, value);


// save this key as needed // save this key as needed
@@ -1867,6 +1884,8 @@ public:
if (dkey == key) if (dkey == key)
{ {
it->second = value; it->second = value;
std::free(key16);
std::free(value16);
return V3_OK; return V3_OK;
} }
} }
@@ -1874,6 +1893,8 @@ public:
d_stderr("Failed to find plugin state with key \"%s\"", key); d_stderr("Failed to find plugin state with key \"%s\"", key);
} }


std::free(key16);
std::free(value16);
return V3_OK; return V3_OK;
} }
# endif # endif
@@ -2042,6 +2063,8 @@ private:
DISTRHO_SAFE_ASSERT_RETURN(attrlist != nullptr,); DISTRHO_SAFE_ASSERT_RETURN(attrlist != nullptr,);


v3_cpp_obj(attrlist)->set_int(attrlist, "__dpf_msg_target__", 2); v3_cpp_obj(attrlist)->set_int(attrlist, "__dpf_msg_target__", 2);
v3_cpp_obj(attrlist)->set_int(attrlist, "key:length", std::strlen(key));
v3_cpp_obj(attrlist)->set_int(attrlist, "value:length", std::strlen(value));
v3_cpp_obj(attrlist)->set_string(attrlist, "key", ScopedUTF16String(key)); v3_cpp_obj(attrlist)->set_string(attrlist, "key", ScopedUTF16String(key));
v3_cpp_obj(attrlist)->set_string(attrlist, "value", ScopedUTF16String(value)); v3_cpp_obj(attrlist)->set_string(attrlist, "value", ScopedUTF16String(value));
v3_cpp_obj(fConnection)->notify(fConnection, message); v3_cpp_obj(fConnection)->notify(fConnection, message);
@@ -3085,6 +3108,10 @@ struct dpf_component : v3_component_cpp {
hostContextFromFactory(h), hostContextFromFactory(h),
hostContextFromInitialize(nullptr) hostContextFromInitialize(nullptr)
{ {
// make sure context is valid through this component lifetime
if (hostContextFromFactory != nullptr)
v3_cpp_obj_ref(hostContextFromFactory);

// v3_funknown, everything custom // v3_funknown, everything custom
query_interface = query_interface_component; query_interface = query_interface_component;
ref = ref_component; ref = ref_component;
@@ -3541,6 +3568,10 @@ struct dpf_factory : v3_plugin_factory_cpp {


~dpf_factory() ~dpf_factory()
{ {
// unref old context if there is one
if (hostContext != nullptr)
v3_cpp_obj_unref(hostContext);

if (gComponentGarbage.size() == 0) if (gComponentGarbage.size() == 0)
return; return;


@@ -3696,7 +3727,18 @@ struct dpf_factory : v3_plugin_factory_cpp {
{ {
d_stdout("dpf_factory::set_host_context => %p %p", self, context); d_stdout("dpf_factory::set_host_context => %p %p", self, context);
dpf_factory* const factory = *static_cast<dpf_factory**>(self); dpf_factory* const factory = *static_cast<dpf_factory**>(self);

// unref old context if there is one
if (factory->hostContext != nullptr)
v3_cpp_obj_unref(factory->hostContext);

// store new context
factory->hostContext = context; factory->hostContext = context;

// make sure the object keeps being valid for a while
if (context != nullptr)
v3_cpp_obj_ref(context);

return V3_OK; return V3_OK;
} }




+ 28
- 7
dpf/distrho/src/DistrhoUIVST3.cpp View File

@@ -299,27 +299,46 @@ public:
#if DISTRHO_PLUGIN_WANT_STATE #if DISTRHO_PLUGIN_WANT_STATE
if (std::strcmp(msgid, "state-set") == 0) if (std::strcmp(msgid, "state-set") == 0)
{ {
int16_t* key16;
int16_t* value16;
uint32_t keySize, valueSize;
int64_t keyLength = -1;
int64_t valueLength = -1;
v3_result res; v3_result res;


res = v3_cpp_obj(attrs)->get_binary(attrs, "key", (const void**)&key16, &keySize);
res = v3_cpp_obj(attrs)->get_int(attrs, "key:length", &keyLength);
DISTRHO_SAFE_ASSERT_INT_RETURN(res == V3_OK, res, res); DISTRHO_SAFE_ASSERT_INT_RETURN(res == V3_OK, res, res);
DISTRHO_SAFE_ASSERT_INT_RETURN(keyLength >= 0, keyLength, V3_INTERNAL_ERR);


res = v3_cpp_obj(attrs)->get_binary(attrs, "value", (const void**)&value16, &valueSize);
res = v3_cpp_obj(attrs)->get_int(attrs, "value:length", &valueLength);
DISTRHO_SAFE_ASSERT_INT_RETURN(res == V3_OK, res, res);
DISTRHO_SAFE_ASSERT_INT_RETURN(valueLength >= 0, valueLength, V3_INTERNAL_ERR);

int16_t* const key16 = (int16_t*)std::malloc(sizeof(int16_t)*(keyLength + 1));
DISTRHO_SAFE_ASSERT_RETURN(key16 != nullptr, V3_NOMEM);

int16_t* const value16 = (int16_t*)std::malloc(sizeof(int16_t)*(valueLength + 1));
DISTRHO_SAFE_ASSERT_RETURN(value16 != nullptr, V3_NOMEM);

res = v3_cpp_obj(attrs)->get_string(attrs, "key", key16, sizeof(int16_t)*keyLength);
DISTRHO_SAFE_ASSERT_INT_RETURN(res == V3_OK, res, res);

res = v3_cpp_obj(attrs)->get_string(attrs, "value", value16, sizeof(int16_t)*valueLength);
DISTRHO_SAFE_ASSERT_INT_RETURN(res == V3_OK, res, res); DISTRHO_SAFE_ASSERT_INT_RETURN(res == V3_OK, res, res);


// do cheap inline conversion // do cheap inline conversion
char* const key = (char*)key16; char* const key = (char*)key16;
char* const value = (char*)value16; char* const value = (char*)value16;


for (uint32_t i=0; i<keySize/sizeof(int16_t); ++i)
for (int64_t i=0; i<keyLength; ++i)
key[i] = key16[i]; key[i] = key16[i];
for (uint32_t i=0; i<valueSize/sizeof(int16_t); ++i)
for (int64_t i=0; i<valueLength; ++i)
value[i] = value16[i]; value[i] = value16[i];


key[keyLength] = '\0';
value[valueLength] = '\0';

fUI.stateChanged(key, value); fUI.stateChanged(key, value);

std::free(key16);
std::free(value16);
return V3_OK; return V3_OK;
} }
#endif #endif
@@ -549,6 +568,8 @@ private:
DISTRHO_SAFE_ASSERT_RETURN(attrlist != nullptr,); DISTRHO_SAFE_ASSERT_RETURN(attrlist != nullptr,);


v3_cpp_obj(attrlist)->set_int(attrlist, "__dpf_msg_target__", 1); v3_cpp_obj(attrlist)->set_int(attrlist, "__dpf_msg_target__", 1);
v3_cpp_obj(attrlist)->set_int(attrlist, "key:length", std::strlen(key));
v3_cpp_obj(attrlist)->set_int(attrlist, "value:length", std::strlen(value));
v3_cpp_obj(attrlist)->set_string(attrlist, "key", ScopedUTF16String(key)); v3_cpp_obj(attrlist)->set_string(attrlist, "key", ScopedUTF16String(key));
v3_cpp_obj(attrlist)->set_string(attrlist, "value", ScopedUTF16String(value)); v3_cpp_obj(attrlist)->set_string(attrlist, "value", ScopedUTF16String(value));
v3_cpp_obj(fConnection)->notify(fConnection, message); v3_cpp_obj(fConnection)->notify(fConnection, message);


+ 24
- 17
dpf/tests/Demo.cpp View File

@@ -103,12 +103,13 @@ protected:
void onDisplay() override void onDisplay() override
{ {
const GraphicsContext& context(getGraphicsContext()); const GraphicsContext& context(getGraphicsContext());
const double scaleFactor = getWindow().getScaleFactor();
const int iconSize = bgIcon.getWidth(); const int iconSize = bgIcon.getWidth();


Color(0.027f, 0.027f, 0.027f).setFor(context); Color(0.027f, 0.027f, 0.027f).setFor(context);
Rectangle<uint>(0, 0, getSize()).draw(context); Rectangle<uint>(0, 0, getSize()).draw(context);


bgIcon.setY(curPage*iconSize + curPage*3);
bgIcon.setY(curPage * iconSize + curPage * 3 * scaleFactor);


Color(0.129f, 0.129f, 0.129f).setFor(context); Color(0.129f, 0.129f, 0.129f).setFor(context);
bgIcon.draw(context); bgIcon.draw(context);
@@ -118,7 +119,8 @@ protected:


if (curHover != curPage && curHover != -1) if (curHover != curPage && curHover != -1)
{ {
Rectangle<int> rHover(1, curHover*iconSize + curHover*3, iconSize-2, iconSize-2);
Rectangle<int> rHover(1 * scaleFactor, curHover * iconSize + curHover * 3 * scaleFactor,
iconSize - 2 * scaleFactor, iconSize - 2 * scaleFactor);


Color(0.071f, 0.071f, 0.071f).setFor(context); Color(0.071f, 0.071f, 0.071f).setFor(context);
rHover.draw(context); rHover.draw(context);
@@ -146,13 +148,13 @@ protected:
// draw some text // draw some text
nvg.beginFrame(this); nvg.beginFrame(this);


nvg.fontSize(23.0f);
nvg.fontSize(23.0f * scaleFactor);
nvg.textAlign(NanoVG::ALIGN_LEFT|NanoVG::ALIGN_TOP); nvg.textAlign(NanoVG::ALIGN_LEFT|NanoVG::ALIGN_TOP);
//nvg.textLineHeight(20.0f); //nvg.textLineHeight(20.0f);


nvg.fillColor(220,220,220,220); nvg.fillColor(220,220,220,220);
nvg.textBox(10, 420, iconSize, "Haha,", nullptr);
nvg.textBox(15, 440, iconSize, "Look!", nullptr);
nvg.textBox(10 * scaleFactor, 420 * scaleFactor, iconSize, "Haha,", nullptr);
nvg.textBox(15 * scaleFactor, 440 * scaleFactor, iconSize, "Look!", nullptr);


nvg.endFrame(); nvg.endFrame();
#endif #endif
@@ -226,9 +228,10 @@ protected:
{ {
const uint width = ev.size.getWidth(); const uint width = ev.size.getWidth();
const uint height = ev.size.getHeight(); const uint height = ev.size.getHeight();
const double scaleFactor = getWindow().getScaleFactor();


bgIcon.setWidth(width-4);
bgIcon.setHeight(width-4);
bgIcon.setWidth(width - 4 * scaleFactor);
bgIcon.setHeight(width - 4 * scaleFactor);


lineSep.setStartPos(width, 0); lineSep.setStartPos(width, 0);
lineSep.setEndPos(width, height); lineSep.setEndPos(width, height);
@@ -420,30 +423,31 @@ public:
curWidget(nullptr) curWidget(nullptr)
{ {
const ScopedGraphicsContext sgc(*this); const ScopedGraphicsContext sgc(*this);
const double scaleFactor = getScaleFactor();


wColor = new ExampleColorSubWidget(this); wColor = new ExampleColorSubWidget(this);
wColor->hide(); wColor->hide();
wColor->setAbsoluteX(kSidebarWidth);
wColor->setAbsoluteX(kSidebarWidth * scaleFactor);


wImages = new ExampleImagesSubWidget(this); wImages = new ExampleImagesSubWidget(this);
wImages->hide(); wImages->hide();
wImages->setAbsoluteX(kSidebarWidth);
wImages->setAbsoluteX(kSidebarWidth * scaleFactor);


wRects = new ExampleRectanglesSubWidget(this); wRects = new ExampleRectanglesSubWidget(this);
wRects->hide(); wRects->hide();
wRects->setAbsoluteX(kSidebarWidth);
wRects->setAbsoluteX(kSidebarWidth * scaleFactor);


wShapes = new ExampleShapesSubWidget(this); wShapes = new ExampleShapesSubWidget(this);
wShapes->hide(); wShapes->hide();
wShapes->setAbsoluteX(kSidebarWidth);
wShapes->setAbsoluteX(kSidebarWidth * scaleFactor);


#ifdef DGL_OPENGL #ifdef DGL_OPENGL
wText = new ExampleTextSubWidget(this), wText = new ExampleTextSubWidget(this),
wText->hide(); wText->hide();
wText->setAbsoluteX(kSidebarWidth);
wText->setAbsoluteX(kSidebarWidth * scaleFactor);
#endif #endif
wLeft = new LeftSideWidget(this, this), wLeft = new LeftSideWidget(this, this),
wLeft->setAbsolutePos(2, 2);
wLeft->setAbsolutePos(2 * scaleFactor, 2 * scaleFactor);


resizer = new ResizeHandle(this); resizer = new ResizeHandle(this);


@@ -493,10 +497,12 @@ protected:
{ {
StandaloneWindow::onReshape(width, height); StandaloneWindow::onReshape(width, height);


if (width < kSidebarWidth)
const double scaleFactor = getScaleFactor();

if (width < kSidebarWidth * scaleFactor)
return; return;


Size<uint> size(width-kSidebarWidth, height);
const Size<uint> size(width - kSidebarWidth * scaleFactor, height);
wColor->setSize(size); wColor->setSize(size);
wImages->setSize(size); wImages->setSize(size);
wRects->setSize(size); wRects->setSize(size);
@@ -504,7 +510,7 @@ protected:
#ifdef DGL_OPENGL #ifdef DGL_OPENGL
wText->setSize(size); wText->setSize(size);
#endif #endif
wLeft->setSize(kSidebarWidth-4, height-4);
wLeft->setSize((kSidebarWidth - 4) * scaleFactor, (height - 4) * scaleFactor);
} }


private: private:
@@ -528,8 +534,9 @@ template <class ExampleWidgetStandaloneWindow>
void createAndShowExampleWidgetStandaloneWindow(Application& app) void createAndShowExampleWidgetStandaloneWindow(Application& app)
{ {
ExampleWidgetStandaloneWindow swin(app); ExampleWidgetStandaloneWindow swin(app);
const double scaleFactor = swin.getScaleFactor();
swin.setResizable(true); swin.setResizable(true);
swin.setSize(600, 500);
swin.setSize(600 * scaleFactor, 500 * scaleFactor);
swin.setTitle(ExampleWidgetStandaloneWindow::kExampleWidgetName); swin.setTitle(ExampleWidgetStandaloneWindow::kExampleWidgetName);
swin.show(); swin.show();
app.exec(); app.exec();


+ 15
- 6
dpf/tests/FileBrowserDialog.cpp View File

@@ -38,21 +38,26 @@ public:
loadSharedResources(); loadSharedResources();
#endif #endif
setResizable(true); setResizable(true);
setSize(500, 200);
setGeometryConstraints(500, 200, true);
setTitle("FileBrowserDialog"); setTitle("FileBrowserDialog");

const double scaleFactor = getScaleFactor();
setGeometryConstraints(500 * scaleFactor, 200 * scaleFactor, true);
setSize(500 * scaleFactor, 200 * scaleFactor);

done(); done();
} }


protected: protected:
void onNanoDisplay() override void onNanoDisplay() override
{ {
const double scaleFactor = getScaleFactor();

// Selected file // Selected file
beginPath(); beginPath();
fontSize(14);
fontSize(14 * scaleFactor);
textAlign(ALIGN_LEFT | ALIGN_MIDDLE); textAlign(ALIGN_LEFT | ALIGN_MIDDLE);
fillColor(255, 255, 255, 255); fillColor(255, 255, 255, 255);
text(20, getHeight()/2, selectedFile, NULL);
text(20 * scaleFactor, getHeight()/2, selectedFile, NULL);
closePath(); closePath();


// Button background // Button background
@@ -66,7 +71,7 @@ protected:


// Button label // Button label
beginPath(); beginPath();
fontSize(14);
fontSize(14 * scaleFactor);
Rectangle<float> buttonTextBounds; Rectangle<float> buttonTextBounds;
textBounds(0, 0, "Press me", NULL, buttonTextBounds); textBounds(0, 0, "Press me", NULL, buttonTextBounds);
textAlign(ALIGN_CENTER | ALIGN_MIDDLE); textAlign(ALIGN_CENTER | ALIGN_MIDDLE);
@@ -138,8 +143,12 @@ protected:
{ {
const uint width = ev.size.getWidth(); const uint width = ev.size.getWidth();
const uint height = ev.size.getHeight(); const uint height = ev.size.getHeight();
const double scaleFactor = getScaleFactor();


buttonBounds = Rectangle<uint>(width - 120, height/2 - 20, 100, 40);
buttonBounds = Rectangle<uint>(width - 120 * scaleFactor,
height/2 - 20 * scaleFactor,
100 * scaleFactor,
40 * scaleFactor);
} }


void onFocus(const bool focus, CrossingMode) override void onFocus(const bool focus, CrossingMode) override


+ 1
- 1
dpf/tests/NanoImage.cpp View File

@@ -85,7 +85,7 @@ public:


setResizable(true); setResizable(true);
setSize(500, 500); setSize(500, 500);
// setGeometryConstraints(500, 500, false);
setGeometryConstraints(500, 500, false, true);
setTitle("NanoImage"); setTitle("NanoImage");
done(); done();




+ 27
- 4
dpf/tests/widgets/ExampleTextWidget.hpp View File

@@ -42,23 +42,28 @@ public:
// StandaloneWindow // StandaloneWindow
explicit ExampleTextWidget(Application& app); explicit ExampleTextWidget(Application& app);


// helper
double getScaleFactor();

protected: protected:
void onNanoDisplay() override void onNanoDisplay() override
{ {
const int width = BaseWidget::getWidth(); const int width = BaseWidget::getWidth();
const int height = BaseWidget::getHeight(); const int height = BaseWidget::getHeight();
const double scaleFactor = getScaleFactor();


NanoVG::fontSize(40.0f);
NanoVG::fontSize(40.0f * scaleFactor);
NanoVG::textAlign(NanoVG::Align(NanoVG::ALIGN_CENTER|NanoVG::ALIGN_MIDDLE)); NanoVG::textAlign(NanoVG::Align(NanoVG::ALIGN_CENTER|NanoVG::ALIGN_MIDDLE));
NanoVG::textLineHeight(20.0f);
NanoVG::textLineHeight(20.0f * scaleFactor);


NanoVG::beginPath(); NanoVG::beginPath();
NanoVG::fillColor(220,220,220,255); NanoVG::fillColor(220,220,220,255);
NanoVG::roundedRect(10, height/4+10, width-20, height/2-20, 3);
NanoVG::roundedRect(10 * scaleFactor, height/4 + 10 * scaleFactor,
width - 20 * scaleFactor, height/2 - 20 * scaleFactor, 3 * scaleFactor);
NanoVG::fill(); NanoVG::fill();


NanoVG::fillColor(0,150,0,220); NanoVG::fillColor(0,150,0,220);
NanoVG::textBox(10, height/2, width-20, "Hello World!", nullptr);
NanoVG::textBox(10 * scaleFactor, height/2, width - 20 * scaleFactor, "Hello World!", nullptr);
} }
}; };


@@ -71,6 +76,12 @@ ExampleTextWidget<NanoSubWidget>::ExampleTextWidget(Widget* const parent)
setSize(500, 300); setSize(500, 300);
} }


template<> inline
double ExampleTextWidget<NanoSubWidget>::getScaleFactor()
{
return getWindow().getScaleFactor();
}

// TopLevelWidget // TopLevelWidget
template<> inline template<> inline
ExampleTextWidget<NanoTopLevelWidget>::ExampleTextWidget(Window& windowToMapTo) ExampleTextWidget<NanoTopLevelWidget>::ExampleTextWidget(Window& windowToMapTo)
@@ -80,6 +91,12 @@ ExampleTextWidget<NanoTopLevelWidget>::ExampleTextWidget(Window& windowToMapTo)
setSize(500, 300); setSize(500, 300);
} }


template<> inline
double ExampleTextWidget<NanoTopLevelWidget>::getScaleFactor()
{
return NanoTopLevelWidget::getScaleFactor();
}

// StandaloneWindow // StandaloneWindow
template<> inline template<> inline
ExampleTextWidget<NanoStandaloneWindow>::ExampleTextWidget(Application& app) ExampleTextWidget<NanoStandaloneWindow>::ExampleTextWidget(Application& app)
@@ -90,6 +107,12 @@ ExampleTextWidget<NanoStandaloneWindow>::ExampleTextWidget(Application& app)
done(); done();
} }


template<> inline
double ExampleTextWidget<NanoStandaloneWindow>::getScaleFactor()
{
return Window::getScaleFactor();
}

template class ExampleTextWidget<NanoSubWidget>; template class ExampleTextWidget<NanoSubWidget>;
template class ExampleTextWidget<NanoTopLevelWidget>; template class ExampleTextWidget<NanoTopLevelWidget>;
template class ExampleTextWidget<NanoStandaloneWindow>; template class ExampleTextWidget<NanoStandaloneWindow>;


+ 2
- 1
plugins/MVerb/DistrhoPluginInfo.h View File

@@ -29,6 +29,7 @@
#define DISTRHO_PLUGIN_NUM_OUTPUTS 2 #define DISTRHO_PLUGIN_NUM_OUTPUTS 2
#define DISTRHO_PLUGIN_WANT_PROGRAMS 1 #define DISTRHO_PLUGIN_WANT_PROGRAMS 1


#define DISTRHO_PLUGIN_LV2_CATEGORY "lv2:ReverbPlugin"
#define DISTRHO_PLUGIN_LV2_CATEGORY "lv2:ReverbPlugin"
#define DISTRHO_PLUGIN_VST3_CATEGORIES "Fx|Reverb"


#endif // DISTRHO_PLUGIN_INFO_H_INCLUDED #endif // DISTRHO_PLUGIN_INFO_H_INCLUDED

+ 1
- 6
plugins/MVerb/Makefile View File

@@ -29,6 +29,7 @@ include ../../dpf/Makefile.plugins.mk


TARGETS += jack TARGETS += jack
TARGETS += ladspa TARGETS += ladspa
TARGETS += lv2_sep
TARGETS += vst2 TARGETS += vst2
TARGETS += vst3 TARGETS += vst3


@@ -38,12 +39,6 @@ TARGETS += dssi
endif endif
endif endif


ifeq ($(HAVE_DGL),true)
TARGETS += lv2_sep
else
TARGETS += lv2_dsp
endif

all: $(TARGETS) all: $(TARGETS)


# -------------------------------------------------------------- # --------------------------------------------------------------

+ 6
- 45
plugins/ProM/DistrhoUIProM.cpp View File

@@ -14,7 +14,6 @@
* For a full copy of the license see the LICENSE file. * For a full copy of the license see the LICENSE file.
*/ */


#include "libprojectM/projectM-opengl.h"
#include "libprojectM/projectM.hpp" #include "libprojectM/projectM.hpp"


#include "DistrhoPluginProM.hpp" #include "DistrhoPluginProM.hpp"
@@ -69,6 +68,12 @@ static String getCurrentExecutableDataDir()
} }
else else
# endif # endif
if (datadir.endsWith("/x86_64-linux"))
{
datadir.truncate(datadir.rfind('/'));
datadir += "/Resources";
}
else
#endif #endif
{ {
datadir += "/resources"; datadir += "/resources";
@@ -166,9 +171,6 @@ void DistrhoUIProM::onDisplay()
return; return;


fPM->renderFrame(); fPM->renderFrame();

// turn off shaders at the end of the drawing cycle, so other things can draw properly
glUseProgram(0);
} }


static projectMKeycode dgl2pmkey(const DGL_NAMESPACE::Key key) noexcept static projectMKeycode dgl2pmkey(const DGL_NAMESPACE::Key key) noexcept
@@ -251,33 +253,6 @@ bool DistrhoUIProM::onKeyboard(const KeyboardEvent& ev)
if (fPM == nullptr) if (fPM == nullptr)
return false; return false;


#if 0
if (ev.press && (ev.key == '1' || ev.key == '+' || ev.key == '-'))
{
if (ev.key == '1')
{
if (getWidth() != 512 || getHeight() != 512)
setSize(512, 512);
}
else if (ev.key == '+')
{
/**/ if (getWidth() < 1100 && getHeight() < 1100)
setSize(getWidth()+100, getHeight()+100);
else if (getWidth() != 1100 || getHeight() != 1100)
setSize(1100, 1100);
}
else if (ev.key == '-')
{
/**/ if (getWidth() >= 200 && getHeight() >= 200)
setSize(getWidth()-100, getHeight()-100);
else if (getWidth() != 100 || getHeight() != 100)
setSize(100, 100);
}

return true;
}
#endif

// special handling for text // special handling for text
if (fPM->isTextInputActive(true) && !ev.press) if (fPM->isTextInputActive(true) && !ev.press)
{ {
@@ -357,20 +332,6 @@ bool DistrhoUIProM::onKeyboard(const KeyboardEvent& ev)
return true; return true;
} }


bool DistrhoUIProM::onSpecial(const SpecialEvent& ev)
{
if (fPM == nullptr)
return false;

const projectMKeycode pmKey = dgl2pmkey(ev.key);

if (pmKey == PROJECTM_K_NONE)
return false;

fPM->default_key_handler(ev.press ? PROJECTM_KEYUP : PROJECTM_KEYDOWN, pmKey);
return true;
}

// ----------------------------------------------------------------------- // -----------------------------------------------------------------------


UI* createUI() UI* createUI()


+ 0
- 1
plugins/ProM/DistrhoUIProM.hpp View File

@@ -49,7 +49,6 @@ protected:


void onDisplay() override; void onDisplay() override;
bool onKeyboard(const KeyboardEvent&) override; bool onKeyboard(const KeyboardEvent&) override;
bool onSpecial(const SpecialEvent&) override;


private: private:
ScopedPointer<projectM> fPM; ScopedPointer<projectM> fPM;


+ 1
- 3
plugins/ProM/Makefile View File

@@ -195,9 +195,7 @@ LINK_FLAGS += -lpthread
# -------------------------------------------------------------- # --------------------------------------------------------------
# Enable all possible plugin types # Enable all possible plugin types


TARGETS += lv2
TARGETS += vst2
TARGETS += vst3
TARGETS = lv2 vst2 vst3


all: $(TARGETS) all: $(TARGETS)




+ 5
- 0
plugins/ProM/ResizeHandle.hpp View File

@@ -56,6 +56,11 @@ protected:
const GraphicsContext& context(getGraphicsContext()); const GraphicsContext& context(getGraphicsContext());
const double lineWidth = 1.0 * getScaleFactor(); const double lineWidth = 1.0 * getScaleFactor();


#ifdef DGL_OPENGL
glUseProgram(0);
glMatrixMode(GL_MODELVIEW);
#endif

// draw white lines, 1px wide // draw white lines, 1px wide
Color(1.0f, 1.0f, 1.0f).setFor(context); Color(1.0f, 1.0f, 1.0f).setFor(context);
l1.draw(context, lineWidth); l1.draw(context, lineWidth);


+ 1
- 0
plugins/glBars/DistrhoPluginInfo.h View File

@@ -30,6 +30,7 @@
#define DISTRHO_PLUGIN_NUM_OUTPUTS 1 #define DISTRHO_PLUGIN_NUM_OUTPUTS 1
#define DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 1 #define DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 1
#define DISTRHO_PLUGIN_LV2_CATEGORY "lv2:AnalyserPlugin" #define DISTRHO_PLUGIN_LV2_CATEGORY "lv2:AnalyserPlugin"
#define DISTRHO_PLUGIN_VST3_CATEGORIES "Fx|Analyzer"
#define DISTRHO_UI_USER_RESIZABLE 1 #define DISTRHO_UI_USER_RESIZABLE 1


enum Parameters { enum Parameters {


+ 7
- 32
plugins/glBars/DistrhoUIGLBars.cpp View File

@@ -3,7 +3,7 @@
* Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
* Copyright (C) 2000 Christian Zander <phoenix@minion.de> * Copyright (C) 2000 Christian Zander <phoenix@minion.de>
* Copyright (C) 2015 Nedko Arnaudov * Copyright (C) 2015 Nedko Arnaudov
* Copyright (C) 2016-2019 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2016-2021 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -27,9 +27,14 @@ START_NAMESPACE_DISTRHO


DistrhoUIGLBars::DistrhoUIGLBars() DistrhoUIGLBars::DistrhoUIGLBars()
: UI(512, 512), : UI(512, 512),
fInitialized(false)
fInitialized(false),
fResizeHandle(this)
{ {
setGeometryConstraints(256, 256, true); setGeometryConstraints(256, 256, true);

// no need to show resize handle if window is user-resizable
if (isResizable())
fResizeHandle.hide();
} }


DistrhoUIGLBars::~DistrhoUIGLBars() DistrhoUIGLBars::~DistrhoUIGLBars()
@@ -100,36 +105,6 @@ void DistrhoUIGLBars::onDisplay()
fState.Render(); fState.Render();
} }


bool DistrhoUIGLBars::onKeyboard(const KeyboardEvent& ev)
{
if (ev.press && (ev.key == '1' || ev.key == '+' || ev.key == '-'))
{
if (ev.key == '1')
{
if (getWidth() != 512 || getHeight() != 512)
setSize(512, 512);
}
else if (ev.key == '+')
{
/**/ if (getWidth() < 1100 && getHeight() < 1100)
setSize(std::min(getWidth()+100, 1100U), std::min(getHeight()+100, 1100U));
else if (getWidth() != 1100 || getHeight() != 1100)
setSize(1100, 1100);
}
else if (ev.key == '-')
{
/**/ if (getWidth() > 100 && getHeight() > 100)
setSize(std::max(getWidth()-100, 100U), std::max(getHeight()-100, 100U));
else if (getWidth() != 100 || getHeight() != 100)
setSize(100, 100);
}

return true;
}

return true;
}

// ----------------------------------------------------------------------- // -----------------------------------------------------------------------


UI* createUI() UI* createUI()


+ 3
- 2
plugins/glBars/DistrhoUIGLBars.hpp View File

@@ -3,7 +3,7 @@
* Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
* Copyright (C) 2000 Christian Zander <phoenix@minion.de> * Copyright (C) 2000 Christian Zander <phoenix@minion.de>
* Copyright (C) 2015 Nedko Arnaudov * Copyright (C) 2015 Nedko Arnaudov
* Copyright (C) 2016-2019 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2016-2021 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -24,6 +24,7 @@
#include "DistrhoUI.hpp" #include "DistrhoUI.hpp"


#include "glBars.hpp" #include "glBars.hpp"
#include "ResizeHandle.hpp"


START_NAMESPACE_DISTRHO START_NAMESPACE_DISTRHO


@@ -50,11 +51,11 @@ protected:
// Widget Callbacks // Widget Callbacks


void onDisplay() override; void onDisplay() override;
bool onKeyboard(const KeyboardEvent&) override;


private: private:
bool fInitialized; bool fInitialized;
glBarsState fState; glBarsState fState;
ResizeHandle fResizeHandle;


DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(DistrhoUIGLBars) DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(DistrhoUIGLBars)
}; };


+ 1
- 4
plugins/glBars/Makefile View File

@@ -31,10 +31,7 @@ LINK_FLAGS += -lpthread
# -------------------------------------------------------------- # --------------------------------------------------------------
# Enable all possible plugin types # Enable all possible plugin types


TARGETS += jack
TARGETS += lv2
TARGETS += vst2
TARGETS += vst3
TARGETS = jack lv2 vst2 vst3


all: $(TARGETS) all: $(TARGETS)




Loading…
Cancel
Save