lv2 fixes, dcraw upgrade, arch/libdv
[goodguy/history.git] / cinelerra-5.1 / cinelerra / pluginlv2ui.h
index 63a401027fe0df64849dd6cac675b13e538bc579..2e5f7932e70f019c6ac16766d45139d596ff458b 100644 (file)
 #ifndef __PLUGINLV2UI_H__
 #define __PLUGINLV2UI_H__
 
-#ifdef HAVE_LV2UI
-
 #include "forkbase.h"
 #include "pluginlv2.h"
 #include "pluginlv2client.h"
 #include "pluginlv2gui.inc"
 #include "pluginlv2ui.inc"
 
+//=== lv2_external_ui.h
+#define LV2_EXTERNAL_UI_URI "http://lv2plug.in/ns/extensions/ui#external"
+#define LV2_EXTERNAL_UI_URI__KX__Host "http://kxstudio.sf.net/ns/lv2ext/external-ui#Host"
+
+typedef struct _lv2_external_ui lv2_external_ui;
+struct _lv2_external_ui {
+        void (*run)(lv2_external_ui *ui);
+        void (*show)(lv2_external_ui *ui);
+        void (*hide)(lv2_external_ui *ui);
+        void *self;
+};
+
+typedef struct _lv2_external_ui_host lv2_external_ui_host;
+struct _lv2_external_ui_host {
+        void (*ui_closed)(void* controller);
+        const char *plugin_human_id;
+};
+
+#define LV2_EXTERNAL_UI_RUN(ptr) (ptr)->run(ptr)
+#define LV2_EXTERNAL_UI_SHOW(ptr) (ptr)->show(ptr)
+#define LV2_EXTERNAL_UI_HIDE(ptr) (ptr)->hide(ptr)
+//===
+
 typedef struct _GtkWidget GtkWidget;
 
 #define UPDATE_HOST 1
@@ -45,26 +66,22 @@ public:
        const LilvNode *lilv_type;
 
        LV2_Extension_Data_Feature *ext_data;
-       PluginLV2UriTable  uri_table;
-       LV2_URI_Map_Feature *uri_map;
-       LV2_URID_Map       map;
-       LV2_URID_Unmap     unmap;
+       lv2_external_ui_host extui_host;
+       const char *wgt_type;
+       const char *gtk_type;
+       const char *ui_type;
 
        char title[BCSTRLEN];
        PluginLV2ClientConfig config;
-       int updates, hidden;
        int done, running;
-       const char *gtk_type;
-       GtkWidget *top_level;
-       PluginLV2ChildUI *child;
+       int hidden, updates;
 
-       void reset_gui();
-       int init_ui(const char *path, int sample_rate);
        void start();
        void stop();
-       int send_host(int64_t token, const void *data, int bytes);
        int update_lv2_input(float *vals, int force);
        void update_lv2_output();
+       virtual int send_host(int64_t token, const void *data, int bytes) = 0;
+       virtual int child_iteration(int64_t usec) { return -1; }
 
        void run_lilv(int samples);
        void update_value(int idx, uint32_t bfrsz, uint32_t typ, const void *bfr);
@@ -79,10 +96,42 @@ public:
        static const char *uri_table_unmap(LV2_URID_Map_Handle handle, LV2_URID urid);
        void lv2ui_instantiate(void *parent);
        bool lv2ui_resizable();
-       void start_gui();
-       int run_ui(PluginLV2ChildUI *child=0);
        void update_host();
-       int run(int ac, char **av);
+};
+
+class PluginLV2GUI
+{
+public:
+       PluginLV2GUI(PluginLV2ChildUI *child_ui);
+       virtual ~PluginLV2GUI();
+       virtual void reset_gui() = 0;
+       virtual void start_gui() = 0;
+       virtual int handle_child() = 0;
+
+       PluginLV2ChildUI *child_ui;
+       void *top_level;
+};
+
+class PluginLV2ChildGtkUI : public PluginLV2GUI
+{
+public:
+       PluginLV2ChildGtkUI(PluginLV2ChildUI *child_ui);
+       ~PluginLV2ChildGtkUI();
+
+       void reset_gui();
+       void start_gui();
+       int handle_child();
+};
+
+class PluginLV2ChildWgtUI : public PluginLV2GUI
+{
+public:
+       PluginLV2ChildWgtUI(PluginLV2ChildUI *child_ui);
+       ~PluginLV2ChildWgtUI();
+
+       void reset_gui();
+       void start_gui();
+       int handle_child();
 };
 
 class PluginLV2ChildUI : public ForkChild, public PluginLV2UI
@@ -90,11 +139,23 @@ class PluginLV2ChildUI : public ForkChild, public PluginLV2UI
 public:
        PluginLV2ChildUI();
        ~PluginLV2ChildUI();
-       void run();
-       void run_buffer(int shmid);
 
+       int init_ui(const char *path, int sample_rate, int bfrsz);
+       void reset_gui();
+       void start_gui();
        int handle_child();
+
+       int is_forked() { return ppid; }
+       int send_host(int64_t token, const void *data, int bytes);
+       int child_iteration(int64_t usec);
+       void run();
        int run(int ac, char **av);
+       int run_ui();
+       void run_buffer(int shmid);
+
+       int ac;
+       char **av;
+       PluginLV2GUI *gui;
 };
-#endif
+
 #endif