update [LV2] Plugin Inline Display API: drop cairo dependency
This commit is contained in:
parent
e180b0f706
commit
93bc9b9728
@ -36,13 +36,23 @@
|
|||||||
/** Opaque handle for LV2_Inline_Display::queue_draw() */
|
/** Opaque handle for LV2_Inline_Display::queue_draw() */
|
||||||
typedef void* LV2_Inline_Display_Handle;
|
typedef void* LV2_Inline_Display_Handle;
|
||||||
|
|
||||||
/** Alias for cairo_image_surface_t */
|
/** raw image pixmap format is ARGB32,
|
||||||
typedef void* LV2_Inline_Display_Image_Surface;
|
* 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 {
|
typedef struct {
|
||||||
/** Opaque host data */
|
/** Opaque host data */
|
||||||
LV2_Inline_Display_Handle handle;
|
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);
|
void (*queue_draw)(LV2_Inline_Display_Handle handle);
|
||||||
} LV2_Inline_Display;
|
} LV2_Inline_Display;
|
||||||
|
|
||||||
@ -53,12 +63,15 @@ typedef struct {
|
|||||||
/**
|
/**
|
||||||
* The render method. This is called by the host in a non-realtime context,
|
* The render method. This is called by the host in a non-realtime context,
|
||||||
* usually the main GUI thread.
|
* 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 instance The LV2 instance
|
||||||
* @param w the max available width
|
* @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;
|
} LV2_Inline_Display_Interface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -301,7 +301,7 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
|
|||||||
|
|
||||||
#ifdef LV2_EXTENDED
|
#ifdef LV2_EXTENDED
|
||||||
bool has_inline_display ();
|
bool has_inline_display ();
|
||||||
void* render_inline_display (uint32_t, uint32_t);
|
Plugin::Display_Image_Surface* render_inline_display (uint32_t, uint32_t);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void latency_compute_run ();
|
void latency_compute_run ();
|
||||||
|
@ -111,8 +111,15 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent
|
|||||||
void realtime_locate ();
|
void realtime_locate ();
|
||||||
void monitoring_changed ();
|
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 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;
|
PBD::Signal0<void> QueueDraw;
|
||||||
|
|
||||||
struct PresetRecord {
|
struct PresetRecord {
|
||||||
|
@ -866,10 +866,12 @@ LV2Plugin::has_inline_display () {
|
|||||||
return _display_interface ? true : false;
|
return _display_interface ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void*
|
Plugin::Display_Image_Surface*
|
||||||
LV2Plugin::render_inline_display (uint32_t w, uint32_t h) {
|
LV2Plugin::render_inline_display (uint32_t w, uint32_t h) {
|
||||||
if (_display_interface) {
|
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;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user