[gtk/ebassi/cell-renderer-get-size: 3/6] Port GtkCellRendererToggle to preferred size vfuncs




commit 71a9e5d8c2013d26375f029c37f871895f482a12
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Sat Nov 28 18:37:09 2020 +0000

    Port GtkCellRendererToggle to preferred size vfuncs
    
    Drop the use of GtkCellRendererClass.get_size()

 gtk/gtkcellrenderertoggle.c | 75 ++++++++++++++++++++++++++++++++++++---------
 1 file changed, 61 insertions(+), 14 deletions(-)
---
diff --git a/gtk/gtkcellrenderertoggle.c b/gtk/gtkcellrenderertoggle.c
index 580a4e6080..1d86021980 100644
--- a/gtk/gtkcellrenderertoggle.c
+++ b/gtk/gtkcellrenderertoggle.c
@@ -51,7 +51,7 @@ static void gtk_cell_renderer_toggle_set_property  (GObject                    *
                                                    guint                       param_id,
                                                    const GValue               *value,
                                                    GParamSpec                 *pspec);
-static void gtk_cell_renderer_toggle_get_size   (GtkCellRenderer            *cell,
+static void gtk_cell_renderer_toggle_get_size   (GtkCellRendererToggle      *self,
                                                 GtkWidget                  *widget,
                                                 const GdkRectangle         *cell_area,
                                                 int                        *x_offset,
@@ -146,6 +146,48 @@ gtk_cell_renderer_toggle_dispose (GObject *object)
   G_OBJECT_CLASS (gtk_cell_renderer_toggle_parent_class)->dispose (object);
 }
 
+static GtkSizeRequestMode
+gtk_cell_renderer_toggle_get_request_mode (GtkCellRenderer *cell)
+{
+  return GTK_SIZE_REQUEST_CONSTANT_SIZE;
+}
+
+static void
+gtk_cell_renderer_toggle_get_preferred_width (GtkCellRenderer *cell,
+                                              GtkWidget       *widget,
+                                              int             *minimum,
+                                              int             *natural)
+{
+  int width = 0;
+
+  gtk_cell_renderer_toggle_get_size (GTK_CELL_RENDERER_TOGGLE (cell), widget,
+                                     NULL,
+                                     NULL, NULL, &width, NULL);
+
+  if (minimum)
+    *minimum = width;
+  if (natural)
+    *natural = width;
+}
+
+static void
+gtk_cell_renderer_toggle_get_preferred_height (GtkCellRenderer *cell,
+                                               GtkWidget       *widget,
+                                               int             *minimum,
+                                               int             *natural)
+{
+  int height = 0;
+
+  gtk_cell_renderer_toggle_get_size (GTK_CELL_RENDERER_TOGGLE (cell), widget,
+                                     NULL,
+                                     NULL, NULL, NULL, &height);
+
+  if (minimum)
+    *minimum = height;
+  if (natural)
+    *natural = height;
+}
+
 static void
 gtk_cell_renderer_toggle_class_init (GtkCellRendererToggleClass *class)
 {
@@ -156,7 +198,9 @@ gtk_cell_renderer_toggle_class_init (GtkCellRendererToggleClass *class)
   object_class->set_property = gtk_cell_renderer_toggle_set_property;
   object_class->dispose = gtk_cell_renderer_toggle_dispose;
 
-  cell_class->get_size = gtk_cell_renderer_toggle_get_size;
+  cell_class->get_request_mode = gtk_cell_renderer_toggle_get_request_mode;
+  cell_class->get_preferred_width = gtk_cell_renderer_toggle_get_preferred_width;
+  cell_class->get_preferred_height = gtk_cell_renderer_toggle_get_preferred_height;
   cell_class->snapshot = gtk_cell_renderer_toggle_snapshot;
   cell_class->activate = gtk_cell_renderer_toggle_activate;
   
@@ -345,14 +389,15 @@ calc_indicator_size (GtkStyleContext *context)
 }
 
 static void
-gtk_cell_renderer_toggle_get_size (GtkCellRenderer    *cell,
-                                  GtkWidget          *widget,
-                                  const GdkRectangle *cell_area,
-                                  int                *x_offset,
-                                  int                *y_offset,
-                                  int                *width,
-                                  int                *height)
+gtk_cell_renderer_toggle_get_size (GtkCellRendererToggle *self,
+                                  GtkWidget             *widget,
+                                  const GdkRectangle    *cell_area,
+                                  int                   *x_offset,
+                                  int                   *y_offset,
+                                  int                   *width,
+                                  int                   *height)
 {
+  GtkCellRenderer *cell = GTK_CELL_RENDERER (self);
   int calc_width;
   int calc_height;
   int xpad, ypad;
@@ -361,7 +406,7 @@ gtk_cell_renderer_toggle_get_size (GtkCellRenderer    *cell,
 
   gtk_cell_renderer_get_padding (cell, &xpad, &ypad);
 
-  context = gtk_cell_renderer_toggle_save_context (GTK_CELL_RENDERER_TOGGLE (cell), widget);
+  context = gtk_cell_renderer_toggle_save_context (self, widget);
   gtk_style_context_get_padding (context, &padding);
   gtk_style_context_get_border (context, &border);
 
@@ -369,7 +414,7 @@ gtk_cell_renderer_toggle_get_size (GtkCellRenderer    *cell,
   calc_width += xpad * 2 + padding.left + padding.right + border.left + border.right;
   calc_height += ypad * 2 + padding.top + padding.bottom + border.top + border.bottom;
 
-  gtk_cell_renderer_toggle_restore_context (GTK_CELL_RENDERER_TOGGLE (cell), context);
+  gtk_cell_renderer_toggle_restore_context (self, context);
 
   if (width)
     *width = calc_width;
@@ -397,8 +442,10 @@ gtk_cell_renderer_toggle_get_size (GtkCellRenderer    *cell,
     }
   else
     {
-      if (x_offset) *x_offset = 0;
-      if (y_offset) *y_offset = 0;
+      if (x_offset)
+        *x_offset = 0;
+      if (y_offset)
+        *y_offset = 0;
     }
 }
 
@@ -419,7 +466,7 @@ gtk_cell_renderer_toggle_snapshot (GtkCellRenderer      *cell,
   GtkStateFlags state;
   GtkBorder padding, border;
 
-  gtk_cell_renderer_toggle_get_size (cell, widget, cell_area,
+  gtk_cell_renderer_toggle_get_size (celltoggle, widget, cell_area,
                                     &x_offset, &y_offset,
                                     &width, &height);
   gtk_cell_renderer_get_padding (cell, &xpad, &ypad);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]