/** 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;
/**
* 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;
/**
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 {
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;
}