]> www.fi.muni.cz Git - evince.git/blobdiff - cut-n-paste/gimpcellrenderertoggle/gimpcellrenderertoggle.c
[gimpcellrenderertoggle] Fix compile warnings
[evince.git] / cut-n-paste / gimpcellrenderertoggle / gimpcellrenderertoggle.c
index 00b785c8dacf783a9652f48c404014ec505f970d..55ef910133ee9116ec5ce5a6339bf2da1695eafb 100644 (file)
@@ -16,8 +16,8 @@
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA 02110-1301, USA.
  */
 
 #include <config.h>
@@ -54,24 +54,23 @@ static void gimp_cell_renderer_toggle_set_property (GObject         *object,
                                                     GParamSpec      *pspec);
 static void gimp_cell_renderer_toggle_get_size     (GtkCellRenderer *cell,
                                                     GtkWidget       *widget,
-                                                    GdkRectangle    *rectangle,
+                                                    const GdkRectangle *rectangle,
                                                     gint            *x_offset,
                                                     gint            *y_offset,
                                                     gint            *width,
                                                     gint            *height);
 static void gimp_cell_renderer_toggle_render       (GtkCellRenderer *cell,
-                                                    GdkWindow       *window,
+                                                    cairo_t         *cr,
                                                     GtkWidget       *widget,
-                                                    GdkRectangle    *background_area,
-                                                    GdkRectangle    *cell_area,
-                                                    GdkRectangle    *expose_area,
+                                                    const GdkRectangle  *background_area,
+                                                    const GdkRectangle  *cell_area,
                                                     GtkCellRendererState flags);
 static gboolean gimp_cell_renderer_toggle_activate (GtkCellRenderer *cell,
                                                     GdkEvent        *event,
                                                     GtkWidget       *widget,
                                                     const gchar     *path,
-                                                    GdkRectangle    *background_area,
-                                                    GdkRectangle    *cell_area,
+                                                    const GdkRectangle *background_area,
+                                                    const GdkRectangle *cell_area,
                                                     GtkCellRendererState  flags);
 static void gimp_cell_renderer_toggle_create_pixbuf (GimpCellRendererToggle *toggle,
                                                      GtkWidget              *widget);
@@ -207,13 +206,13 @@ gimp_cell_renderer_toggle_set_property (GObject      *object,
 }
 
 static void
-gimp_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
-                                    GtkWidget       *widget,
-                                    GdkRectangle    *cell_area,
-                                    gint            *x_offset,
-                                    gint            *y_offset,
-                                    gint            *width,
-                                    gint            *height)
+gimp_cell_renderer_toggle_get_size (GtkCellRenderer    *cell,
+                                    GtkWidget          *widget,
+                                    const GdkRectangle *cell_area,
+                                    gint               *x_offset,
+                                    gint               *y_offset,
+                                    gint               *width,
+                                    gint               *height)
 {
   GimpCellRendererToggle *toggle = GIMP_CELL_RENDERER_TOGGLE (cell);
   GtkStyle               *style  = gtk_widget_get_style (widget);
@@ -221,6 +220,10 @@ gimp_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
   gint                    calc_height;
   gint                    pixbuf_width;
   gint                    pixbuf_height;
+  gfloat                  xalign;
+  gfloat                  yalign;
+  gint                    xpad;
+  gint                    ypad;
 
   if (! toggle->stock_id)
     {
@@ -232,6 +235,9 @@ gimp_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
       return;
     }
 
+  gtk_cell_renderer_get_alignment (cell, &xalign, &yalign);
+  gtk_cell_renderer_get_padding (cell, &xpad, &ypad);
+
   if (! toggle->pixbuf)
     gimp_cell_renderer_toggle_create_pixbuf (toggle, widget);
 
@@ -239,9 +245,9 @@ gimp_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
   pixbuf_height = gdk_pixbuf_get_height (toggle->pixbuf);
 
   calc_width  = (pixbuf_width +
-                 (gint) cell->xpad * 2 + style->xthickness * 2);
+                 (gint) xpad * 2 + style->xthickness * 2);
   calc_height = (pixbuf_height +
-                 (gint) cell->ypad * 2 + style->ythickness * 2);
+                 (gint) ypad * 2 + style->ythickness * 2);
 
   if (width)
     *width  = calc_width;
@@ -254,14 +260,14 @@ gimp_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
       if (x_offset)
         {
           *x_offset = (((gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) ?
-                        (1.0 - cell->xalign) : cell->xalign) *
+                        (1.0 - xalign) : xalign) *
                        (cell_area->width - calc_width));
           *x_offset = MAX (*x_offset, 0);
         }
 
       if (y_offset)
         {
-          *y_offset = cell->yalign * (cell_area->height - calc_height);
+          *y_offset = yalign * (cell_area->height - calc_height);
           *y_offset = MAX (*y_offset, 0);
         }
     }
