/* LIBPIKA - The PIKA Library * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball * * pikafontchooser.c * Copyright (C) 2003 Sven Neumann * * This library is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see * . */ #include "config.h" #include #include #include "libpikawidgets/pikawidgets.h" #include "pika.h" #include "pikauitypes.h" #include "pikafontchooser.h" #include "pikauimarshal.h" #include "libpika-intl.h" /** * SECTION: pikafontchooser * @title: PikaFontChooser * @short_description: A button which pops up a font selection dialog. * * A button which pops up a font selection dialog. **/ struct _PikaFontChooser { PikaResourceChooser parent_instance; GtkWidget *label; }; static void pika_font_chooser_draw_interior (PikaResourceChooser *self); static const GtkTargetEntry drag_target = { "application/x-pika-font-name", 0, 0 }; G_DEFINE_FINAL_TYPE (PikaFontChooser, pika_font_chooser, PIKA_TYPE_RESOURCE_CHOOSER) static void pika_font_chooser_class_init (PikaFontChooserClass *klass) { PikaResourceChooserClass *superclass = PIKA_RESOURCE_CHOOSER_CLASS (klass); superclass->draw_interior = pika_font_chooser_draw_interior; superclass->resource_type = PIKA_TYPE_FONT; } static void pika_font_chooser_init (PikaFontChooser *self) { GtkWidget *button; GtkWidget *hbox; GtkWidget *image; button = gtk_button_new (); gtk_container_add (GTK_CONTAINER (self), button); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); gtk_container_add (GTK_CONTAINER (button), hbox); image = gtk_image_new_from_icon_name (PIKA_ICON_FONT, GTK_ICON_SIZE_BUTTON); gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); self->label = gtk_label_new ("unknown"); gtk_box_pack_start (GTK_BOX (hbox), self->label, TRUE, TRUE, 4); gtk_widget_show_all (GTK_WIDGET (self)); pika_resource_chooser_set_drag_target (PIKA_RESOURCE_CHOOSER (self), hbox, &drag_target); pika_resource_chooser_set_clickable (PIKA_RESOURCE_CHOOSER (self), button); } static void pika_font_chooser_draw_interior (PikaResourceChooser *self) { PikaFontChooser *font_select= PIKA_FONT_CHOOSER (self); PikaResource *resource; gchar *name = NULL; resource = pika_resource_chooser_get_resource (self); if (resource) name = pika_resource_get_name (resource); gtk_label_set_text (GTK_LABEL (font_select->label), name); } /** * pika_font_chooser_new: * @title: (nullable): Title of the dialog to use or %NULL to use the default title. * @label: (nullable): Button label or %NULL for no label. * @resource: (nullable): Initial font. * * Creates a new #GtkWidget that lets a user choose a font. * You can put this widget in a plug-in dialog. * * When font is NULL, initial choice is from context. * * Returns: A #GtkWidget that you can use in your UI. * * Since: 2.4 */ GtkWidget * pika_font_chooser_new (const gchar *title, const gchar *label, PikaResource *resource) { GtkWidget *chooser; g_return_val_if_fail (resource == NULL || PIKA_IS_FONT (resource), NULL); if (resource == NULL) resource = PIKA_RESOURCE (pika_context_get_font ()); if (title) chooser = g_object_new (PIKA_TYPE_FONT_CHOOSER, "title", title, "label", label, "resource", resource, NULL); else chooser = g_object_new (PIKA_TYPE_FONT_CHOOSER, "label", label, "resource", resource, NULL); pika_font_chooser_draw_interior (PIKA_RESOURCE_CHOOSER (chooser)); return chooser; }