diff options
author | Ross Burton <ross@openedhand.com> | 2006-12-22 09:59:20 +0000 |
---|---|---|
committer | Ross Burton <ross@openedhand.com> | 2006-12-22 09:59:20 +0000 |
commit | ea5a5e27a6dd5a6bfbba1b5bcfb13423c7c222a0 (patch) | |
tree | d8ceadb0fd62f3455813ae1649b96871be2e0305 /meta/packages/gtk+/gtk+-2.10.0/style-cairo.patch | |
parent | 32077bdb32334a34b0a364b49a00549a1c874dca (diff) | |
download | openembedded-core-ea5a5e27a6dd5a6bfbba1b5bcfb13423c7c222a0.tar.gz openembedded-core-ea5a5e27a6dd5a6bfbba1b5bcfb13423c7c222a0.tar.bz2 openembedded-core-ea5a5e27a6dd5a6bfbba1b5bcfb13423c7c222a0.tar.xz openembedded-core-ea5a5e27a6dd5a6bfbba1b5bcfb13423c7c222a0.zip |
Remove GTK+ 2.10.0
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@1070 311d38ba-8fff-0310-9ca6-ca027cbcb966
Diffstat (limited to 'meta/packages/gtk+/gtk+-2.10.0/style-cairo.patch')
-rw-r--r-- | meta/packages/gtk+/gtk+-2.10.0/style-cairo.patch | 2193 |
1 files changed, 0 insertions, 2193 deletions
diff --git a/meta/packages/gtk+/gtk+-2.10.0/style-cairo.patch b/meta/packages/gtk+/gtk+-2.10.0/style-cairo.patch deleted file mode 100644 index 197b0a8f4..000000000 --- a/meta/packages/gtk+/gtk+-2.10.0/style-cairo.patch +++ /dev/null @@ -1,2193 +0,0 @@ -Index: gtkstyle.c -=================================================================== -RCS file: /cvs/gnome/gtk+/gtk/gtkstyle.c,v -retrieving revision 1.193 -diff -u -r1.193 gtk+-2.10.0/gtk/gtkstyle.c ---- gtk+-2.10.0/gtk/gtkstyle.c 28 May 2006 12:56:26 -0000 1.193 -+++ gtk+-2.10.0/gtk/gtkstyle.c 2 Jul 2006 14:15:15 -0000 -@@ -37,7 +37,6 @@ - #include "gtkthemes.h" - #include "gtkiconfactory.h" - #include "gtksettings.h" /* _gtk_settings_parse_convert() */ --#include "gtkintl.h" - #include "gtkalias.h" - - #define LIGHTNESS_MULT 1.3 -@@ -59,6 +58,8 @@ - }; - - /* --- prototypes --- */ -+static void gtk_style_init (GtkStyle *style); -+static void gtk_style_class_init (GtkStyleClass *klass); - static void gtk_style_finalize (GObject *object); - static void gtk_style_realize (GtkStyle *style, - GdkColormap *colormap); -@@ -311,6 +312,9 @@ - gint width, - gint height); - -+void _gtk_style_shade (GdkColor *a, -+ GdkColor *b, -+ gdouble k); - static void rgb_to_hls (gdouble *r, - gdouble *g, - gdouble *b); -@@ -329,6 +333,128 @@ - static const GtkRequisition default_option_indicator_size = { 7, 13 }; - static const GtkBorder default_option_indicator_spacing = { 7, 5, 2, 2 }; - -+#define INDICATOR_PART_SIZE 13 -+ -+typedef enum { -+ CHECK_AA, -+ CHECK_BASE, -+ CHECK_BLACK, -+ CHECK_DARK, -+ CHECK_LIGHT, -+ CHECK_MID, -+ CHECK_TEXT, -+ CHECK_INCONSISTENT_TEXT, -+ RADIO_BASE, -+ RADIO_BLACK, -+ RADIO_DARK, -+ RADIO_LIGHT, -+ RADIO_MID, -+ RADIO_TEXT, -+ RADIO_INCONSISTENT_AA, -+ RADIO_INCONSISTENT_TEXT -+} IndicatorPart; -+ -+/* -+ * Extracted from check-13.png, width=13, height=13 -+ */ -+static const guchar check_black_bits[] = { -+ 0x00,0x00,0xfe,0x0f,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02, -+ 0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00}; -+static const guchar check_dark_bits[] = { -+ 0xff,0x1f,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01, -+ 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00}; -+static const guchar check_mid_bits[] = { -+ 0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00, -+ 0x08,0x00,0x08,0x00,0x08,0x00,0x08,0xfc,0x0f,0x00,0x00,0x00,0x00}; -+static const guchar check_light_bits[] = { -+ 0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00, -+ 0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0xfe,0x1f,0x00,0x00}; -+static const guchar check_text_bits[] = { -+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x03,0x80,0x01,0x80,0x00,0x58, -+ 0x00,0x60,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; -+static const guchar check_aa_bits[] = { -+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x58,0x00,0xa0, -+ 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; -+static const guchar check_base_bits[] = { -+ 0x00,0x00,0x00,0x00,0xfc,0x07,0xfc,0x07,0xfc,0x07,0xfc,0x07,0xfc,0x07,0xfc, -+ 0x07,0xfc,0x07,0xfc,0x07,0xfc,0x07,0x00,0x00,0x00,0x00,0x00,0x00}; -+ -+/* -+ * Extracted from check-13-inconsistent.png, width=13, height=13 -+ */ -+static const guchar check_inconsistent_text_bits[] = { -+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x03,0xf8, -+ 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; -+#if 0 -+/* -+ * check_inconsistent_aa_bits is currently not used, since it is all zeros. -+ */ -+static const guchar check_inconsistent_aa_bits[] = { -+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; -+#endif -+ -+/* -+ * Extracted from radio-13.png, width=13, height=13 -+ */ -+static const guchar radio_black_bits[] = { -+ 0x00,0x00,0xf0,0x01,0x0c,0x02,0x04,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02, -+ 0x00,0x02,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x08}; -+static const guchar radio_dark_bits[] = { -+ 0xf0,0x00,0x0c,0x02,0x02,0x04,0x02,0x04,0x01,0x08,0x01,0x08,0x01,0x08,0x01, -+ 0x08,0x00,0x08,0x02,0x04,0x0c,0x06,0xf0,0x01,0x00,0x00,0x00,0x00}; -+static const guchar radio_mid_bits[] = { -+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; -+static const guchar radio_light_bits[] = { -+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00, -+ 0x10,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x06,0xe0,0x01,0x00,0x00}; -+static const guchar radio_text_bits[] = { -+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x00,0xf0,0x01,0xf0,0x01,0xf0, -+ 0x01,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; -+#if 0 -+/* -+ * radio_aa_bits is currently not used, since it is all zeros. -+ */ -+static const guchar radio_aa_bits[] = { -+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; -+#endif -+static const guchar radio_base_bits[] = { -+ 0x00,0x00,0x00,0x00,0xf0,0x01,0xf8,0x03,0xfc,0x07,0xfc,0x07,0xfc,0x07,0xfc, -+ 0x07,0xfc,0x07,0xf8,0x03,0xf0,0x01,0x00,0x00,0x00,0x00,0x00,0x00}; -+ -+/* -+ * Extracted from radio-13.png, width=13, height=13 -+ */ -+static const guchar radio_inconsistent_text_bits[] = { -+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x03,0x00, -+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; -+static const guchar radio_inconsistent_aa_bits[] = { -+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x03,0x00,0x00,0xf8, -+ 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; -+ -+static struct { -+ const guchar *bits; -+ GList *bmap_list; /* list of GdkBitmap */ -+} indicator_parts[] = { -+ { check_aa_bits, NULL }, -+ { check_base_bits, NULL }, -+ { check_black_bits, NULL }, -+ { check_dark_bits, NULL }, -+ { check_light_bits, NULL }, -+ { check_mid_bits, NULL }, -+ { check_text_bits, NULL }, -+ { check_inconsistent_text_bits, NULL }, -+ { radio_base_bits, NULL }, -+ { radio_black_bits, NULL }, -+ { radio_dark_bits, NULL }, -+ { radio_light_bits, NULL }, -+ { radio_mid_bits, NULL }, -+ { radio_text_bits, NULL }, -+ { radio_inconsistent_aa_bits, NULL }, -+ { radio_inconsistent_text_bits, NULL }, -+}; - #define GTK_GRAY 0xdcdc, 0xdada, 0xd5d5 - #define GTK_DARK_GRAY 0xc4c4, 0xc2c2, 0xbdbd - #define GTK_LIGHT_GRAY 0xeeee, 0xebeb, 0xe7e7 -@@ -353,13 +479,39 @@ - static const GdkColor gtk_default_selected_base = { 0, GTK_BLUE }; - static const GdkColor gtk_default_active_base = { 0, GTK_VERY_DARK_GRAY }; - -+static gpointer parent_class = NULL; -+ - /* --- signals --- */ - static guint realize_signal = 0; - static guint unrealize_signal = 0; - --G_DEFINE_TYPE (GtkStyle, gtk_style, G_TYPE_OBJECT) -- - /* --- functions --- */ -+GType -+gtk_style_get_type (void) -+{ -+ static GType style_type = 0; -+ -+ if (!style_type) -+ { -+ static const GTypeInfo style_info = -+ { -+ sizeof (GtkStyleClass), -+ (GBaseInitFunc) NULL, -+ (GBaseFinalizeFunc) NULL, -+ (GClassInitFunc) gtk_style_class_init, -+ NULL, /* class_finalize */ -+ NULL, /* class_data */ -+ sizeof (GtkStyle), -+ 0, /* n_preallocs */ -+ (GInstanceInitFunc) gtk_style_init, -+ }; -+ -+ style_type = g_type_register_static (G_TYPE_OBJECT, "GtkStyle", -+ &style_info, 0); -+ } -+ -+ return style_type; -+} - - /** - * _gtk_style_init_for_settings: -@@ -477,6 +629,8 @@ - { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - -+ parent_class = g_type_class_peek_parent (klass); -+ - object_class->finalize = gtk_style_finalize; - - klass->clone = gtk_style_real_clone; -@@ -511,6 +665,7 @@ - - g_type_class_add_private (object_class, sizeof (GtkStylePrivate)); - -+ - /** - * GtkStyle::realize: - * @style: the object which received the signal -@@ -522,7 +677,7 @@ - * - * Since: 2.4 - */ -- realize_signal = g_signal_new (I_("realize"), -+ realize_signal = g_signal_new ("realize", - G_TYPE_FROM_CLASS (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GtkStyleClass, realize), -@@ -540,7 +695,7 @@ - * - * Since: 2.4 - */ -- unrealize_signal = g_signal_new (I_("unrealize"), -+ unrealize_signal = g_signal_new ("unrealize", - G_TYPE_FROM_CLASS (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GtkStyleClass, unrealize), -@@ -602,8 +757,18 @@ - } - } - -- g_slist_foreach (style->icon_factories, (GFunc) g_object_unref, NULL); -- g_slist_free (style->icon_factories); -+ if (style->icon_factories) -+ { -+ GSList *tmp_list = style->icon_factories; -+ -+ while (tmp_list) -+ { -+ g_object_unref (tmp_list->data); -+ tmp_list = tmp_list->next; -+ } -+ -+ g_slist_free (style->icon_factories); -+ } - - g_slist_foreach (priv->color_hashes, (GFunc) g_hash_table_unref, NULL); - g_slist_free (priv->color_hashes); -@@ -619,7 +784,7 @@ - if (style->rc_style) - gtk_rc_style_unref (style->rc_style); - -- G_OBJECT_CLASS (gtk_style_parent_class)->finalize (object); -+ G_OBJECT_CLASS (parent_class)->finalize (object); - } - - -@@ -686,10 +851,6 @@ - * it to a particular visual and colormap. The process may - * involve the creation of a new style if the style has already - * been attached to a window with a different style and colormap. -- * -- * Since this function may return a new object, you have to use it -- * in the following way: -- * <literal>style = gtk_style_attach (style, window)</literal> - **/ - GtkStyle* - gtk_style_attach (GtkStyle *style, -@@ -766,19 +927,10 @@ - return new_style; - } - --/** -- * gtk_style_detach: -- * @style: a #GtkStyle -- * -- * Detaches a style from a window. If the style is not attached -- * to any windows anymore, it is unrealized. See gtk_style_attach(). -- * -- */ - void - gtk_style_detach (GtkStyle *style) - { - g_return_if_fail (GTK_IS_STYLE (style)); -- g_return_if_fail (style->attach_count > 0); - - style->attach_count -= 1; - if (style->attach_count == 0) -@@ -833,6 +985,9 @@ - gtk_style_realize (GtkStyle *style, - GdkColormap *colormap) - { -+ g_return_if_fail (GTK_IS_STYLE (style)); -+ g_return_if_fail (GDK_IS_COLORMAP (colormap)); -+ - style->colormap = g_object_ref (colormap); - style->depth = gdk_colormap_get_visual (colormap)->depth; - -@@ -862,22 +1017,6 @@ - return gtk_icon_factory_lookup_default (stock_id); - } - --/** -- * gtk_style_lookup_color: -- * @style: a #GtkStyle -- * @color_name: the name of the logical color to look up -- * @color: the #GdkColor to fill in -- * -- * Looks up @color_name in the style's logical color mappings, -- * filling in @color and returning %TRUE if found, otherwise -- * returning %FALSE. Do not cache the found mapping, because -- * it depends on the #GtkStyle and might change when a theme -- * switch occurs. -- * -- * Return value: %TRUE if the mapping was found. -- * -- * Since: 2.10 -- **/ - gboolean - gtk_style_lookup_color (GtkStyle *style, - const char *color_name, -@@ -909,6 +1048,7 @@ - return FALSE; - } - -+ - /** - * gtk_draw_hline: - * @style: a #GtkStyle -@@ -1653,8 +1793,19 @@ - if (rc_style->ythickness >= 0) - style->ythickness = rc_style->ythickness; - -- style->icon_factories = g_slist_copy (rc_style->icon_factories); -- g_slist_foreach (style->icon_factories, (GFunc) g_object_ref, NULL); -+ if (rc_style->icon_factories) -+ { -+ GSList *iter; -+ -+ style->icon_factories = g_slist_copy (rc_style->icon_factories); -+ -+ iter = style->icon_factories; -+ while (iter != NULL) -+ { -+ g_object_ref (iter->data); -+ iter = g_slist_next (iter); -+ } -+ } - - priv->color_hashes = g_slist_copy (_gtk_rc_style_get_color_hashes (rc_style)); - g_slist_foreach (priv->color_hashes, (GFunc) g_hash_table_ref, NULL); -@@ -1782,7 +1933,7 @@ - { - _gtk_style_shade (&style->bg[i], &style->light[i], LIGHTNESS_MULT); - _gtk_style_shade (&style->bg[i], &style->dark[i], DARKNESS_MULT); -- -+ - style->mid[i].red = (style->light[i].red + style->dark[i].red) / 2; - style->mid[i].green = (style->light[i].green + style->dark[i].green) / 2; - style->mid[i].blue = (style->light[i].blue + style->dark[i].blue) / 2; -@@ -2162,6 +2313,57 @@ - gdk_drawable_get_size (window, NULL, height); - } - -+static GdkBitmap * -+get_indicator_for_screen (GdkDrawable *drawable, -+ IndicatorPart part) -+ -+{ -+ GdkScreen *screen = gdk_drawable_get_screen (drawable); -+ GdkBitmap *bitmap; -+ GList *tmp_list; -+ -+ tmp_list = indicator_parts[part].bmap_list; -+ while (tmp_list) -+ { -+ bitmap = tmp_list->data; -+ -+ if (gdk_drawable_get_screen (bitmap) == screen) -+ return bitmap; -+ -+ tmp_list = tmp_list->next; -+ } -+ -+ bitmap = gdk_bitmap_create_from_data (drawable, -+ (gchar *)indicator_parts[part].bits, -+ INDICATOR_PART_SIZE, INDICATOR_PART_SIZE); -+ indicator_parts[part].bmap_list = g_list_prepend (indicator_parts[part].bmap_list, bitmap); -+ -+ return bitmap; -+} -+ -+static void -+draw_part (GdkDrawable *drawable, -+ GdkGC *gc, -+ GdkRectangle *area, -+ gint x, -+ gint y, -+ IndicatorPart part) -+{ -+ if (area) -+ gdk_gc_set_clip_rectangle (gc, area); -+ -+ gdk_gc_set_ts_origin (gc, x, y); -+ gdk_gc_set_stipple (gc, get_indicator_for_screen (drawable, part)); -+ gdk_gc_set_fill (gc, GDK_STIPPLED); -+ -+ gdk_draw_rectangle (drawable, gc, TRUE, x, y, INDICATOR_PART_SIZE, INDICATOR_PART_SIZE); -+ -+ gdk_gc_set_fill (gc, GDK_SOLID); -+ -+ if (area) -+ gdk_gc_set_clip_rectangle (gc, NULL); -+} -+ - static void - gtk_default_draw_hline (GtkStyle *style, - GdkWindow *window, -@@ -2177,6 +2379,9 @@ - gint thickness_dark; - gint i; - -+ g_return_if_fail (GTK_IS_STYLE (style)); -+ g_return_if_fail (window != NULL); -+ - thickness_light = style->ythickness / 2; - thickness_dark = style->ythickness - thickness_light; - -@@ -2231,6 +2436,9 @@ - gint thickness_dark; - gint i; - -+ g_return_if_fail (GTK_IS_STYLE (style)); -+ g_return_if_fail (window != NULL); -+ - thickness_light = style->xthickness / 2; - thickness_dark = style->xthickness - thickness_light; - -@@ -2456,6 +2664,9 @@ - gint thickness_dark; - gint i; - -+ g_return_if_fail (GTK_IS_STYLE (style)); -+ g_return_if_fail (window != NULL); -+ - if (shadow_type == GTK_SHADOW_IN) - { - if (detail && (strcmp (detail, "buttondefault") == 0)) -@@ -2791,6 +3002,10 @@ - gint yadjust; - gint i; - -+ g_return_if_fail (GTK_IS_STYLE (style)); -+ g_return_if_fail (window != NULL); -+ g_return_if_fail (points != NULL); -+ - switch (shadow_type) - { - case GTK_SHADOW_IN: -@@ -2900,7 +3115,7 @@ - - static void - draw_arrow (GdkWindow *window, -- GdkColor *color, -+ GdkGC *gc, - GdkRectangle *area, - GtkArrowType arrow_type, - gint x, -@@ -2908,44 +3123,34 @@ - gint width, - gint height) - { -- cairo_t *cr = gdk_cairo_create (window); -- gdk_cairo_set_source_color (cr, color); -- -+ gint i, j; -+ - if (area) -- { -- gdk_cairo_rectangle (cr, area); -- cairo_clip (cr); -- } -- -+ gdk_gc_set_clip_rectangle (gc, area); -+ - if (arrow_type == GTK_ARROW_DOWN) - { -- cairo_move_to (cr, x, y); -- cairo_line_to (cr, x + width, y); -- cairo_line_to (cr, x + width / 2., y + height); -+ for (i = 0, j = 0; i < height; i++, j++) -+ gdk_draw_line (window, gc, x + j, y + i, x + width - j - 1, y + i); - } - else if (arrow_type == GTK_ARROW_UP) - { -- cairo_move_to (cr, x, y + height); -- cairo_line_to (cr, x + width / 2., y); -- cairo_line_to (cr, x + width, y + height); -+ for (i = height - 1, j = 0; i >= 0; i--, j++) -+ gdk_draw_line (window, gc, x + j, y + i, x + width - j - 1, y + i); - } - else if (arrow_type == GTK_ARROW_LEFT) - { -- cairo_move_to (cr, x + width, y); -- cairo_line_to (cr, x + width, y + height); -- cairo_line_to (cr, x, y + height / 2.); -+ for (i = width - 1, j = 0; i >= 0; i--, j++) -+ gdk_draw_line (window, gc, x + i, y + j, x + i, y + height - j - 1); - } - else if (arrow_type == GTK_ARROW_RIGHT) - { -- cairo_move_to (cr, x, y); -- cairo_line_to (cr, x + width, y + height / 2.); -- cairo_line_to (cr, x, y + height); -+ for (i = 0, j = 0; i < width; i++, j++) -+ gdk_draw_line (window, gc, x + i, y + j, x + i, y + height - j - 1); - } - -- cairo_close_path (cr); -- cairo_fill (cr); -- -- cairo_destroy (cr); -+ if (area) -+ gdk_gc_set_clip_rectangle (gc, NULL); - } - - static void -@@ -3032,17 +3237,22 @@ - gint width, - gint height) - { -+ gint original_width, original_x; -+ - sanitize_size (window, &width, &height); - -+ original_width = width; -+ original_x = x; -+ - calculate_arrow_geometry (arrow_type, &x, &y, &width, &height); - - if (detail && strcmp (detail, "menu_scroll_arrow_up") == 0) - y++; - - if (state == GTK_STATE_INSENSITIVE) -- draw_arrow (window, &style->white, area, arrow_type, -+ draw_arrow (window, style->white_gc, area, arrow_type, - x + 1, y + 1, width, height); -- draw_arrow (window, &style->fg[state], area, arrow_type, -+ draw_arrow (window, style->fg_gc[state], area, arrow_type, - x, y, width, height); - } - -@@ -3074,6 +3284,9 @@ - GdkGC *inner_sw = NULL; - GdkGC *inner_se = NULL; - -+ g_return_if_fail (GTK_IS_STYLE (style)); -+ g_return_if_fail (window != NULL); -+ - sanitize_size (window, &width, &height); - - half_width = width / 2; -@@ -3191,6 +3404,13 @@ - gint y, - const gchar *string) - { -+ GdkDisplay *display; -+ -+ g_return_if_fail (GTK_IS_STYLE (style)); -+ g_return_if_fail (window != NULL); -+ -+ display = gdk_drawable_get_display (window); -+ - if (area) - { - gdk_gc_set_clip_rectangle (style->white_gc, area); -@@ -3223,8 +3443,8 @@ - - if (widget) - gtk_widget_style_get (widget, -- "indicator-size", &tmp_size, -- "indicator-spacing", &tmp_spacing, -+ "indicator_size", &tmp_size, -+ "indicator_spacing", &tmp_spacing, - NULL); - - if (tmp_size) -@@ -3259,6 +3479,9 @@ - { - gboolean is_spinbutton_box = FALSE; - -+ g_return_if_fail (GTK_IS_STYLE (style)); -+ g_return_if_fail (window != NULL); -+ - sanitize_size (window, &width, &height); - - if (widget && GTK_IS_SPIN_BUTTON (widget) && detail) -@@ -3407,6 +3630,9 @@ - GdkGC *gc1; - GdkGC *freeme = NULL; - -+ g_return_if_fail (GTK_IS_STYLE (style)); -+ g_return_if_fail (window != NULL); -+ - sanitize_size (window, &width, &height); - - if (detail) -@@ -3415,26 +3641,15 @@ - { - if (!strcmp ("text", detail)) - gc1 = style->bg_gc[GTK_STATE_SELECTED]; -- else if (!strcmp ("cell_even", detail) || -- !strcmp ("cell_odd", detail) || -- !strcmp ("cell_even_ruled", detail) || -- !strcmp ("cell_even_ruled_sorted", detail)) -+ else if (!strncmp ("cell_even", detail, strlen ("cell_even")) || -+ !strncmp ("cell_odd", detail, strlen ("cell_odd"))) - { - /* This has to be really broken; alex made me do it. -jrb */ - if (GTK_WIDGET_HAS_FOCUS (widget)) - gc1 = style->base_gc[state_type]; -- else -- gc1 = style->base_gc[GTK_STATE_ACTIVE]; -+ else -+ gc1 = style->base_gc[GTK_STATE_ACTIVE]; - } -- else if (!strcmp ("cell_odd_ruled", detail) || -- !strcmp ("cell_odd_ruled_sorted", detail)) -- { -- if (GTK_WIDGET_HAS_FOCUS (widget)) -- freeme = get_darkened_gc (window, &style->base[state_type], 1); -- else -- freeme = get_darkened_gc (window, &style->base[GTK_STATE_ACTIVE], 1); -- gc1 = freeme; -- } - else - { - gc1 = style->bg_gc[state_type]; -@@ -3459,7 +3674,7 @@ - GdkColor *color = NULL; - - gtk_widget_style_get (widget, -- "even-row-color", &color, -+ "even_row_color", &color, - NULL); - - if (color) -@@ -3477,7 +3692,7 @@ - GdkColor *color; - - gtk_widget_style_get (widget, -- "odd-row-color", &color, -+ "odd_row_color", &color, - NULL); - - if (color) -@@ -3490,7 +3705,7 @@ - else - { - gtk_widget_style_get (widget, -- "even-row-color", &color, -+ "even_row_color", &color, - NULL); - - if (color) -@@ -3511,11 +3726,11 @@ - - if (!strcmp ("cell_odd_sorted", detail)) - gtk_widget_style_get (widget, -- "odd-row-color", &color, -+ "odd_row_color", &color, - NULL); - else - gtk_widget_style_get (widget, -- "even-row-color", &color, -+ "even_row_color", &color, - NULL); - - if (color) -@@ -3536,7 +3751,7 @@ - GdkColor *color = NULL; - - gtk_widget_style_get (widget, -- "odd-row-color", &color, -+ "odd_row_color", &color, - NULL); - - if (color) -@@ -3549,7 +3764,7 @@ - else - { - gtk_widget_style_get (widget, -- "even-row-color", &color, -+ "even_row_color", &color, - NULL); - - if (color) -@@ -3595,6 +3810,21 @@ - g_object_unref (freeme); - } - -+static GdkGC * -+create_aa_gc (GdkWindow *window, GtkStyle *style, GtkStateType state_type) -+{ -+ GdkColor aa_color; -+ GdkGC *gc = gdk_gc_new (window); -+ -+ aa_color.red = (style->fg[state_type].red + style->bg[state_type].red) / 2; -+ aa_color.green = (style->fg[state_type].green + style->bg[state_type].green) / 2; -+ aa_color.blue = (style->fg[state_type].blue + style->bg[state_type].blue) / 2; -+ -+ gdk_gc_set_rgb_fg_color (gc, &aa_color); -+ -+ return gc; -+} -+ - static void - gtk_default_draw_check (GtkStyle *style, - GdkWindow *window, -@@ -3608,116 +3838,92 @@ - gint width, - gint height) - { -- cairo_t *cr = gdk_cairo_create (window); -- enum { BUTTON, MENU, CELL } type = BUTTON; -- int exterior_size; -- int interior_size; -- int pad; -- -- if (detail) -- { -- if (strcmp (detail, "cellcheck") == 0) -- type = CELL; -- else if (strcmp (detail, "check") == 0) -- type = MENU; -- } -- -- if (area) -+ if (detail && strcmp (detail, "cellcheck") == 0) - { -- gdk_cairo_rectangle (cr, area); -- cairo_clip (cr); -+ if (area) -+ gdk_gc_set_clip_rectangle (widget->style->base_gc[state_type], area); -+ gdk_draw_rectangle (window, -+ widget->style->base_gc[state_type], -+ TRUE, -+ x, y, -+ width, height); -+ if (area) -+ { -+ gdk_gc_set_clip_rectangle (widget->style->base_gc[state_type], NULL); -+ gdk_gc_set_clip_rectangle (widget->style->text_gc[state_type], area); -+ } -+ gdk_draw_rectangle (window, -+ widget->style->text_gc[state_type], -+ FALSE, -+ x, y, -+ width, height); -+ if (area) -+ gdk_gc_set_clip_rectangle (widget->style->text_gc[state_type], NULL); -+ -+ x -= (1 + INDICATOR_PART_SIZE - width) / 2; -+ y -= (((1 + INDICATOR_PART_SIZE - height) / 2) - 1); -+ if (shadow_type == GTK_SHADOW_IN) -+ { -+ draw_part (window, style->text_gc[state_type], area, x, y, CHECK_TEXT); -+ draw_part (window, style->text_aa_gc[state_type], area, x, y, CHECK_AA); -+ } -+ else if (shadow_type == GTK_SHADOW_ETCHED_IN) /* inconsistent */ -+ { -+ draw_part (window, style->text_gc[state_type], area, x, y, CHECK_INCONSISTENT_TEXT); -+ } - } -- -- exterior_size = MIN (width, height); -- if (exterior_size % 2 == 0) /* Ensure odd */ -- exterior_size -= -1; -- -- pad = style->xthickness + MAX (1, (exterior_size - 2 * style->xthickness) / 9); -- interior_size = MAX (1, exterior_size - 2 * pad); -- -- if (interior_size < 7) -+ else - { -- interior_size = 7; -- pad = MAX (0, (exterior_size - interior_size) / 2); -- } -+ GdkGC *free_me = NULL; -+ -+ GdkGC *base_gc; -+ GdkGC *text_gc; -+ GdkGC *aa_gc; - -- x -= (1 + exterior_size - width) / 2; -- y -= (1 + exterior_size - height) / 2; -+ x -= (1 + INDICATOR_PART_SIZE - width) / 2; -+ y -= (1 + INDICATOR_PART_SIZE - height) / 2; - -- switch (type) -- { -- case BUTTON: -- case CELL: -- if (type == BUTTON) -- gdk_cairo_set_source_color (cr, &style->fg[state_type]); -+ if (detail && strcmp (detail, "check") == 0) /* Menu item */ -+ { -+ text_gc = style->fg_gc[state_type]; -+ base_gc = style->bg_gc[state_type]; -+ aa_gc = free_me = create_aa_gc (window, style, state_type); -+ } - else -- gdk_cairo_set_source_color (cr, &style->text[state_type]); -- -- cairo_set_line_width (cr, 1.0); -- cairo_rectangle (cr, x + 0.5, y + 0.5, exterior_size - 1, exterior_size - 1); -- cairo_stroke (cr); -+ { -+ if (state_type == GTK_STATE_ACTIVE) -+ { -+ text_gc = style->fg_gc[state_type]; -+ base_gc = style->bg_gc[state_type]; -+ aa_gc = free_me = create_aa_gc (window, style, state_type); -+ } -+ else -+ { -+ text_gc = style->text_gc[state_type]; -+ base_gc = style->base_gc[state_type]; -+ aa_gc = style->text_aa_gc[state_type]; -+ } - -- gdk_cairo_set_source_color (cr, &style->base[state_type]); -- cairo_rectangle (cr, x + 1, y + 1, exterior_size - 2, exterior_size - 2); -- cairo_fill (cr); -- break; -+ draw_part (window, base_gc, area, x, y, CHECK_BASE); -+ draw_part (window, style->black_gc, area, x, y, CHECK_BLACK); -+ draw_part (window, style->dark_gc[state_type], area, x, y, CHECK_DARK); -+ draw_part (window, style->mid_gc[state_type], area, x, y, CHECK_MID); -+ draw_part (window, style->light_gc[state_type], area, x, y, CHECK_LIGHT); -+ } - -- case MENU: -- break; -- } -- -- switch (type) -- { -- case BUTTON: -- case CELL: -- gdk_cairo_set_source_color (cr, &style->text[state_type]); -- break; -- case MENU: -- gdk_cairo_set_source_color (cr, &style->fg[state_type]); -- break; -- } -+ if (shadow_type == GTK_SHADOW_IN) -+ { -+ draw_part (window, text_gc, area, x, y, CHECK_TEXT); -+ draw_part (window, aa_gc, area, x, y, CHECK_AA); -+ } -+ else if (shadow_type == GTK_SHADOW_ETCHED_IN) /* inconsistent */ -+ { -+ draw_part (window, text_gc, area, x, y, CHECK_INCONSISTENT_TEXT); -+ } - -- if (shadow_type == GTK_SHADOW_IN) -- { -- cairo_translate (cr, -- x + pad, y + pad); -- -- cairo_scale (cr, interior_size / 7., interior_size / 7.); -- -- cairo_move_to (cr, 7.0, 0.0); -- cairo_line_to (cr, 7.5, 1.0); -- cairo_curve_to (cr, 5.3, 2.0, -- 4.3, 4.0, -- 3.5, 7.0); -- cairo_curve_to (cr, 3.0, 5.7, -- 1.3, 4.7, -- 0.0, 4.7); -- cairo_line_to (cr, 0.2, 3.5); -- cairo_curve_to (cr, 1.1, 3.5, -- 2.3, 4.3, -- 3.0, 5.0); -- cairo_curve_to (cr, 1.0, 3.9, -- 2.4, 4.1, -- 3.2, 4.9); -- cairo_curve_to (cr, 3.5, 3.1, -- 5.2, 2.0, -- 7.0, 0.0); -- -- cairo_fill (cr); -- } -- else if (shadow_type == GTK_SHADOW_ETCHED_IN) /* inconsistent */ -- { -- int line_thickness = MAX (1, (3 + interior_size * 2) / 7); -- -- cairo_rectangle (cr, -- x + pad, -- y + pad + (1 + interior_size - line_thickness) / 2, -- interior_size, -- line_thickness); -- cairo_fill (cr); -+ if (free_me) -+ g_object_unref (free_me); - } -- -- cairo_destroy (cr); - } - - static void -@@ -3733,111 +3939,96 @@ - gint width, - gint height) - { -- cairo_t *cr = gdk_cairo_create (window); -- enum { BUTTON, MENU, CELL } type = BUTTON; -- int exterior_size; -- -- if (detail) -+ if (detail && strcmp (detail, "cellradio") == 0) - { -- if (strcmp (detail, "radio") == 0) -- type = CELL; -- else if (strcmp (detail, "option") == 0) -- type = MENU; -- } -- -- if (area) -- { -- gdk_cairo_rectangle (cr, area); -- cairo_clip (cr); -+ if (area) -+ gdk_gc_set_clip_rectangle (widget->style->fg_gc[state_type], area); -+ gdk_draw_arc (window, -+ widget->style->fg_gc[state_type], -+ FALSE, -+ x, y, -+ width, -+ height, -+ 0, 360*64); -+ -+ if (shadow_type == GTK_SHADOW_IN) -+ { -+ gdk_draw_arc (window, -+ widget->style->fg_gc[state_type], -+ TRUE, -+ x + 2, -+ y + 2, -+ width - 4, -+ height - 4, -+ 0, 360*64); -+ } -+ else if (shadow_type == GTK_SHADOW_ETCHED_IN) /* inconsistent */ -+ { -+ draw_part (window, widget->style->fg_gc[state_type], -+ area, x, y, CHECK_INCONSISTENT_TEXT); -+ } -+ if (area) -+ gdk_gc_set_clip_rectangle (widget->style->fg_gc[state_type], NULL); - } -- -- exterior_size = MIN (width, height); -- if (exterior_size % 2 == 0) /* Ensure odd */ -- exterior_size -= -1; -- -- x -= (1 + exterior_size - width) / 2; -- y -= (1 + exterior_size - height) / 2; -- -- switch (type) -+ else - { -- case BUTTON: -- case CELL: -- gdk_cairo_set_source_color (cr, &style->base[state_type]); -+ GdkGC *free_me = NULL; - -- cairo_arc (cr, -- x + exterior_size / 2., -- y + exterior_size / 2., -- (exterior_size - 1) / 2., -- 0, 2 * G_PI); -+ GdkGC *base_gc; -+ GdkGC *text_gc; -+ GdkGC *aa_gc; - -- cairo_fill_preserve (cr); -+ x -= (1 + INDICATOR_PART_SIZE - width) / 2; -+ y -= (1 + INDICATOR_PART_SIZE - height) / 2; - -- if (type == BUTTON) -- gdk_cairo_set_source_color (cr, &style->fg[state_type]); -+ if (detail && strcmp (detail, "option") == 0) /* Menu item */ -+ { -+ text_gc = style->fg_gc[state_type]; -+ base_gc = style->bg_gc[state_type]; -+ aa_gc = free_me = create_aa_gc (window, style, state_type); -+ } - else -- gdk_cairo_set_source_color (cr, &style->text[state_type]); -- -- cairo_set_line_width (cr, 1.); -- cairo_stroke (cr); -- break; -- -- case MENU: -- break; -- } -- -- switch (type) -- { -- case BUTTON: -- gdk_cairo_set_source_color (cr, &style->text[state_type]); -- break; -- case CELL: -- break; -- case MENU: -- gdk_cairo_set_source_color (cr, &style->fg[state_type]); -- break; -- } -+ { -+ if (state_type == GTK_STATE_ACTIVE) -+ { -+ text_gc = style->fg_gc[state_type]; -+ base_gc = style->bg_gc[state_type]; -+ aa_gc = free_me = create_aa_gc (window, style, state_type); -+ } -+ else -+ { -+ text_gc = style->text_gc[state_type]; -+ base_gc = style->base_gc[state_type]; -+ aa_gc = style->text_aa_gc[state_type]; -+ } - -- if (shadow_type == GTK_SHADOW_IN) -- { -- int pad = style->xthickness + MAX (1, 2 * (exterior_size - 2 * style->xthickness) / 9); -- int interior_size = MAX (1, exterior_size - 2 * pad); -+ draw_part (window, base_gc, area, x, y, RADIO_BASE); -+ draw_part (window, style->black_gc, area, x, y, RADIO_BLACK); -+ draw_part (window, style->dark_gc[state_type], area, x, y, RADIO_DARK); -+ draw_part (window, style->mid_gc[state_type], area, x, y, RADIO_MID); -+ draw_part (window, style->light_gc[state_type], area, x, y, RADIO_LIGHT); -+ } - -- if (interior_size < 5) -+ if (shadow_type == GTK_SHADOW_IN) - { -- interior_size = 7; -- pad = MAX (0, (exterior_size - interior_size) / 2); -+ draw_part (window, text_gc, area, x, y, RADIO_TEXT); - } -- -- cairo_arc (cr, -- x + pad + interior_size / 2., -- y + pad + interior_size / 2., -- interior_size / 2., -- 0, 2 * G_PI); -- cairo_fill (cr); -- } -- else if (shadow_type == GTK_SHADOW_ETCHED_IN) /* inconsistent */ -- { -- int pad = style->xthickness + MAX (1, (exterior_size - 2 * style->xthickness) / 9); -- int interior_size = MAX (1, exterior_size - 2 * pad); -- int line_thickness; -- -- if (interior_size < 7) -+ else if (shadow_type == GTK_SHADOW_ETCHED_IN) /* inconsistent */ - { -- interior_size = 7; -- pad = MAX (0, (exterior_size - interior_size) / 2); -+ if (detail && strcmp (detail, "option") == 0) /* Menu item */ -+ { -+ draw_part (window, text_gc, area, x, y, CHECK_INCONSISTENT_TEXT); -+ } -+ else -+ { -+ draw_part (window, text_gc, area, x, y, RADIO_INCONSISTENT_TEXT); -+ draw_part (window, aa_gc, area, x, y, RADIO_INCONSISTENT_AA); -+ } - } - -- line_thickness = MAX (1, (3 + interior_size * 2) / 7); -- -- cairo_rectangle (cr, -- x + pad, -- y + pad + (interior_size - line_thickness) / 2., -- interior_size, -- line_thickness); -- cairo_fill (cr); -+ if (free_me) -+ g_object_unref (free_me); - } -- -- cairo_destroy (cr); - } - - static void -@@ -3869,21 +4060,21 @@ - - if (state_type == GTK_STATE_INSENSITIVE) - { -- draw_arrow (window, &style->white, area, -+ draw_arrow (window, style->white_gc, area, - GTK_ARROW_UP, x + 1, y + 1, - indicator_size.width, arrow_height); - -- draw_arrow (window, &style->white, area, -+ draw_arrow (window, style->white_gc, area, - GTK_ARROW_DOWN, x + 1, y + arrow_height + ARROW_SPACE + 1, - indicator_size.width, arrow_height); - } - -- draw_arrow (window, &style->fg[state_type], area, -+ draw_arrow (window, style->fg_gc[state_type], area, - GTK_ARROW_UP, x, y, - indicator_size.width, arrow_height); - - -- draw_arrow (window, &style->fg[state_type], area, -+ draw_arrow (window, style->fg_gc[state_type], area, - GTK_ARROW_DOWN, x, y + arrow_height + ARROW_SPACE, - indicator_size.width, arrow_height); - } -@@ -3909,6 +4100,9 @@ - GdkGC *gc3 = NULL; - GdkGC *gc4 = NULL; - -+ g_return_if_fail (GTK_IS_STYLE (style)); -+ g_return_if_fail (window != NULL); -+ - sanitize_size (window, &width, &height); - - switch (shadow_type) -@@ -4122,6 +4316,9 @@ - GdkGC *gc3 = NULL; - GdkGC *gc4 = NULL; - -+ g_return_if_fail (GTK_IS_STYLE (style)); -+ g_return_if_fail (window != NULL); -+ - gtk_style_apply_default_background (style, window, - widget && !GTK_WIDGET_NO_WINDOW (widget), - state_type, area, x, y, width, height); -@@ -4338,6 +4535,9 @@ - GdkGC *gc3 = NULL; - GdkGC *gc4 = NULL; - -+ g_return_if_fail (GTK_IS_STYLE (style)); -+ g_return_if_fail (window != NULL); -+ - gtk_style_apply_default_background (style, window, - widget && !GTK_WIDGET_NO_WINDOW (widget), - GTK_STATE_NORMAL, area, x, y, width, height); -@@ -4503,10 +4703,12 @@ - gint width, - gint height) - { -- cairo_t *cr; -+ GdkPoint points[5]; -+ GdkGC *gc; - gboolean free_dash_list = FALSE; - gint line_width = 1; - gint8 *dash_list = "\1\1"; -+ gint dash_len; - - if (widget) - { -@@ -4518,6 +4720,22 @@ - free_dash_list = TRUE; - } - -+ sanitize_size (window, &width, &height); -+ -+ if (detail && !strcmp (detail, "colorwheel_light")) -+ gc = style->black_gc; -+ else if (detail && !strcmp (detail, "colorwheel_dark")) -+ gc = style->white_gc; -+ else -+ gc = style->fg_gc[state_type]; -+ -+ gdk_gc_set_line_attributes (gc, line_width, -+ dash_list[0] ? GDK_LINE_ON_OFF_DASH : GDK_LINE_SOLID, -+ GDK_CAP_BUTT, GDK_JOIN_MITER); -+ -+ if (area) -+ gdk_gc_set_clip_rectangle (gc, area); -+ - if (detail && !strcmp (detail, "add-mode")) - { - if (free_dash_list) -@@ -4527,59 +4745,88 @@ - free_dash_list = FALSE; - } - -- sanitize_size (window, &width, &height); -+ points[0].x = x + line_width / 2; -+ points[0].y = y + line_width / 2; -+ points[1].x = x + width - line_width + line_width / 2; -+ points[1].y = y + line_width / 2; -+ points[2].x = x + width - line_width + line_width / 2; -+ points[2].y = y + height - line_width + line_width / 2; -+ points[3].x = x + line_width / 2; -+ points[3].y = y + height - line_width + line_width / 2; -+ points[4] = points[0]; - -- cr = gdk_cairo_create (window); -- -- if (detail && !strcmp (detail, "colorwheel_light")) -- cairo_set_source_rgb (cr, 0., 0., 0.); -- else if (detail && !strcmp (detail, "colorwheel_dark")) -- cairo_set_source_rgb (cr, 1., 1., 1.); -+ if (!dash_list[0]) -+ { -+ gdk_draw_lines (window, gc, points, 5); -+ } - else -- gdk_cairo_set_source_color (cr, &style->fg[state_type]); -- -- cairo_set_line_width (cr, line_width); -- -- if (dash_list[0]) - { -- gint n_dashes = strlen (dash_list); -- gdouble *dashes = g_new (gdouble, n_dashes); -- gdouble total_length = 0; -- gdouble dash_offset; -- gint i; -- -- for (i = 0; i < n_dashes; i++) -+ /* We go through all the pain below because the X rasterization -+ * rules don't really work right for dashed lines if you -+ * want continuity in segments that go between top/right -+ * and left/bottom. For instance, a top left corner -+ * with a 1-1 dash is drawn as: -+ * -+ * X X X -+ * X -+ * -+ * X -+ * -+ * This is because pixels on the top and left boundaries -+ * of polygons are drawn, but not on the bottom and right. -+ * So, if you have a line going up that turns the corner -+ * and goes right, there is a one pixel shift in the pattern. -+ * -+ * So, to fix this, we drawn the top and right in one call, -+ * then the left and bottom in another call, fixing up -+ * the dash offset for the second call ourselves to get -+ * continuity at the upper left. -+ * -+ * It's not perfect since we really should have a join at -+ * the upper left and lower right instead of two intersecting -+ * lines but that's only really apparent for no-dashes, -+ * which (for this reason) are done as one polygon and -+ * don't to through this code path. -+ */ -+ -+ dash_len = strlen (dash_list); -+ -+ if (dash_list[0]) -+ gdk_gc_set_dashes (gc, 0, dash_list, dash_len); -+ -+ gdk_draw_lines (window, gc, points, 3); -+ -+ /* We draw this line one farther over than it is "supposed" to -+ * because of another rasterization problem ... if two 1 pixel -+ * unjoined lines meet at the lower right, there will be a missing -+ * pixel. -+ */ -+ points[2].x += 1; -+ -+ if (dash_list[0]) - { -- dashes[i] = dash_list[i]; -- total_length += dash_list[i]; -+ gint dash_pixels = 0; -+ gint i; -+ -+ /* Adjust the dash offset for the bottom and left so we -+ * match up at the upper left. -+ */ -+ for (i = 0; i < dash_len; i++) -+ dash_pixels += dash_list[i]; -+ -+ if (dash_len % 2 == 1) -+ dash_pixels *= 2; -+ -+ gdk_gc_set_dashes (gc, dash_pixels - (width + height - 2 * line_width) % dash_pixels, dash_list, dash_len); - } -- -- /* The dash offset here aligns the pattern to integer pixels -- * by starting the dash at the right side of the left border -- * Negative dash offsets in cairo don't work -- * (https://bugs.freedesktop.org/show_bug.cgi?id=2729) -- */ -- dash_offset = - line_width / 2.; -- while (dash_offset < 0) -- dash_offset += total_length; - -- cairo_set_dash (cr, dashes, n_dashes, dash_offset); -- g_free (dashes); -+ gdk_draw_lines (window, gc, points + 2, 3); - } - -- if (area) -- { -- gdk_cairo_rectangle (cr, area); -- cairo_clip (cr); -- } -+ gdk_gc_set_line_attributes (gc, 0, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER); - -- cairo_rectangle (cr, -- x + line_width / 2., -- y + line_width / 2., -- width - line_width, -- height - line_width); -- cairo_stroke (cr); -- cairo_destroy (cr); -+ if (area) -+ gdk_gc_set_clip_rectangle (gc, NULL); - - if (free_dash_list) - g_free (dash_list); -@@ -4599,6 +4846,9 @@ - gint height, - GtkOrientation orientation) - { -+ g_return_if_fail (GTK_IS_STYLE (style)); -+ g_return_if_fail (window != NULL); -+ - sanitize_size (window, &width, &height); - - gtk_paint_box (style, window, state_type, shadow_type, -@@ -4627,6 +4877,7 @@ - gint y, - gushort size) - { -+ - size = CLAMP (size, 2, 3); - - if (size == 2) -@@ -4667,6 +4918,9 @@ - GdkRectangle dest; - gint intersect; - -+ g_return_if_fail (GTK_IS_STYLE (style)); -+ g_return_if_fail (window != NULL); -+ - sanitize_size (window, &width, &height); - - gtk_paint_box (style, window, state_type, shadow_type, area, widget, -@@ -4682,9 +4936,9 @@ - if (state_type == GTK_STATE_SELECTED && widget && !GTK_WIDGET_HAS_FOCUS (widget)) - { - GdkColor unfocused_light; -- -+ - _gtk_style_shade (&style->base[GTK_STATE_ACTIVE], &unfocused_light, -- LIGHTNESS_MULT); -+ LIGHTNESS_MULT); - - light_gc = free_me = gdk_gc_new (window); - gdk_gc_set_rgb_fg_color (light_gc, &unfocused_light); -@@ -4750,6 +5004,72 @@ - } - - static void -+create_expander_affine (gdouble affine[6], -+ gint degrees, -+ gint expander_size, -+ gint x, -+ gint y) -+{ -+ gdouble s, c; -+ gdouble width; -+ gdouble height; -+ -+ width = expander_size / 4.0; -+ height = expander_size / 2.0; -+ -+ switch (degrees) -+ { -+ case 0: -+ s = 0.0; -+ c = 1.0; -+ break; -+ case 90: -+ s = 1.0; -+ c = 0.0; -+ break; -+ case 180: -+ s = 0.0; -+ c = -1.0; -+ break; -+ default: -+ s = sin (degrees * G_PI / 180.0); -+ c = cos (degrees * G_PI / 180.0); -+ break; -+ } -+ -+ affine[0] = c; -+ affine[1] = s; -+ affine[2] = -s; -+ affine[3] = c; -+ affine[4] = -width * c - height * -s + x; -+ affine[5] = -width * s - height * c + y; -+} -+ -+static void -+apply_affine_on_point (double affine[6], GdkPoint *point) -+{ -+ gdouble x, y; -+ -+ x = point->x * affine[0] + point->y * affine[2] + affine[4]; -+ y = point->x * affine[1] + point->y * affine[3] + affine[5]; -+ -+ point->x = floor (x); -+ point->y = floor (y); -+} -+ -+static void -+gtk_style_draw_polygon_with_gc (GdkWindow *window, GdkGC *gc, gint line_width, -+ gboolean do_fill, GdkPoint *points, gint n_points) -+{ -+ gdk_gc_set_line_attributes (gc, line_width, -+ GDK_LINE_SOLID, -+ GDK_CAP_BUTT, GDK_JOIN_MITER); -+ -+ gdk_draw_polygon (window, gc, do_fill, points, n_points); -+ gdk_gc_set_line_attributes (gc, 0, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER); -+} -+ -+static void - gtk_default_draw_expander (GtkStyle *style, - GdkWindow *window, - GtkStateType state_type, -@@ -4760,127 +5080,82 @@ - gint y, - GtkExpanderStyle expander_style) - { --#define DEFAULT_EXPANDER_SIZE 12 -- - gint expander_size; -- gint line_width; -- double vertical_overshoot; -- int diameter; -- double radius; -- double interp; /* interpolation factor for center position */ -- double x_double_horz, y_double_horz; -- double x_double_vert, y_double_vert; -- double x_double, y_double; -+ GdkPoint points[3]; -+ gint i; -+ gint line_width, o; -+ gdouble affine[6]; - gint degrees = 0; - -- cairo_t *cr = gdk_cairo_create (window); -- -+ gtk_widget_style_get (widget, -+ "expander-size", &expander_size, -+ NULL); -+ line_width = MAX (1, expander_size/9); -+ - if (area) - { -- gdk_cairo_rectangle (cr, area); -- cairo_clip (cr); -+ gdk_gc_set_clip_rectangle (style->fg_gc[GTK_STATE_NORMAL], area); -+ gdk_gc_set_clip_rectangle (style->base_gc[GTK_STATE_NORMAL], area); - } - -- if (widget && -- gtk_widget_class_find_style_property (GTK_WIDGET_GET_CLASS (widget), -- "expander-size")) -- { -- gtk_widget_style_get (widget, -- "expander-size", &expander_size, -- NULL); -- } -- else -- expander_size = DEFAULT_EXPANDER_SIZE; -- -- line_width = MAX (1, expander_size/9); -+ /* a rough estimate of how much the joins of the triangle will overshoot. -+ * 2.4 ~ 1 / tan (45 / 2) -+ */ -+ o = ceil (2.4 * line_width / 2.0); -+ points[0].x = line_width / 2; -+ points[0].y = o; -+ points[1].x = expander_size / 2 + line_width / 2 - o; -+ points[1].y = expander_size / 2; -+ points[2].x = line_width / 2; -+ points[2].y = expander_size - o; - - switch (expander_style) - { - case GTK_EXPANDER_COLLAPSED: - degrees = (get_direction (widget) == GTK_TEXT_DIR_RTL) ? 180 : 0; -- interp = 0.0; - break; - case GTK_EXPANDER_SEMI_COLLAPSED: - degrees = (get_direction (widget) == GTK_TEXT_DIR_RTL) ? 150 : 30; -- interp = 0.25; - break; - case GTK_EXPANDER_SEMI_EXPANDED: - degrees = (get_direction (widget) == GTK_TEXT_DIR_RTL) ? 120 : 60; -- interp = 0.75; - break; - case GTK_EXPANDER_EXPANDED: - degrees = 90; -- interp = 1.0; - break; - default: - g_assert_not_reached (); - } - -- /* Compute distance that the stroke extends beyonds the end -- * of the triangle we draw. -- */ -- vertical_overshoot = line_width / 2.0 * (1. / tan (G_PI / 8)); -- -- /* For odd line widths, we end the vertical line of the triangle -- * at a half pixel, so we round differently. -- */ -- if (line_width % 2 == 1) -- vertical_overshoot = ceil (0.5 + vertical_overshoot) - 0.5; -- else -- vertical_overshoot = ceil (vertical_overshoot); -- -- /* Adjust the size of the triangle we draw so that the entire stroke fits -- */ -- diameter = MAX (3, expander_size - 2 * vertical_overshoot); -- -- /* If the line width is odd, we want the diameter to be even, -- * and vice versa, so force the sum to be odd. This relationship -- * makes the point of the triangle look right. -- */ -- diameter -= (1 - (diameter + line_width) % 2); -- -- radius = diameter / 2.; -- -- /* Adjust the center so that the stroke is properly aligned with -- * the pixel grid. The center adjustment is different for the -- * horizontal and vertical orientations. For intermediate positions -- * we interpolate between the two. -- */ -- x_double_vert = floor (x - (radius + line_width) / 2.) + (radius + line_width) / 2.; -- y_double_vert = y - 0.5; -- -- x_double_horz = x - 0.5; -- y_double_horz = floor (y - (radius + line_width) / 2.) + (radius + line_width) / 2.; -- -- x_double = x_double_vert * (1 - interp) + x_double_horz * interp; -- y_double = y_double_vert * (1 - interp) + y_double_horz * interp; -- -- cairo_translate (cr, x_double, y_double); -- cairo_rotate (cr, degrees * G_PI / 180); -+ create_expander_affine (affine, degrees, expander_size, x, y); - -- cairo_move_to (cr, - radius / 2., - radius); -- cairo_line_to (cr, radius / 2., 0); -- cairo_line_to (cr, - radius / 2., radius); -- cairo_close_path (cr); -- -- cairo_set_line_width (cr, line_width); -+ for (i = 0; i < 3; i++) -+ apply_affine_on_point (affine, &points[i]); - - if (state_type == GTK_STATE_PRELIGHT) -- gdk_cairo_set_source_color (cr, -- &style->fg[GTK_STATE_PRELIGHT]); -+ { -+ gtk_style_draw_polygon_with_gc (window, style->fg_gc[GTK_STATE_PRELIGHT], -+ 1, TRUE, points, 3); -+ } - else if (state_type == GTK_STATE_ACTIVE) -- gdk_cairo_set_source_color (cr, -- &style->light[GTK_STATE_ACTIVE]); -+ { -+ gtk_style_draw_polygon_with_gc (window, style->light_gc[GTK_STATE_ACTIVE], -+ 1, TRUE, points, 3); -+ gtk_style_draw_polygon_with_gc (window, style->fg_gc[GTK_STATE_NORMAL], -+ line_width, FALSE, points, 3); -+ } - else -- gdk_cairo_set_source_color (cr, -- &style->base[GTK_STATE_NORMAL]); -- -- cairo_fill_preserve (cr); -- -- gdk_cairo_set_source_color (cr, &style->fg[state_type]); -- cairo_stroke (cr); -- -- cairo_destroy (cr); -+ { -+ gtk_style_draw_polygon_with_gc (window, style->base_gc[GTK_STATE_NORMAL], -+ 1, TRUE, points, 3); -+ gtk_style_draw_polygon_with_gc (window, style->fg_gc[GTK_STATE_NORMAL], -+ line_width, FALSE, points, 3); -+ } -+ if (area) -+ { -+ gdk_gc_set_clip_rectangle (style->fg_gc[GTK_STATE_NORMAL], NULL); -+ gdk_gc_set_clip_rectangle (style->base_gc[GTK_STATE_NORMAL], NULL); -+ } - } - - typedef struct _ByteRange ByteRange; -@@ -5046,6 +5321,9 @@ - PangoLayout *layout) - { - GdkGC *gc; -+ -+ g_return_if_fail (GTK_IS_STYLE (style)); -+ g_return_if_fail (window != NULL); - - gc = use_text ? style->text_gc[state_type] : style->fg_gc[state_type]; - -@@ -5087,6 +5365,9 @@ - GdkPoint points[4]; - gint i, j, skip; - -+ g_return_if_fail (GTK_IS_STYLE (style)); -+ g_return_if_fail (window != NULL); -+ - if (area) - { - gdk_gc_set_clip_rectangle (style->light_gc[state_type], area); -@@ -5390,8 +5671,8 @@ - - void - _gtk_style_shade (GdkColor *a, -- GdkColor *b, -- gdouble k) -+ GdkColor *b, -+ gdouble k) - { - gdouble red; - gdouble green; -@@ -5578,10 +5859,9 @@ - * @style: a #GtkStyle - * @window: a #GdkWindow - * @state_type: a state -- * @area: rectangle to which the output is clipped, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: rectangle to which the output is clipped -+ * @widget: the widget -+ * @detail: a style detail - * @x1: the starting x coordinate - * @x2: the ending x coordinate - * @y: the y coordinate -@@ -5602,7 +5882,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_hline != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_hline (style, window, state_type, area, widget, detail, x1, x2, y); - } -@@ -5612,10 +5891,9 @@ - * @style: a #GtkStyle - * @window: a #GdkWindow - * @state_type: a state -- * @area: rectangle to which the output is clipped, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: rectangle to which the output is clipped -+ * @widget: the widget -+ * @detail: a style detail - * @y1_: the starting y coordinate - * @y2_: the ending y coordinate - * @x: the x coordinate -@@ -5636,7 +5914,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_vline != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_vline (style, window, state_type, area, widget, detail, y1_, y2_, x); - } -@@ -5647,10 +5924,9 @@ - * @window: a #GdkWindow - * @state_type: a state - * @shadow_type: type of shadow to draw -- * @area: clip rectangle or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: clip rectangle -+ * @widget: the widget -+ * @detail: a style detail - * @x: x origin of the rectangle - * @y: y origin of the rectangle - * @width: width of the rectangle -@@ -5674,7 +5950,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_shadow != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_shadow (style, window, state_type, shadow_type, area, widget, detail, x, y, width, height); - } -@@ -5685,10 +5960,9 @@ - * @window: a #GdkWindow - * @state_type: a state - * @shadow_type: type of shadow to draw -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: clip rectangle -+ * @widget: the widget -+ * @detail: a style detail - * @points: an array of #GdkPoint<!-- -->s - * @npoints: length of @points - * @fill: %TRUE if the polygon should be filled -@@ -5709,7 +5983,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_polygon != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_polygon (style, window, state_type, shadow_type, area, widget, detail, points, npoints, fill); - } -@@ -5720,10 +5993,9 @@ - * @window: a #GdkWindow - * @state_type: a state - * @shadow_type: the type of shadow to draw -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: clip rectangle -+ * @widget: the widget -+ * @detail: a style detail - * @arrow_type: the type of arrow to draw - * @fill: %TRUE if the arrow tip should be filled - * @x: x origin of the rectangle to draw the arrow in -@@ -5751,7 +6023,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_arrow != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_arrow (style, window, state_type, shadow_type, area, widget, detail, arrow_type, fill, x, y, width, height); - } -@@ -5762,10 +6033,9 @@ - * @window: a #GdkWindow - * @state_type: a state - * @shadow_type: the type of shadow to draw -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: clip rectangle -+ * @widget: the widget -+ * @detail: a style detail - * @x: x origin of the rectangle to draw the diamond in - * @y: y origin of the rectangle to draw the diamond in - * @width: width of the rectangle to draw the diamond in -@@ -5789,7 +6059,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_diamond != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_diamond (style, window, state_type, shadow_type, area, widget, detail, x, y, width, height); - } -@@ -5799,10 +6068,9 @@ - * @style: a #GtkStyle - * @window: a #GdkWindow - * @state_type: a state -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: clip rectangle -+ * @widget: the widget -+ * @detail: a style detail - * @x: x origin - * @y: y origin - * @string: the string to draw -@@ -5824,7 +6092,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_string != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_string (style, window, state_type, area, widget, detail, x, y, string); - } -@@ -5835,10 +6102,9 @@ - * @window: a #GdkWindow - * @state_type: a state - * @shadow_type: the type of shadow to draw -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: clip rectangle -+ * @widget: the widget -+ * @detail: a style detail - * @x: x origin of the box - * @y: y origin of the box - * @width: the width of the box -@@ -5861,7 +6127,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_box != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_box (style, window, state_type, shadow_type, area, widget, detail, x, y, width, height); - } -@@ -5872,10 +6137,9 @@ - * @window: a #GdkWindow - * @state_type: a state - * @shadow_type: the type of shadow to draw -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: clip rectangle -+ * @widget: the widget -+ * @detail: a style detail - * @x: x origin of the box - * @y: y origin of the box - * @width: the width of the box -@@ -5898,7 +6162,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_flat_box != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_flat_box (style, window, state_type, shadow_type, area, widget, detail, x, y, width, height); - } -@@ -5909,10 +6172,9 @@ - * @window: a #GdkWindow - * @state_type: a state - * @shadow_type: the type of shadow to draw -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: clip rectangle -+ * @widget: the widget -+ * @detail: a style detail - * @x: x origin of the rectangle to draw the check in - * @y: y origin of the rectangle to draw the check in - * @width: the width of the rectangle to draw the check in -@@ -5936,7 +6198,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_check != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_check (style, window, state_type, shadow_type, area, widget, detail, x, y, width, height); - } -@@ -5947,10 +6208,9 @@ - * @window: a #GdkWindow - * @state_type: a state - * @shadow_type: the type of shadow to draw -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: clip rectangle -+ * @widget: the widget -+ * @detail: a style detail - * @x: x origin of the rectangle to draw the option in - * @y: y origin of the rectangle to draw the option in - * @width: the width of the rectangle to draw the option in -@@ -5974,7 +6234,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_option != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_option (style, window, state_type, shadow_type, area, widget, detail, x, y, width, height); - } -@@ -5985,10 +6244,9 @@ - * @window: a #GdkWindow - * @state_type: a state - * @shadow_type: the type of shadow to draw -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: clip rectangle -+ * @widget: the widget -+ * @detail: a style detail - * @x: x origin of the rectangle to draw the tab in - * @y: y origin of the rectangle to draw the tab in - * @width: the width of the rectangle to draw the tab in -@@ -6012,7 +6270,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_tab != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_tab (style, window, state_type, shadow_type, area, widget, detail, x, y, width, height); - } -@@ -6023,10 +6280,9 @@ - * @window: a #GdkWindow - * @state_type: a state - * @shadow_type: type of shadow to draw -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: clip rectangle -+ * @widget: the widget -+ * @detail: a style detail - * @x: x origin of the rectangle - * @y: y origin of the rectangle - * @width: width of the rectangle -@@ -6057,7 +6313,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_shadow_gap != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_shadow_gap (style, window, state_type, shadow_type, area, widget, detail, x, y, width, height, gap_side, gap_x, gap_width); - } -@@ -6069,10 +6324,9 @@ - * @window: a #GdkWindow - * @state_type: a state - * @shadow_type: type of shadow to draw -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: clip rectangle -+ * @widget: the widget -+ * @detail: a style detail - * @x: x origin of the rectangle - * @y: y origin of the rectangle - * @width: width of the rectangle -@@ -6102,7 +6356,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_box_gap != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_box_gap (style, window, state_type, shadow_type, area, widget, detail, x, y, width, height, gap_side, gap_x, gap_width); - } -@@ -6113,10 +6366,9 @@ - * @window: a #GdkWindow - * @state_type: a state - * @shadow_type: type of shadow to draw -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: clip rectangle -+ * @widget: the widget -+ * @detail: a style detail - * @x: x origin of the extension - * @y: y origin of the extension - * @width: width of the extension -@@ -6141,7 +6393,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_extension != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_extension (style, window, state_type, shadow_type, area, widget, detail, x, y, width, height, gap_side); - } -@@ -6151,10 +6402,9 @@ - * @style: a #GtkStyle - * @window: a #GdkWindow - * @state_type: a state -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: clip rectangle -+ * @widget: the widget -+ * @detail: a style detail - * @x: the x origin of the rectangle around which to draw a focus indicator - * @y: the y origin of the rectangle around which to draw a focus indicator - * @width: the width of the rectangle around which to draw a focus indicator -@@ -6177,30 +6427,10 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_focus != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_focus (style, window, state_type, area, widget, detail, x, y, width, height); - } - --/** -- * gtk_paint_slider: -- * @style: a #GtkStyle -- * @window: a #GdkWindow -- * @state_type: a state -- * @shadow_type: a shadow -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -- * @x: the x origin of the rectangle in which to draw a slider -- * @y: the y origin of the rectangle in which to draw a slider -- * @width: the width of the rectangle in which to draw a slider -- * @height: the height of the rectangle in which to draw a slider -- * @orientation: the orientation to be used -- * -- * Draws a slider in the given rectangle on @window using the -- * given style and orientation. -- **/ - void - gtk_paint_slider (GtkStyle *style, - GdkWindow *window, -@@ -6217,7 +6447,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_slider != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_slider (style, window, state_type, shadow_type, area, widget, detail, x, y, width, height, orientation); - } -@@ -6228,10 +6457,9 @@ - * @window: a #GdkWindow - * @state_type: a state - * @shadow_type: type of shadow to draw -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: clip rectangle -+ * @widget: the widget -+ * @detail: a style detail - * @x: x origin of the handle - * @y: y origin of the handle - * @width: with of the handle -@@ -6256,7 +6484,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_handle != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_handle (style, window, state_type, shadow_type, area, widget, detail, x, y, width, height, orientation); - } -@@ -6266,25 +6493,14 @@ - * @style: a #GtkStyle - * @window: a #GdkWindow - * @state_type: a state -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: clip rectangle -+ * @widget: the widget -+ * @detail: a style detail - * @x: the x position to draw the expander at - * @y: the y position to draw the expander at -- * @expander_style: the style to draw the expander in; determines -- * whether the expander is collapsed, expanded, or in an -- * intermediate state. -+ * @expander_style: the style to draw the expander in - * -- * Draws an expander as used in #GtkTreeView. @x and @y specify the -- * center the expander. The size of the expander is determined by the -- * "expander-size" style property of @widget. (If widget is not -- * specified or doesn't have an "expander-size" property, an -- * unspecified default size will be used, since the caller doesn't -- * have sufficient information to position the expander, this is -- * likely not useful.) The expander is expander_size pixels tall -- * in the collapsed position and expander_size pixels wide in the -- * expanded position. -+ * Draws an expander as used in #GtkTreeView. - **/ - void - gtk_paint_expander (GtkStyle *style, -@@ -6299,34 +6515,16 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_expander != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_expander (style, window, state_type, area, - widget, detail, x, y, expander_style); - } - --/** -- * gtk_paint_layout: -- * @style: a #GtkStyle -- * @window: a #GdkWindow -- * @state_type: a state -- * @use_text: whether to use the text or foreground -- * graphics context of @style -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -- * @x: x origin -- * @y: y origin -- * @layout: the layout to draw -- * -- * Draws a layout on @window using the given parameters. -- **/ - void - gtk_paint_layout (GtkStyle *style, - GdkWindow *window, - GtkStateType state_type, -- gboolean use_text, -+ gboolean use_text, - GdkRectangle *area, - GtkWidget *widget, - const gchar *detail, -@@ -6336,7 +6534,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_layout != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_layout (style, window, state_type, use_text, area, - widget, detail, x, y, layout); -@@ -6347,10 +6544,9 @@ - * @style: a #GtkStyle - * @window: a #GdkWindow - * @state_type: a state -- * @area: clip rectangle, or %NULL if the -- * output should not be clipped -- * @widget: the widget (may be %NULL) -- * @detail: a style detail (may be %NULL) -+ * @area: clip rectangle -+ * @widget: the widget -+ * @detail: a style detail - * @edge: the edge in which to draw the resize grip - * @x: the x origin of the rectangle in which to draw the resize grip - * @y: the y origin of the rectangle in which to draw the resize grip -@@ -6376,7 +6572,6 @@ - { - g_return_if_fail (GTK_IS_STYLE (style)); - g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_resize_grip != NULL); -- g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - - GTK_STYLE_GET_CLASS (style)->draw_resize_grip (style, window, state_type, - area, widget, detail, -@@ -6414,7 +6609,7 @@ - static GType our_type = 0; - - if (our_type == 0) -- our_type = g_boxed_type_register_static (I_("GtkBorder"), -+ our_type = g_boxed_type_register_static ("GtkBorder", - (GBoxedCopyFunc) gtk_border_copy, - (GBoxedFreeFunc) gtk_border_free); - -@@ -6553,7 +6748,7 @@ - gtk_gc_release (cursor_info->secondary_gc); - - g_free (cursor_info); -- g_object_set_data (G_OBJECT (style), I_("gtk-style-cursor-info"), NULL); -+ g_object_set_data (G_OBJECT (style), "gtk-style-cursor-info", NULL); - } - } - -@@ -6591,7 +6786,7 @@ - if (!cursor_info) - { - cursor_info = g_new (CursorInfo, 1); -- g_object_set_data (G_OBJECT (widget->style), I_("gtk-style-cursor-info"), cursor_info); -+ g_object_set_data (G_OBJECT (widget->style), "gtk-style-cursor-info", cursor_info); - cursor_info->primary_gc = NULL; - cursor_info->secondary_gc = NULL; - cursor_info->for_type = G_TYPE_INVALID; -@@ -6655,6 +6850,8 @@ - gfloat cursor_aspect_ratio; - gint offset; - -+ g_return_if_fail (direction != GTK_TEXT_DIR_NONE); -+ - /* When changing the shape or size of the cursor here, - * propagate the changes to gtktextview.c:text_window_invalidate_cursors(). - */ |