@@ -269,39 +275,44 @@ gimp_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
 
 static void
 gimp_cell_renderer_toggle_render (GtkCellRenderer      *cell,
-                                  GdkWindow            *window,
+                                  cairo_t              *cr,
                                   GtkWidget            *widget,
-                                  GdkRectangle         *background_area,
-                                  GdkRectangle         *cell_area,
-                                  GdkRectangle         *expose_area,
+                                  const GdkRectangle   *background_area,
+                                  const GdkRectangle   *cell_area,
                                   GtkCellRendererState  flags)
 {
   GimpCellRendererToggle *toggle = GIMP_CELL_RENDERER_TOGGLE (cell);
   GtkStyle               *style  = gtk_widget_get_style (widget);
   GdkRectangle            toggle_rect;
   GdkRectangle            draw_rect;
+  GdkRectangle            clip_rect;
   GtkStateType            state;
   gboolean                active;
+  gint                    xpad;
+  gint                    ypad;
 
   if (! toggle->stock_id)
     {
-      GTK_CELL_RENDERER_CLASS (parent_class)->render (cell, window, widget,
+      GTK_CELL_RENDERER_CLASS (parent_class)->render (cell,
+                                                      cr,
+                                                      widget,
                                                       background_area,
-                                                      cell_area, expose_area,
+                                                      cell_area,
                                                       flags);
       return;
     }
 
-  gimp_cell_renderer_toggle_get_size (cell, widget, cell_area,
-                                      &toggle_rect.x,
-                                      &toggle_rect.y,
-                                      &toggle_rect.width,
-                                      &toggle_rect.height);
+  gtk_cell_renderer_get_size (cell, widget, cell_area,
+                              &toggle_rect.x,
+                              &toggle_rect.y,
+                              &toggle_rect.width,
+                              &toggle_rect.height);
 
-  toggle_rect.x      += cell_area->x + cell->xpad;
-  toggle_rect.y      += cell_area->y + cell->ypad;
-  toggle_rect.width  -= cell->xpad * 2;
-  toggle_rect.height -= cell->ypad * 2;
+  gtk_cell_renderer_get_padding (cell, &xpad, &ypad);
+  toggle_rect.x      += cell_area->x + xpad;
+  toggle_rect.y      += cell_area->y + ypad;
+  toggle_rect.width  -= xpad * 2;
+  toggle_rect.height -= ypad * 2;
 
   if (toggle_rect.width <= 0 || toggle_rect.height <= 0)
     return;
@@ -309,7 +320,7 @@ gimp_cell_renderer_toggle_render (GtkCellRenderer      *cell,
   active =
     gtk_cell_renderer_toggle_get_active (GTK_CELL_RENDERER_TOGGLE (cell));
 
-  if (!cell->sensitive)
+  if (!gtk_cell_renderer_get_sensitive (cell))
     {
       state = GTK_STATE_INSENSITIVE;
     }
@@ -322,22 +333,28 @@ gimp_cell_renderer_toggle_render (GtkCellRenderer      *cell,
     }
   else
     {
-      if (GTK_CELL_RENDERER_TOGGLE (cell)->activatable)
+      if (gtk_cell_renderer_toggle_get_activatable (GTK_CELL_RENDERER_TOGGLE (cell)))
         state = GTK_STATE_NORMAL;
       else
         state = GTK_STATE_INSENSITIVE;
     }
 
-  if (gdk_rectangle_intersect (expose_area, cell_area, &draw_rect) &&
-      (flags & GTK_CELL_RENDERER_PRELIT))
-    gtk_paint_shadow (style,
-                      window,
-                      state,
-                      active ? GTK_SHADOW_IN : GTK_SHADOW_OUT,
-                      &draw_rect,
-                      widget, NULL,
-                      toggle_rect.x,     toggle_rect.y,
-                      toggle_rect.width, toggle_rect.height);
+  if ((flags & GTK_CELL_RENDERER_PRELIT) &&
+      gdk_cairo_get_clip_rectangle(cr, &clip_rect) &&
+      gdk_rectangle_intersect (&clip_rect, cell_area, &draw_rect))
+    {
+      cairo_save (cr);
+      gdk_cairo_rectangle (cr, &draw_rect);
+      cairo_clip (cr);
+      gtk_paint_shadow (style,
+                        cr,
+                        state,
+                        active ? GTK_SHADOW_IN : GTK_SHADOW_OUT,
+                        widget, NULL,
+                        toggle_rect.x,     toggle_rect.y,
+                        toggle_rect.width, toggle_rect.height);
+      cairo_restore (cr);
+    }
 
   if (active)
     {
@@ -362,7 +379,7 @@ gimp_cell_renderer_toggle_render (GtkCellRenderer      *cell,
          gtk_icon_source_set_size (source, GTK_ICON_SIZE_SMALL_TOOLBAR);
          gtk_icon_source_set_size_wildcarded (source, FALSE);
 
-         insensitive = gtk_style_render_icon (widget->style,
+         insensitive = gtk_style_render_icon (gtk_widget_get_style (widget),
                                               source,
                                               gtk_widget_get_direction (widget),
                                               GTK_STATE_INSENSITIVE,
@@ -378,17 +395,11 @@ gimp_cell_renderer_toggle_render (GtkCellRenderer      *cell,
 
       if (gdk_rectangle_intersect (&draw_rect, &toggle_rect, &draw_rect))
         {
-         cairo_t *cr;
-         
-         cr = gdk_cairo_create (window);
-
          gdk_cairo_set_source_pixbuf (cr, pixbuf, toggle_rect.x, toggle_rect.y);
          gdk_cairo_rectangle (cr, &draw_rect);
          cairo_fill (cr);
-         
-         cairo_destroy (cr);
        }
-             
+
       if (insensitive)
         g_object_unref (insensitive);
     }
@@ -399,13 +410,13 @@ gimp_cell_renderer_toggle_activate (GtkCellRenderer      *cell,
                                     GdkEvent             *event,
                                     GtkWidget            *widget,
                                     const gchar          *path,
-                                    GdkRectangle         *background_area,
-                                    GdkRectangle         *cell_area,
+                                    const GdkRectangle   *background_area,
+                                    const GdkRectangle   *cell_area,
                                     GtkCellRendererState  flags)
 {
   GtkCellRendererToggle *toggle = GTK_CELL_RENDERER_TOGGLE (cell);
 
-  if (toggle->activatable)
+  if (gtk_cell_renderer_toggle_get_activatable (toggle))
     {
       GdkModifierType state = 0;