From 7db0ce19674393a4dd9af3beed236038bcfa2e65 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 14 Aug 2016 14:49:02 +0200 Subject: Experimental inline display added. --- pluginlv2.cc | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'pluginlv2.cc') diff --git a/pluginlv2.cc b/pluginlv2.cc index 39d0e6c..c264223 100644 --- a/pluginlv2.cc +++ b/pluginlv2.cc @@ -114,6 +114,13 @@ LV2_Handle PluginLV2::instantiate(const struct _LV2_Descriptor* descriptor, plugin_lv2->map = (LV2_URID_Map*)data; } +#ifdef DISPLAY_INTERFACE + if(uri == LV2_INLINEDISPLAY__queue_draw) + { + plugin_lv2->queue_draw = (LV2_Inline_Display*)data; + } +#endif + ++features; } @@ -348,6 +355,13 @@ void PluginLV2::run(LV2_Handle instance, uint32_t sample_count) } plugin_lv2->pos += sample_count; + +#ifdef DISPLAY_INTERFACE + if(plugin_lv2->queue_draw) + { + plugin_lv2->queue_draw->queue_draw(plugin_lv2->queue_draw->handle); + } +#endif } void PluginLV2::activate(LV2_Handle instance) @@ -440,6 +454,23 @@ static LV2_State_Interface persist = { PluginLV2::restore }; +LV2_Inline_Display_Image_Surface* PluginLV2::inlineRender(LV2_Handle instance, + uint32_t w, + uint32_t max_h) +{ + PluginLV2* plugin_lv2 = (PluginLV2*)instance; + + plugin_lv2->onInlineRedraw(w, max_h, plugin_lv2->drawContext); + + plugin_lv2->surf.width = plugin_lv2->drawContext.width; + plugin_lv2->surf.height = plugin_lv2->drawContext.height; + plugin_lv2->surf.stride = plugin_lv2->surf.width; // no padding + + plugin_lv2->surf.data = plugin_lv2->drawContext.data; + + return &plugin_lv2->surf; +} + const void* PluginLV2::extensionData(const char *uri) { if(!strcmp(uri, LV2_STATE__interface)) @@ -447,6 +478,14 @@ const void* PluginLV2::extensionData(const char *uri) return &persist; } +#ifdef DISPLAY_INTERFACE + static const LV2_Inline_Display_Interface display = { inlineRender }; + if(!strcmp(uri, LV2_INLINEDISPLAY__interface)) + { + return &display; + } +#endif + return nullptr; } -- cgit v1.2.3