summaryrefslogtreecommitdiff
path: root/gtk/gtkcssimagebuiltin.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkcssimagebuiltin.c')
-rw-r--r--gtk/gtkcssimagebuiltin.c35
1 files changed, 31 insertions, 4 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