⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plugin.c

📁 Aqualung is an advanced music player primarily targeted for the GNU/Linux operating system, but als
💻 C
📖 第 1 页 / 共 5 页
字号:
	if (instance->is_restored) {		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), instance->is_bypassed);	} else {		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);	}	/* count control I/O ports */	for (k = 0; k < MAX_KNOBS && k < plugin->PortCount; ++k) {		if (LADSPA_IS_PORT_AUDIO(plugin->PortDescriptors[k]))			continue;		if (LADSPA_IS_PORT_INPUT(plugin->PortDescriptors[k])) {			if (LADSPA_IS_HINT_TOGGLED(hints[k].HintDescriptor)) {				++n_toggled;			} else {				++n_untoggled;			}		} else {			if (strcmp(plugin->PortNames[k], "latency") == 0) {				++n_outlat;			} else {				++n_outctl;			}		}		++n_rows;	}	if ((n_toggled) && (n_untoggled))		++n_rows;	if (((n_toggled) || (n_untoggled)) && (n_outctl))		++n_rows;	if (((n_toggled) || (n_untoggled) || (n_outctl)) && (n_outlat))		++n_rows;	scrwin = gtk_scrolled_window_new(NULL, NULL);	gtk_widget_set_name(scrwin, "plugin_scrwin");	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrwin),				       GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);	gtk_box_pack_start(GTK_BOX(vbox), scrwin, TRUE, TRUE, 2);	inner_vbox = gtk_vbox_new(FALSE, 0);	gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrwin), inner_vbox);	if ((n_toggled) || (n_untoggled) || (n_outctl) || (n_outlat)) {		table = gtk_table_new(n_rows, 3, FALSE);		gtk_box_pack_start(GTK_BOX(inner_vbox), table, TRUE, TRUE, 2);	}	if (n_toggled) {		for (k = 0; k < MAX_KNOBS && k < plugin->PortCount; ++k) {			int max_height = 0;						if (!LADSPA_IS_PORT_CONTROL(plugin->PortDescriptors[k]))				continue;			if (LADSPA_IS_PORT_OUTPUT(plugin->PortDescriptors[k]))				continue;			if (!LADSPA_IS_HINT_TOGGLED(hints[k].HintDescriptor))				continue;						widget = gtk_label_new(plugin->PortNames[k]);			hbox = gtk_hbox_new(FALSE, 0);			gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);			gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, i, i+1,					 GTK_FILL, GTK_FILL | GTK_EXPAND, 2, 2);			gtk_widget_size_request(widget, &req);			req.height += 2;			if (req.width > max_width)				max_width = req.width;			if (req.height > max_height)				max_height = req.height;						widget = gtk_toggle_button_new();			gtk_widget_set_name(widget, "plugin_toggled");			gtk_widget_set_size_request(widget, 14, 14);			gtk_table_attach(GTK_TABLE(table), widget, 2, 3, i, i+1, 0, 0, 0, 0);			gtk_widget_size_request(widget, &req);			if (req.height > max_height)				max_height = req.height;			height += max_height;			++i;						g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(plugin_btn_toggled),					 &(instance->knobs[k]));						if (((instance->is_restored) && (instance->knobs[k] > 0.0f)) ||			    ((!instance->is_restored) &&			     (LADSPA_IS_HINT_DEFAULT_1(hints[k].HintDescriptor)))) {				gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);			}		}	}	if ((n_toggled) && (n_untoggled)) {		hseparator = gtk_hseparator_new();		gtk_table_attach(GTK_TABLE(table), hseparator, 0, 3, i, i+1, GTK_FILL, GTK_FILL, 2, 2);		++i;		gtk_widget_size_request(hseparator, &req);		height += req.height + 5;	}	if (n_untoggled) {		for (k = 0; k < MAX_KNOBS && k < plugin->PortCount; ++k) {			int max_height = 0;			if (!LADSPA_IS_PORT_CONTROL(plugin->PortDescriptors[k]))				continue;			if (LADSPA_IS_PORT_OUTPUT(plugin->PortDescriptors[k]))				continue;			if (LADSPA_IS_HINT_TOGGLED(hints[k].HintDescriptor))				continue;						widget = gtk_label_new(plugin->PortNames[k]);                        hbox = gtk_hbox_new(FALSE, 0);                        gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);			gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, i, i+1,					 GTK_FILL, GTK_FILL | GTK_EXPAND, 2, 2);			gtk_widget_size_request(widget, &req);			req.height += 2;			if (req.width > max_width)				max_width = req.width;									if (LADSPA_IS_HINT_SAMPLE_RATE(hints[k].HintDescriptor)) {				fact = out_SR;			} else {				fact = 1.0f;			}						if (LADSPA_IS_HINT_BOUNDED_BELOW(hints[k].HintDescriptor)) {				min = hints[k].LowerBound * fact;			} else {				min = -10000.0f;			}						if (LADSPA_IS_HINT_BOUNDED_ABOVE(hints[k].HintDescriptor)) {				max = hints[k].UpperBound * fact;			} else {				max = 10000.0f;			}						/* infinity */			if (10000.0f <= max - min) {				dp = 1;				step = 5.0f;							/* 100.0 ... lots */			} else if (100.0f < max - min) {				dp = 0;				step = 1.0f;							/* 10.0 ... 100.0 */			} else if (10.0f < max - min) {				dp = 1;				step = 0.1f;							/* 1.0 ... 10.0 */			} else if (1.0f < max - min) {				dp = 2;				step = 0.01f;							/* 0.0 ... 1.0 */			} else {				dp = 3;				step = 0.001f;			}						if (LADSPA_IS_HINT_INTEGER(hints[k].HintDescriptor)) {				dp = 0;				if (step < 1.0f) step = 1.0f;			}						if (LADSPA_IS_HINT_DEFAULT_MINIMUM(hints[k].HintDescriptor)) {				default_val = min;			} else if (LADSPA_IS_HINT_DEFAULT_LOW(hints[k].HintDescriptor)) {				default_val = min * 0.75f + max * 0.25f;			} else if (LADSPA_IS_HINT_DEFAULT_MIDDLE(hints[k].HintDescriptor)) {				default_val = min * 0.5f + max * 0.5f;			} else if (LADSPA_IS_HINT_DEFAULT_HIGH(hints[k].HintDescriptor)) {				default_val = min * 0.25f + max * 0.75f;			} else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(hints[k].HintDescriptor)) {				default_val = max;			} else if (LADSPA_IS_HINT_DEFAULT_0(hints[k].HintDescriptor)) {				default_val = 0.0f;			} else if (LADSPA_IS_HINT_DEFAULT_1(hints[k].HintDescriptor)) {				default_val = 1.0f;			} else if (LADSPA_IS_HINT_DEFAULT_100(hints[k].HintDescriptor)) {				default_val = 100.0f;			} else if (LADSPA_IS_HINT_DEFAULT_440(hints[k].HintDescriptor)) {				default_val = 440.0f;			} else if (LADSPA_IS_HINT_INTEGER(hints[k].HintDescriptor)) {				default_val = min;			} else if (max >= 0.0f && min <= 0.0f) {				default_val = 0.0f;			} else {				default_val = min * 0.5f + max * 0.5f;			}						if (instance->is_restored) {				start = instance->knobs[k];			} else {				instance->knobs[k] = start = default_val;			}			defs = lrdf_get_scale_values(plugin->UniqueID, k);			if ((defs) && (defs->count > 0)) { /* have scale values */                                combo = gtk_combo_box_new_text (); 				gtk_widget_set_name(combo, "plugin_combo");				glist = NULL;				gtk_table_attach(GTK_TABLE(table), combo, 1, 3, i, i+1,						 GTK_FILL | GTK_EXPAND, GTK_FILL, 2, 2);				for (j = 0; j < defs->count; j++) {	                                gtk_combo_box_append_text (GTK_COMBO_BOX (combo), defs->items[j].label);				}				gtk_widget_size_request(combo, &req);				req.height += 2;				if (req.height > max_height)					max_height = req.height;				/* now if we have an option that corresponds to 'start', choose that. */				for (j = 0; j < defs->count; j++) {					if (defs->items[j].value == start) {	                                        gtk_combo_box_set_active (GTK_COMBO_BOX (combo), start);						break;					}				}				if ((optdata = malloc(sizeof(optdata_t))) == NULL) {					fprintf(stderr, "plugin.c: build_plugin_window(): malloc error\n");					return;				}				trashlist_add(instance->trashlist, optdata);				optdata->instance = instance;				optdata->index = k;                                g_signal_connect(combo, "changed", G_CALLBACK(changed_combo), optdata);			} else { /* no scale values */				adjustment = gtk_adjustment_new(start, min, max, step, step * 50.0, 0.0);				instance->adjustments[k] = GTK_ADJUSTMENT(adjustment);				g_signal_connect(G_OBJECT(adjustment), "value_changed",						 G_CALLBACK(plugin_value_changed), &(instance->knobs[k]));								if (!LADSPA_IS_HINT_INTEGER(hints[k].HintDescriptor)) {					widget = gtk_hscale_new(GTK_ADJUSTMENT(adjustment));					gtk_widget_set_name(widget, "plugin_scale");					gtk_widget_set_size_request(widget, 200, -1);					gtk_scale_set_digits(GTK_SCALE(widget), dp);					gtk_table_attach(GTK_TABLE(table), widget, 1, 2, i, i+1,							 GTK_FILL | GTK_EXPAND, GTK_FILL, 2, 2);					gtk_scale_set_draw_value(GTK_SCALE(widget), FALSE);					gtk_widget_size_request(widget, &req);					req.height += 2;					if (req.height > max_height)						max_height = req.height;					if ((btnpdata = malloc(sizeof(btnpdata_t))) == NULL) {						fprintf(stderr,							"plugin.c: build_plugin_window(): malloc error\n");						return;					}					trashlist_add(instance->trashlist, btnpdata);					btnpdata->instance = instance;					btnpdata->start = default_val;					g_signal_connect(G_OBJECT(widget), "button_press_event",							 G_CALLBACK(plugin_scale_btn_pressed),							 (gpointer) btnpdata);				}								widget = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), step, dp);				gtk_widget_set_size_request(widget, 70, -1);				gtk_table_attach(GTK_TABLE(table), widget, 2, 3, i, i+1,						 GTK_FILL, GTK_FILL, 2, 2);				gtk_widget_size_request(widget, &req);				req.height += 2;				if (req.height > max_height)					max_height = req.height;			}			height += max_height;			++i;			lrdf_free_setting_values(defs);		}	}	if (((n_toggled) || (n_untoggled)) && (n_outctl)) {		hseparator = gtk_hseparator_new();		gtk_table_attach(GTK_TABLE(table), hseparator, 0, 3, i, i+1, GTK_FILL, GTK_FILL, 2, 2);		++i;		gtk_widget_size_request(hseparator, &req);		height += req.height + 5;	}	if (n_outctl) {		for (k = 0; k < MAX_KNOBS && k < plugin->PortCount; ++k) {			int max_height = 0;			if (!LADSPA_IS_PORT_CONTROL(plugin->PortDescriptors[k]))				continue;			if (LADSPA_IS_PORT_INPUT(plugin->PortDescriptors[k]))				continue;			if (LADSPA_IS_HINT_TOGGLED(hints[k].HintDescriptor))				continue;						widget = gtk_label_new(plugin->PortNames[k]);                        hbox = gtk_hbox_new(FALSE, 0);                        gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);			gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, i, i+1,					 GTK_FILL, GTK_FILL | GTK_EXPAND, 2, 2);			gtk_widget_size_request(widget, &req);			req.height += 2;			if (req.width > max_width)				max_width = req.width;			if (req.height > max_height)				max_height = req.height;			if (LADSPA_IS_HINT_SAMPLE_RATE(hints[k].HintDescriptor)) {				fact = out_SR;			} else {				fact = 1.0f;			}						if (LADSPA_IS_HINT_BOUNDED_BELOW(hints[k].HintDescriptor)) {				min = hints[k].LowerBound * fact;			} else {				min = -10000.0f;			}						if (LADSPA_IS_HINT_BOUNDED_ABOVE(hints[k].HintDescriptor)) {				max = hints[k].UpperBound * fact;			} else {				max = 10000.0f;			}						/* infinity */			if (10000.0f <= max - min) {				dp = 1;				step = 5.0f;							/* 100.0 ... lots */			} else if (100.0f < max - min) {				dp = 0;				step = 1.0f;							/* 10.0 ... 100.0 */			} else if (10.0f < max - min) {				dp = 1;				step = 0.1f;							/* 1.0 ... 10.0 */			} else if (1.0f < max - min) {				dp = 2;				step = 0.01f;							/* 0.0 ... 1.0 */			} else {				dp = 3;				step = 0.001f;			}						if (LADSPA_IS_HINT_INTEGER(hints[k].HintDescriptor)) {				dp = 0;				if (step < 1.0f) step = 1.0f;			}						if (LADSPA_IS_HINT_DEFAULT_MINIMUM(hints[k].HintDescriptor)) {				start = min;			} else if (LADSPA_IS_HINT_DEFAULT_LOW(hints[k].HintDescriptor)) {				start = min * 0.75f + max * 0.25f;			} else if (LADSPA_IS_HINT_DEFAULT_MIDDLE(hints[k].HintDescriptor)) {				start = min * 0.5f + max * 0.5f;			} else if (LADSPA_IS_HINT_DEFAULT_HIGH(hints[k].HintDescriptor)) {				start = min * 0.25f + max * 0.75f;			} else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(hints[k].HintDescriptor)) {				start = max;			} else if (LADSPA_IS_HINT_DEFAULT_0(hints[k].HintDescriptor)) {				start = 0.0f;			} else if (LADSPA_IS_HINT_DEFAULT_1(hints[k].HintDescriptor)) {				start = 1.0f;			} else if (LADSPA_IS_HINT_DEFAULT_100(hints[k].HintDescriptor)) {				start = 100.0f;			} else if (LADSPA_IS_HINT_DEFAULT_440(hints[k].HintDescriptor)) {				start = 440.0f;			} else if (LADSPA_IS_HINT_INTEGER(hints[k].HintDescriptor)) {				start = min;			} else if (max >= 0.0f && min <= 0.0f) {				start = 0.0f;			} else {				start = min * 0.5f + max * 0.5f;			}						instance->knobs[k] = start;						adjustment = gtk_adjustment_new(start, min, max, step, step * 50.0, 0.0);			instance->adjustments[k] = GTK_ADJUSTMENT(adjustment);						if (!LADSPA_IS_HINT_INTEGER(hints[k].HintDescriptor)) {				widget = gtk_hscale_new(GTK_ADJUSTMENT(adjustment));				gtk_widget_set_name(widget, "plugin_scale");				gtk_widget_set_size_request(widget, 200, -1);				gtk_scale_set_digits(GTK_SCALE(widget), dp);				gtk_table_attach(GTK_TABLE(table), widget, 1, 2, i, i+1,						 GTK_FILL | GTK_EXPAND, GTK_FILL, 2, 2);				gtk_scale_set_draw_value(GTK_SCALE(widget), FALSE);				gtk_widget_set_sensitive(widget, FALSE);				gtk_widget_size_request(widget, &req);				req.height += 2;				if (req.height > max_height)					max_height = req.height;			}			widget = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), step, dp);			gtk_widget_set_size_request(widget, 70, -1);			gtk_widget_set_sensitive(widget, FALSE);			gtk_table_attach(GTK_TABLE(table), widget, 2, 3, i, i+1,					 GTK_FILL, GTK_FILL, 2, 2);			gtk_widget_size_request(widget, &req);			req.height += 2;			if (req.height > max_height)				max_height = req.height;			height += max_height;			++i;		}	}	if (((n_toggled) || (n_untoggled) || (n_outctl)) && (n_outlat)) {		hseparator = gtk_hseparator_new();		gtk_table_attach(GTK_TABLE(table), hseparator, 0, 3, i, i+1, GTK_FILL, GTK_FILL, 2, 2);		++i;		gtk_widget_size_request(hseparator, &req);		height += req.height + 5;	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -