diff options
author | Robin Gareus <robin@gareus.org> | 2017-03-07 03:22:13 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-03-08 13:03:46 +0100 |
commit | 4b982ef895e1e5d36b0be0b20e7a2810e3f16945 (patch) | |
tree | e85af8cb8531d35ee4b062fd58bf5e00233ce9d9 /libs/ardour | |
parent | 50f408adf21ce606a40a48d02badc5fb567a5347 (diff) |
Prepare moving to a dedicated x-thread signal for VST UI resizing
(this changes the internal API, pending follow-up GUI update)
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/vst_plugin.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/vst_types.h | 72 | ||||
-rw-r--r-- | libs/ardour/session_vst.cc | 11 |
3 files changed, 43 insertions, 41 deletions
diff --git a/libs/ardour/ardour/vst_plugin.h b/libs/ardour/ardour/vst_plugin.h index b35ef6b25e..bb172d9efd 100644 --- a/libs/ardour/ardour/vst_plugin.h +++ b/libs/ardour/ardour/vst_plugin.h @@ -62,6 +62,7 @@ public: std::set<Evoral::Parameter> automatable() const; PBD::Signal0<void> LoadPresetProgram; + PBD::Signal0<void> VSTSizeWindow; bool parameter_is_audio (uint32_t) const { return false; } bool parameter_is_control (uint32_t) const { return true; } diff --git a/libs/ardour/ardour/vst_types.h b/libs/ardour/ardour/vst_types.h index 21e9ea01fc..9e9269e5c0 100644 --- a/libs/ardour/ardour/vst_types.h +++ b/libs/ardour/ardour/vst_types.h @@ -77,24 +77,21 @@ typedef struct _VSTHandle VSTHandle; struct LIBARDOUR_API _VSTState { - AEffect* plugin; + AEffect* plugin; + VSTHandle* handle; + audioMasterCallback amc; + + void* gtk_window_parent; + int xid; ///< X11 XWindow (wine + lxvst) - /* Linux */ + /* LXVST/X11 */ int linux_window; ///< The plugin's parent X11 XWindow int linux_plugin_ui_window; ///< The ID of the plugin UI window created by the plugin + void (* eventProc) (void * event); ///< X11 UI _XEventProc /* Windows */ void* windows_window; - int xid; ///< X11 XWindow - - int want_resize; ///< Set to signal the plugin resized its UI - void* extra_data; ///< Pointer to any extra data - - void * event_callback_thisptr; - void (* eventProc) (void * event); - - VSTHandle* handle; int width; int height; @@ -107,33 +104,32 @@ struct LIBARDOUR_API _VSTState int vst_version; int has_editor; - int program_set_without_editor; - - int want_program; - int want_chunk; - int n_pending_keys; - unsigned char * wanted_chunk; - int wanted_chunk_size; - float * want_params; - float * set_params; - - VSTKey pending_keys[16]; - - int dispatcher_wantcall; - int dispatcher_opcode; - int dispatcher_index; - int dispatcher_val; - void * dispatcher_ptr; - float dispatcher_opt; - int dispatcher_retval; - - struct _VSTState * next; - pthread_mutex_t lock; - pthread_mutex_t state_lock; - pthread_cond_t window_status_change; - pthread_cond_t plugin_dispatcher_called; - pthread_cond_t window_created; - int been_activated; + int program_set_without_editor; + int want_program; + int want_chunk; + int n_pending_keys; + unsigned char* wanted_chunk; + int wanted_chunk_size; + float* want_params; + float* set_params; + + VSTKey pending_keys[16]; + + int dispatcher_wantcall; + int dispatcher_opcode; + int dispatcher_index; + int dispatcher_val; + void* dispatcher_ptr; + float dispatcher_opt; + int dispatcher_retval; + + struct _VSTState* next; + pthread_mutex_t lock; + pthread_mutex_t state_lock; + pthread_cond_t window_status_change; + pthread_cond_t plugin_dispatcher_called; + pthread_cond_t window_created; + int been_activated; }; typedef struct _VSTState VSTState; diff --git a/libs/ardour/session_vst.cc b/libs/ardour/session_vst.cc index db097fa5b0..5ba77a9a6e 100644 --- a/libs/ardour/session_vst.cc +++ b/libs/ardour/session_vst.cc @@ -337,9 +337,14 @@ intptr_t Session::vst_callback ( case audioMasterSizeWindow: SHOW_CALLBACK ("audioMasterSizeWindow"); if (plug && plug->state()) { - plug->state()->width = index; - plug->state()->height = value; - plug->state()->want_resize = 1; + if (plug->state()->width != index || plug->state()->height != value) { + plug->state()->width = index; + plug->state()->height = value; +#ifndef NDEBUG + printf ("audioMasterSizeWindow %d %d\n", plug->state()->width, plug->state()->height); +#endif + plug->VSTSizeWindow (); /* EMIT SIGNAL */ + } } return 0; |