/* 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);
}
syntax highlighted by Code2HTML, v. 0.9.1