summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorMatthias Clasen <matthiasc@src.gnome.org>2006-05-03 20:18:38 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2006-05-03 20:18:38 +0000
commit1657c842f3dc941898e41aae238747def0ac46a9 (patch)
tree4b1260e20fbb37c03f5d491db4ca2bd0e32a3753 /gtk
parent964a6382919a06f2d84fe03e4cc517774e252d88 (diff)
downloadgtk+-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.c303
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);