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

📄 gdyntext_ui.c

📁 GIMP Dynamic Text是GIMP的插件程序
💻 C
📖 第 1 页 / 共 3 页
字号:
	p += 3;	for (i = 1; i < COLOR_PREVIEW_WIDTH - 1; i++) {		p[0] = col[0] * 255;		p[1] = col[1] * 255;		p[2] = col[2] * 255;		p += 3;	}	p[0] = p[1] = p[2] = 0;	for (i = 1; i < COLOR_PREVIEW_HEIGHT - 1; i++)		gtk_preview_draw_row(GTK_PREVIEW(main_window->font_color), row, 0, i, COLOR_PREVIEW_WIDTH);	gtk_widget_draw(main_window->font_color, NULL);	gdk_flush();}void on_main_window_apply_clicked(GtkWidget *widget, gpointer data0){	GdtVals *data = (GdtVals *)data0;	set_gdt_vals(data);	gdt_render_text_p(data, FALSE);	gimp_set_data("plug_in_gdyntext", data, sizeof(GdtVals));	if (data->new_layer) {		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(main_window->new_layer_toggle), FALSE); 		if (!GTK_WIDGET_SENSITIVE(main_window->new_layer_toggle))			gtk_widget_set_sensitive(main_window->new_layer_toggle, TRUE);	}}void on_main_window_cancel_clicked(GtkWidget *widget, gpointer data){	*(gboolean *)data = FALSE;	gtk_main_quit();}void on_main_window_ok_press_event(GtkWidget *widget, GdkEvent *event, gpointer data){	/* holding the SHIFT while clicking on OK will force layer name change */	((GdtVals *)data)->change_layer_name = (event->button.state & GDK_SHIFT_MASK);}void on_main_window_ok_clicked(GtkWidget *widget, gpointer data){	*(gboolean *)data = TRUE;	gtk_widget_hide(main_window->window);	if (charmap_window)		gtk_widget_hide(charmap_window);	if (message_window)		gtk_widget_hide(message_window);	if (color_selection_dialog)		gtk_widget_hide(color_selection_dialog);	if (about_dialog)		gtk_widget_hide(about_dialog);	gtk_main_quit();}void on_main_window_about_clicked(GtkWidget *widget, gpointer data){	if (about_dialog == NULL)		about_dialog = create_about_dialog();	gtk_widget_show(about_dialog);}void on_about_dialog_close(GtkWidget *widget, gpointer data){	gtk_widget_hide(about_dialog);}void on_about_dialog_destroy(GtkWidget *widget, gpointer data){	about_dialog = NULL;}void on_main_window_font_color_clicked(GtkWidget *widget, gpointer data){	if (color_selection_dialog == NULL)		color_selection_dialog = create_color_selection_dialog();	if (GTK_WIDGET_VISIBLE(color_selection_dialog))		return;	/* set color twice for current and old */	gtk_color_selection_set_color(GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(color_selection_dialog)->colorsel), col);	gtk_color_selection_set_color(GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(color_selection_dialog)->colorsel), col);	gtk_widget_show(color_selection_dialog);}void on_color_selection_dialog_ok_clicked(GtkWidget *widget, gpointer data){	gtk_widget_hide(color_selection_dialog);	gtk_color_selection_get_color(GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(color_selection_dialog)->colorsel), col);	update_font_color_preview();}void on_color_selection_dialog_cancel_clicked(GtkWidget *widget, gpointer data){	gtk_widget_hide(color_selection_dialog);	if ((GtkWidget *)data != NULL)	/* used for catching the destroy signal */		color_selection_dialog = NULL;}void on_main_window_align_l_clicked(GtkWidget *widget, gpointer data){	*(GdtAlign *)data = LEFT;}void on_main_window_align_c_clicked(GtkWidget *widget, gpointer data){	*(GdtAlign *)data = CENTER;}void on_main_window_align_r_clicked(GtkWidget *widget, gpointer data){	*(GdtAlign *)data = RIGHT;}void on_font_preview_toggled(GtkWidget *widget, gpointer data){	main_window->font_preview_enabled = GTK_TOGGLE_BUTTON(widget)->active;	on_font_selection_changed(widget, data);}void gtk_text_set_font(GtkText *text, GdkFont *font){	GtkStyle *style;	char *chars;	int pos;		gtk_text_freeze(text);	pos = GTK_EDITABLE(main_window->textarea)->current_pos;	chars = gtk_editable_get_chars(GTK_EDITABLE(text), 0, -1);	gtk_editable_delete_text(GTK_EDITABLE(text), 0, -1);	style = gtk_style_new();	if (font) {		gdk_font_unref(style->font);		style->font = font;		gdk_font_ref(style->font);	}	if (strlen(chars) > 0)		gtk_text_insert(text, style->font, NULL, NULL, chars, -1);	else {		gtk_text_insert(text, style->font, NULL, NULL, " ", -1);		gtk_editable_delete_text(GTK_EDITABLE(text), 0, -1);	}	gtk_widget_set_style(GTK_WIDGET(text), style);	gtk_text_set_point(GTK_TEXT(main_window->textarea), pos);	gtk_text_thaw(text);}void on_font_selection_changed(GtkWidget *widget, gpointer data){	GdkFont *font;	GtkStyle *style;	font = font_selection_get_font(FONT_SELECTION(main_window->font_selection));	/* update the font preview */	gtk_widget_set_sensitive(main_window->hbox_fp,		main_window->font_preview_enabled);		style = gtk_style_new();	if (main_window->font_preview_enabled && font != NULL) {		gdk_font_unref(style->font);		style->font = font;		gdk_font_ref(style->font);	} else {		font = style->font;	}	gtk_widget_set_style(main_window->font_preview, style);	gtk_entry_set_position(GTK_ENTRY(main_window->font_preview), 0);	/* update also the text area font */	gtk_text_set_font(GTK_TEXT(main_window->textarea), font);	if (charmap_window != NULL && GTK_WIDGET_VISIBLE(charmap_window))		charmap_set_font(CHARMAP(CHARMAP_WINDOW(charmap_window)->charmap), font);}void on_font_preview_button_clicked(GtkWidget *widget, gpointer data){	gtk_entry_set_text(GTK_ENTRY(main_window->font_preview), (char *)data);}void on_button_toggled(GtkWidget *widget, gpointer data){	*(gboolean *)data = !*(gboolean *)data;}void on_charmap_button_toggled(GtkWidget *widget, gpointer data){	if (GTK_TOGGLE_BUTTON(widget)->active) {		if (charmap_window == NULL) {			charmap_window = charmap_window_new(_("GDynText "GDYNTEXT_VERSION" : CharMap"));			gtk_widget_set_usize(charmap_window, 430, 270);			gtk_window_position(GTK_WINDOW(charmap_window), GTK_WIN_POS_CENTER);			gtk_signal_connect(GTK_OBJECT(charmap_window), "destroy", GTK_SIGNAL_FUNC(on_window_destroy), &charmap_window);			gtk_signal_connect(GTK_OBJECT(CHARMAP_WINDOW(charmap_window)->close_button), "clicked", GTK_SIGNAL_FUNC(on_window_close), charmap_window);			gtk_signal_connect(GTK_OBJECT(CHARMAP_WINDOW(charmap_window)->insert_button), "clicked", GTK_SIGNAL_FUNC(on_charmap_window_insert), charmap_window);		} else if (GTK_WIDGET_VISIBLE(charmap_window))			return;		charmap_set_font(CHARMAP(CHARMAP_WINDOW(charmap_window)->charmap),			font_selection_get_font(FONT_SELECTION(main_window->font_selection)));		gtk_widget_show(charmap_window);	} else if (charmap_window && GTK_WIDGET_VISIBLE(charmap_window))		gtk_widget_hide(charmap_window);}void toggle_button_update(GtkWidget *widget, GtkWidget *window){	gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(widget), 		window ? GTK_WIDGET_VISIBLE(window) : FALSE);}void on_window_close(GtkWidget *widget, gpointer data){	gtk_widget_hide((GtkWidget *)data);	toggle_button_update(main_window->charmap_window_toggle, charmap_window);}void on_window_destroy(GtkWidget *widget, gpointer data){	gtk_widget_hide(*(GtkWidget **)data);	*(GtkWidget **)data = NULL;	toggle_button_update(main_window->charmap_window_toggle, charmap_window);}void on_charmap_window_insert(GtkWidget *widget, gpointer data){	gchar *lab;	gtk_label_get(GTK_LABEL(((CharMapWindow *)data)->label), &lab);	lab[1] = 0;	gtk_text_set_point(GTK_TEXT(main_window->textarea), GTK_EDITABLE(main_window->textarea)->current_pos);	gtk_text_insert(GTK_TEXT(main_window->textarea), NULL, NULL, NULL, lab, -1);}void on_load_text_clicked(GtkWidget *widget, gpointer data){	if (!load_file_selection) {		load_file_selection = gtk_file_selection_new(_("GDynText "GDYNTEXT_VERSION": Load text"));		gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(load_file_selection));		gtk_signal_connect(GTK_OBJECT(load_file_selection), "destroy", GTK_SIGNAL_FUNC(on_window_destroy), &load_file_selection);		gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(load_file_selection)->cancel_button), "clicked",			GTK_SIGNAL_FUNC(on_window_close), load_file_selection);		gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(load_file_selection)->ok_button), "clicked",			GTK_SIGNAL_FUNC(load_text), load_file_selection);	}	if (GTK_WIDGET_VISIBLE(load_file_selection))		return;	gtk_widget_show(load_file_selection);}void on_layer_align_change(GtkWidget *widget, gpointer data){	main_window->layer_alignment = (gint)data;}void load_text(GtkWidget *widget, gpointer data){	FILE *is;	gchar *file;	gchar text[MAX_TEXT_SIZE];	gchar msg[1024];	struct stat sbuf;		if (!message_window)		create_message_window(&message_window);	if (!GTK_WIDGET_VISIBLE(message_window))		message_window_clear(MESSAGE_WINDOW(message_window));	file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(load_file_selection));	if ((is = fopen(file, "rt"))) {		gtk_widget_hide(load_file_selection);		memset(text, 0, MAX_TEXT_SIZE);		fread(text, MAX_TEXT_SIZE - 1, 1, is);		fclose(is);		if (!stat(file, &sbuf) && sbuf.st_size > MAX_TEXT_SIZE) {			g_snprintf(msg, sizeof(msg), _("Warning file \"%s\" is larger than the maximum allowed text length (%d).\n"), file, MAX_TEXT_SIZE);			message_window_append(MESSAGE_WINDOW(message_window), msg);		}		gtk_text_freeze(GTK_TEXT(main_window->textarea));		gtk_editable_delete_text(GTK_EDITABLE(main_window->textarea), 0, -1);		gtk_text_insert(GTK_TEXT(main_window->textarea), NULL, NULL, NULL, text, -1);		gtk_text_thaw(GTK_TEXT(main_window->textarea));	} else {		g_snprintf(msg, sizeof(msg), _("Error opening \"%s\"!\n"), file);		message_window_append(MESSAGE_WINDOW(message_window), msg);	}	if (MESSAGE_WINDOW(message_window)->contains_messages)		gtk_widget_show(message_window);}#ifdef DEBUG_UIint main(void){	GdtVals *data;	gboolean retval;		data = g_new0(GdtVals, 1);	strcpy(data->text, "Test\nLine 1\nLine 2");	strcpy(data->xlfd,		"-star division-helmet-medium-r-normal-*-*-200-*-*-p-*-adobe-fontspecific");	data->color						= 0xffdead;	data->antialias				= TRUE;	data->alignment				= CENTER;	data->rotation				= 45;	data->layer_alignment	= 4;	data->preview					= TRUE;	data->messages				= g_list_append(data->messages, "Test message!!!!");	printf("GDT UI Returns: %d\n", retval = gdt_create_ui(data));	printf(		"  XLFD:\n   '%s'\n"		"  COLOR:           '0x%06X'\n"		"  ANTIALIAS:       '%d'\n"		"  ALIGNMENT:       '%d'\n"		"  ROTATION:        '%d'\n"		"  LINE_SPACING:    '%d'\n"		"  LAYER_ALIGNMENT: '%d'\n"		"  CHANGE_LNAME:    '%d'\n",		data->xlfd, data->color, data->antialias, data->alignment,		data->rotation, data->line_spacing, data->layer_alignment,		data->change_layer_name);	g_free(data);	return retval;}#endif/* vim: set ts=2 sw=2 ai tw=79 nowrap: */

⌨️ 快捷键说明

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