summaryrefslogtreecommitdiff
path: root/pluginlv2.cc
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2016-08-14 14:49:02 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2016-08-14 14:49:02 +0200
commit7db0ce19674393a4dd9af3beed236038bcfa2e65 (patch)
treea9d1f410fbbac877919ef3a72ce0abd35eabaa43 /pluginlv2.cc
parenta9eadcc1b483d5d30a8443e78fa4d84c8f18d6c3 (diff)
Experimental inline display added.
Diffstat (limited to 'pluginlv2.cc')
-rw-r--r--pluginlv2.cc39
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;
}