]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkcellrendererspinner.c
Fixing GtkCellView to not strcmp() in buildable_custom_tag_end()
[~andy/gtk] / gtk / gtkcellrendererspinner.c
index 4eb62207d678af291968418b23f14f4ff94c015f..bc63b5ea90c0fc5fbbc2ad71efcd2991d50157cf 100644 (file)
 
 #include "config.h"
 
-#include "gtkintl.h"
-#include <gtk/gtk.h>
 #include "gtkcellrendererspinner.h"
-#include "gtkalias.h"
+#include "gtkiconfactory.h"
+#include "gtkicontheme.h"
+#include "gtktypeutils.h"
+#include "gtkintl.h"
 
 
 /**
@@ -69,10 +70,6 @@ struct _GtkCellRendererSpinnerPrivate
   gint size;
 };
 
-#define GTK_CELL_RENDERER_SPINNER_GET_PRIVATE(object)        \
-                (G_TYPE_INSTANCE_GET_PRIVATE ((object),        \
-                        GTK_TYPE_CELL_RENDERER_SPINNER, \
-                        GtkCellRendererSpinnerPrivate))
 
 static void gtk_cell_renderer_spinner_get_property (GObject         *object,
                                                     guint            param_id,
@@ -83,19 +80,18 @@ static void gtk_cell_renderer_spinner_set_property (GObject         *object,
                                                     const GValue    *value,
                                                     GParamSpec      *pspec);
 static void gtk_cell_renderer_spinner_get_size     (GtkCellRenderer *cell,
-                                                    GtkWidget       *widget,
-                                                    GdkRectangle    *cell_area,
-                                                    gint            *x_offset,
-                                                    gint            *y_offset,
-                                                    gint            *width,
-                                                    gint            *height);
-static void gtk_cell_renderer_spinner_render       (GtkCellRenderer *cell,
-                                                    GdkWindow       *window,
-                                                    GtkWidget       *widget,
-                                                    GdkRectangle    *background_area,
-                                                    GdkRectangle    *cell_area,
-                                                    GdkRectangle    *expose_area,
-                                                    guint            flags);
+                                                    GtkWidget          *widget,
+                                                    const GdkRectangle *cell_area,
+                                                    gint               *x_offset,
+                                                    gint               *y_offset,
+                                                    gint               *width,
+                                                    gint               *height);
+static void gtk_cell_renderer_spinner_render       (GtkCellRenderer      *cell,
+                                                    cairo_t              *cr,
+                                                    GtkWidget            *widget,
+                                                    const GdkRectangle   *background_area,
+                                                    const GdkRectangle   *cell_area,
+                                                    GtkCellRendererState  flags);
 
 G_DEFINE_TYPE (GtkCellRendererSpinner, gtk_cell_renderer_spinner, GTK_TYPE_CELL_RENDERER)
 
@@ -115,7 +111,7 @@ gtk_cell_renderer_spinner_class_init (GtkCellRendererSpinnerClass *klass)
    *
    * Whether the spinner is active (ie. shown) in the cell
    *
-   * Since 2.20
+   * Since: 2.20
    */
   g_object_class_install_property (object_class,
                                    PROP_ACTIVE,
@@ -130,11 +126,12 @@ gtk_cell_renderer_spinner_class_init (GtkCellRendererSpinnerClass *klass)
    * Pulse of the spinner. Increment this value to draw the next frame of the
    * spinner animation. Usually, you would update this value in a timeout.
    *
-   * The #GtkSpinner widget draws one full cycle of the animation per second.
+   * The #GtkSpinner widget draws one full cycle of the animation per second by default.
    * You can learn about the number of frames used by the theme
-   * by looking at the #GtkSpinner:num-steps style property
+   * by looking at the #GtkSpinner:num-steps style property and the duration
+   * of the cycle by looking at #GtkSpinner:cycle-duration.
    *
-   * Since 2.20
+   * Since: 2.20
    */
   g_object_class_install_property (object_class,
                                    PROP_PULSE,
@@ -148,7 +145,7 @@ gtk_cell_renderer_spinner_class_init (GtkCellRendererSpinnerClass *klass)
    *
    * The #GtkIconSize value that specifies the size of the rendered spinner.
    *
-   * Since 2.20
+   * Since: 2.20
    */
   g_object_class_install_property (object_class,
                                    PROP_SIZE,
@@ -165,7 +162,10 @@ gtk_cell_renderer_spinner_class_init (GtkCellRendererSpinnerClass *klass)
 static void
 gtk_cell_renderer_spinner_init (GtkCellRendererSpinner *cell)
 {
-  cell->priv = GTK_CELL_RENDERER_SPINNER_GET_PRIVATE (cell);
+  cell->priv = G_TYPE_INSTANCE_GET_PRIVATE (cell,
+                                            GTK_TYPE_CELL_RENDERER_SPINNER,
+                                            GtkCellRendererSpinnerPrivate);
+
   cell->priv->pulse = 0;
   cell->priv->old_icon_size = GTK_ICON_SIZE_INVALID;
   cell->priv->icon_size = GTK_ICON_SIZE_MENU;
@@ -262,13 +262,13 @@ gtk_cell_renderer_spinner_set_property (GObject      *object,
 }
 
 static void
-gtk_cell_renderer_spinner_get_size (GtkCellRenderer *cellr,
-                                    GtkWidget       *widget,
-                                    GdkRectangle    *cell_area,
-                                    gint            *x_offset,
-                                    gint            *y_offset,
-                                    gint            *width,
-                                    gint            *height)
+gtk_cell_renderer_spinner_get_size (GtkCellRenderer    *cellr,
+                                    GtkWidget          *widget,
+                                    const GdkRectangle *cell_area,
+                                    gint               *x_offset,
+                                    gint               *y_offset,
+                                    gint               *width,
+                                    gint               *height)
 {
   GtkCellRendererSpinner *cell = GTK_CELL_RENDERER_SPINNER (cellr);
   GtkCellRendererSpinnerPrivate *priv = cell->priv;
@@ -320,13 +320,12 @@ gtk_cell_renderer_spinner_get_size (GtkCellRenderer *cellr,
 }
 
 static void
-gtk_cell_renderer_spinner_render (GtkCellRenderer *cellr,
-                                  GdkWindow       *window,
-                                  GtkWidget       *widget,
-                                  GdkRectangle    *background_area,
-                                  GdkRectangle    *cell_area,
-                                  GdkRectangle    *expose_area,
-                                  guint            flags)
+gtk_cell_renderer_spinner_render (GtkCellRenderer      *cellr,
+                                  cairo_t              *cr,
+                                  GtkWidget            *widget,
+                                  const GdkRectangle   *background_area,
+                                  const GdkRectangle   *cell_area,
+                                  GtkCellRendererState  flags)
 {
   GtkCellRendererSpinner *cell = GTK_CELL_RENDERER_SPINNER (cellr);
   GtkCellRendererSpinnerPrivate *priv = cell->priv;
@@ -338,7 +337,7 @@ gtk_cell_renderer_spinner_render (GtkCellRenderer *cellr,
   if (!priv->active)
     return;
 
-  gtk_cell_renderer_spinner_get_size (cellr, widget, cell_area,
+  gtk_cell_renderer_spinner_get_size (cellr, widget, (GdkRectangle *) cell_area,
                                       &pix_rect.x, &pix_rect.y,
                                       &pix_rect.width, &pix_rect.height);
 
@@ -351,14 +350,12 @@ gtk_cell_renderer_spinner_render (GtkCellRenderer *cellr,
   pix_rect.width -= xpad * 2;
   pix_rect.height -= ypad * 2;
 
-  if (!gdk_rectangle_intersect (cell_area, &pix_rect, &draw_rect) ||
-      !gdk_rectangle_intersect (expose_area, &pix_rect, &draw_rect))
-    {
-      return;
-    }
+  if (!gdk_rectangle_intersect (cell_area, &pix_rect, &draw_rect))
+    return;
 
   state = GTK_STATE_NORMAL;
-  if (GTK_WIDGET_STATE (widget) == GTK_STATE_INSENSITIVE || !cellr->sensitive)
+  if (gtk_widget_get_state (widget) == GTK_STATE_INSENSITIVE ||
+      !gtk_cell_renderer_get_sensitive (cellr))
     {
       state = GTK_STATE_INSENSITIVE;
     }
@@ -366,7 +363,7 @@ gtk_cell_renderer_spinner_render (GtkCellRenderer *cellr,
     {
       if ((flags & GTK_CELL_RENDERER_SELECTED) != 0)
         {
-          if (GTK_WIDGET_HAS_FOCUS (widget))
+          if (gtk_widget_has_focus (widget))
             state = GTK_STATE_SELECTED;
           else
             state = GTK_STATE_ACTIVE;
@@ -375,13 +372,19 @@ gtk_cell_renderer_spinner_render (GtkCellRenderer *cellr,
         state = GTK_STATE_PRELIGHT;
     }
 
-  gtk_paint_spinner (widget->style,
-                     window,
-                     state,
-                     priv->pulse,
-                     draw_rect.x, draw_rect.y,
-                     draw_rect.width, draw_rect.height);
-}
+  cairo_save (cr);
+
+  gdk_cairo_rectangle (cr, cell_area);
+  cairo_clip (cr);
 
-#define __GTK_CELL_RENDERER_SPINNER_C__
-#include "gtkaliasdef.c"
+  gtk_paint_spinner (gtk_widget_get_style (widget),
+                           cr,
+                           state,
+                           widget,
+                           "cell",
+                           priv->pulse,
+                           draw_rect.x, draw_rect.y,
+                           draw_rect.width, draw_rect.height);
+
+  cairo_restore (cr);
+}