repair default keyframe load, tweak init default histogram threshold
[goodguy/history.git] / cinelerra-5.1 / cinelerra / lv2ui.C
index 21acda44bcfff8a3b47f794f03c99eac8a895e41..a025ef1c5d79e727e9738ce6f7f5391c40d6922d 100644 (file)
 #include <stdio.h>
+#include <signal.h>
 
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
 
 #include "bcsignals.h"
 #include "pluginlv2client.h"
-#include "pluginlv2gui.h"
+#include "pluginlv2ui.h"
 
-static void lilv_destroy(GtkWidget* widget, gpointer data)
-{
-       PluginLV2GUI *the = (PluginLV2GUI*)data;
-       the->done = 1;
-}
-
-void PluginLV2GUI::start()
-{
-       GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-       g_signal_connect(window, "destroy", G_CALLBACK(lilv_destroy), this);
-       gtk_window_set_title(GTK_WINDOW(window), title);
-
-       GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
-       gtk_window_set_role(GTK_WINDOW(window), "plugin_ui");
-       gtk_container_add(GTK_CONTAINER(window), vbox);
-
-       GtkWidget *alignment = gtk_alignment_new(0.5, 0.5, 1.0, 1.0);
-       gtk_box_pack_start(GTK_BOX(vbox), alignment, TRUE, TRUE, 0);
-       gtk_widget_show(alignment);
-       lv2ui_instantiate(alignment);
-       GtkWidget* widget = (GtkWidget*)suil_instance_get_widget(sinst);
-       gtk_container_add(GTK_CONTAINER(alignment), widget);
-       gtk_window_set_resizable(GTK_WINDOW(window), lv2ui_resizable());
-       gtk_widget_show_all(vbox);
-       gtk_widget_grab_focus(widget);
-
-       gtk_window_present(GTK_WINDOW(window));
-       running = -1;
-}
-
-void PluginLV2GUI::stop()
-{
-       running = 0;
-}
-
-void PluginLV2GUI::host_update(PluginLV2ChildGUI *child)
-{
-//printf("update\n");
-       last = updates;
-       if( !child ) return;
-// ignore reset update
-       if( child->lv2_gui->running < 0 ) { child->lv2_gui->running = 1;  return; }
-       child->send_parent(LV2_UPDATE, config.ctls, sizeof(float)*config.nb_ports);
-}
-
-void PluginLV2GUI::run_gui(PluginLV2ChildGUI *child)
+int main(int ac, char **av)
 {
-       while( !done ) {
-               if( gtk_events_pending() ) {
-                       gtk_main_iteration();
-                       continue;
-               }
-               if( running && updates != last )
-                       host_update(child);
-               if( redraw ) {
-                       redraw = 0;
-                       update_lv2(config.ctls, 1);
-               }
-               if( !child ) usleep(10000);
-               else if( child->child_iteration() < 0 )
-                       done = 1;
+// to grab this task in the debugger
+const char *cp = getenv("BUG");
+static int zbug = !cp ? 0 : atoi(cp);  volatile int bug = zbug;
+while( bug ) usleep(10000);
+       BC_Signals signals;
+       if( getenv("BC_TRAP_LV2_SEGV") ) {
+               signals.initialize("/tmp/lv2ui_%d.dmp");
+               BC_Signals::set_catch_segv(1);
        }
+       return PluginLV2ChildUI().run(ac, av);
 }
 
-int PluginLV2ChildGUI::handle_child()
+int PluginLV2ChildUI::run(int ac, char **av)
 {
-       if( !lv2_gui ) return 0;
+       this->ac = ac;
+       this->av = av;
 
-       switch( child_token ) {
-       case LV2_OPEN: {
-               char *path = (char *)child_data;
-               if( lv2_gui->init_gui(path) ) exit(1);
-               break; }
-       case LV2_LOAD: {
-               lv2_gui->update_lv2((float*)child_data, 1);
-               break; }
-       case LV2_UPDATE: {
-               lv2_gui->update_lv2((float*)child_data, 0);
-               break; }
-       case LV2_START: {
-               lv2_gui->start();
-               break; }
-       case LV2_SET: {
-               if( !lv2_gui ) break;
-               control_t *bfr = (control_t *)child_data;
-               lv2_gui->config.ctls[bfr->idx] = bfr->value;
-               lv2_gui->redraw = 1;
-               break; }
-       case EXIT_CODE:
-               return -1;
-       default:
-               return 0;
+       if( ac > 3 ) {
+               signal(SIGINT, SIG_IGN);
+               ForkBase::child_fd = atoi(av[1]);
+               ForkBase::parent_fd = atoi(av[2]);
+               ForkBase::ppid = atoi(av[3]);
        }
-       return 1;
-}
-
-int PluginLV2GUI::run(int ac, char **av)
-{
-       if( ac < 3 ) {
-               if( init_gui(av[1]) ) {
+       else {
+               int sample_rate = samplerate, bfrsz = block_length;
+               if( ac > 2 ) sample_rate = atoi(av[2]);
+               if( init_ui(av[1], sample_rate, bfrsz) ) {
                        fprintf(stderr," init_ui failed\n");
                        return 1;
                }
-               start();
-               run_gui();
-               stop();
-       }
-       else {
-               PluginLV2ChildGUI child;
-               child.lv2_gui = this;
-               child.child_fd = atoi(av[1]);
-               child.parent_fd = atoi(av[2]);
-               run_gui(&child);
-               stop();
-               child.lv2_gui = 0;
+               start_gui();
        }
-       return 0;
-}
-
-int main(int ac, char **av)
-{
-       BC_Signals signals;
-       if( getenv("BC_TRAP_LV2_SEGV") ) {
-               signals.initialize("/tmp/lv2ui_%d.dmp");
-               BC_Signals::set_catch_segv(1);
-       }
-       gtk_set_locale();
-       gtk_init(&ac, &av);
-// to grab this task in the debugger
-//static int zbug = 1;  volatile int bug = zbug;
-//while( bug ) usleep(10000);
-       return PluginLV2GUI().run(ac, av);
+       return run_ui();
 }