X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Flv2ui.C;h=a025ef1c5d79e727e9738ce6f7f5391c40d6922d;hp=21acda44bcfff8a3b47f794f03c99eac8a895e41;hb=502b6f3b6fd04f6b01c6d70dcb81aa304dd0db1c;hpb=efb3600851fd27b13d3053ffbdb6434535580bfd diff --git a/cinelerra-5.1/cinelerra/lv2ui.C b/cinelerra-5.1/cinelerra/lv2ui.C index 21acda44..a025ef1c 100644 --- a/cinelerra-5.1/cinelerra/lv2ui.C +++ b/cinelerra-5.1/cinelerra/lv2ui.C @@ -1,143 +1,47 @@ #include +#include #include #include #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(); }