X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fpluginlv2ui.C;h=17f072a2c6bf63b6c5960f21d7c364aa10e5199c;hb=5621db270ccbeabc106e0f438941dba6f930652b;hp=904f9549ddbbc55d10a29470c9c65a344f877f06;hpb=803cf48f8f7ee246eb5473e55fc2125e8b398250;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/pluginlv2ui.C b/cinelerra-5.1/cinelerra/pluginlv2ui.C index 904f9549..17f072a2 100644 --- a/cinelerra-5.1/cinelerra/pluginlv2ui.C +++ b/cinelerra-5.1/cinelerra/pluginlv2ui.C @@ -1,4 +1,3 @@ -#ifdef HAVE_LV2UI // shared between parent/child fork #include "language.h" @@ -10,39 +9,6 @@ #include #include -int PluginLV2UI::init_ui(const char *path, int sample_rate) -{ - if( load_lv2(path, title) ) return 1; - if( init_lv2(config, sample_rate) ) return 1; - - lilv_uis = lilv_plugin_get_uis(lilv); - if( !lilv_uis ) { - printf("lv2: lilv_plugin_get_uis(%s) failed\n", path); - return 1; - } - - if( gtk_type ) { - LilvNode *gui_type = lilv_new_uri(world, gtk_type); - LILV_FOREACH(uis, i, lilv_uis) { - const LilvUI *ui = lilv_uis_get(lilv_uis, i); - if( lilv_ui_is_supported(ui, suil_ui_supported, gui_type, &lilv_type)) { - lilv_ui = ui; - break; - } - } - lilv_node_free(gui_type); - } - if( !lilv_ui ) - lilv_ui = lilv_uis_get(lilv_uis, lilv_uis_begin(lilv_uis)); - if( !lilv_ui ) { - printf("lv2_gui: init_ui failed: %s\n", title); - return 1; - } - - lilv_instance_activate(inst); - return 0; -} - void PluginLV2UI::update_value(int idx, uint32_t bfrsz, uint32_t typ, const void *bfr) { if( idx >= config.nb_ports ) return; @@ -50,8 +16,7 @@ void PluginLV2UI::update_value(int idx, uint32_t bfrsz, uint32_t typ, const void PluginLV2Client_Opt *opt = config[i]; if( opt->idx == idx ) { opt->set_value(*(const float*)bfr); -//printf("set %s = %f\n", opt->get_symbol(), opt->get_value()); - ++updates; + updates |= UPDATE_HOST; break; } } @@ -79,17 +44,6 @@ void PluginLV2UI::update_control(int idx, uint32_t bfrsz, uint32_t typ, const vo } -#if 0 -void PluginLV2UI::touch(void *obj, uint32_t pidx, bool grabbed) -{ - PluginLV2UI* the = (PluginLV2GUI*)obj; - int idx = pidx; - if( idx >= the->config.nb_ports ) return; -printf("%s %s(%u)\n", (grabbed? _("press") : _("release")), - the->config.names[idx], idx); -} -#endif - uint32_t PluginLV2UI::uri_to_id(LV2_URID_Map_Handle handle, const char *map, const char *uri) { return ((PluginLV2UriTable *)handle)->map(uri); @@ -112,8 +66,7 @@ void PluginLV2UI::lv2ui_instantiate(void *parent) PluginLV2UI::write_from_ui, PluginLV2UI::port_index, 0, 0); -// suil_host_set_touch_func(ui_host, -// PluginLV2GUI::touch); +// suil_host_set_touch_func(ui_host, cb_touch); } features.remove(); // remove terminating zero @@ -126,13 +79,15 @@ void PluginLV2UI::lv2ui_instantiate(void *parent) features.append(new Lv2Feature(LV2_DATA_ACCESS_URI, ext_data)); features.append(new Lv2Feature(LV2_UI__parent, parent)); features.append(new Lv2Feature(LV2_UI__idleInterface, 0)); + features.append(new Lv2Feature(LV2_EXTERNAL_UI_URI, &extui_host)); + features.append(new Lv2Feature(LV2_EXTERNAL_UI_URI__KX__Host, &extui_host)); features.append(0); // add new terminating zero const char* bundle_uri = lilv_node_as_uri(lilv_ui_get_bundle_uri(lilv_ui)); char* bundle_path = lilv_file_uri_parse(bundle_uri, NULL); const char* binary_uri = lilv_node_as_uri(lilv_ui_get_binary_uri(lilv_ui)); char* binary_path = lilv_file_uri_parse(binary_uri, NULL); - sinst = suil_instance_new(ui_host, this, gtk_type, + sinst = suil_instance_new(ui_host, this, ui_type, lilv_node_as_uri(lilv_plugin_get_uri(lilv)), lilv_node_as_uri(lilv_ui_get_uri(lilv_ui)), lilv_node_as_uri(lilv_type), @@ -159,152 +114,342 @@ bool PluginLV2UI::lv2ui_resizable() return !fs_matches && !nrs_matches; } -int PluginLV2UI::update_lv2(float *vals, int force) +int PluginLV2UI::update_lv2_input(float *vals, int force) { int ret = 0; - float *ctls = (float *)config.ctls; + float *ctls = config.ctls; for( int i=0; iidx; float val = vals[idx]; if( !force && ctls[idx] == val ) continue; - update_control(idx, sizeof(val), 0, &val); + ctls[idx] = val; + update_control(idx, sizeof(ctls[idx]), 0, &ctls[idx]); ++ret; } - for( int i=0; ihidden = 1; - the->top_level = 0; - ++the->updates; + int *ports = config.ports; + float *ctls = config.ctls; + for( int i=0; i