📄 gdyntext_ui.c
字号:
NULL, _("Text color"), NULL, mw->font_color, GTK_SIGNAL_FUNC(on_main_window_font_color_clicked), NULL); gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); /* ANTIALIASING Toggle */ icon = gdk_pixmap_create_from_xpm_d(mw->window->window, &mask, transparent, antialias_xpm); gtk_icon = gtk_pixmap_new(icon, mask); telem = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_CHILD_TOGGLEBUTTON, NULL, NULL, _("Toggle anti-aliased text"), NULL, gtk_icon, NULL, NULL); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(telem), data->antialias); gtk_signal_connect(GTK_OBJECT(telem), "clicked", GTK_SIGNAL_FUNC(on_button_toggled), &data->antialias); gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); /* LEFT Align */ icon = gdk_pixmap_create_from_xpm_d(mw->window->window, &mask, &toolbar->style->bg[GTK_STATE_NORMAL], align_left_xpm); gtk_icon = gtk_pixmap_new(icon, mask); rbutt = gtk_radio_button_new(NULL); telem = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_CHILD_RADIOBUTTON, rbutt, NULL, _("Left aligned text"), NULL, gtk_icon, GTK_SIGNAL_FUNC(on_main_window_align_l_clicked), &data->alignment); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(telem), data->alignment == LEFT); /* CENTER Align */ icon = gdk_pixmap_create_from_xpm_d(mw->window->window, &mask, &toolbar->style->bg[GTK_STATE_NORMAL], align_center_xpm); gtk_icon = gtk_pixmap_new(icon, mask); group = gtk_radio_button_group(GTK_RADIO_BUTTON(rbutt)); rbutt = gtk_radio_button_new(group); telem = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_CHILD_RADIOBUTTON, rbutt, NULL, _("Centered text"), NULL, gtk_icon, GTK_SIGNAL_FUNC(on_main_window_align_c_clicked), &data->alignment); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(telem), data->alignment == CENTER); /* RIGHT Align */ icon = gdk_pixmap_create_from_xpm_d(mw->window->window, &mask, &toolbar->style->bg[GTK_STATE_NORMAL], align_right_xpm); gtk_icon = gtk_pixmap_new(icon, mask); group = gtk_radio_button_group(GTK_RADIO_BUTTON(rbutt)); rbutt = gtk_radio_button_new(group); telem = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_CHILD_RADIOBUTTON, rbutt, NULL, _("Right aligned text"), NULL, gtk_icon, GTK_SIGNAL_FUNC(on_main_window_align_r_clicked), &data->alignment); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(telem), data->alignment == RIGHT); gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); /* FONT Preview Toggle */ icon = gdk_pixmap_create_from_xpm_d(mw->window->window, &mask, transparent, font_preview_xpm); gtk_icon = gtk_pixmap_new(icon, mask); font_preview_toggle = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_CHILD_TOGGLEBUTTON, NULL, NULL, _("Toggle text font preview"), NULL, gtk_icon, NULL, NULL); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(font_preview_toggle), FALSE); gtk_signal_connect(GTK_OBJECT(font_preview_toggle), "toggled", GTK_SIGNAL_FUNC(on_font_preview_toggled), NULL); gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); /* CHARMAP Window Toggle */ icon = gdk_pixmap_create_from_xpm_d(mw->window->window, &mask, transparent, charmap_xpm); gtk_icon = gtk_pixmap_new(icon, mask); mw->charmap_window_toggle = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_CHILD_TOGGLEBUTTON, NULL, NULL, _("Toggle CharMap window"), NULL, gtk_icon, GTK_SIGNAL_FUNC(on_charmap_button_toggled), &mw->textarea); handlebox = gtk_handle_box_new(); gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(handlebox), 4); gtk_widget_show(handlebox); hbox1 = gtk_hbox_new(FALSE, 0); gtk_widget_show(hbox1); gtk_container_add(GTK_CONTAINER(handlebox), hbox1); /* Layer Alignment */ label = gtk_label_new(_("Layer\nAlignment")); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, TRUE, 3); gtk_widget_show(label); optmenu = gtk_option_menu_new(); gtk_box_pack_start(GTK_BOX(hbox1), optmenu, FALSE, TRUE, 3); gtk_widget_show(optmenu); gtk_tooltips_set_tip(tooltips, optmenu, _("Set layer alignment"), ""); menu = gtk_menu_new(); for (i = 0; lalign_menu[i] != NULL; i += 2) { item = gtk_menu_item_new(); gtk_widget_show(item); gtk_menu_append(GTK_MENU(menu), item); gtk_signal_connect(GTK_OBJECT(item), "activate", GTK_SIGNAL_FUNC(on_layer_align_change), (void *)(i >> 1)); if ((i >> 1) == data->layer_alignment) mw->layer_alignment = data->layer_alignment; hbox = gtk_hbox_new(FALSE, 0); gtk_widget_show(hbox); gtk_container_add(GTK_CONTAINER(item), hbox); icon = gdk_pixmap_create_from_xpm_d(mw->window->window, &mask, transparent, (gchar **)lalign_menu[i]); gtk_icon = gtk_pixmap_new(icon, mask); gtk_widget_show(gtk_icon); gtk_box_pack_start(GTK_BOX(hbox), gtk_icon, FALSE, FALSE, 2); label = gtk_label_new(lalign_menu[i + 1]); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); } gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu); gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), mw->layer_alignment); label = gtk_label_new(_("Line\nSpacing")); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, TRUE, 3); gtk_widget_show(label); line_spacing_adj = gtk_adjustment_new(0, -1000, 1000, 1, 15, 15); mw->line_spacing = gtk_spin_button_new(GTK_ADJUSTMENT(line_spacing_adj), 1, 0); gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(mw->line_spacing), TRUE); gtk_spin_button_set_update_policy(GTK_SPIN_BUTTON(mw->line_spacing), GTK_UPDATE_ALWAYS); gtk_spin_button_set_value(GTK_SPIN_BUTTON(mw->line_spacing), data->line_spacing); gtk_tooltips_set_tip(tooltips, mw->line_spacing, _("Set line spacing"), ""); gtk_box_pack_start(GTK_BOX(hbox1), mw->line_spacing, FALSE, TRUE, 2); gtk_widget_show(mw->line_spacing); label = gtk_label_new(_("Rotation")); gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, TRUE, 3); gtk_widget_show(label); font_size_adj = gtk_adjustment_new(0, -360, 360, 1, 15, 15); mw->font_rotation = gtk_spin_button_new(GTK_ADJUSTMENT(font_size_adj), 1, 0); gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(mw->font_rotation), TRUE); gtk_spin_button_set_update_policy(GTK_SPIN_BUTTON(mw->font_rotation), GTK_UPDATE_ALWAYS); gtk_spin_button_set_value(GTK_SPIN_BUTTON(mw->font_rotation), data->rotation); gtk_tooltips_set_tip(tooltips, mw->font_rotation, _("Set text rotation (degrees)"), ""); gtk_box_pack_start(GTK_BOX(hbox1), mw->font_rotation, FALSE, TRUE, 2); gtk_widget_show(mw->font_rotation); /* Font Selection */ handlebox = gtk_handle_box_new(); gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(handlebox), 4); gtk_widget_show(handlebox); hbox2 = gtk_hbox_new(FALSE, 0); gtk_widget_show(hbox2); gtk_container_add(GTK_CONTAINER(handlebox), hbox2); mw->font_selection = font_selection_new(); gtk_signal_connect(GTK_OBJECT(mw->font_selection), "font_changed", GTK_SIGNAL_FUNC(on_font_selection_changed), NULL); gtk_box_pack_start(GTK_BOX(hbox2), mw->font_selection, TRUE, TRUE, 2); gtk_widget_show(mw->font_selection); handlebox = gtk_handle_box_new(); gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(handlebox), 4); gtk_widget_show(handlebox); mw->hbox_fp = gtk_hbox_new(FALSE, 0); gtk_widget_show(mw->hbox_fp); gtk_container_add(GTK_CONTAINER(handlebox), mw->hbox_fp); gtk_widget_set_sensitive(mw->hbox_fp, FALSE); mw->font_preview = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(mw->font_preview), DEFAULT_FONT_PREVIEW_TEXT); gtk_tooltips_set_tip(tooltips, mw->font_preview, _("Editable text sample"), NULL); gtk_box_pack_start(GTK_BOX(mw->hbox_fp), mw->font_preview, TRUE, TRUE, 5); gtk_widget_show(mw->font_preview); toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); gtk_toolbar_set_space_size(GTK_TOOLBAR(toolbar), 0); gtk_toolbar_set_button_relief(GTK_TOOLBAR(toolbar), GTK_RELIEF_NONE); gtk_widget_show(toolbar); gtk_box_pack_start(GTK_BOX(mw->hbox_fp), toolbar, FALSE, TRUE, 0); icon = gdk_pixmap_create_from_xpm_d(mw->window->window, &mask, transparent, font_preview_clear_xpm); gtk_icon = gtk_pixmap_new(icon, mask); gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), NULL, _("Clear preview"), NULL, gtk_icon, GTK_SIGNAL_FUNC(on_font_preview_button_clicked), ""); icon = gdk_pixmap_create_from_xpm_d(mw->window->window, &mask, transparent, font_preview_default_xpm); gtk_icon = gtk_pixmap_new(icon, mask); gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), NULL, _("Preview default text sample"), NULL, gtk_icon, GTK_SIGNAL_FUNC(on_font_preview_button_clicked), DEFAULT_FONT_PREVIEW_TEXT); hbox4 = gtk_hbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(vbox), hbox4, TRUE, TRUE, 2); gtk_widget_show(hbox4); mw->textarea = gtk_text_new(NULL, NULL); gtk_text_set_editable(GTK_TEXT(mw->textarea), TRUE); gtk_box_pack_start(GTK_BOX(hbox4), mw->textarea, TRUE, TRUE, 0); gtk_widget_show(mw->textarea); gtk_widget_realize(mw->textarea); gtk_text_insert(GTK_TEXT(mw->textarea), NULL, NULL, NULL, data->text, -1); gtk_text_set_point(GTK_TEXT(mw->textarea), 0); vscrollbar = gtk_vscrollbar_new(GTK_TEXT(mw->textarea)->vadj); gtk_box_pack_start(GTK_BOX(hbox4), vscrollbar, FALSE, TRUE, 0); gtk_widget_show(vscrollbar); hbox3 = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox3, FALSE, TRUE, 2); gtk_widget_show(hbox3); hbbox1 = gtk_hbutton_box_new(); gtk_box_pack_start(GTK_BOX(hbox3), hbbox1, FALSE, FALSE, 2); gtk_button_box_set_layout(GTK_BUTTON_BOX(hbbox1), GTK_BUTTONBOX_START); gtk_widget_show(hbbox1); button_about = gtk_button_new_with_label(_("About")); GTK_WIDGET_SET_FLAGS(button_about, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(button_about), "clicked", GTK_SIGNAL_FUNC(on_main_window_about_clicked), NULL); gtk_box_pack_start(GTK_BOX(hbbox1), button_about, FALSE, FALSE, 0); gtk_widget_show(button_about); hbbox2 = gtk_hbutton_box_new(); gtk_box_pack_end(GTK_BOX(hbox3), hbbox2, FALSE, FALSE, 2); gtk_button_box_set_layout(GTK_BUTTON_BOX(hbbox2), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(hbbox2), 4); gtk_widget_show(hbbox2); button_ok = gtk_button_new_with_label(_("Ok")); GTK_WIDGET_SET_FLAGS(button_ok, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(button_ok), "button_press_event", GTK_SIGNAL_FUNC(on_main_window_ok_press_event), data); gtk_signal_connect(GTK_OBJECT(button_ok), "clicked", GTK_SIGNAL_FUNC(on_main_window_ok_clicked), &mw->ok_pressed); gtk_box_pack_start(GTK_BOX(hbbox2), button_ok, FALSE, FALSE, 0); gtk_widget_show(button_ok); gtk_tooltips_set_tip(tooltips, button_ok, _("Holding the Shift key while pressing this button will force GDynText " "in changing the layer name as done in GIMP 1.0."), NULL); button_apply = gtk_button_new_with_label(_("Apply")); GTK_WIDGET_SET_FLAGS(button_apply, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(button_apply), "clicked", GTK_SIGNAL_FUNC(on_main_window_apply_clicked), data); gtk_box_pack_start(GTK_BOX(hbbox2), button_apply, FALSE, FALSE, 0); gtk_widget_show(button_apply); button_cancel = gtk_button_new_with_label(_("Close")); GTK_WIDGET_SET_FLAGS(button_cancel, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(button_cancel), "clicked", GTK_SIGNAL_FUNC(on_main_window_cancel_clicked), &mw->ok_pressed); gtk_box_pack_start(GTK_BOX(hbbox2), button_cancel, FALSE, FALSE, 0); gtk_widget_show(button_cancel); mw->statusbar = gtk_statusbar_new(); gtk_box_pack_start(GTK_BOX(vbox), mw->statusbar, FALSE, TRUE, 0); gtk_widget_show(mw->statusbar); gtk_widget_grab_default(button_ok); /* setup font preview */ if (data->preview) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(font_preview_toggle), TRUE); gtk_toggle_button_toggled(GTK_TOGGLE_BUTTON(font_preview_toggle)); } font_selection_set_font_name(FONT_SELECTION(mw->font_selection), data->xlfd); return mw;}gboolean gdt_create_ui(GdtVals *data){ int argc = 1; char **argv;#ifndef DEBUG_UI guchar *color_cube;#endif argv = g_new0(gchar *, 1); argv[0] = g_strdup("gdyntext"); gtk_set_locale(); gtk_init(&argc, &argv); gtk_rc_init(); gtk_rc_parse(gimp_gtkrc()); gdk_set_use_xshm(gimp_use_xshm());#ifndef DEBUG_UI gtk_preview_set_gamma(gimp_gamma()); gtk_preview_set_install_cmap(gimp_install_cmap()); color_cube = gimp_color_cube(); gtk_preview_set_color_cube(color_cube[0], color_cube[1], color_cube[2], color_cube[3]);#else gtk_preview_set_install_cmap(TRUE);#endif gtk_widget_set_default_visual(gtk_preview_get_visual()); gtk_widget_set_default_colormap(gtk_preview_get_cmap()); create_message_window(&message_window); /* if (data->messages) { GList *l; for (l = g_list_first(data->messages); l; l = l->next) message_window_append(MESSAGE_WINDOW(message_window), (char *)l->data); } */ main_window = create_main_window(&main_window, data); if (data->messages) { GList *l; for (l = g_list_first(data->messages); l; l = l->next) gtk_statusbar_push(GTK_STATUSBAR(main_window->statusbar), 1, (char *)l->data); } gtk_widget_show(main_window->window); if (MESSAGE_WINDOW(message_window)->contains_messages) gtk_widget_show(message_window); gtk_main(); if (main_window->ok_pressed) set_gdt_vals(data); return main_window->ok_pressed;}void set_gdt_vals(GdtVals *data) { data->preview = main_window->font_preview_enabled; strncpy(data->xlfd, font_selection_get_font_name(FONT_SELECTION(main_window->font_selection)), sizeof(data->xlfd)); data->rotation = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(main_window->font_rotation)); data->line_spacing = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(main_window->line_spacing)); data->layer_alignment = main_window->layer_alignment; strncpy(data->text, gtk_editable_get_chars( GTK_EDITABLE(main_window->textarea), 0, -1), sizeof(data->text)); data->color = TO_RGB(col);}void update_font_color_preview(void){ guchar row[COLOR_PREVIEW_WIDTH * 3]; guchar *p; int i; memset(row, 0, sizeof(row)); gtk_preview_draw_row(GTK_PREVIEW(main_window->font_color), row, 0, 0, COLOR_PREVIEW_WIDTH); gtk_preview_draw_row(GTK_PREVIEW(main_window->font_color), row, 0, COLOR_PREVIEW_HEIGHT, COLOR_PREVIEW_WIDTH); p = row; p[0] = p[1] = p[2] = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -