lv2 fixes, dcraw upgrade, arch/libdv
[goodguy/history.git] / cinelerra-5.1 / cinelerra / pluginlv2ui.h
index 75fe8262972c3928361f0f8c990f902add3b89dd..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
+#define UPDATE_PORTS 2
+
 class PluginLV2UI : public PluginLV2
 {
 public:
@@ -42,26 +66,24 @@ 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;
-       uint32_t host_updates, updates;
-       int host_hidden, hidden;
        int done, running;
-       const char *gtk_type;
-       GtkWidget *top_level;
+       int hidden, updates;
 
-       void reset_gui();
-       int init_ui(const char *path, int sample_rate);
        void start();
        void stop();
-       int update_lv2(float *vals, int force);
-       int redraw;
+       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);
        void update_control(int idx, uint32_t bfrsz, uint32_t typ, const void *bfr);
        static void write_from_ui(void *the, uint32_t idx,
@@ -74,11 +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 update_host();
+};
+
+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 run_ui(PluginLV2ChildUI *child=0);
-       void run_buffer(int shmid);
-       void host_update(PluginLV2ChildUI *child);
-       int run(int ac, char **av);
+       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
@@ -86,10 +139,23 @@ class PluginLV2ChildUI : public ForkChild, public PluginLV2UI
 public:
        PluginLV2ChildUI();
        ~PluginLV2ChildUI();
-       void run();
 
+       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