diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2016-08-14 14:49:02 +0200 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2016-08-14 14:49:02 +0200 |
commit | 7db0ce19674393a4dd9af3beed236038bcfa2e65 (patch) | |
tree | a9d1f410fbbac877919ef3a72ce0abd35eabaa43 /pluginlv2.cc | |
parent | a9eadcc1b483d5d30a8443e78fa4d84c8f18d6c3 (diff) |
Experimental inline display added.
Diffstat (limited to 'pluginlv2.cc')
-rw-r--r-- | pluginlv2.cc | 39 |
1 files changed, 39 insertions, 0 deletions
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; } |