]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkhruler.c
Switch set_cairo_target() virtual function to ref_cairo_surface()
[~andy/gtk] / gtk / gtkhruler.c
index 4f13d80d9937de702995528e53e75d20ad642a9e..b4997c8957be04cbfe695ecfffcbbaa65bed829b 100644 (file)
@@ -135,7 +135,7 @@ static void
 gtk_hruler_draw_ticks (GtkRuler *ruler)
 {
   GtkWidget *widget;
-  GdkGC *gc, *bg_gc;
+  cairo_t *cr;
   gint i;
   gint width, height;
   gint xthickness;
@@ -159,9 +159,6 @@ gtk_hruler_draw_ticks (GtkRuler *ruler)
 
   widget = GTK_WIDGET (ruler);
 
-  gc = widget->style->fg_gc[GTK_STATE_NORMAL];
-  bg_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
-
   xthickness = widget->style->xthickness;
   ythickness = widget->style->ythickness;
 
@@ -179,13 +176,15 @@ gtk_hruler_draw_ticks (GtkRuler *ruler)
                 NULL, widget, "hruler",
                 0, 0, 
                 widget->allocation.width, widget->allocation.height);
-  
-  
-  gdk_draw_line (ruler->backing_store, gc,
-                xthickness,
-                height + ythickness,
-                widget->allocation.width - xthickness,
-                height + ythickness);
+
+  cr = gdk_drawable_create_cairo_context (ruler->backing_store);
+  gdk_cairo_set_source_color (cr, &widget->style->fg[widget->state]);
+  cairo_rectangle (cr, 
+                  xthickness,
+                  height + ythickness,
+                  widget->allocation.width - 2 * xthickness,
+                  1);
 
   upper = ruler->upper / ruler->metric->pixels_per_unit;
   lower = ruler->lower / ruler->metric->pixels_per_unit;
@@ -242,9 +241,9 @@ gtk_hruler_draw_ticks (GtkRuler *ruler)
        {
          pos = ROUND ((cur - lower) * increment);
 
-         gdk_draw_line (ruler->backing_store, gc,
-                        pos, height + ythickness
-                        pos, height - length + ythickness);
+         cairo_rectangle (cr, 
+                          pos, height + ythickness - length
+                          1,   length);
 
          /* draw label */
          if (i == 0)
@@ -267,15 +266,16 @@ gtk_hruler_draw_ticks (GtkRuler *ruler)
        }
     }
 
+  cairo_fill (cr);
+  cairo_destroy (cr);
+
   g_object_unref (layout);
 }
 
 static void
 gtk_hruler_draw_pos (GtkRuler *ruler)
 {
-  GtkWidget *widget;
-  GdkGC *gc;
-  int i;
+  GtkWidget *widget = GTK_WIDGET (ruler);
   gint x, y;
   gint width, height;
   gint bs_width, bs_height;
@@ -285,24 +285,23 @@ gtk_hruler_draw_pos (GtkRuler *ruler)
 
   if (GTK_WIDGET_DRAWABLE (ruler))
     {
-      widget = GTK_WIDGET (ruler);
-
-      gc = widget->style->fg_gc[GTK_STATE_NORMAL];
       xthickness = widget->style->xthickness;
       ythickness = widget->style->ythickness;
       width = widget->allocation.width;
       height = widget->allocation.height - ythickness * 2;
 
-      bs_width = height / 2;
+      bs_width = height / 2 + 2;
       bs_width |= 1;  /* make sure it's odd */
       bs_height = bs_width / 2 + 1;
 
       if ((bs_width > 0) && (bs_height > 0))
        {
+         cairo_t *cr = gdk_drawable_create_cairo_context (widget->window);
+      
          /*  If a backing store exists, restore the ruler  */
-         if (ruler->backing_store && ruler->non_gr_exp_gc)
-           gdk_draw_drawable (ruler->widget.window,
-                              ruler->non_gr_exp_gc,
+         if (ruler->backing_store)
+           gdk_draw_drawable (widget->window,
+                              widget->style->black_gc,
                               ruler->backing_store,
                               ruler->xsrc, ruler->ysrc,
                               ruler->xsrc, ruler->ysrc,
@@ -313,11 +312,14 @@ gtk_hruler_draw_pos (GtkRuler *ruler)
          x = ROUND ((ruler->position - ruler->lower) * increment) + (xthickness - bs_width) / 2 - 1;
          y = (height + bs_height) / 2 + ythickness;
 
-         for (i = 0; i < bs_height; i++)
-           gdk_draw_line (widget->window, gc,
-                          x + i, y + i,
-                          x + bs_width - 1 - i, y + i);
+         gdk_cairo_set_source_color (cr, &widget->style->fg[widget->state]);
+
+         cairo_move_to (cr, x,                  y);
+         cairo_line_to (cr, x + bs_width / 2., y + bs_height);
+         cairo_line_to (cr, x + bs_width,      y);
+         cairo_fill (cr);
 
+         cairo_destroy (cr);
 
          ruler->xsrc = x;
          ruler->ysrc = y;