diff options
author | Matthias Clasen <matthiasc@src.gnome.org> | 2006-05-03 20:18:38 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2006-05-03 20:18:38 +0000 |
commit | 1657c842f3dc941898e41aae238747def0ac46a9 (patch) | |
tree | 4b1260e20fbb37c03f5d491db4ca2bd0e32a3753 /gtk | |
parent | 964a6382919a06f2d84fe03e4cc517774e252d88 (diff) | |
download | gtk+-1657c842f3dc941898e41aae238747def0ac46a9.tar.gz |
Replace the xpm collate icons by cairo drawing that respects themes.
* gtk/gtkprintunixdialog.c: Replace the xpm collate icons
by cairo drawing that respects themes.
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkprintunixdialog.c | 303 |
1 files changed, 100 insertions, 203 deletions
diff --git a/gtk/gtkprintunixdialog.c b/gtk/gtkprintunixdialog.c index 9ac102f996..f2cdd8040a 100644 --- a/gtk/gtkprintunixdialog.c +++ b/gtk/gtkprintunixdialog.c @@ -31,6 +31,7 @@ #include "gtkcellrendererpixbuf.h" #include "gtkcellrenderertext.h" #include "gtkstock.h" +#include "gtkiconfactory.h" #include "gtkimage.h" #include "gtktreeselection.h" #include "gtknotebook.h" @@ -65,6 +66,8 @@ static void gtk_print_unix_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); +static void gtk_print_unix_dialog_style_set (GtkWidget *widget, + GtkStyle *previous_style); static void populate_dialog (GtkPrintUnixDialog *dialog); static void unschedule_idle_mark_conflicts (GtkPrintUnixDialog *dialog); static void selected_printer_changed (GtkTreeSelection *selection, @@ -171,187 +174,6 @@ struct GtkPrintUnixDialogPrivate G_DEFINE_TYPE (GtkPrintUnixDialog, gtk_print_unix_dialog, GTK_TYPE_DIALOG); -/* XPM */ -static const char *collate_xpm[] = { -"65 35 6 1", -" c None", -". c #000000", -"+ c #020202", -"@ c #FFFFFF", -"# c #010101", -"$ c #070707", -" ..++++++++++++++++.. ..++++++++++++++++..", -" ..++++++++++++++++.. ..++++++++++++++++..", -" ..@@@@@@@@@@@@@@@@.. ..@@@@@@@@@@@@@@@@..", -" ..@@@@@@@@@@@@@@@@.. ..@@@@@@@@@@@@@@@@..", -" ++@@@@@@@@@@@@@@@@.. ++@@@@@@@@@@@@@@@@..", -" ++@@@@@@@@@@@@@@@@.. ++@@@@@@@@@@@@@@@@..", -" ++@@@@@@@@@@@@@@@@.. ++@@@@@@@@@@@@@@@@..", -" ++@@@@@@@@@@@@@@@@.. ++@@@@@@@@@@@@@@@@..", -" ++@@@@@@@@@@@@@@@@.. ++@@@@@@@@@@@@@@@@..", -" ++@@@@@@@@@@@@@@@@.. ++@@@@@@@@@@@@@@@@..", -"..+++++++++##++++++$@@@@@@@@@.. ..+++++++++##++++++$@@@@@@@@@..", -"..+++++++++##+++++#+@@@@@@@@@.. ..+++++++++##+++++#+@@@@@@@@@..", -"..@@@@@@@@@@@@@@@@++@@@@@@@@@.. ..@@@@@@@@@@@@@@@@++@@@@@@@@@..", -"..@@@@@@@@@@@@@@@@++@@@..@@@@.. ..@@@@@@@@@@@@@@@@++@@@..@@@@..", -"..@@@@@@@@@@@@@@@@++@@.@@.@@@.. ..@@@@@@@@@@@@@@@@++@@.@@.@@@..", -"..@@@@@@@@@@@@@@@@++@@@@@.@@@.. ..@@@@@@@@@@@@@@@@++@@@@@.@@@..", -"..@@@@@@@@@@@@@@@@++@@@@.@@@@.. ..@@@@@@@@@@@@@@@@++@@@@.@@@@..", -"..@@@@@@@@@@@@@@@@++@@@.@@@@@.. ..@@@@@@@@@@@@@@@@++@@@.@@@@@..", -"..@@@@@@@@@@@@@@@@++@@.@@@@@@.. ..@@@@@@@@@@@@@@@@++@@.@@@@@@..", -"..@@@@@@@@@@@@@@@@++@@....@@@.. ..@@@@@@@@@@@@@@@@++@@....@@@..", -"..@@@@@@@@@@@@@@@@++@@@@@@@@@.. ..@@@@@@@@@@@@@@@@++@@@@@@@@@..", -"..@@@@@@@@@@@@@@@@++@@@@@@@@@.. ..@@@@@@@@@@@@@@@@++@@@@@@@@@..", -"..@@@@@@@@@@@@@@@@++@@@@@@@@@.. ..@@@@@@@@@@@@@@@@++@@@@@@@@@..", -"..@@@@@@@@@@@.@@@@............. ..@@@@@@@@@@@.@@@@.............", -"..@@@@@@@@@@..@@@@............. ..@@@@@@@@@@..@@@@.............", -"..@@@@@@@@@@@.@@@@.. ..@@@@@@@@@@@.@@@@.. ", -"..@@@@@@@@@@@.@@@@.. ..@@@@@@@@@@@.@@@@.. ", -"..@@@@@@@@@@@.@@@@.. ..@@@@@@@@@@@.@@@@.. ", -"..@@@@@@@@@@@.@@@@.. ..@@@@@@@@@@@.@@@@.. ", -"..@@@@@@@@@@...@@@.. ..@@@@@@@@@@...@@@.. ", -"..@@@@@@@@@@@@@@@@.. ..@@@@@@@@@@@@@@@@.. ", -"..@@@@@@@@@@@@@@@@.. ..@@@@@@@@@@@@@@@@.. ", -"..@@@@@@@@@@@@@@@@.. ..@@@@@@@@@@@@@@@@.. ", -".................... .................... ", -".................... .................... "}; - -/* XPM */ -static const char *nocollate_xpm[] = { -"65 35 6 1", -" c None", -". c #000000", -"+ c #FFFFFF", -"@ c #020202", -"# c #010101", -"$ c #070707", -" .................... ....................", -" .................... ....................", -" ..++++++++++++++++.. ..++++++++++++++++..", -" ..++++++++++++++++.. ..++++++++++++++++..", -" @@++++++++++++++++.. @@++++++++++++++++..", -" @@++++++++++++++++.. @@++++++++++++++++..", -" @@++++++++++++++++.. @@++++++++++++++++..", -" @@++++++++++++++++.. @@++++++++++++++++..", -" @@++++++++++++++++.. @@++++++++++++++++..", -" @@++++++++++++++++.. @@++++++++++++++++..", -"..@@@@@@@@@##@@@@@@$+++++++++.. ..@@@@@@@@@##@@@@@@$+++++++++..", -"..@@@@@@@@@##@@@@@#@+++++++++.. ..@@@@@@@@@##@@@@@#@+++++++++..", -"..++++++++++++++++@@+++++++++.. ..++++++++++++++++@@+++++++++..", -"..++++++++++++++++@@++++.++++.. ..++++++++++++++++@@+++..++++..", -"..++++++++++++++++@@+++..++++.. ..++++++++++++++++@@++.++.+++..", -"..++++++++++++++++@@++++.++++.. ..++++++++++++++++@@+++++.+++..", -"..++++++++++++++++@@++++.++++.. ..++++++++++++++++@@++++.++++..", -"..++++++++++++++++@@++++.++++.. ..++++++++++++++++@@+++.+++++..", -"..++++++++++++++++@@++++.++++.. ..++++++++++++++++@@++.++++++..", -"..++++++++++++++++@@+++...+++.. ..++++++++++++++++@@++....+++..", -"..++++++++++++++++@@+++++++++.. ..++++++++++++++++@@+++++++++..", -"..++++++++++++++++@@+++++++++.. ..++++++++++++++++@@+++++++++..", -"..++++++++++++++++@@+++++++++.. ..++++++++++++++++@@+++++++++..", -"..+++++++++++.++++............. ..++++++++++..++++.............", -"..++++++++++..++++............. ..+++++++++.++.+++.............", -"..+++++++++++.++++.. ..++++++++++++.+++.. ", -"..+++++++++++.++++.. ..+++++++++++.++++.. ", -"..+++++++++++.++++.. ..++++++++++.+++++.. ", -"..+++++++++++.++++.. ..+++++++++.++++++.. ", -"..++++++++++...+++.. ..+++++++++....+++.. ", -"..++++++++++++++++.. ..++++++++++++++++.. ", -"..++++++++++++++++.. ..++++++++++++++++.. ", -"..++++++++++++++++.. ..++++++++++++++++.. ", -".................... .................... ", -".................... .................... "}; - -/* XPM */ -static const char *collate_reverse_xpm[] = { -"65 35 6 1", -" c None", -". c #000000", -"+ c #020202", -"@ c #FFFFFF", -"# c #010101", -"$ c #070707", -" ..++++++++++++++++.. ..++++++++++++++++..", -" ..++++++++++++++++.. ..++++++++++++++++..", -" ..@@@@@@@@@@@@@@@@.. ..@@@@@@@@@@@@@@@@..", -" ..@@@@@@@@@@@@@@@@.. ..@@@@@@@@@@@@@@@@..", -" ++@@@@@@@@@@@@@@@@.. ++@@@@@@@@@@@@@@@@..", -" ++@@@@@@@@@@@@@@@@.. ++@@@@@@@@@@@@@@@@..", -" ++@@@@@@@@@@@@@@@@.. ++@@@@@@@@@@@@@@@@..", -" ++@@@@@@@@@@@@@@@@.. ++@@@@@@@@@@@@@@@@..", -" ++@@@@@@@@@@@@@@@@.. ++@@@@@@@@@@@@@@@@..", -" ++@@@@@@@@@@@@@@@@.. ++@@@@@@@@@@@@@@@@..", -"..+++++++++##++++++$@@@@@@@@@.. ..+++++++++##++++++$@@@@@@@@@..", -"..+++++++++##+++++#+@@@@@@@@@.. ..+++++++++##+++++#+@@@@@@@@@..", -"..@@@@@@@@@@@@@@@@++@@@@@@@@@.. ..@@@@@@@@@@@@@@@@++@@@@@@@@@..", -"..@@@@@@@@@@@@@@@@++@@@@.@@@@.. ..@@@@@@@@@@@@@@@@++@@@@.@@@@..", -"..@@@@@@@@@@@@@@@@++@@@..@@@@.. ..@@@@@@@@@@@@@@@@++@@@..@@@@..", -"..@@@@@@@@@@@@@@@@++@@@@.@@@@.. ..@@@@@@@@@@@@@@@@++@@@@.@@@@..", -"..@@@@@@@@@@@@@@@@++@@@@.@@@@.. ..@@@@@@@@@@@@@@@@++@@@@.@@@@..", -"..@@@@@@@@@@@@@@@@++@@@@.@@@@.. ..@@@@@@@@@@@@@@@@++@@@@.@@@@..", -"..@@@@@@@@@@@@@@@@++@@@@.@@@@.. ..@@@@@@@@@@@@@@@@++@@@@.@@@@..", -"..@@@@@@@@@@@@@@@@++@@@...@@@.. ..@@@@@@@@@@@@@@@@++@@@...@@@..", -"..@@@@@@@@@@@@@@@@++@@@@@@@@@.. ..@@@@@@@@@@@@@@@@++@@@@@@@@@..", -"..@@@@@@@@@@@@@@@@++@@@@@@@@@.. ..@@@@@@@@@@@@@@@@++@@@@@@@@@..", -"..@@@@@@@@@@@@@@@@++@@@@@@@@@.. ..@@@@@@@@@@@@@@@@++@@@@@@@@@..", -"..@@@@@@@@@@..@@@@............. ..@@@@@@@@@@..@@@@.............", -"..@@@@@@@@@.@@.@@@............. ..@@@@@@@@@.@@.@@@.............", -"..@@@@@@@@@@@@.@@@.. ..@@@@@@@@@@@@.@@@.. ", -"..@@@@@@@@@@@.@@@@.. ..@@@@@@@@@@@.@@@@.. ", -"..@@@@@@@@@@.@@@@@.. ..@@@@@@@@@@.@@@@@.. ", -"..@@@@@@@@@.@@@@@@.. ..@@@@@@@@@.@@@@@@.. ", -"..@@@@@@@@@....@@@.. ..@@@@@@@@@....@@@.. ", -"..@@@@@@@@@@@@@@@@.. ..@@@@@@@@@@@@@@@@.. ", -"..@@@@@@@@@@@@@@@@.. ..@@@@@@@@@@@@@@@@.. ", -"..@@@@@@@@@@@@@@@@.. ..@@@@@@@@@@@@@@@@.. ", -".................... .................... ", -".................... .................... "}; - -/* XPM */ -static const char *nocollate_reverse_xpm[] = { -"65 35 6 1", -" c None", -". c #000000", -"+ c #FFFFFF", -"@ c #020202", -"# c #010101", -"$ c #070707", -" .................... ....................", -" .................... ....................", -" ..++++++++++++++++.. ..++++++++++++++++..", -" ..++++++++++++++++.. ..++++++++++++++++..", -" @@++++++++++++++++.. @@++++++++++++++++..", -" @@++++++++++++++++.. @@++++++++++++++++..", -" @@++++++++++++++++.. @@++++++++++++++++..", -" @@++++++++++++++++.. @@++++++++++++++++..", -" @@++++++++++++++++.. @@++++++++++++++++..", -" @@++++++++++++++++.. @@++++++++++++++++..", -"..@@@@@@@@@##@@@@@@$+++++++++.. ..@@@@@@@@@##@@@@@@$+++++++++..", -"..@@@@@@@@@##@@@@@#@+++++++++.. ..@@@@@@@@@##@@@@@#@+++++++++..", -"..++++++++++++++++@@+++++++++.. ..++++++++++++++++@@+++++++++..", -"..++++++++++++++++@@+++..++++.. ..++++++++++++++++@@++++.++++..", -"..++++++++++++++++@@++.++.+++.. ..++++++++++++++++@@+++..++++..", -"..++++++++++++++++@@+++++.+++.. ..++++++++++++++++@@++++.++++..", -"..++++++++++++++++@@++++.++++.. ..++++++++++++++++@@++++.++++..", -"..++++++++++++++++@@+++.+++++.. ..++++++++++++++++@@++++.++++..", -"..++++++++++++++++@@++.++++++.. ..++++++++++++++++@@++++.++++..", -"..++++++++++++++++@@++....+++.. ..++++++++++++++++@@+++...+++..", -"..++++++++++++++++@@+++++++++.. ..++++++++++++++++@@+++++++++..", -"..++++++++++++++++@@+++++++++.. ..++++++++++++++++@@+++++++++..", -"..++++++++++++++++@@+++++++++.. ..++++++++++++++++@@+++++++++..", -"..++++++++++..++++............. ..+++++++++++.++++.............", -"..+++++++++.++.+++............. ..++++++++++..++++.............", -"..++++++++++++.+++.. ..+++++++++++.++++.. ", -"..+++++++++++.++++.. ..+++++++++++.++++.. ", -"..++++++++++.+++++.. ..+++++++++++.++++.. ", -"..+++++++++.++++++.. ..+++++++++++.++++.. ", -"..+++++++++....+++.. ..++++++++++...+++.. ", -"..++++++++++++++++.. ..++++++++++++++++.. ", -"..++++++++++++++++.. ..++++++++++++++++.. ", -"..++++++++++++++++.. ..++++++++++++++++.. ", -".................... .................... ", -".................... .................... "}; - - static gboolean is_default_printer (GtkPrintUnixDialog *dialog, GtkPrinter *printer) @@ -378,6 +200,8 @@ gtk_print_unix_dialog_class_init (GtkPrintUnixDialogClass *class) object_class->set_property = gtk_print_unix_dialog_set_property; object_class->get_property = gtk_print_unix_dialog_get_property; + widget_class->style_set = gtk_print_unix_dialog_style_set; + g_object_class_install_property (object_class, PROP_PAGE_SETUP, g_param_spec_object ("page-setup", @@ -1377,37 +1201,110 @@ selected_printer_changed (GtkTreeSelection *selection, update_dialog_from_settings (dialog); } - static void update_collate_icon (GtkToggleButton *toggle_button, GtkPrintUnixDialog *dialog) { GtkPrintUnixDialogPrivate *priv = dialog->priv; - GdkPixbuf *pixbuf; + + gtk_widget_queue_draw (priv->collate_image); +} + +static void +paint_page (GtkWidget *widget, + cairo_t *cr, + gfloat scale, + gint x_offset, + gint y_offset, + gchar *text) +{ + gint x, y, width, height; + gint linewidth = 2; + + x = x_offset * scale; + y = y_offset * scale; + width = 20 * scale; + height = 26 * scale; + + gdk_cairo_set_source_color (cr, &widget->style->base[GTK_STATE_NORMAL]); + cairo_rectangle (cr, x, y, width, height); + cairo_fill (cr); + + gdk_cairo_set_source_color (cr, &widget->style->text[GTK_STATE_NORMAL]); + cairo_set_line_width (cr, linewidth); + cairo_rectangle (cr, x + linewidth/2.0, y + linewidth/2.0, width - linewidth, height - linewidth); + cairo_stroke (cr); + + cairo_select_font_face (cr, "Sans", + CAIRO_FONT_SLANT_NORMAL, + CAIRO_FONT_WEIGHT_NORMAL); + cairo_set_font_size (cr, (gint)(9 * scale)); + cairo_move_to (cr, x + (gint)(11 * scale), y + (gint)(21 * scale)); + cairo_show_text (cr, text); +} + + +static gboolean +draw_collate_cb (GtkWidget *widget, + GdkEventExpose *event, + GtkPrintUnixDialog *dialog) +{ + GtkPrintUnixDialogPrivate *priv = dialog->priv; + GtkSettings *settings; + cairo_t *cr; + gint size; + gfloat scale; gboolean collate, reverse; - const char **xpm; collate = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->collate_check)); reverse = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->reverse_check)); - if (collate) - { - if (reverse) - xpm = collate_reverse_xpm; - else - xpm = collate_xpm; - } - else + settings = gtk_widget_get_settings (widget); + gtk_icon_size_lookup_for_settings (settings, + GTK_ICON_SIZE_DIALOG, + &size, + NULL); + scale = size / 48.0; + + cr = gdk_cairo_create (widget->window); + + paint_page (widget, cr, scale, 15, 5, collate == reverse ? "1" : "2"); + paint_page (widget, cr, scale, 5, 15, reverse ? "2" : "1"); + + paint_page (widget, cr, scale, 50, 5, reverse ? "1" : "2"); + paint_page (widget, cr, scale, 40, 15, collate == reverse ? "2" : "1"); + + cairo_destroy (cr); + + return TRUE; +} + +static void +gtk_print_unix_dialog_style_set (GtkWidget *widget, + GtkStyle *previous_style) +{ + if (GTK_WIDGET_CLASS (gtk_print_unix_dialog_parent_class)->style_set) + GTK_WIDGET_CLASS (gtk_print_unix_dialog_parent_class)->style_set (widget, previous_style); + + if (gtk_widget_has_screen (widget)) { - if (reverse) - xpm = nocollate_reverse_xpm; - else - xpm = nocollate_xpm; + GtkPrintUnixDialog *dialog = (GtkPrintUnixDialog *)widget; + GtkPrintUnixDialogPrivate *priv = dialog->priv; + GtkSettings *settings; + gint size; + gfloat scale; + + settings = gtk_widget_get_settings (widget); + gtk_icon_size_lookup_for_settings (settings, + GTK_ICON_SIZE_DIALOG, + &size, + NULL); + scale = size / 48.0; + + gtk_widget_set_size_request (priv->collate_image, + (50 + 20) * scale, + (15 + 26) * scale); } - - pixbuf = gdk_pixbuf_new_from_xpm_data (xpm); - gtk_image_set_from_pixbuf (GTK_IMAGE (priv->collate_image), pixbuf); - g_object_unref (pixbuf); } static void @@ -1569,15 +1466,15 @@ create_main_page (GtkPrintUnixDialog *dialog) 0, 1, 2, 3, GTK_FILL, 0, 0, 0); - image = gtk_image_new (); + image = gtk_drawing_area_new (); priv->collate_image = image; gtk_widget_show (image); + gtk_widget_set_size_request (image, 70, 90); gtk_table_attach (GTK_TABLE (table), image, 1, 2, 1, 3, GTK_FILL, 0, 0, 0); + g_signal_connect (image, "expose_event", G_CALLBACK (draw_collate_cb), dialog); - update_collate_icon (NULL, dialog); - label = gtk_label_new (_("General")); gtk_widget_show (label); |