13
0

update [LV2] Plugin Inline Display API: drop cairo dependency

This commit is contained in:
Robin Gareus 2016-03-14 16:44:20 +01:00
parent e180b0f706
commit 93bc9b9728
4 changed files with 31 additions and 9 deletions

View File

@ -36,13 +36,23 @@
/** Opaque handle for LV2_Inline_Display::queue_draw() */
typedef void* LV2_Inline_Display_Handle;
/** Alias for cairo_image_surface_t */
typedef void* LV2_Inline_Display_Image_Surface;
/** raw image pixmap format is ARGB32,
* the data pointer is owned by the plugin and must be valid
* from the first call to render until cleanup.
*/
typedef struct {
unsigned char *data;
int width;
int height;
int stride;
} LV2_Inline_Display_Image_Surface;
/** a LV2 Feature provided by the Host to the plugin */
typedef struct {
/** Opaque host data */
LV2_Inline_Display_Handle handle;
/** Request from run() that the host should call render() */
/** Request from run() that the host should call render() at a later time
* to update the inline display */
void (*queue_draw)(LV2_Inline_Display_Handle handle);
} LV2_Inline_Display;
@ -53,12 +63,15 @@ typedef struct {
/**
* The render method. This is called by the host in a non-realtime context,
* usually the main GUI thread.
* The data pointer is owned by the plugin and must be valid
* from the first call to render until cleanup.
*
* @param instance The LV2 instance
* @param w the max available width
* @return pointer to a cairo image surface or NULL
* @param h the max available height
* @return pointer to a LV2_Inline_Display_Image_Surface or NULL
*/
LV2_Inline_Display_Image_Surface (*render)(LV2_Handle instance, uint32_t w, uint32_t h);
LV2_Inline_Display_Image_Surface* (*render)(LV2_Handle instance, uint32_t w, uint32_t h);
} LV2_Inline_Display_Interface;
/**

View File

@ -301,7 +301,7 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
#ifdef LV2_EXTENDED
bool has_inline_display ();
void* render_inline_display (uint32_t, uint32_t);
Plugin::Display_Image_Surface* render_inline_display (uint32_t, uint32_t);
#endif
void latency_compute_run ();

View File

@ -111,8 +111,15 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent
void realtime_locate ();
void monitoring_changed ();
typedef struct {
unsigned char *data;
int width;
int height;
int stride;
} Display_Image_Surface;
virtual bool has_inline_display () { return false; }
virtual void* render_inline_display (uint32_t, uint32_t) { return NULL; }
virtual Display_Image_Surface* render_inline_display (uint32_t, uint32_t) { return NULL; }
PBD::Signal0<void> QueueDraw;
struct PresetRecord {

View File

@ -866,10 +866,12 @@ LV2Plugin::has_inline_display () {
return _display_interface ? true : false;
}
void*
Plugin::Display_Image_Surface*
LV2Plugin::render_inline_display (uint32_t w, uint32_t h) {
if (_display_interface) {
return _display_interface->render ((void*)_impl->instance->lv2_handle, w, h);
/* Plugin::Display_Image_Surface is identical to
* LV2_Inline_Display_Image_Surface */
return (Plugin::Display_Image_Surface*) _display_interface->render ((void*)_impl->instance->lv2_handle, w, h);
}
return NULL;
}