📄 gdyntext_ui.c
字号:
/* * GIMP Dynamic Text -- This is a plug-in for The GIMP 1.0 * Copyright (C) 1998,1999,2000 Marco Lamberto <lm@geocities.com> * Web page: http://www.geocities.com/Tokyo/1474/gimp/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * $Id: gdyntext_ui.c,v 1.33 2000/06/04 13:44:10 lm Exp lm $ */#include <sys/types.h>#include <sys/stat.h>#include <stdio.h>#include <string.h>#include <gtk/gtk.h>#include "gdyntext.h"#include "message_window.h"#include "charmap_window.h"#include "font_selection.h"#include "graphics/antialias.xpm"#include "graphics/align_left.xpm"#include "graphics/align_center.xpm"#include "graphics/align_right.xpm"#include "graphics/charmap.xpm"#include "graphics/font_preview.xpm"#include "graphics/font_preview_clear.xpm"#include "graphics/font_preview_default.xpm"#include "graphics/gdyntext_logo.xpm"#include "graphics/new_layer.xpm"#include "graphics/text_load.xpm"#include "graphics/layer_align_0.xpm"#include "graphics/layer_align_1.xpm"#include "graphics/layer_align_2.xpm"#include "graphics/layer_align_3.xpm"#include "graphics/layer_align_4.xpm"#include "graphics/layer_align_5.xpm"#include "graphics/layer_align_6.xpm"#include "graphics/layer_align_7.xpm"#include "graphics/layer_align_8.xpm"#include "graphics/layer_align_9.xpm"typedef struct { GtkWidget *window; GtkWidget *font_selection; GtkWidget *font_rotation; GtkWidget *line_spacing; GtkWidget *font_color; GtkWidget *textarea; GtkWidget *font_preview; GtkWidget *hbox_fp; GtkWidget *charmap_window_toggle; GtkWidget *new_layer_toggle; GtkWidget *statusbar; gint layer_alignment; gboolean font_preview_enabled; gboolean ok_pressed;} GdtMainWindow;GtkWidget *create_about_dialog(void);GtkWidget *create_color_selection_dialog(void);GdtMainWindow *create_main_window(GdtMainWindow **main_window, GdtVals *data);GtkWidget *create_message_window(GtkWidget **mw);void set_gdt_vals(GdtVals *data);void gtk_text_set_font(GtkText *text, GdkFont *font);void load_text(GtkWidget *widget, gpointer data);void on_about_dialog_close(GtkWidget *widget, gpointer data);void on_about_dialog_destroy(GtkWidget *widget, gpointer data);void on_button_toggled(GtkWidget *widget, gpointer data);void on_charmap_window_insert(GtkWidget *widget, gpointer data);void on_charmap_button_toggled(GtkWidget *widget, gpointer data);void on_color_selection_dialog_cancel_clicked(GtkWidget *widget, gpointer data);void on_color_selection_dialog_ok_clicked(GtkWidget *widget, gpointer data);void on_font_preview_button_clicked(GtkWidget *widget, gpointer data);void on_font_preview_toggled(GtkWidget *widget, gpointer data);void on_font_selection_changed(GtkWidget *widget, gpointer data);void on_load_text_clicked(GtkWidget *widget, gpointer data);void on_layer_align_change(GtkWidget *widget, gpointer data);void on_main_window_about_clicked(GtkWidget *widget, gpointer data);void on_main_window_align_c_clicked(GtkWidget *widget, gpointer data);void on_main_window_align_l_clicked(GtkWidget *widget, gpointer data);void on_main_window_align_r_clicked(GtkWidget *widget, gpointer data);void on_main_window_apply_clicked(GtkWidget *widget, gpointer data);void on_main_window_cancel_clicked(GtkWidget *widget, gpointer data);void on_main_window_font_color_clicked(GtkWidget *widget, gpointer data);void on_main_window_ok_press_event(GtkWidget *widget, GdkEvent *event, gpointer data);void on_main_window_ok_clicked(GtkWidget *widget, gpointer data);void on_window_close(GtkWidget *widget, gpointer data);void on_window_destroy(GtkWidget *widget, gpointer data);void toggle_button_update(GtkWidget *widget, GtkWidget *window);void update_font_color_preview(void);GdtMainWindow *main_window = NULL;GtkWidget *message_window = NULL;GtkWidget *charmap_window = NULL;GtkWidget *color_selection_dialog = NULL;GtkWidget *about_dialog = NULL;GtkWidget *load_file_selection = NULL;gdouble col[3];#define COLOR_PREVIEW_WIDTH 20#define COLOR_PREVIEW_HEIGHT 20#define DEFAULT_FONT_PREVIEW_TEXT "ABCDEFGHIJKLMNOPQRSTUVWXYZ"\ "abcdefghijklmnopqrstuvwxyz"\ "0123456789"#define TO_RGB(val) ( \ ((gint32)(val[0] * 255.0) << 16) + \ ((gint32)(val[1] * 255.0) << 8) + \ (gint32)(val[2] * 255.0) \)GtkWidget *create_message_window(GtkWidget **mw){ *mw = message_window_new(_("GDynText "GDYNTEXT_VERSION": Messages Window")); gtk_widget_set_usize(*mw, 430, 170); gtk_window_position(GTK_WINDOW(*mw), GTK_WIN_POS_CENTER); gtk_signal_connect(GTK_OBJECT(*mw), "destroy", GTK_SIGNAL_FUNC(on_window_destroy), mw); gtk_signal_connect(GTK_OBJECT(MESSAGE_WINDOW(*mw)->dismiss_button), "clicked", GTK_SIGNAL_FUNC(on_window_close), *mw); return *mw;}GtkWidget* create_about_dialog(void){ GtkWidget *window; GtkWidget *frame; GtkWidget *button; GtkWidget *label; GdkPixmap *glade_pixmap; GdkBitmap *glade_mask; GtkWidget *pixmap; GtkWidget *hbbox1; GtkWidget *hbox1; GtkWidget *vbox1; window = gtk_window_new(GTK_WINDOW_DIALOG); gtk_container_border_width(GTK_CONTAINER(window), 0); gtk_window_set_title(GTK_WINDOW(window), _("GDynText "GDYNTEXT_VERSION": About ...")); gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE); gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(on_about_dialog_destroy), NULL); /* gtk_widget_realize(window); gdk_window_set_decorations(window->window, !GDK_DECOR_ALL); */ hbox1 = gtk_hbox_new(FALSE, 0); gtk_widget_show(hbox1); gtk_container_add(GTK_CONTAINER(window), hbox1); gtk_widget_realize(window); glade_pixmap = gdk_pixmap_create_from_xpm_d(window->window, &glade_mask, &window->style->bg[GTK_STATE_NORMAL], gdyntext_logo_xpm); pixmap = gtk_pixmap_new(glade_pixmap, glade_mask); gdk_pixmap_unref(glade_pixmap); gdk_bitmap_unref(glade_mask); gtk_widget_show(pixmap); gtk_box_pack_start(GTK_BOX(hbox1), pixmap, FALSE, TRUE, 0); vbox1 = gtk_vbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(hbox1), vbox1, TRUE, TRUE, 4); gtk_widget_show(vbox1); frame = gtk_frame_new(NULL); gtk_box_pack_start(GTK_BOX(vbox1), frame, TRUE, TRUE, 4); gtk_widget_show(frame); label = gtk_label_new(_( "GIMP Dynamic Text "GDYNTEXT_VERSION"\n" "Copyright (C) 1998,1999,2000 Marco Lamberto\n" "E-mail: lm@geocities.com\n" "Web page: "GDYNTEXT_WEB_PAGE"")); gtk_widget_show(label); gtk_container_add(GTK_CONTAINER(frame), label); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); gtk_misc_set_padding(GTK_MISC(label), 5, 5); hbbox1 = gtk_hbutton_box_new(); gtk_box_pack_start(GTK_BOX(vbox1), hbbox1, FALSE, FALSE, 4); gtk_button_box_set_layout(GTK_BUTTON_BOX(hbbox1), GTK_BUTTONBOX_END); gtk_widget_show(hbbox1); button = gtk_button_new_with_label(_("Ok")); gtk_widget_show(button); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_end(GTK_BOX(hbbox1), button, FALSE, TRUE, 4); gtk_widget_grab_default(button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(on_about_dialog_close), NULL); return window;}GtkWidget* create_color_selection_dialog(void){ GtkWidget *colseldlg; GtkWidget *ok_button1; GtkWidget *cancel_button1; colseldlg = gtk_color_selection_dialog_new(_("GDynText "GDYNTEXT_VERSION": Select Color")); gtk_container_border_width(GTK_CONTAINER(colseldlg), 4); gtk_signal_connect(GTK_OBJECT(&(GTK_COLOR_SELECTION_DIALOG(colseldlg)->window)), "destroy", GTK_SIGNAL_FUNC(on_color_selection_dialog_cancel_clicked), &color_selection_dialog); ok_button1 = GTK_COLOR_SELECTION_DIALOG(colseldlg)->ok_button; gtk_widget_show(ok_button1); GTK_WIDGET_SET_FLAGS(ok_button1, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(ok_button1), "clicked", GTK_SIGNAL_FUNC(on_color_selection_dialog_ok_clicked), NULL); cancel_button1 = GTK_COLOR_SELECTION_DIALOG(colseldlg)->cancel_button; gtk_widget_show(cancel_button1); GTK_WIDGET_SET_FLAGS(cancel_button1, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(cancel_button1), "clicked", GTK_SIGNAL_FUNC(on_color_selection_dialog_cancel_clicked), NULL); gtk_widget_hide(GTK_COLOR_SELECTION_DIALOG(colseldlg)->help_button); return colseldlg;}GdtMainWindow *create_main_window(GdtMainWindow **main_window, GdtVals *data){ GdtMainWindow *mw; GtkObject *font_size_adj; GtkObject *line_spacing_adj; GtkTooltips *tooltips; GtkWidget *handlebox; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *hbox1; GtkWidget *hbox2; GtkWidget *hbox3; GtkWidget *hbox4; GtkWidget *hbbox1; GtkWidget *hbbox2; GtkWidget *label; GtkWidget *toolbar; GtkWidget *button_about; GtkWidget *button_ok; GtkWidget *button_cancel; GtkWidget *button_apply; GtkWidget *font_preview_toggle; GtkWidget *vscrollbar; GtkWidget *rbutt; GtkWidget *telem; GtkWidget *gtk_icon; GtkWidget *optmenu; GtkWidget *menu; GtkWidget *item; GdkPixmap *icon; GdkBitmap *mask; GdkColor *transparent = NULL; GSList *group; gint i; gchar *lalign_menu[] = { (gchar *)layer_align_0_xpm, _("none"), (gchar *)layer_align_1_xpm, _("bottom-left"), (gchar *)layer_align_2_xpm, _("bottom-center"), (gchar *)layer_align_3_xpm, _("bottom-right"), (gchar *)layer_align_4_xpm, _("middle-left"), (gchar *)layer_align_5_xpm, _("center"), (gchar *)layer_align_6_xpm, _("middle-right"), (gchar *)layer_align_7_xpm, _("top-left"), (gchar *)layer_align_8_xpm, _("top-center"), (gchar *)layer_align_9_xpm, _("top-right"), NULL, NULL, }; *main_window = mw = g_new0(GdtMainWindow, 1); mw->font_preview_enabled = FALSE; mw->ok_pressed = FALSE; tooltips = gtk_tooltips_new(); mw->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(mw->window), "GDynText "GDYNTEXT_VERSION); gtk_window_set_policy(GTK_WINDOW(mw->window), TRUE, TRUE, FALSE); gtk_widget_set_usize(mw->window, 550, 400); gtk_container_border_width(GTK_CONTAINER(mw->window), 0); gtk_signal_connect(GTK_OBJECT(mw->window), "destroy", GTK_SIGNAL_FUNC(on_main_window_cancel_clicked), &mw->ok_pressed); gtk_widget_realize(mw->window); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(mw->window), vbox); gtk_widget_show(vbox); 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); toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); gtk_toolbar_set_space_size(GTK_TOOLBAR(toolbar), 8); gtk_toolbar_set_button_relief(GTK_TOOLBAR(toolbar), GTK_RELIEF_NONE); gtk_box_pack_start(GTK_BOX(hbox1), toolbar, FALSE, FALSE, 2); gtk_widget_show(toolbar); /* NEW LAYER Toggle */ icon = gdk_pixmap_create_from_xpm_d(mw->window->window, &mask, transparent, new_layer_xpm); gtk_icon = gtk_pixmap_new(icon, mask); mw->new_layer_toggle = telem = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_CHILD_TOGGLEBUTTON, NULL, NULL, _("Toggle creation of a new layer"), NULL, gtk_icon, NULL, NULL); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(telem), data->new_layer); gtk_signal_connect(GTK_OBJECT(telem), "toggled", GTK_SIGNAL_FUNC(on_button_toggled), &data->new_layer); gtk_widget_set_sensitive(telem, !data->new_layer); gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); /* TEXT LOAD */ icon = gdk_pixmap_create_from_xpm_d(mw->window->window, &mask, transparent, text_load_xpm); gtk_icon = gtk_pixmap_new(icon, mask); telem = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_CHILD_BUTTON, NULL, NULL, _("Load text from file"), NULL, gtk_icon, NULL, NULL); gtk_signal_connect(GTK_OBJECT(telem), "clicked", GTK_SIGNAL_FUNC(on_load_text_clicked), NULL); gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); /* FONT COLOR */ mw->font_color = gtk_preview_new(GTK_PREVIEW_COLOR); gtk_preview_size(GTK_PREVIEW(mw->font_color), COLOR_PREVIEW_WIDTH, COLOR_PREVIEW_HEIGHT); col[0] = (gdouble)((data->color & 0xff0000) >> 16) / 255.0; col[1] = (gdouble)((data->color & 0xff00) >> 8) / 255.0; col[2] = (gdouble)(data->color & 0xff) / 255.0; update_font_color_preview(); gtk_widget_show(mw->font_color); gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_CHILD_BUTTON, NULL,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -