From e697213b35e6fe2bf1bea6b6d51607c1a7241bc1 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Mon, 19 Jan 2015 17:41:29 +0100 Subject: render: Remove spinner special-cases The spinner is a regular builtin image now. There is no need to go through the shadows code manually anymore as regular items do get shadows automatically. This also allows simplifying the actual spinner drawing code so that it actually works. --- gtk/gtkcssimagebuiltin.c | 35 +++++++++++++++++++++++++---- gtk/gtkcssshadowsvalue.c | 16 ------------- gtk/gtkcssshadowsvalueprivate.h | 4 ---- gtk/gtkcssshadowvalue.c | 23 ------------------- gtk/gtkcssshadowvalueprivate.h | 4 ---- gtk/gtkrender.c | 50 ----------------------------------------- gtk/gtkrenderprivate.h | 3 --- 7 files changed, 31 insertions(+), 104 deletions(-) diff --git a/gtk/gtkcssimagebuiltin.c b/gtk/gtkcssimagebuiltin.c index 6562931c21..d3644962b9 100644 --- a/gtk/gtkcssimagebuiltin.c +++ b/gtk/gtkcssimagebuiltin.c @@ -732,17 +732,44 @@ gtk_css_image_builtin_draw_spinner (GtkCssImage *image, double height) { GtkCssImageBuiltin *builtin = GTK_CSS_IMAGE_BUILTIN (image); + guint num_steps; gdouble radius; + gdouble half; + gint i; radius = MIN (width / 2, height / 2); - cairo_save (cr); cairo_translate (cr, width / 2, height / 2); - gdk_cairo_set_source_rgba (cr, &builtin->fg_color); - gtk_render_paint_spinner (cr, radius, -1); + num_steps = 12; + + cairo_set_line_width (cr, 2.0); - cairo_restore (cr); + half = num_steps / 2; + + for (i = 0; i < num_steps; i++) + { + gint inset = 0.7 * radius; + /* transparency is a function of time and intial value */ + gdouble t = 1.0 - (gdouble) i / num_steps; + gdouble xscale = - sin (i * G_PI / half); + gdouble yscale = - cos (i * G_PI / half); + + cairo_move_to (cr, + (radius - inset) * xscale, + (radius - inset) * yscale); + cairo_line_to (cr, + radius * xscale, + radius * yscale); + + cairo_set_source_rgba (cr, + builtin->fg_color.red, + builtin->fg_color.green, + builtin->fg_color.blue, + builtin->fg_color.alpha * t); + + cairo_stroke (cr); + } } static void diff --git a/gtk/gtkcssshadowsvalue.c b/gtk/gtkcssshadowsvalue.c index 590fa24e22..f0bae5c793 100644 --- a/gtk/gtkcssshadowsvalue.c +++ b/gtk/gtkcssshadowsvalue.c @@ -281,22 +281,6 @@ _gtk_css_shadows_value_paint_icon (const GtkCssValue *shadows, } } -void -_gtk_css_shadows_value_paint_spinner (const GtkCssValue *shadows, - cairo_t *cr, - gdouble radius, - gdouble progress) -{ - guint i; - - g_return_if_fail (shadows->class == >K_CSS_VALUE_SHADOWS); - - for (i = 0; i < shadows->len; i++) - { - _gtk_css_shadow_value_paint_spinner (shadows->values[i], cr, radius, progress); - } -} - void _gtk_css_shadows_value_paint_box (const GtkCssValue *shadows, cairo_t *cr, diff --git a/gtk/gtkcssshadowsvalueprivate.h b/gtk/gtkcssshadowsvalueprivate.h index 4713b86a16..790e8ec308 100644 --- a/gtk/gtkcssshadowsvalueprivate.h +++ b/gtk/gtkcssshadowsvalueprivate.h @@ -43,10 +43,6 @@ void _gtk_css_shadows_value_paint_layout (const GtkCssValue void _gtk_css_shadows_value_paint_icon (const GtkCssValue *shadows, cairo_t *cr); -void _gtk_css_shadows_value_paint_spinner (const GtkCssValue *shadows, - cairo_t *cr, - gdouble radius, - gdouble progress); void _gtk_css_shadows_value_paint_box (const GtkCssValue *shadows, cairo_t *cr, const GtkRoundedBox *padding_box, diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c index b5c423348c..d7f3963200 100644 --- a/gtk/gtkcssshadowvalue.c +++ b/gtk/gtkcssshadowvalue.c @@ -542,29 +542,6 @@ _gtk_css_shadow_value_paint_icon (const GtkCssValue *shadow, cairo_pattern_destroy (pattern); } -void -_gtk_css_shadow_value_paint_spinner (const GtkCssValue *shadow, - cairo_t *cr, - gdouble radius, - gdouble progress) -{ - g_return_if_fail (shadow->class == >K_CSS_VALUE_SHADOW); - - cairo_save (cr); - - gdk_cairo_set_source_rgba (cr, _gtk_css_rgba_value_get_rgba (shadow->color)); - cr = gtk_css_shadow_value_start_drawing (shadow, cr); - - cairo_translate (cr, - _gtk_css_number_value_get (shadow->hoffset, 0), - _gtk_css_number_value_get (shadow->voffset, 0)); - gtk_render_paint_spinner (cr, radius, progress); - - cr = gtk_css_shadow_value_finish_drawing (shadow, cr); - - cairo_restore (cr); -} - gboolean _gtk_css_shadow_value_get_inset (const GtkCssValue *shadow) { diff --git a/gtk/gtkcssshadowvalueprivate.h b/gtk/gtkcssshadowvalueprivate.h index 1e5eb22690..5fab1cc905 100644 --- a/gtk/gtkcssshadowvalueprivate.h +++ b/gtk/gtkcssshadowvalueprivate.h @@ -50,10 +50,6 @@ void _gtk_css_shadow_value_paint_layout (const GtkCssValue void _gtk_css_shadow_value_paint_icon (const GtkCssValue *shadow, cairo_t *cr); -void _gtk_css_shadow_value_paint_spinner (const GtkCssValue *shadow, - cairo_t *cr, - gdouble radius, - gdouble progress); void _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow, cairo_t *cr, const GtkRoundedBox *padding_box); diff --git a/gtk/gtkrender.c b/gtk/gtkrender.c index 133ba2fd29..d5d3ad10b8 100644 --- a/gtk/gtkrender.c +++ b/gtk/gtkrender.c @@ -1042,56 +1042,6 @@ gtk_render_handle (GtkStyleContext *context, cairo_restore (cr); } -void -gtk_render_paint_spinner (cairo_t *cr, - gdouble radius, - gdouble progress) -{ - guint num_steps, step; - gdouble half; - gint i; - - num_steps = 12; - - if (progress >= 0) - step = (guint) (progress * num_steps); - else - step = 0; - - cairo_save (cr); - - cairo_set_operator (cr, CAIRO_OPERATOR_OVER); - cairo_set_line_width (cr, 2.0); - - half = num_steps / 2; - - for (i = 0; i < num_steps; i++) - { - gint inset = 0.7 * radius; - - /* transparency is a function of time and intial value */ - gdouble t = 1.0 - (gdouble) ((i + step) % num_steps) / num_steps; - gdouble xscale = - sin (i * G_PI / half); - gdouble yscale = - cos (i * G_PI / half); - - cairo_push_group (cr); - - cairo_move_to (cr, - (radius - inset) * xscale, - (radius - inset) * yscale); - cairo_line_to (cr, - radius * xscale, - radius * yscale); - - cairo_stroke (cr); - - cairo_pop_group_to_source (cr); - cairo_paint_with_alpha (cr, t); - } - - cairo_restore (cr); -} - /** * gtk_render_activity: * @context: a #GtkStyleContext diff --git a/gtk/gtkrenderprivate.h b/gtk/gtkrenderprivate.h index 81c9d6ca63..3e98e8197e 100644 --- a/gtk/gtkrenderprivate.h +++ b/gtk/gtkrenderprivate.h @@ -28,8 +28,5 @@ void gtk_render_content_path (GtkStyleContext *context, double y, double width, double height); -void gtk_render_paint_spinner (cairo_t *cr, - gdouble radius, - gdouble progress); #endif /* __GTK_RENDER_PRIVATE_H__ */ -- cgit v1.2.1