/* Copyright (C) 2001-2002 Kenichi Suto * * 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. */ #include "defs.h" #include "global.h" #include "eb.h" #include "preference.h" static GtkWidget *fontsel_dlg; static GtkWidget *font_dlg; static GtkWidget *entry_normal; static GtkWidget *entry_bold; static GtkWidget *entry_italic; static GtkWidget *entry_super; static gint font_no; void load_font(){ gint height; font_normal = gdk_fontset_load (fontset_normal); font_bold = gdk_fontset_load (fontset_bold); font_superscript = gdk_fontset_load (fontset_superscript); font_italic = gdk_fontset_load (fontset_italic); font_height = 0; #if 0 height = gdk_string_height(font_normal, "|"); if(font_height < height) font_height = height; height = gdk_string_height(font_bold, "|"); if(font_height < height) font_height = height; height = gdk_string_height(font_italic, "|"); if(font_height < height) font_height = height; font_height = gdk_string_height(font_normal, "|"); #endif font_ascent = font_normal->ascent; font_descent = font_normal->descent; font_height = font_ascent + font_descent; font_width = font_height; v_space = font_height * line_space; } void unload_font(){ gdk_font_unref(font_normal); gdk_font_unref(font_bold); gdk_font_unref(font_italic); gdk_font_unref(font_superscript); } static void ok_fontsel(GtkWidget *widget,gpointer *data){ GdkFont *font; gchar *fontname; fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(fontsel_dlg)); switch(font_no){ case 0: gtk_entry_set_text(GTK_ENTRY(entry_normal), fontname); break; case 1: gtk_entry_set_text(GTK_ENTRY(entry_bold), fontname); break; case 2: gtk_entry_set_text(GTK_ENTRY(entry_italic), fontname); break; case 3: gtk_entry_set_text(GTK_ENTRY(entry_super), fontname); break; } // font = gtk_font_selection_dialog_get_font(GTK_FONT_SELECTION_DIALOG(fontsel_dlg)); gtk_widget_destroy(fontsel_dlg); auto_lookup_resume(); } static void delete_fontsel( GtkWidget *widget, GdkEvent *event, gpointer data ) { ok_fontsel(NULL, NULL); } static void show_fontsel(GtkWidget *widget,gpointer *data){ gchar *fontname; font_no = (gint)data; fontsel_dlg = gtk_font_selection_dialog_new("Please select font"); gtk_signal_connect (GTK_OBJECT (fontsel_dlg), "delete_event", GTK_SIGNAL_FUNC (delete_fontsel), NULL); gtk_signal_connect (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG (fontsel_dlg)->ok_button), "clicked", GTK_SIGNAL_FUNC (ok_fontsel), NULL); gtk_signal_connect_object (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG (fontsel_dlg)->cancel_button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer)fontsel_dlg); gtk_widget_destroy(GTK_FONT_SELECTION_DIALOG (fontsel_dlg)->apply_button); switch(font_no){ case 0: fontname = gtk_entry_get_text(GTK_ENTRY(entry_normal)); break; case 1: fontname = gtk_entry_get_text(GTK_ENTRY(entry_bold)); break; case 2: fontname = gtk_entry_get_text(GTK_ENTRY(entry_italic)); break; case 3: fontname = gtk_entry_get_text(GTK_ENTRY(entry_super)); break; } gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(fontsel_dlg), fontname); gtk_widget_show_all(fontsel_dlg); } static void ok_font(GtkWidget *widget,gpointer *data){ gchar *fontname; gchar *text; // unloadするとなぜか死ぬ // unload_font(); fontname = gtk_entry_get_text(GTK_ENTRY(entry_normal)); free(fontset_normal); fontset_normal = strdup(fontname); fontname = gtk_entry_get_text(GTK_ENTRY(entry_bold)); free(fontset_bold); fontset_bold = strdup(fontname); fontname = gtk_entry_get_text(GTK_ENTRY(entry_italic)); free(fontset_italic); fontset_italic = strdup(fontname); fontname = gtk_entry_get_text(GTK_ENTRY(entry_super)); free(fontset_superscript); fontset_superscript = strdup(fontname); gtk_widget_destroy(font_dlg); load_font(); if((current_book_info != NULL) && (current_position.page != 0) && (current_position.offset != 0)) { BOOK_INFO *save_book_info; gint save_page; gint save_offset; save_book_info = current_book_info; save_page = current_position.page; save_offset = current_position.offset; show_result_tree(); current_book_info = save_book_info; current_position.page = save_page; current_position.offset = save_offset; text = ebook_get_text(current_book_info, current_position.page, current_position.offset); if(text != NULL){ show_text(current_book_info, text); free(text); } } else { show_about(); } save_preference(); } static void delete_font( GtkWidget *widget, GdkEvent *event, gpointer data ) { ok_font(NULL, NULL); } void preference_font(){ GtkWidget *vbox; GtkWidget *button; GtkWidget *table; GtkWidget *label; GtkAttachOptions xoption, yoption; auto_lookup_suspend(); xoption = GTK_EXPAND | GTK_SHRINK; yoption = GTK_EXPAND | GTK_SHRINK; font_dlg = gtk_dialog_new(); gtk_window_set_position(GTK_WINDOW(font_dlg), GTK_WIN_POS_CENTER_ALWAYS); gtk_signal_connect (GTK_OBJECT (font_dlg), "delete_event", GTK_SIGNAL_FUNC (delete_font), NULL); button = gtk_button_new_with_label(_("Ok")); GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (font_dlg)->action_area), button, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (ok_font), NULL); gtk_widget_grab_default (button); vbox = (GtkWidget *)(GTK_DIALOG(font_dlg)->vbox); gtk_container_border_width(GTK_CONTAINER(vbox), 5); table = gtk_table_new(3, 5, FALSE); gtk_box_pack_start (GTK_BOX(vbox) , table,FALSE, FALSE, 0); label = gtk_label_new(_("Normal")); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, xoption, yoption, 5, 5); entry_normal = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry_normal), fontset_normal); gtk_widget_set_usize(entry_normal,400,20); gtk_table_attach(GTK_TABLE(table), entry_normal, 1, 2, 0, 1, xoption, yoption, 5, 5); button = gtk_button_new_with_label(_("Choose")); gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (show_fontsel), (gpointer)0); gtk_table_attach(GTK_TABLE(table), button, 2, 3, 0, 1, xoption, yoption, 5, 5); label = gtk_label_new(_("Bold")); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, xoption, yoption, 5, 5); entry_bold = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry_bold), fontset_bold); gtk_widget_set_usize(entry_bold,400,20); gtk_table_attach(GTK_TABLE(table), entry_bold, 1, 2, 1, 2, xoption, yoption, 5, 5); button = gtk_button_new_with_label(_("Choose")); gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (show_fontsel), (gpointer)1); gtk_table_attach(GTK_TABLE(table), button, 2, 3, 1, 2, xoption, yoption, 5, 5); label = gtk_label_new(_("Italic")); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, xoption, yoption, 5, 5); entry_italic = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry_italic), fontset_italic); gtk_widget_set_usize(entry_italic,400,20); gtk_table_attach(GTK_TABLE(table), entry_italic, 1, 2, 2, 3, xoption, yoption, 5, 5); button = gtk_button_new_with_label(_("Choose")); gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (show_fontsel), (gpointer)2); gtk_table_attach(GTK_TABLE(table), button, 2, 3, 2, 3, xoption, yoption, 5, 5); label = gtk_label_new(_("Superscript")); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4, xoption, yoption, 5, 5); entry_super = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry_super), fontset_superscript); gtk_widget_set_usize(entry_super,400,20); gtk_table_attach(GTK_TABLE(table), entry_super, 1, 2, 3, 4, xoption, yoption, 5, 5); button = gtk_button_new_with_label(_("Choose")); gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (show_fontsel), (gpointer)3); gtk_table_attach(GTK_TABLE(table), button, 2, 3, 3, 4, xoption, yoption, 5, 5); gtk_widget_show_all(font_dlg); }