📄 gtkfontsel.c
字号:
gchar *spacing, gchar *charset);/* FontSelectionDialog */static void gtk_font_selection_dialog_class_init (GtkFontSelectionDialogClass *klass);static void gtk_font_selection_dialog_init (GtkFontSelectionDialog *fontseldiag);static gint gtk_font_selection_dialog_on_configure(GtkWidget *widget, GdkEventConfigure *event, GtkFontSelectionDialog *fsd);static GtkWindowClass *font_selection_parent_class = NULL;static GtkNotebookClass *font_selection_dialog_parent_class = NULL;GtkTypegtk_font_selection_get_type(){ static GtkType font_selection_type = 0; if(!font_selection_type) { static const GtkTypeInfo fontsel_type_info = { "GtkFontSelection", sizeof (GtkFontSelection), sizeof (GtkFontSelectionClass), (GtkClassInitFunc) gtk_font_selection_class_init, (GtkObjectInitFunc) gtk_font_selection_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; font_selection_type = gtk_type_unique (GTK_TYPE_NOTEBOOK, &fontsel_type_info); } return font_selection_type;}static voidgtk_font_selection_class_init(GtkFontSelectionClass *klass){ GtkObjectClass *object_class; object_class = (GtkObjectClass *) klass; font_selection_parent_class = gtk_type_class (GTK_TYPE_NOTEBOOK); object_class->destroy = gtk_font_selection_destroy; gtk_font_selection_get_fonts ();}static voidgtk_font_selection_init(GtkFontSelection *fontsel){ GtkWidget *scrolled_win; GtkWidget *text_frame; GtkWidget *text_box, *frame; GtkWidget *table, *label, *hbox, *hbox2, *clist, *button, *vbox, *alignment; gint i, prop, row; gchar *titles[] = { NULL, NULL, NULL }; gchar buffer[128]; gchar *size; gint size_to_match; gchar *row_text[3]; gchar *property, *text; gboolean inserted; /* Number of internationalized titles here must match number of NULL initializers above */ titles[0] = _("Font Property"); titles[1] = _("Requested Value"); titles[2] = _("Actual Value"); /* Initialize the GtkFontSelection struct. We do this here in case any callbacks are triggered while creating the interface. */ fontsel->font = NULL; fontsel->font_index = -1; fontsel->style = -1; fontsel->metric = INITIAL_METRIC; fontsel->size = INITIAL_FONT_SIZE; fontsel->selected_size = INITIAL_FONT_SIZE; fontsel->filters[GTK_FONT_FILTER_BASE].font_type = GTK_FONT_ALL; fontsel->filters[GTK_FONT_FILTER_USER].font_type = GTK_FONT_BITMAP | GTK_FONT_SCALABLE; for (prop = 0; prop < GTK_NUM_FONT_PROPERTIES; prop++) { fontsel->filters[GTK_FONT_FILTER_BASE].property_filters[prop] = NULL; fontsel->filters[GTK_FONT_FILTER_BASE].property_nfilters[prop] = 0; fontsel->filters[GTK_FONT_FILTER_USER].property_filters[prop] = NULL; fontsel->filters[GTK_FONT_FILTER_USER].property_nfilters[prop] = 0; } for (prop = 0; prop < GTK_NUM_STYLE_PROPERTIES; prop++) fontsel->property_values[prop] = 0; /* Create the main notebook page. */ gtk_notebook_set_homogeneous_tabs (GTK_NOTEBOOK (fontsel), TRUE); gtk_notebook_set_tab_hborder (GTK_NOTEBOOK (fontsel), 8); fontsel->main_vbox = gtk_vbox_new (FALSE, 4); gtk_widget_show (fontsel->main_vbox); gtk_container_set_border_width (GTK_CONTAINER (fontsel->main_vbox), 6); label = gtk_label_new(_("Font")); gtk_notebook_append_page (GTK_NOTEBOOK (fontsel), fontsel->main_vbox, label); /* Create the table of font, style & size. */ table = gtk_table_new (3, 3, FALSE); gtk_widget_show (table); gtk_table_set_col_spacings(GTK_TABLE(table), 8); gtk_box_pack_start (GTK_BOX (fontsel->main_vbox), table, TRUE, TRUE, 0); fontsel->font_label = gtk_label_new(_("Font:")); gtk_misc_set_alignment (GTK_MISC (fontsel->font_label), 0.0, 0.5); gtk_widget_show (fontsel->font_label); gtk_table_attach (GTK_TABLE (table), fontsel->font_label, 0, 1, 0, 1, GTK_FILL, 0, 0, 0); label = gtk_label_new(_("Font Style:")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_widget_show (label); gtk_table_attach (GTK_TABLE (table), label, 1, 2, 0, 1, GTK_FILL, 0, 0, 0); label = gtk_label_new(_("Size:")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_widget_show (label); gtk_table_attach (GTK_TABLE (table), label, 2, 3, 0, 1, GTK_FILL, 0, 0, 0); fontsel->font_entry = gtk_entry_new(); gtk_entry_set_editable(GTK_ENTRY(fontsel->font_entry), FALSE); gtk_widget_set_usize (fontsel->font_entry, 20, -1); gtk_widget_show (fontsel->font_entry); gtk_table_attach (GTK_TABLE (table), fontsel->font_entry, 0, 1, 1, 2, GTK_FILL, 0, 0, 0); fontsel->font_style_entry = gtk_entry_new(); gtk_entry_set_editable(GTK_ENTRY(fontsel->font_style_entry), FALSE); gtk_widget_set_usize (fontsel->font_style_entry, 20, -1); gtk_widget_show (fontsel->font_style_entry); gtk_table_attach (GTK_TABLE (table), fontsel->font_style_entry, 1, 2, 1, 2, GTK_FILL, 0, 0, 0); fontsel->size_entry = gtk_entry_new(); gtk_widget_set_usize (fontsel->size_entry, 20, -1); gtk_widget_show (fontsel->size_entry); gtk_table_attach (GTK_TABLE (table), fontsel->size_entry, 2, 3, 1, 2, GTK_FILL, 0, 0, 0); gtk_signal_connect (GTK_OBJECT (fontsel->size_entry), "key_press_event", (GtkSignalFunc) gtk_font_selection_size_key_press, fontsel); /* Create the clists */ fontsel->font_clist = gtk_clist_new(1); gtk_clist_column_titles_hide (GTK_CLIST(fontsel->font_clist)); gtk_clist_set_column_auto_resize (GTK_CLIST (fontsel->font_clist), 0, TRUE); scrolled_win = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_usize (scrolled_win, FONT_LIST_WIDTH, FONT_LIST_HEIGHT); gtk_container_add (GTK_CONTAINER (scrolled_win), fontsel->font_clist); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_widget_show(fontsel->font_clist); gtk_widget_show(scrolled_win); gtk_table_attach (GTK_TABLE (table), scrolled_win, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); fontsel->font_style_clist = gtk_clist_new(1); gtk_clist_column_titles_hide (GTK_CLIST(fontsel->font_style_clist)); gtk_clist_set_column_auto_resize (GTK_CLIST (fontsel->font_style_clist), 0, TRUE); scrolled_win = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_usize (scrolled_win, FONT_STYLE_LIST_WIDTH, -1); gtk_container_add (GTK_CONTAINER (scrolled_win), fontsel->font_style_clist); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_widget_show(fontsel->font_style_clist); gtk_widget_show(scrolled_win); gtk_table_attach (GTK_TABLE (table), scrolled_win, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); fontsel->size_clist = gtk_clist_new(1); gtk_clist_column_titles_hide (GTK_CLIST(fontsel->size_clist)); gtk_clist_set_column_width (GTK_CLIST(fontsel->size_clist), 0, 20); scrolled_win = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_usize (scrolled_win, FONT_SIZE_LIST_WIDTH, -1); gtk_container_add (GTK_CONTAINER (scrolled_win), fontsel->size_clist); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_widget_show(fontsel->size_clist); gtk_widget_show(scrolled_win); gtk_table_attach (GTK_TABLE (table), scrolled_win, 2, 3, 2, 3, GTK_FILL, GTK_FILL, 0, 0); /* Insert the fonts. If there exist fonts with the same family but different foundries, then the foundry name is appended in brackets. */ gtk_font_selection_show_available_fonts(fontsel); gtk_signal_connect (GTK_OBJECT (fontsel->font_clist), "select_row", GTK_SIGNAL_FUNC(gtk_font_selection_select_font), fontsel); GTK_WIDGET_SET_FLAGS (fontsel->font_clist, GTK_CAN_FOCUS); gtk_signal_connect (GTK_OBJECT (fontsel->font_clist), "key_press_event", GTK_SIGNAL_FUNC(gtk_font_selection_on_clist_key_press), fontsel); gtk_signal_connect_after (GTK_OBJECT (fontsel->font_clist), "expose_event", GTK_SIGNAL_FUNC(gtk_font_selection_expose_list), fontsel); gtk_signal_connect (GTK_OBJECT (fontsel->font_style_clist), "select_row", GTK_SIGNAL_FUNC(gtk_font_selection_select_style), fontsel); GTK_WIDGET_SET_FLAGS (fontsel->font_style_clist, GTK_CAN_FOCUS); gtk_signal_connect (GTK_OBJECT (fontsel->font_style_clist), "key_press_event", GTK_SIGNAL_FUNC(gtk_font_selection_on_clist_key_press), fontsel); gtk_signal_connect_after (GTK_OBJECT (fontsel->font_style_clist), "realize", GTK_SIGNAL_FUNC(gtk_font_selection_realize_list), fontsel); /* Insert the standard font sizes */ gtk_clist_freeze (GTK_CLIST(fontsel->size_clist)); size_to_match = INITIAL_FONT_SIZE; if (INITIAL_METRIC == GTK_FONT_METRIC_POINTS) size_to_match = size_to_match / 10; for (i = 0; i < sizeof(font_sizes) / sizeof(font_sizes[0]); i++) { sprintf(buffer, "%i", font_sizes[i]); size = buffer; gtk_clist_append(GTK_CLIST(fontsel->size_clist), &size); if (font_sizes[i] == size_to_match) { gtk_clist_select_row(GTK_CLIST(fontsel->size_clist), i, 0); gtk_entry_set_text(GTK_ENTRY(fontsel->size_entry), buffer); } } gtk_clist_thaw (GTK_CLIST(fontsel->size_clist)); gtk_signal_connect (GTK_OBJECT (fontsel->size_clist), "select_row", GTK_SIGNAL_FUNC(gtk_font_selection_select_size), fontsel); GTK_WIDGET_SET_FLAGS (fontsel->size_clist, GTK_CAN_FOCUS); gtk_signal_connect (GTK_OBJECT (fontsel->size_clist), "key_press_event", GTK_SIGNAL_FUNC(gtk_font_selection_on_clist_key_press), fontsel); /* create the Reset Filter & Metric buttons */ hbox = gtk_hbox_new(FALSE, 8); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (fontsel->main_vbox), hbox, FALSE, TRUE, 0); fontsel->filter_button = gtk_button_new_with_label(_("Reset Filter")); gtk_misc_set_padding (GTK_MISC (GTK_BIN (fontsel->filter_button)->child), 16, 0); gtk_widget_show(fontsel->filter_button); gtk_box_pack_start (GTK_BOX (hbox), fontsel->filter_button, FALSE, FALSE, 0); gtk_widget_set_sensitive (fontsel->filter_button, FALSE); gtk_signal_connect (GTK_OBJECT (fontsel->filter_button), "clicked", GTK_SIGNAL_FUNC(gtk_font_selection_on_clear_filter), fontsel); hbox2 = gtk_hbox_new(FALSE, 0); gtk_widget_show (hbox2); gtk_box_pack_end (GTK_BOX (hbox), hbox2, FALSE, FALSE, 0); label = gtk_label_new(_("Metric:")); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 8); fontsel->points_button = gtk_radio_button_new_with_label(NULL, _("Points")); gtk_widget_show (fontsel->points_button); gtk_box_pack_start (GTK_BOX (hbox2), fontsel->points_button, FALSE, TRUE, 0); if (INITIAL_METRIC == GTK_FONT_METRIC_POINTS) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(fontsel->points_button), TRUE); fontsel->pixels_button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(fontsel->points_button), _("Pixels")); gtk_widget_show (fontsel->pixels_button); gtk_box_pack_start (GTK_BOX (hbox2), fontsel->pixels_button, FALSE, TRUE, 0); if (INITIAL_METRIC == GTK_FONT_METRIC_PIXELS) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(fontsel->pixels_button), TRUE); gtk_signal_connect(GTK_OBJECT(fontsel->points_button), "toggled", (GtkSignalFunc) gtk_font_selection_metric_callback, fontsel); gtk_signal_connect(GTK_OBJECT(fontsel->pixels_button), "toggled", (GtkSignalFunc) gtk_font_selection_metric_callback, fontsel); /* create the text entry widget */ text_frame = gtk_frame_new (_("Preview:")); gtk_widget_show (text_frame); gtk_frame_set_shadow_type(GTK_FRAME(text_frame), GTK_SHADOW_ETCHED_IN); gtk_box_pack_start (GTK_BOX (fontsel->main_vbox), text_frame, FALSE, TRUE, 0); /* This is just used to get a 4-pixel space around the preview entry. */ text_box = gtk_hbox_new (FALSE, 0); gtk_widget_show (text_box); gtk_container_add (GTK_CONTAINER (text_frame), text_box); gtk_container_set_border_width (GTK_CONTAINER (text_box), 4); fontsel->preview_entry = gtk_entry_new (); gtk_widget_show (fontsel->preview_entry); gtk_widget_set_usize (fontsel->preview_entry, -1, INITIAL_PREVIEW_HEIGHT); gtk_box_pack_start (GTK_BOX (text_box), fontsel->preview_entry, TRUE, TRUE, 0); /* Create the message area */ fontsel->message_label = gtk_label_new(""); gtk_widget_show (fontsel->message_label); gtk_box_pack_start (GTK_BOX (fontsel->main_vbox), fontsel->message_label, FALSE, FALSE, 0); /* Create the font info page */ fontsel->info_vbox = gtk_vbox_new (FALSE, 4); gtk_widget_show (fontsel->info_vbox); gtk_container_set_border_width (GTK_CONTAINER (fontsel->info_vbox), 2); label = gtk_label_new(_("Font Information")); gtk_notebook_append_page (GTK_NOTEBOOK (fontsel), fontsel->info_vbox, label); fontsel->info_clist = gtk_clist_new_with_titles (3, titles); gtk_widget_set_usize (fontsel->info_clist, 390, 150); gtk_clist_set_column_width(GTK_CLIST(fontsel->info_clist), 0, 130); gtk_clist_set_column_width(GTK_CLIST(fontsel->info_clist), 1, 130); gtk_clist_set_column_width(GTK_CLIST(fontsel->info_clist), 2, 130); gtk_clist_column_titles_passive(GTK_CLIST(fontsel->info_clist)); scrolled_win = gtk_scrolled_window_new (NULL, NULL); gtk_container_add (GTK_CONTAINER (scrolled_win), fontsel->info_clist); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_show(fontsel->info_clist); gtk_widget_show(scrolled_win); gtk_box_pack_start (GTK_BOX (fontsel->info_vbox), scrolled_win, TRUE, TRUE, 0); /* Insert the property names */ gtk_clist_freeze (GTK_CLIST(fontsel->info_clist)); row_text[1] = ""; row_text[2] = ""; for (i = 0; i < GTK_XLFD_NUM_FIELDS; i++) { row_text[0] = _(xlfd_field_names[i]); gtk_clist_append(GTK_CLIST(fontsel->info_clist), row_text); gtk_clist_set_shift(GTK_CLIST(fontsel->info_clist), i, 0, 0, 4); gtk_clist_set_shift(GTK_CLIST(fontsel->info_clist), i, 1, 0, 4); gtk_clist_set_shift(GTK_CLIST(fontsel->info_clist), i, 2, 0, 4); } gtk_clist_thaw (GTK_CLIST(fontsel->info_clist)); label = gtk_label_new(_("Requested Font Name:")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (fontsel->info_vbox), label, FALSE, TRUE, 0); fontsel->requested_font_name = gtk_entry_new(); gtk_entry_set_editable(GTK_ENTRY(fontsel->requested_font_name), FALSE); gtk_widget_show (fontsel->requested_font_name); gtk_box_pack_start (GTK_BOX (fontsel->info_vbox), fontsel->requested_font_name, FALSE, TRUE, 0); label = gtk_label_new(_("Actual Font Name:")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (fontsel->info_vbox), label, FALSE, TRUE, 0); fontsel->actual_font_name = gtk_entry_new(); gtk_entry_set_editable(GTK_ENTRY(fontsel->actual_font_name), FALSE); gtk_widget_show (fontsel->actual_font_name); gtk_box_pack_start (GTK_BOX (fontsel->info_vbox), fontsel->actual_font_name, FALSE, TRUE, 0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -