Signed-off-by: falkTX <falktx@falktx.com>pull/330/head
@@ -25,18 +25,25 @@ | |||
#include <atomic> | |||
#include <vector> | |||
// TESTING awful idea dont reuse | |||
#include "../extra/Thread.hpp" | |||
/* TODO items: | |||
* - base component refcount handling | |||
* - program support | |||
* - state support | |||
* - midi cc parameter mapping | |||
* - full MIDI1 encode and decode | |||
* - call component handler restart with params-changed flag when setting program | |||
* - call component handler restart with latency-changed flag when latency changes | |||
*/ | |||
START_NAMESPACE_DISTRHO | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
#if ! DISTRHO_PLUGIN_WANT_MIDI_OUTPUT | |||
static const writeMidiFunc writeMidiCallback = nullptr; | |||
static constexpr const writeMidiFunc writeMidiCallback = nullptr; | |||
#endif | |||
#if ! DISTRHO_PLUGIN_WANT_PARAMETER_VALUE_CHANGE_REQUEST | |||
static const requestParameterValueChangeFunc requestParameterValueChangeCallback = nullptr; | |||
static constexpr const requestParameterValueChangeFunc requestParameterValueChangeCallback = nullptr; | |||
#endif | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
@@ -67,7 +74,7 @@ static dpf_tuid dpf_tuid_view = { dpf_id_entry, dpf_id_view, 0, 0 }; | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// Utility functions | |||
static const char* tuid2str(const v3_tuid iid) | |||
const char* tuid2str(const v3_tuid iid) | |||
{ | |||
if (v3_tuid_match(iid, v3_funknown_iid)) | |||
return "{v3_funknown}"; | |||
@@ -220,7 +227,6 @@ public: | |||
PluginVst3() | |||
: fPlugin(this, writeMidiCallback, requestParameterValueChangeCallback), | |||
fComponentHandler(nullptr), | |||
fComponentHandlerArg(nullptr), | |||
fParameterValues(nullptr) | |||
#if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT | |||
, fHostEventOutputHandle(nullptr) | |||
@@ -1136,10 +1142,9 @@ public: | |||
return V3_OK; | |||
} | |||
v3_result setComponentHandler(v3_component_handler* const handler, void* const arg) noexcept | |||
v3_result setComponentHandler(v3_component_handler** const handler) noexcept | |||
{ | |||
fComponentHandler = handler; | |||
fComponentHandlerArg = arg; | |||
return V3_OK; | |||
} | |||
@@ -1150,8 +1155,7 @@ private: | |||
PluginExporter fPlugin; | |||
// VST3 stuff | |||
v3_component_handler* fComponentHandler; | |||
void* fComponentHandlerArg; | |||
v3_component_handler** fComponentHandler; | |||
// Temporary data | |||
float* fParameterValues; | |||
@@ -1209,15 +1213,14 @@ private: | |||
bool requestParameterValueChange(const uint32_t index, const float value) | |||
{ | |||
DISTRHO_SAFE_ASSERT_RETURN(fComponentHandler != nullptr, false); | |||
DISTRHO_SAFE_ASSERT_RETURN(fComponentHandlerArg != nullptr, false); | |||
if (fComponentHandler->begin_edit(fComponentHandlerArg, index) != V3_OK) | |||
if (v3_cpp_obj(fComponentHandler)->begin_edit(fComponentHandler, index) != V3_OK) | |||
return false; | |||
const double normalized = fPlugin.getParameterRanges(index).getNormalizedValue(value); | |||
const bool ret = fComponentHandler->perform_edit(fComponentHandlerArg, index, normalized) == V3_OK; | |||
const bool ret = v3_cpp_obj(fComponentHandler)->perform_edit(fComponentHandler, index, normalized) == V3_OK; | |||
fComponentHandler->end_edit(fComponentHandlerArg, index); | |||
v3_cpp_obj(fComponentHandler)->end_edit(fComponentHandler, index); | |||
return ret; | |||
} | |||
@@ -1308,10 +1311,13 @@ struct v3_edit_controller_cpp : v3_funknown { | |||
struct dpf_edit_controller : v3_edit_controller_cpp { | |||
ScopedPointer<PluginVst3>& vst3; | |||
bool initialized; | |||
// cached values | |||
v3_component_handler** handler; | |||
dpf_edit_controller(ScopedPointer<PluginVst3>& v) | |||
: vst3(v), | |||
initialized(false) | |||
initialized(false), | |||
handler(nullptr) | |||
{ | |||
static const uint8_t* kSupportedInterfaces[] = { | |||
v3_funknown_iid, | |||
@@ -1547,27 +1553,12 @@ struct dpf_edit_controller : v3_edit_controller_cpp { | |||
dpf_edit_controller* const controller = *(dpf_edit_controller**)self; | |||
DISTRHO_SAFE_ASSERT_RETURN(controller != nullptr, V3_NOT_INITIALISED); | |||
PluginVst3* const vst3 = controller->vst3; | |||
DISTRHO_SAFE_ASSERT_RETURN(vst3 != nullptr, V3_NOT_INITIALISED); | |||
controller->handler = handler; | |||
// v3_component_handler_cpp** const cpphandler = (v3_component_handler_cpp**)handler; | |||
// | |||
// controller->handler = cpphandler; | |||
// | |||
// if (controller->view != nullptr) | |||
// { | |||
// controller->view->handler = cpphandler; | |||
// | |||
// if (UIVst3* const uivst3 = controller->view->uivst3) | |||
// uivst3->setHandler(cpphandler); | |||
// } | |||
// offset struct by sizeof(v3_funknown), because of differences between C and C++ | |||
v3_component_handler* const handlerptr | |||
= handler != nullptr ? (v3_component_handler*)((uint8_t*)*(handler)+sizeof(v3_funknown)) | |||
: nullptr; | |||
if (PluginVst3* const vst3 = controller->vst3) | |||
return vst3->setComponentHandler(handler); | |||
return vst3->setComponentHandler(handlerptr, handler); | |||
return V3_NOT_INITIALISED; | |||
}; | |||
controller.create_view = []V3_API(void* self, const char* name) -> v3_plugin_view** | |||
@@ -21,16 +21,16 @@ | |||
// TESTING awful idea dont reuse | |||
#include "../extra/Thread.hpp" | |||
// #if DISTRHO_PLUGIN_HAS_UI && ! DISTRHO_PLUGIN_HAS_EMBED_UI | |||
// # undef DISTRHO_PLUGIN_HAS_UI | |||
// # define DISTRHO_PLUGIN_HAS_UI 0 | |||
// #endif | |||
// | |||
// #if DISTRHO_PLUGIN_HAS_UI && ! defined(HAVE_DGL) && ! DISTRHO_PLUGIN_HAS_EXTERNAL_UI | |||
// # undef DISTRHO_PLUGIN_HAS_UI | |||
// # define DISTRHO_PLUGIN_HAS_UI 0 | |||
// #endif | |||
// | |||
#if DISTRHO_PLUGIN_HAS_UI && ! DISTRHO_PLUGIN_HAS_EMBED_UI | |||
# undef DISTRHO_PLUGIN_HAS_UI | |||
# define DISTRHO_PLUGIN_HAS_UI 0 | |||
#endif | |||
#if DISTRHO_PLUGIN_HAS_UI && ! defined(HAVE_DGL) && ! DISTRHO_PLUGIN_HAS_EXTERNAL_UI | |||
# undef DISTRHO_PLUGIN_HAS_UI | |||
# define DISTRHO_PLUGIN_HAS_UI 0 | |||
#endif | |||
// #undef DISTRHO_PLUGIN_HAS_UI | |||
// #define DISTRHO_PLUGIN_HAS_UI 1 | |||
@@ -38,93 +38,33 @@ | |||
# include "DistrhoUIInternal.hpp" | |||
// #endif | |||
#include "travesty/audio_processor.h" | |||
#include "travesty/component.h" | |||
#include "travesty/edit_controller.h" | |||
#include "travesty/factory.h" | |||
#include "travesty/view.h" | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
/* TODO items: | |||
* - see how to handle external non-embed UI build | |||
* - program listener | |||
* - state listener and sender | |||
* - sample rate change listener | |||
* - call component handler restart with params-changed flag when setting program | |||
* - call component handler restart with latency-changed flag when latency changes | |||
*/ | |||
START_NAMESPACE_DISTRHO | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
#if ! DISTRHO_PLUGIN_WANT_MIDI_INPUT | |||
static const sendNoteFunc sendNoteCallback = nullptr; | |||
static constexpr const sendNoteFunc sendNoteCallback = nullptr; | |||
#endif | |||
#if ! DISTRHO_PLUGIN_WANT_STATE | |||
static const setStateFunc setStateCallback = nullptr; | |||
static constexpr const setStateFunc setStateCallback = nullptr; | |||
#endif | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// custom v3_tuid compatible type | |||
// Utility functions (defined on plugin side) | |||
typedef uint32_t dpf_tuid[4]; | |||
static_assert(sizeof(v3_tuid) == sizeof(dpf_tuid), "uid size mismatch"); | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// Utility functions | |||
const char* tuid2str(const v3_tuid iid) | |||
{ | |||
if (v3_tuid_match(iid, v3_funknown_iid)) | |||
return "{v3_funknown}"; | |||
if (v3_tuid_match(iid, v3_plugin_base_iid)) | |||
return "{v3_plugin_base}"; | |||
if (v3_tuid_match(iid, v3_plugin_factory_iid)) | |||
return "{v3_plugin_factory}"; | |||
if (v3_tuid_match(iid, v3_plugin_factory_2_iid)) | |||
return "{v3_plugin_factory_2}"; | |||
if (v3_tuid_match(iid, v3_plugin_factory_3_iid)) | |||
return "{v3_plugin_factory_3}"; | |||
if (v3_tuid_match(iid, v3_component_iid)) | |||
return "{v3_component}"; | |||
if (v3_tuid_match(iid, v3_bstream_iid)) | |||
return "{v3_bstream}"; | |||
if (v3_tuid_match(iid, v3_event_list_iid)) | |||
return "{v3_event_list}"; | |||
if (v3_tuid_match(iid, v3_param_value_queue_iid)) | |||
return "{v3_param_value_queue}"; | |||
if (v3_tuid_match(iid, v3_param_changes_iid)) | |||
return "{v3_param_changes}"; | |||
if (v3_tuid_match(iid, v3_process_context_requirements_iid)) | |||
return "{v3_process_context_requirements}"; | |||
if (v3_tuid_match(iid, v3_audio_processor_iid)) | |||
return "{v3_audio_processor}"; | |||
if (v3_tuid_match(iid, v3_component_handler_iid)) | |||
return "{v3_component_handler}"; | |||
if (v3_tuid_match(iid, v3_edit_controller_iid)) | |||
return "{v3_edit_controller}"; | |||
if (v3_tuid_match(iid, v3_plugin_view_iid)) | |||
return "{v3_plugin_view}"; | |||
if (v3_tuid_match(iid, v3_plugin_frame_iid)) | |||
return "{v3_plugin_frame}"; | |||
if (v3_tuid_match(iid, v3_plugin_view_content_scale_steinberg_iid)) | |||
return "{v3_plugin_view_content_scale_steinberg}"; | |||
if (v3_tuid_match(iid, v3_plugin_view_parameter_finder_iid)) | |||
return "{v3_plugin_view_parameter_finder}"; | |||
/* | |||
if (std::memcmp(iid, dpf_tuid_class, sizeof(dpf_tuid)) == 0) | |||
return "{dpf_tuid_class}"; | |||
if (std::memcmp(iid, dpf_tuid_component, sizeof(dpf_tuid)) == 0) | |||
return "{dpf_tuid_component}"; | |||
if (std::memcmp(iid, dpf_tuid_controller, sizeof(dpf_tuid)) == 0) | |||
return "{dpf_tuid_controller}"; | |||
if (std::memcmp(iid, dpf_tuid_processor, sizeof(dpf_tuid)) == 0) | |||
return "{dpf_tuid_processor}"; | |||
if (std::memcmp(iid, dpf_tuid_view, sizeof(dpf_tuid)) == 0) | |||
return "{dpf_tuid_view}"; | |||
*/ | |||
static char buf[46]; | |||
std::snprintf(buf, sizeof(buf), "{0x%08X,0x%08X,0x%08X,0x%08X}", | |||
(uint32_t)d_cconst(iid[ 0], iid[ 1], iid[ 2], iid[ 3]), | |||
(uint32_t)d_cconst(iid[ 4], iid[ 5], iid[ 6], iid[ 7]), | |||
(uint32_t)d_cconst(iid[ 8], iid[ 9], iid[10], iid[11]), | |||
(uint32_t)d_cconst(iid[12], iid[13], iid[14], iid[15])); | |||
return buf; | |||
} | |||
const char* tuid2str(const v3_tuid iid); | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
@@ -145,7 +85,6 @@ public: | |||
scaleFactor), | |||
fView(view), | |||
fFrame(nullptr), | |||
fFrameArg(nullptr), | |||
fScaleFactor(scaleFactor) | |||
{ | |||
// TESTING awful idea dont reuse | |||
@@ -221,12 +160,9 @@ public: | |||
#endif | |||
} | |||
v3_result setFrame(v3_plugin_frame* const frame, void* const arg) noexcept | |||
v3_result setFrame(v3_plugin_frame** const frame) noexcept | |||
{ | |||
d_stdout("setFrame %p %p", frame, arg); | |||
fFrame = frame; | |||
fFrameArg = arg; | |||
return V3_OK; | |||
} | |||
@@ -257,8 +193,7 @@ private: | |||
// VST3 stuff | |||
v3_plugin_view** const fView; | |||
v3_plugin_frame* fFrame; | |||
void* fFrameArg; | |||
v3_plugin_frame** fFrame; | |||
// v3_component_handler_cpp** handler = nullptr; | |||
// Temporary data | |||
@@ -304,8 +239,7 @@ private: | |||
{ | |||
DISTRHO_SAFE_ASSERT_RETURN(fView != nullptr,); | |||
DISTRHO_SAFE_ASSERT_RETURN(fFrame != nullptr,); | |||
DISTRHO_SAFE_ASSERT_RETURN(fFrameArg != nullptr,); | |||
d_stdout("from UI setSize %u %u | %p %p %p", width, height, fView, fFrame, fFrameArg); | |||
d_stdout("from UI setSize %u %u | %p %p", width, height, fView, fFrame); | |||
#ifdef DISTRHO_OS_MAC | |||
const double scaleFactor = fUI.getScaleFactor(); | |||
@@ -317,7 +251,7 @@ private: | |||
std::memset(&rect, 0, sizeof(rect)); | |||
rect.right = width; | |||
rect.bottom = height; | |||
fFrame->resize_view(fFrameArg, fView, &rect); | |||
v3_cpp_obj(fFrame)->resize_view(fFrame, fView, &rect); | |||
} | |||
static void setSizeCallback(void* ptr, uint width, uint height) | |||
@@ -546,13 +480,7 @@ struct dpf_plugin_view : v3_plugin_view_cpp { | |||
const float scaleFactor = view->scale != nullptr ? view->scale->scaleFactor : 0.0f; | |||
view->uivst3 = new UIVst3((uintptr_t)parent, scaleFactor, view->sampleRate, | |||
view->instancePointer, (v3_plugin_view**)self); | |||
// offset struct by sizeof(v3_funknown), because of differences between C and C++ | |||
v3_plugin_frame* const frameptr | |||
= view->frame != nullptr ? (v3_plugin_frame*)((uint8_t*)*(view->frame)+sizeof(v3_funknown)) | |||
: nullptr; | |||
view->uivst3->setFrame(frameptr, view->frame); | |||
view->uivst3->setFrame(view->frame); | |||
// view->uivst3->setHandler(view->handler); | |||
return V3_OK; | |||
} | |||
@@ -613,11 +541,11 @@ struct dpf_plugin_view : v3_plugin_view_cpp { | |||
dpf_plugin_view* const view = *(dpf_plugin_view**)self; | |||
DISTRHO_SAFE_ASSERT_RETURN(view != nullptr, V3_NOT_INITIALISED); | |||
// special case: allow UI to not be attached yet, as a way to get size before window creation | |||
if (UIVst3* const uivst3 = view->uivst3) | |||
return uivst3->getSize(rect); | |||
// special case: allow UI to not be attached yet, as a way to get size before window creation | |||
const float scaleFactor = view->scale != nullptr ? view->scale->scaleFactor : 0.0f; | |||
UIExporter tmpUI(nullptr, 0, view->sampleRate, | |||
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | |||
@@ -660,14 +588,7 @@ struct dpf_plugin_view : v3_plugin_view_cpp { | |||
view->frame = frame; | |||
if (UIVst3* const uivst3 = view->uivst3) | |||
{ | |||
// offset struct by sizeof(v3_funknown), because of differences between C and C++ | |||
v3_plugin_frame* const frameptr | |||
= frame != nullptr ? (v3_plugin_frame*)((uint8_t*)*(frame)+sizeof(v3_funknown)) | |||
: nullptr; | |||
return uivst3->setFrame(frameptr, frame); | |||
} | |||
return uivst3->setFrame(frame); | |||
return V3_NOT_INITIALISED; | |||
}; | |||
@@ -697,7 +618,7 @@ struct dpf_plugin_view : v3_plugin_view_cpp { | |||
}; | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// dpf_plugin_view_create (called from DSP side) | |||
// dpf_plugin_view_create (called from plugin side) | |||
v3_funknown** dpf_plugin_view_create(void* instancePointer, double sampleRate); | |||
@@ -28,8 +28,9 @@ | |||
typedef uint64_t v3_speaker_arrangement; | |||
enum { | |||
V3_SPEAKER_L = 1, | |||
V3_SPEAKER_R = 1 << 1 | |||
V3_SPEAKER_L = 1 << 0, | |||
V3_SPEAKER_R = 1 << 1, | |||
V3_SPEAKER_M = 1 << 19 | |||
}; | |||
/** | |||
@@ -42,14 +43,19 @@ enum v3_process_mode { | |||
V3_OFFLINE | |||
}; | |||
inline static const char * | |||
v3_process_mode_str(int32_t d) | |||
static inline | |||
const char* v3_process_mode_str(int32_t d) | |||
{ | |||
switch (d) { | |||
case V3_REALTIME: return "V3_REALTIME"; | |||
case V3_PREFETCH: return "V3_PREFETCH"; | |||
case V3_OFFLINE: return "V3_OFFLINE"; | |||
default: return "[unknown]"; | |||
switch (d) | |||
{ | |||
case V3_REALTIME: | |||
return "V3_REALTIME"; | |||
case V3_PREFETCH: | |||
return "V3_PREFETCH"; | |||
case V3_OFFLINE: | |||
return "V3_OFFLINE"; | |||
default: | |||
return "[unknown]"; | |||
} | |||
} | |||
@@ -58,13 +64,17 @@ enum { | |||
V3_SAMPLE_64 | |||
}; | |||
inline static const char * | |||
v3_sample_size_str(int32_t d) | |||
static inline | |||
const char* v3_sample_size_str(int32_t d) | |||
{ | |||
switch (d) { | |||
case V3_SAMPLE_32: return "V3_SAMPLE_32"; | |||
case V3_SAMPLE_64: return "V3_SAMPLE_64"; | |||
default: return "[unknown]"; | |||
switch (d) | |||
{ | |||
case V3_SAMPLE_32: | |||
return "V3_SAMPLE_32"; | |||
case V3_SAMPLE_64: | |||
return "V3_SAMPLE_64"; | |||
default: | |||
return "[unknown]"; | |||
} | |||
} | |||
@@ -82,31 +92,24 @@ struct v3_process_setup { | |||
struct v3_param_value_queue { | |||
struct v3_funknown; | |||
V3_API v3_param_id (*get_param_id)(void *self); | |||
V3_API int32_t (*get_point_count)(void *self); | |||
V3_API v3_result (*get_point) | |||
(void *self, int32_t idx, int32_t *sample_offset, double *value); | |||
V3_API v3_result (*add_point) | |||
(void *self, int32_t sample_offset, double value, int32_t *idx); | |||
V3_API v3_param_id (*get_param_id)(void* self); | |||
V3_API int32_t (*get_point_count)(void* self); | |||
V3_API v3_result (*get_point)(void* self, int32_t idx, int32_t* sample_offset, double* value); | |||
V3_API v3_result (*add_point)(void* self, int32_t sample_offset, double value, int32_t* idx); | |||
}; | |||
static const v3_tuid v3_param_value_queue_iid = | |||
static constexpr const v3_tuid v3_param_value_queue_iid = | |||
V3_ID(0x01263A18, 0xED074F6F, 0x98C9D356, 0x4686F9BA); | |||
struct v3_param_changes { | |||
struct v3_funknown; | |||
V3_API int32_t (*get_param_count)(void *self); | |||
V3_API struct v3_param_value_queue **(*get_param_data) | |||
(void *self, int32_t idx); | |||
V3_API struct v3_param_value_queue **(*add_param_data) | |||
(void *self, v3_param_id *id, int32_t *index); | |||
V3_API int32_t (*get_param_count)(void* self); | |||
V3_API struct v3_param_value_queue** (*get_param_data)(void* self, int32_t idx); | |||
V3_API struct v3_param_value_queue** (*add_param_data)(void* self, v3_param_id* id, int32_t* index); | |||
}; | |||
static const v3_tuid v3_param_changes_iid = | |||
static constexpr const v3_tuid v3_param_changes_iid = | |||
V3_ID(0xA4779663, 0x0BB64A56, 0xB44384A8, 0x466FEB9D); | |||
/** | |||
@@ -121,55 +124,41 @@ struct v3_frame_rate { | |||
struct v3_chord { | |||
uint8_t key_note; | |||
uint8_t root_note; | |||
int16_t chord_mask; | |||
}; | |||
enum { | |||
V3_PROCESS_CTX_PLAYING = 1 << 1, | |||
V3_PROCESS_CTX_CYCLE_ACTIVE = 1 << 2, | |||
V3_PROCESS_CTX_RECORDING = 1 << 3, | |||
V3_PROCESS_CTX_PLAYING = 1 << 1, | |||
V3_PROCESS_CTX_CYCLE_ACTIVE = 1 << 2, | |||
V3_PROCESS_CTX_RECORDING = 1 << 3, | |||
V3_PROCESS_CTX_SYSTEM_TIME_VALID = 1 << 8, | |||
V3_PROCESS_CTX_CONT_TIME_VALID = 1 << 17, | |||
V3_PROCESS_CTX_PROJECT_TIME_VALID = 1 << 9, | |||
V3_PROCESS_CTX_TEMPO_VALID = 1 << 10, | |||
V3_PROCESS_CTX_BAR_POSITION_VALID = 1 << 11, | |||
V3_PROCESS_CTX_CYCLE_VALID = 1 << 12, | |||
V3_PROCESS_CTX_TEMPO_VALID = 1 << 10, | |||
V3_PROCESS_CTX_TIME_SIG_VALID = 1 << 13, | |||
V3_PROCESS_CTX_CHORD_VALID = 1 << 18, | |||
V3_PROCESS_CTX_SMPTE_VALID = 1 << 14, | |||
V3_PROCESS_CTX_NEXT_CLOCK_VALID = 1 << 15 | |||
V3_PROCESS_CTX_NEXT_CLOCK_VALID = 1 << 15, | |||
V3_PROCESS_CTX_CONT_TIME_VALID = 1 << 17, | |||
V3_PROCESS_CTX_CHORD_VALID = 1 << 18 | |||
}; | |||
struct v3_process_context { | |||
uint32_t state; | |||
double sample_rate; | |||
int64_t project_time_in_samples; // with loop | |||
int64_t system_time_ns; | |||
int64_t continuous_time_in_samples; // without loop | |||
double project_time_quarters; | |||
double bar_position_quarters; | |||
double cycle_start_quarters; | |||
double cycle_end_quarters; | |||
double bpm; | |||
int32_t time_sig_numerator; | |||
int32_t time_sig_denom; | |||
struct v3_chord chord; | |||
int32_t smpte_offset_subframes; | |||
struct v3_frame_rate frame_rate; | |||
int32_t samples_to_next_clock; | |||
}; | |||
@@ -194,10 +183,10 @@ enum { | |||
struct v3_process_context_requirements { | |||
struct v3_funknown; | |||
V3_API uint32_t (*get_process_context_requirements)(void *self); | |||
V3_API uint32_t (*get_process_context_requirements)(void* self); | |||
}; | |||
static const v3_tuid v3_process_context_requirements_iid = | |||
static constexpr const v3_tuid v3_process_context_requirements_iid = | |||
V3_ID(0x2A654303, 0xEF764E3D, 0x95B5FE83, 0x730EF6D0); | |||
/** | |||
@@ -207,32 +196,25 @@ static const v3_tuid v3_process_context_requirements_iid = | |||
struct v3_audio_bus_buffers { | |||
int32_t num_channels; | |||
uint64_t channel_silence_bitset; | |||
union { | |||
float **channel_buffers_32; | |||
double **channel_buffers_64; | |||
float** channel_buffers_32; | |||
double** channel_buffers_64; | |||
}; | |||
}; | |||
struct v3_process_data { | |||
int32_t process_mode; | |||
int32_t symbolic_sample_size; | |||
int32_t nframes; | |||
int32_t num_input_buses; | |||
int32_t num_output_buses; | |||
struct v3_audio_bus_buffers *inputs; | |||
struct v3_audio_bus_buffers *outputs; | |||
struct v3_param_changes **input_params; | |||
struct v3_param_changes **output_params; | |||
struct v3_event_list **input_events; | |||
struct v3_event_list **output_events; | |||
struct v3_process_context *ctx; | |||
struct v3_audio_bus_buffers* inputs; | |||
struct v3_audio_bus_buffers* outputs; | |||
struct v3_param_changes** input_params; | |||
struct v3_param_changes** output_params; | |||
struct v3_event_list** input_events; | |||
struct v3_event_list** output_events; | |||
struct v3_process_context* ctx; | |||
}; | |||
/** | |||
@@ -242,29 +224,18 @@ struct v3_process_data { | |||
struct v3_audio_processor { | |||
struct v3_funknown; | |||
V3_API v3_result (*set_bus_arrangements) | |||
(void *self, v3_speaker_arrangement *inputs, int32_t num_inputs, | |||
v3_speaker_arrangement *outputs, int32_t num_outputs); | |||
V3_API v3_result (*get_bus_arrangement) | |||
(void *self, int32_t bus_direction, int32_t idx, v3_speaker_arrangement *); | |||
V3_API v3_result (*can_process_sample_size) | |||
(void *self, int32_t symbolic_sample_size); | |||
V3_API uint32_t (*get_latency_samples)(void *self); | |||
V3_API v3_result (*setup_processing) | |||
(void *self, struct v3_process_setup *); | |||
V3_API v3_result (*set_processing) | |||
(void *self, v3_bool state); | |||
V3_API v3_result (*process) | |||
(void *self, struct v3_process_data *); | |||
V3_API uint32_t (*get_tail_samples)(void *self); | |||
V3_API v3_result (*set_bus_arrangements)(void* self, v3_speaker_arrangement* inputs, int32_t num_inputs, | |||
v3_speaker_arrangement* outputs, int32_t num_outputs); | |||
V3_API v3_result (*get_bus_arrangement)(void* self, int32_t bus_direction, int32_t idx, v3_speaker_arrangement*); | |||
V3_API v3_result (*can_process_sample_size)(void* self, int32_t symbolic_sample_size); | |||
V3_API uint32_t (*get_latency_samples)(void* self); | |||
V3_API v3_result (*setup_processing)(void* self, struct v3_process_setup* setup); | |||
V3_API v3_result (*set_processing)(void* self, v3_bool state); | |||
V3_API v3_result (*process)(void* self, struct v3_process_data* data); | |||
V3_API uint32_t (*get_tail_samples)(void* self); | |||
}; | |||
static const v3_tuid v3_audio_processor_iid = | |||
static constexpr const v3_tuid v3_audio_processor_iid = | |||
V3_ID(0x42043F99, 0xB7DA453C, 0xA569E79D, 0x9AAEC33D); | |||
#include "align_pop.h" |
@@ -20,6 +20,23 @@ | |||
#include <stdint.h> | |||
#include <string.h> | |||
/** | |||
* deal with C vs C++ differences | |||
*/ | |||
#ifdef __cplusplus | |||
struct v3_funknown; | |||
template<class T> static inline | |||
constexpr T* v3_cpp_obj(T** obj) | |||
{ | |||
return (T*)((v3_funknown*)*obj + 1); | |||
} | |||
#else | |||
# ifndef constexpr | |||
# define constexpr | |||
# endif | |||
#endif | |||
/** | |||
* various types | |||
*/ | |||
@@ -31,15 +48,14 @@ typedef uint8_t v3_bool; | |||
typedef uint32_t v3_param_id; | |||
/** | |||
* low-level ABI nonsense | |||
*/ | |||
typedef uint8_t v3_tuid[16]; | |||
inline static bool | |||
v3_tuid_match(const v3_tuid a, const v3_tuid b) | |||
static inline | |||
bool v3_tuid_match(const v3_tuid a, const v3_tuid b) | |||
{ | |||
return memcmp(a, b, sizeof(v3_tuid)) == 0; | |||
} | |||
@@ -128,14 +144,12 @@ enum { | |||
*/ | |||
struct v3_funknown { | |||
V3_API v3_result (*query_interface) | |||
(void *self, const v3_tuid iid, void **obj); | |||
V3_API uint32_t (*ref)(void *self); | |||
V3_API uint32_t (*unref)(void *self); | |||
V3_API v3_result (*query_interface)(void* self, const v3_tuid iid, void** obj); | |||
V3_API uint32_t (*ref)(void* self); | |||
V3_API uint32_t (*unref)(void* self); | |||
}; | |||
static const v3_tuid v3_funknown_iid = | |||
static constexpr const v3_tuid v3_funknown_iid = | |||
V3_ID(0x00000000, 0x00000000, 0xC0000000, 0x00000046); | |||
/** | |||
@@ -145,10 +159,9 @@ static const v3_tuid v3_funknown_iid = | |||
struct v3_plugin_base { | |||
struct v3_funknown; | |||
V3_API v3_result (*initialise) | |||
(void *self, struct v3_funknown *context); | |||
V3_API v3_result (*terminate)(void *self); | |||
V3_API v3_result (*initialise)(void* self, struct v3_funknown* context); | |||
V3_API v3_result (*terminate)(void* self); | |||
}; | |||
static const v3_tuid v3_plugin_base_iid = | |||
static constexpr const v3_tuid v3_plugin_base_iid = | |||
V3_ID(0x22888DDB, 0x156E45AE, 0x8358B348, 0x08190625); |
@@ -27,15 +27,11 @@ enum v3_seek_mode { | |||
struct v3_bstream { | |||
struct v3_funknown; | |||
V3_API v3_result (*read) | |||
(void *self, void *buffer, int32_t num_bytes, int32_t *bytes_read); | |||
V3_API v3_result (*write) | |||
(void *self, void *buffer, int32_t num_bytes, int32_t *bytes_written); | |||
V3_API v3_result (*seek) | |||
(void *self, int64_t pos, int32_t seek_mode, int64_t *result); | |||
V3_API v3_result (*tell) | |||
(void *self, int64_t *pos); | |||
V3_API v3_result (*read)(void* self, void* buffer, int32_t num_bytes, int32_t* bytes_read); | |||
V3_API v3_result (*write)(void* self, void* buffer, int32_t num_bytes, int32_t* bytes_written); | |||
V3_API v3_result (*seek)(void* self, int64_t pos, int32_t seek_mode, int64_t* result); | |||
V3_API v3_result (*tell)(void* self, int64_t* pos); | |||
}; | |||
static const v3_tuid v3_bstream_iid = | |||
static constexpr const v3_tuid v3_bstream_iid = | |||
V3_ID(0xC3BF6EA2, 0x30994752, 0x9B6BF990, 0x1EE33E9B); |
@@ -30,13 +30,17 @@ enum v3_media_types { | |||
V3_EVENT | |||
}; | |||
inline static const char * | |||
v3_media_type_str(int32_t type) | |||
static inline | |||
const char* v3_media_type_str(int32_t type) | |||
{ | |||
switch (type) { | |||
case V3_AUDIO: return "V3_AUDIO"; | |||
case V3_EVENT: return "V3_EVENT"; | |||
default: return "[unknown]"; | |||
switch (type) | |||
{ | |||
case V3_AUDIO: | |||
return "V3_AUDIO"; | |||
case V3_EVENT: | |||
return "V3_EVENT"; | |||
default: | |||
return "[unknown]"; | |||
} | |||
} | |||
@@ -45,13 +49,17 @@ enum v3_bus_direction { | |||
V3_OUTPUT | |||
}; | |||
inline static const char * | |||
v3_bus_direction_str(int32_t d) | |||
static inline | |||
const char* v3_bus_direction_str(int32_t d) | |||
{ | |||
switch (d) { | |||
case V3_INPUT: return "V3_INPUT"; | |||
case V3_OUTPUT: return "V3_OUTPUT"; | |||
default: return "[unknown]"; | |||
switch (d) | |||
{ | |||
case V3_INPUT: | |||
return "V3_INPUT"; | |||
case V3_OUTPUT: | |||
return "V3_OUTPUT"; | |||
default: | |||
return "[unknown]"; | |||
} | |||
} | |||
@@ -61,7 +69,7 @@ enum v3_bus_types { | |||
}; | |||
enum v3_bus_flags { | |||
V3_DEFAULT_ACTIVE = 1, | |||
V3_DEFAULT_ACTIVE = 1 << 0, | |||
V3_IS_CONTROL_VOLTAGE = 1 << 1 | |||
}; | |||
@@ -69,7 +77,6 @@ struct v3_bus_info { | |||
int32_t media_type; | |||
int32_t direction; | |||
int32_t channel_count; | |||
v3_str_128 bus_name; | |||
int32_t bus_type; | |||
uint32_t flags; | |||
@@ -84,34 +91,20 @@ struct v3_routing_info; | |||
struct v3_component { | |||
struct v3_plugin_base; | |||
V3_API v3_result (*get_controller_class_id) | |||
(void *self, v3_tuid class_id); | |||
V3_API v3_result (*set_io_mode) | |||
(void *self, int32_t io_mode); | |||
V3_API int32_t (*get_bus_count) | |||
(void *self, int32_t media_type, int32_t bus_direction); | |||
V3_API v3_result (*get_bus_info) | |||
(void *self, int32_t media_type, int32_t bus_direction, | |||
int32_t bus_idx, struct v3_bus_info *bus_info); | |||
V3_API v3_result (*get_routing_info) | |||
(void *self, struct v3_routing_info *input, | |||
struct v3_routing_info *output); | |||
V3_API v3_result (*activate_bus) | |||
(void *self, int32_t media_type, int32_t bus_direction, | |||
int32_t bus_idx, v3_bool state); | |||
V3_API v3_result (*set_active) | |||
(void *self, v3_bool state); | |||
V3_API v3_result (*set_state) | |||
(void *self, struct v3_bstream **); | |||
V3_API v3_result (*get_state) | |||
(void *self, struct v3_bstream **); | |||
V3_API v3_result (*get_controller_class_id)(void* self, v3_tuid class_id); | |||
V3_API v3_result (*set_io_mode)(void* self, int32_t io_mode); | |||
V3_API int32_t (*get_bus_count)(void* self, int32_t media_type, int32_t bus_direction); | |||
V3_API v3_result (*get_bus_info)(void* self, int32_t media_type, int32_t bus_direction, | |||
int32_t bus_idx, struct v3_bus_info* bus_info); | |||
V3_API v3_result (*get_routing_info)(void* self, struct v3_routing_info* input, struct v3_routing_info* output); | |||
V3_API v3_result (*activate_bus)(void* self, int32_t media_type, int32_t bus_direction, | |||
int32_t bus_idx, v3_bool state); | |||
V3_API v3_result (*set_active)(void* self, v3_bool state); | |||
V3_API v3_result (*set_state)(void* self, struct v3_bstream **); | |||
V3_API v3_result (*get_state)(void* self, struct v3_bstream **); | |||
}; | |||
static const v3_tuid v3_component_iid = | |||
static constexpr const v3_tuid v3_component_iid = | |||
V3_ID(0xE831FF31, 0xF2D54301, 0x928EBBEE, 0x25697802); | |||
#include "align_pop.h" |
@@ -29,18 +29,13 @@ | |||
struct v3_component_handler { | |||
struct v3_funknown; | |||
V3_API v3_result (*begin_edit) | |||
(void *self, v3_param_id); | |||
V3_API v3_result (*perform_edit) | |||
(void *self, v3_param_id, double value_normalised); | |||
V3_API v3_result (*end_edit) | |||
(void *self, v3_param_id); | |||
V3_API v3_result (*restart_component) | |||
(void *self, int32_t flags); | |||
V3_API v3_result (*begin_edit)(void* self, v3_param_id); | |||
V3_API v3_result (*perform_edit)(void* self, v3_param_id, double value_normalised); | |||
V3_API v3_result (*end_edit)(void* self, v3_param_id); | |||
V3_API v3_result (*restart_component)(void* self, int32_t flags); | |||
}; | |||
static const v3_tuid v3_component_handler_iid = | |||
static constexpr const v3_tuid v3_component_handler_iid = | |||
V3_ID(0x93A0BEA3, 0x0BD045DB, 0x8E890B0C, 0xC1E46AC6); | |||
/** | |||
@@ -48,7 +43,7 @@ static const v3_tuid v3_component_handler_iid = | |||
*/ | |||
enum { | |||
V3_PARAM_CAN_AUTOMATE = 1, | |||
V3_PARAM_CAN_AUTOMATE = 1 << 0, | |||
V3_PARAM_READ_ONLY = 1 << 1, | |||
V3_PARAM_WRAP_AROUND = 1 << 2, | |||
V3_PARAM_IS_LIST = 1 << 3, | |||
@@ -59,15 +54,11 @@ enum { | |||
struct v3_param_info { | |||
v3_param_id param_id; | |||
v3_str_128 title; | |||
v3_str_128 short_title; | |||
v3_str_128 units; | |||
int32_t step_count; | |||
double default_normalised_value; | |||
int32_t unit_id; | |||
int32_t flags; | |||
}; | |||
@@ -75,39 +66,22 @@ struct v3_param_info { | |||
struct v3_edit_controller { | |||
struct v3_plugin_base; | |||
V3_API v3_result (*set_component_state) | |||
(void *self, struct v3_bstream *); | |||
V3_API v3_result (*set_state) | |||
(void *self, struct v3_bstream *); | |||
V3_API v3_result (*get_state) | |||
(void *self, struct v3_bstream *); | |||
V3_API int32_t (*get_parameter_count)(void *self); | |||
V3_API v3_result (*get_parameter_info) | |||
(void *self, int32_t param_idx, struct v3_param_info *); | |||
V3_API v3_result (*get_parameter_string_for_value) | |||
(void *self, v3_param_id, double normalised, v3_str_128 output); | |||
V3_API v3_result (*get_parameter_value_for_string) | |||
(void *self, v3_param_id, int16_t *input, double *output); | |||
V3_API double (*normalised_parameter_to_plain) | |||
(void *self, v3_param_id, double normalised); | |||
V3_API double (*plain_parameter_to_normalised) | |||
(void *self, v3_param_id, double plain); | |||
V3_API double (*get_parameter_normalised)(void *self, v3_param_id); | |||
V3_API v3_result (*set_parameter_normalised) | |||
(void *self, v3_param_id, double normalised); | |||
V3_API v3_result (*set_component_handler) | |||
(void *self, struct v3_component_handler **); | |||
V3_API struct v3_plugin_view **(*create_view) | |||
(void *self, const char *name); | |||
V3_API v3_result (*set_component_state)(void* self, struct v3_bstream*); | |||
V3_API v3_result (*set_state)(void* self, struct v3_bstream*); | |||
V3_API v3_result (*get_state)(void* self, struct v3_bstream*); | |||
V3_API int32_t (*get_parameter_count)(void* self); | |||
V3_API v3_result (*get_parameter_info)(void* self, int32_t param_idx, struct v3_param_info*); | |||
V3_API v3_result (*get_parameter_string_for_value)(void* self, v3_param_id, double normalised, v3_str_128 output); | |||
V3_API v3_result (*get_parameter_value_for_string)(void* self, v3_param_id, int16_t* input, double* output); | |||
V3_API double (*normalised_parameter_to_plain)(void* self, v3_param_id, double normalised); | |||
V3_API double (*plain_parameter_to_normalised)(void* self, v3_param_id, double plain); | |||
V3_API double (*get_parameter_normalised)(void* self, v3_param_id); | |||
V3_API v3_result (*set_parameter_normalised)(void* self, v3_param_id, double normalised); | |||
V3_API v3_result (*set_component_handler)(void* self, struct v3_component_handler**); | |||
V3_API struct v3_plugin_view **(*create_view)(void* self, const char* name); | |||
}; | |||
static const v3_tuid v3_edit_controller_iid = | |||
static constexpr const v3_tuid v3_edit_controller_iid = | |||
V3_ID(0xDCD7BBE3, 0x7742448D, 0xA874AACC, 0x979C759E); | |||
#include "align_pop.h" |
@@ -30,10 +30,8 @@ | |||
struct v3_event_note_on { | |||
int16_t channel; | |||
int16_t pitch; // MIDI note number | |||
float tuning; | |||
float velocity; | |||
int32_t length; | |||
int32_t note_id; | |||
}; | |||
@@ -41,9 +39,7 @@ struct v3_event_note_on { | |||
struct v3_event_note_off { | |||
int16_t channel; | |||
int16_t pitch; // MIDI note number | |||
float velocity; | |||
int32_t note_id; | |||
float tuning; | |||
}; | |||
@@ -51,14 +47,12 @@ struct v3_event_note_off { | |||
struct v3_event_data { | |||
uint32_t size; | |||
uint32_t type; | |||
const uint8_t *bytes; | |||
const uint8_t* bytes; | |||
}; | |||
struct v3_event_poly_pressure { | |||
int16_t channel; | |||
int16_t pitch; | |||
float pressure; | |||
int32_t note_id; | |||
}; | |||
@@ -67,7 +61,6 @@ struct v3_event_chord { | |||
int16_t root; | |||
int16_t bass_note; | |||
int16_t mask; | |||
uint16_t text_len; | |||
const int16_t *text; | |||
}; | |||
@@ -75,14 +68,12 @@ struct v3_event_chord { | |||
struct v3_event_scale { | |||
int16_t root; | |||
int16_t mask; | |||
uint16_t text_len; | |||
const int16_t *text; | |||
}; | |||
struct v3_event_legacy_midi_cc_out { | |||
uint8_t cc_number; | |||
int8_t channel; | |||
int8_t value; | |||
int8_t value2; | |||
@@ -96,7 +87,6 @@ struct v3_event_note_expression_value { | |||
struct v3_event_note_expression_text { | |||
int32_t note_id; | |||
uint32_t text_len; | |||
const int16_t *text; | |||
}; | |||
@@ -106,7 +96,7 @@ struct v3_event_note_expression_text { | |||
*/ | |||
enum v3_event_flags { | |||
V3_EVENT_IS_LIVE = 1 | |||
V3_EVENT_IS_LIVE = 1 << 0 | |||
}; | |||
enum v3_event_type { | |||
@@ -118,19 +108,15 @@ enum v3_event_type { | |||
V3_EVENT_NOTE_EXP_TEXT = 5, | |||
V3_EVENT_CHORD = 6, | |||
V3_EVENT_SCALE = 7, | |||
V3_EVENT_LEGACY_MIDI_CC_OUT = 65535 | |||
}; | |||
struct v3_event { | |||
int32_t bus_index; | |||
int32_t sample_offset; | |||
double ppq_position; | |||
uint16_t flags; | |||
uint16_t type; | |||
union { | |||
struct v3_event_note_on note_on; | |||
struct v3_event_note_off note_off; | |||
@@ -151,14 +137,12 @@ struct v3_event { | |||
struct v3_event_list { | |||
struct v3_funknown; | |||
V3_API uint32_t (*get_event_count)(void *self); | |||
V3_API v3_result (*get_event) | |||
(void *self, int32_t idx, struct v3_event *); | |||
V3_API v3_result (*add_event) | |||
(void *self, struct v3_event *); | |||
V3_API uint32_t (*get_event_count)(void* self); | |||
V3_API v3_result (*get_event)(void* self, int32_t idx, struct v3_event* event); | |||
V3_API v3_result (*add_event)(void* self, struct v3_event* event); | |||
}; | |||
static const v3_tuid v3_event_list_iid = | |||
static constexpr const v3_tuid v3_event_list_iid = | |||
V3_ID(0x3A2C4214, 0x346349FE, 0xB2C4F397, 0xB9695A44); | |||
#include "align_pop.h" |
@@ -39,19 +39,13 @@ struct v3_class_info { | |||
struct v3_plugin_factory { | |||
struct v3_funknown; | |||
V3_API v3_result (*get_factory_info) | |||
(void *self, struct v3_factory_info *); | |||
V3_API int32_t (*num_classes)(void *self); | |||
V3_API v3_result (*get_class_info) | |||
(void *self, int32_t idx, struct v3_class_info *); | |||
V3_API v3_result (*create_instance) | |||
(void *self, const v3_tuid class_id, const v3_tuid iid, void **instance); | |||
V3_API v3_result (*get_factory_info)(void* self, struct v3_factory_info*); | |||
V3_API int32_t (*num_classes)(void* self); | |||
V3_API v3_result (*get_class_info)(void* self, int32_t idx, struct v3_class_info*); | |||
V3_API v3_result (*create_instance)(void* self, const v3_tuid class_id, const v3_tuid iid, void** instance); | |||
}; | |||
static const v3_tuid v3_plugin_factory_iid = | |||
static constexpr const v3_tuid v3_plugin_factory_iid = | |||
V3_ID(0x7A4D811C, 0x52114A1F, 0xAED9D2EE, 0x0B43BF9F); | |||
/** | |||
@@ -63,7 +57,6 @@ struct v3_class_info_2 { | |||
int32_t cardinality; // set to 0x7FFFFFFF | |||
char category[32]; | |||
char name[64]; | |||
uint32_t class_flags; | |||
char sub_categories[128]; | |||
char vendor[64]; | |||
@@ -74,11 +67,10 @@ struct v3_class_info_2 { | |||
struct v3_plugin_factory_2 { | |||
struct v3_plugin_factory; | |||
V3_API v3_result (*get_class_info_2) | |||
(void *self, int32_t idx, struct v3_class_info_2 *); | |||
V3_API v3_result (*get_class_info_2)(void* self, int32_t idx, struct v3_class_info_2*); | |||
}; | |||
static const v3_tuid v3_plugin_factory_2_iid = | |||
static constexpr const v3_tuid v3_plugin_factory_2_iid = | |||
V3_ID(0x0007B650, 0xF24B4C0B, 0xA464EDB9, 0xF00B2ABB); | |||
/** | |||
@@ -93,7 +85,6 @@ struct v3_class_info_3 { | |||
int32_t cardinality; // set to 0x7FFFFFFF | |||
char category[32]; | |||
int16_t name[64]; | |||
uint32_t class_flags; | |||
char sub_categories[128]; | |||
int16_t vendor[64]; | |||
@@ -104,12 +95,9 @@ struct v3_class_info_3 { | |||
struct v3_plugin_factory_3 { | |||
struct v3_plugin_factory_2; | |||
V3_API v3_result (*get_class_info_utf16) | |||
(void *self, int32_t idx, struct v3_class_info_3 *); | |||
V3_API v3_result (*set_host_context) | |||
(void *self, struct v3_funknown *host); | |||
V3_API v3_result (*get_class_info_utf16)(void* self, int32_t idx, struct v3_class_info_3*); | |||
V3_API v3_result (*set_host_context)(void* self, struct v3_funknown* host); | |||
}; | |||
static const v3_tuid v3_plugin_factory_3_iid = | |||
static constexpr const v3_tuid v3_plugin_factory_3_iid = | |||
V3_ID(0x4555A2AB, 0xC1234E57, 0x9B122910, 0x36878931); |
@@ -19,7 +19,7 @@ | |||
#include "base.h" | |||
/** | |||
* base IPlugFrame stuff | |||
* base view stuff | |||
*/ | |||
struct v3_view_rect { | |||
@@ -41,50 +41,43 @@ struct v3_view_rect { | |||
# define V3_VIEW_PLATFORM_TYPE_NATIVE V3_VIEW_PLATFORM_TYPE_X11 | |||
#endif | |||
/** | |||
* plugin view | |||
*/ | |||
struct v3_plugin_frame; | |||
struct v3_plugin_view { | |||
struct v3_funknown; | |||
V3_API v3_result (*is_platform_type_supported) | |||
(void *self, const char *platform_type); | |||
V3_API v3_result (*attached) | |||
(void *self, void *parent, const char *platform_type); | |||
V3_API v3_result (*removed)(void *self); | |||
V3_API v3_result (*on_wheel)(void *self, float distance); | |||
V3_API v3_result (*on_key_down) | |||
(void *self, int16_t key_char, int16_t key_code, int16_t modifiers); | |||
V3_API v3_result (*on_key_up) | |||
(void *self, int16_t key_char, int16_t key_code, int16_t modifiers); | |||
V3_API v3_result (*get_size) | |||
(void *self, struct v3_view_rect *); | |||
V3_API v3_result (*on_size) | |||
(void *self, struct v3_view_rect *); | |||
V3_API v3_result (*on_focus) | |||
(void *self, v3_bool state); | |||
V3_API v3_result (*set_frame) | |||
(void *self, struct v3_plugin_frame **); | |||
V3_API v3_result (*can_resize)(void *self); | |||
V3_API v3_result (*check_size_constraint) | |||
(void *self, struct v3_view_rect *); | |||
V3_API v3_result (*is_platform_type_supported)(void* self, const char* platform_type); | |||
V3_API v3_result (*attached)(void* self, void* parent, const char* platform_type); | |||
V3_API v3_result (*removed)(void* self); | |||
V3_API v3_result (*on_wheel)(void* self, float distance); | |||
V3_API v3_result (*on_key_down)(void* self, int16_t key_char, int16_t key_code, int16_t modifiers); | |||
V3_API v3_result (*on_key_up)(void* self, int16_t key_char, int16_t key_code, int16_t modifiers); | |||
V3_API v3_result (*get_size)(void* self, struct v3_view_rect*); | |||
V3_API v3_result (*on_size)(void* self, struct v3_view_rect*); | |||
V3_API v3_result (*on_focus)(void* self, v3_bool state); | |||
V3_API v3_result (*set_frame)(void* self, struct v3_plugin_frame**); | |||
V3_API v3_result (*can_resize)(void* self); | |||
V3_API v3_result (*check_size_constraint)(void* self, struct v3_view_rect*); | |||
}; | |||
static const v3_tuid v3_plugin_view_iid = | |||
static constexpr const v3_tuid v3_plugin_view_iid = | |||
V3_ID(0x5BC32507, 0xD06049EA, 0xA6151B52, 0x2B755B29); | |||
/** | |||
* plugin frame | |||
*/ | |||
struct v3_plugin_frame { | |||
struct v3_funknown; | |||
V3_API v3_result (*resize_view) | |||
(void *self, struct v3_plugin_view **, struct v3_view_rect *); | |||
V3_API v3_result (*resize_view)(void* self, struct v3_plugin_view**, struct v3_view_rect*); | |||
}; | |||
static const v3_tuid v3_plugin_frame_iid = | |||
static constexpr const v3_tuid v3_plugin_frame_iid = | |||
V3_ID(0x367FAF01, 0xAFA94693, 0x8D4DA2A0, 0xED0882A3); | |||
/** | |||
@@ -95,11 +88,10 @@ static const v3_tuid v3_plugin_frame_iid = | |||
struct v3_plugin_view_content_scale_steinberg { | |||
struct v3_funknown; | |||
V3_API v3_result (*set_content_scale_factor) | |||
(void *self, float factor); | |||
V3_API v3_result (*set_content_scale_factor)(void* self, float factor); | |||
}; | |||
static const v3_tuid v3_plugin_view_content_scale_steinberg_iid = | |||
static constexpr const v3_tuid v3_plugin_view_content_scale_steinberg_iid = | |||
V3_ID(0x65ED9690, 0x8AC44525, 0x8AADEF7A, 0x72EA703F); | |||
/** | |||
@@ -109,9 +101,8 @@ static const v3_tuid v3_plugin_view_content_scale_steinberg_iid = | |||
struct v3_plugin_view_parameter_finder { | |||
struct v3_funknown; | |||
V3_API v3_result (*find_parameter) | |||
(void *self, int32_t x, int32_t y, v3_param_id *); | |||
V3_API v3_result (*find_parameter)(void* self, int32_t x, int32_t y, v3_param_id *); | |||
}; | |||
static const v3_tuid v3_plugin_view_parameter_finder_iid = | |||
static constexpr const v3_tuid v3_plugin_view_parameter_finder_iid = | |||
V3_ID(0x0F618302, 0x215D4587, 0xA512073C, 0x77B9D383); |