📄 gdyntext_ui.c
字号:
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 + -