Commit 1657c842 authored by Matthias Clasen's avatar Matthias Clasen
Browse files

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.
parent 964a6382
2006-05-03 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkprintunixdialog.c: Replace the xpm collate icons
by cairo drawing that respects themes.
* gdk/quartz/Makefile.am (libgdk_quartz_la_SOURCES): Add
missing files. (#340533, Ludovic Rousseau)
......
2006-05-03 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkprintunixdialog.c: Replace the xpm collate icons
by cairo drawing that respects themes.
* gdk/quartz/Makefile.am (libgdk_quartz_la_SOURCES): Add
missing files. (#340533, Ludovic Rousseau)
......
......@@ -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);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment