From be1d190b2e42a4ca33cab865a3d196daf4c839da Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Mon, 16 Aug 2010 15:09:50 +0200 Subject: [PATCH] style: Convert draw_spinner vfunc to Cairo version --- gtk/gtkstyle.c | 63 +++++++++++++++++++++++++++++++++++++++----------- gtk/gtkstyle.h | 36 ++++++++++++++++++----------- 2 files changed, 73 insertions(+), 26 deletions(-) diff --git a/gtk/gtkstyle.c b/gtk/gtkstyle.c index 87fb398987..f9b92ad612 100644 --- a/gtk/gtkstyle.c +++ b/gtk/gtkstyle.c @@ -294,9 +294,8 @@ static void gtk_default_draw_resize_grip (GtkStyle *style, gint width, gint height); static void gtk_default_draw_spinner (GtkStyle *style, - GdkWindow *window, + cairo_t *cr, GtkStateType state_type, - GdkRectangle *area, GtkWidget *widget, const gchar *detail, guint step, @@ -4269,9 +4268,8 @@ gtk_default_draw_resize_grip (GtkStyle *style, static void gtk_default_draw_spinner (GtkStyle *style, - GdkWindow *window, + cairo_t *cr, GtkStateType state_type, - GdkRectangle *area, GtkWidget *widget, const gchar *detail, guint step, @@ -4281,7 +4279,6 @@ gtk_default_draw_spinner (GtkStyle *style, gint height) { GdkColor *color; - cairo_t *cr; guint num_steps; gdouble dx, dy; gdouble radius; @@ -4294,9 +4291,6 @@ gtk_default_draw_spinner (GtkStyle *style, NULL); real_step = step % num_steps; - /* get cairo context */ - cr = gdk_cairo_create (window); - /* set a clip region for the expose event */ cairo_rectangle (cr, x, y, width, height); cairo_clip (cr); @@ -4339,9 +4333,6 @@ gtk_default_draw_spinner (GtkStyle *style, cairo_restore (cr); } - - /* free memory */ - cairo_destroy (cr); } void @@ -6299,13 +6290,59 @@ gtk_paint_spinner (GtkStyle *style, gint width, gint height) { + cairo_t *cr; + g_return_if_fail (GTK_IS_STYLE (style)); g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_spinner != NULL); g_return_if_fail (style->depth == gdk_drawable_get_depth (window)); - GTK_STYLE_GET_CLASS (style)->draw_spinner (style, window, state_type, - (GdkRectangle *)area, widget, detail, + cr = gtk_style_cairo_create (window, area); + + gtk_cairo_paint_spinner (style, cr, state_type, + widget, detail, + step, x, y, width, height); + + cairo_destroy (cr); +} + +/** + * gtk_cairo_paint_spinner: + * @style: a #GtkStyle + * @cr: a #cairo_t + * @state_type: a state + * @widget: (allow-none): the widget (may be %NULL) + * @detail: (allow-none): a style detail (may be %NULL) + * @step: the nth step, a value between 0 and #GtkSpinner:num-steps + * @x: the x origin of the rectangle in which to draw the spinner + * @y: the y origin of the rectangle in which to draw the spinner + * @width: the width of the rectangle in which to draw the spinner + * @height: the height of the rectangle in which to draw the spinner + * + * Draws a spinner on @window using the given parameters. + */ +void +gtk_cairo_paint_spinner (GtkStyle *style, + cairo_t *cr, + GtkStateType state_type, + GtkWidget *widget, + const gchar *detail, + guint step, + gint x, + gint y, + gint width, + gint height) +{ + g_return_if_fail (GTK_IS_STYLE (style)); + g_return_if_fail (cr != NULL); + g_return_if_fail (GTK_STYLE_GET_CLASS (style)->draw_spinner != NULL); + + cairo_save (cr); + + GTK_STYLE_GET_CLASS (style)->draw_spinner (style, cr, state_type, + widget, detail, step, x, y, width, height); + + cairo_restore (cr); } /** diff --git a/gtk/gtkstyle.h b/gtk/gtkstyle.h index c7c0fead29..a300829b75 100644 --- a/gtk/gtkstyle.h +++ b/gtk/gtkstyle.h @@ -360,9 +360,8 @@ struct _GtkStyleClass gint width, gint height); void (*draw_spinner) (GtkStyle *style, - GdkWindow *window, + cairo_t *cr, GtkStateType state_type, - GdkRectangle *area, GtkWidget *widget, const gchar *detail, guint step, @@ -840,17 +839,28 @@ void gtk_cairo_paint_resize_grip (GtkStyle *style, gint y, gint width, gint height); -void gtk_paint_spinner (GtkStyle *style, - GdkWindow *window, - GtkStateType state_type, - const GdkRectangle *area, - GtkWidget *widget, - const gchar *detail, - guint step, - gint x, - gint y, - gint width, - gint height); +void gtk_paint_spinner (GtkStyle *style, + GdkWindow *window, + GtkStateType state_type, + const GdkRectangle *area, + GtkWidget *widget, + const gchar *detail, + guint step, + gint x, + gint y, + gint width, + gint height); +void gtk_cairo_paint_spinner (GtkStyle *style, + cairo_t *cr, + GtkStateType state_type, + GtkWidget *widget, + const gchar *detail, + guint step, + gint x, + gint y, + gint width, + gint height); + GType gtk_border_get_type (void) G_GNUC_CONST; GtkBorder *gtk_border_new (void) G_GNUC_MALLOC;