[gtk/wip/otte/canvas: 6/8] canvasbox: Get rid of specializing




commit 4f35f8008316ba62fceb44b783fb8a3902685bf8
Author: Benjamin Otte <otte redhat com>
Date:   Wed Jun 29 01:02:46 2022 +0200

    canvasbox: Get rid of specializing
    
    A box is a point, a size and an origin. All the specializing shall
    happen in size and point.

 gtk/gtkcanvasbox.c        | 166 ++++++----------------------------------------
 gtk/gtkcanvasboxprivate.h |  25 +------
 2 files changed, 23 insertions(+), 168 deletions(-)
---
diff --git a/gtk/gtkcanvasbox.c b/gtk/gtkcanvasbox.c
index 4260990d78..53d64bdcdc 100644
--- a/gtk/gtkcanvasbox.c
+++ b/gtk/gtkcanvasbox.c
@@ -36,91 +36,41 @@
 
 /* {{{ Boilerplate */
 
-struct _GtkCanvasBoxClass
-{
-  const char *type_name;
-
-  void                  (* copy)                (GtkCanvasBox         *self,
-                                                 const GtkCanvasBox   *source);
-  void                  (* finish)              (GtkCanvasBox         *self);
-  gboolean              (* eval)                (const GtkCanvasBox   *self,
-                                                 graphene_rect_t      *rect);
-};
-
 G_DEFINE_BOXED_TYPE (GtkCanvasBox, gtk_canvas_box,
                      gtk_canvas_box_copy,
                      gtk_canvas_box_free)
 
-static gpointer
-gtk_canvas_box_alloc (const GtkCanvasBoxClass *class)
+void
+gtk_canvas_box_init (GtkCanvasBox         *self,
+                     const GtkCanvasPoint *point,
+                     const GtkCanvasSize  *size,
+                     float                 origin_x,
+                     float                 origin_y)
 {
-  GtkCanvasBox *self = g_slice_new (GtkCanvasBox);
-
-  self->class = class;
-
-  return self;
+  gtk_canvas_point_init_copy (&self->point, point);
+  gtk_canvas_size_init_copy (&self->size, size);
+  self->origin_x = origin_x;
+  self->origin_y = origin_y;
 }
 
 void
 gtk_canvas_box_init_copy (GtkCanvasBox       *self,
                           const GtkCanvasBox *source)
 {
-  self->class = source->class;
-  self->class->copy (self, source);
+  gtk_canvas_point_init_copy (&self->point, &source->point);
+  gtk_canvas_size_init_copy (&self->size, &source->size);
+  self->origin_x = source->origin_x;
+  self->origin_y = source->origin_y;
 }
 
 void
 gtk_canvas_box_finish (GtkCanvasBox *self)
 {
-  self->class->finish (self);
-}
-
-/* }}} */
-/* {{{ POINTS */
-
-static void
-gtk_canvas_box_points_copy (GtkCanvasBox       *box,
-                            const GtkCanvasBox *source_box)
-{
-  GtkCanvasBoxPoints *self = &box->points;
-  const GtkCanvasBoxPoints *source = &source_box->points;
-
-  gtk_canvas_point_init_copy (&self->point1, &source->point1);
-  gtk_canvas_point_init_copy (&self->point2, &source->point2);
-}
-
-static void
-gtk_canvas_box_points_finish (GtkCanvasBox *box)
-{
-  GtkCanvasBoxPoints *self = &box->points;
-
-  gtk_canvas_point_finish (&self->point1);
-  gtk_canvas_point_finish (&self->point2);
-}
-
-static gboolean
-gtk_canvas_box_points_eval (const GtkCanvasBox *box,
-                            graphene_rect_t    *rect)
-{
-  const GtkCanvasBoxPoints *self = &box->points;
-  float x1, x2, y1, y2;
-
-  if (!gtk_canvas_point_eval (&self->point1, &x1, &y1) ||
-      !gtk_canvas_point_eval (&self->point2, &x2, &y2))
-    return FALSE;
-
-  graphene_rect_init (rect, x1, y1, x2 - x1, y2 - y1);
-  return TRUE;
+  gtk_canvas_point_finish (&self->point);
+  gtk_canvas_size_finish (&self->size);
 }
 
-static const GtkCanvasBoxClass GTK_CANVAS_BOX_POINTS_CLASS =
-{
-  "GtkCanvasBoxPoints",
-  gtk_canvas_box_points_copy,
-  gtk_canvas_box_points_finish,
-  gtk_canvas_box_points_eval,
-};
-
+#if 0
 /**
  * gtk_canvas_box_new_points:
  * @point1: the first point
@@ -147,71 +97,7 @@ gtk_canvas_box_new_points (const GtkCanvasPoint *point1,
 
   return (GtkCanvasBox *) self;
 }
-
-/* }}} */
-/* {{{ SIZE */
-
-static void
-gtk_canvas_box_size_copy (GtkCanvasBox       *box,
-                          const GtkCanvasBox *source_box)
-{
-  const GtkCanvasBoxSize *source = &source_box->size;
-
-  gtk_canvas_box_init (box, &source->point, &source->size, source->origin_x, source->origin_y);
-}
-
-static void
-gtk_canvas_box_size_finish (GtkCanvasBox *box)
-{
-  GtkCanvasBoxSize *self = &box->size;
-
-  gtk_canvas_point_finish (&self->point);
-  gtk_canvas_size_finish (&self->size);
-}
-
-static gboolean
-gtk_canvas_box_size_eval (const GtkCanvasBox *box,
-                          graphene_rect_t    *rect)
-{
-  const GtkCanvasBoxSize *self = &box->size;
-  float x, y, width, height;
-
-  if (!gtk_canvas_point_eval (&self->point, &x, &y) ||
-      !gtk_canvas_size_eval (&self->size, &width, &height))
-    return FALSE;
-
-  graphene_rect_init (rect,
-                      x - width * self->origin_x,
-                      y - height * self->origin_y,
-                      width, height);
-
-  return TRUE;
-}
-
-static const GtkCanvasBoxClass GTK_CANVAS_BOX_SIZE_CLASS =
-{
-  "GtkCanvasBoxSize",
-  gtk_canvas_box_size_copy,
-  gtk_canvas_box_size_finish,
-  gtk_canvas_box_size_eval,
-};
-
-void
-gtk_canvas_box_init (GtkCanvasBox         *box,
-                     const GtkCanvasPoint *point,
-                     const GtkCanvasSize  *size,
-                     float                 origin_x,
-                     float                 origin_y)
-{
-  GtkCanvasBoxSize *self = &box->size;
-
-  self->class = &GTK_CANVAS_BOX_SIZE_CLASS;
-
-  gtk_canvas_point_init_copy (&self->point, point);
-  gtk_canvas_size_init_copy (&self->size, size);
-  self->origin_x = origin_x;
-  self->origin_y = origin_y;
-}
+#endif
 
 /**
  * gtk_canvas_box_new:
@@ -238,28 +124,19 @@ gtk_canvas_box_new (const GtkCanvasPoint *point,
   g_return_val_if_fail (point != NULL, NULL);
   g_return_val_if_fail (size != NULL, NULL);
 
-  self = gtk_canvas_box_alloc (&GTK_CANVAS_BOX_SIZE_CLASS);
+  self = g_slice_new (GtkCanvasBox);
 
   gtk_canvas_box_init (self, point, size, origin_x, origin_y);
 
   return self;
 }
 
-/* }}} */
-/* {{{ PUBLIC API */
-
 GtkCanvasBox *
 gtk_canvas_box_copy (const GtkCanvasBox *self)
 {
-  GtkCanvasBox *copy;
-
   g_return_val_if_fail (self != NULL, NULL);
 
-  copy = gtk_canvas_box_alloc (self->class);
-
-  gtk_canvas_box_init_copy (copy, self);
-
-  return copy;
+  return gtk_canvas_box_new (&self->point, &self->size, self->origin_x, self->origin_y);
 }
 
 void
@@ -277,7 +154,8 @@ gtk_canvas_box_eval (const GtkCanvasBox *self,
   g_return_val_if_fail (self != NULL, FALSE);
   g_return_val_if_fail (rect != NULL, FALSE);
 
-  if (self->class->eval (self, rect))
+  if (gtk_canvas_point_eval (&self->point, &rect->origin.x, &rect->origin.y) &&
+      gtk_canvas_size_eval (&self->size, &rect->size.width, &rect->size.height))
     return TRUE;
 
   *rect = *graphene_rect_zero ();
diff --git a/gtk/gtkcanvasboxprivate.h b/gtk/gtkcanvasboxprivate.h
index f28610c38d..82baa5fb2a 100644
--- a/gtk/gtkcanvasboxprivate.h
+++ b/gtk/gtkcanvasboxprivate.h
@@ -8,37 +8,14 @@
 
 G_BEGIN_DECLS
 
-typedef struct _GtkCanvasBoxClass GtkCanvasBoxClass;
-typedef struct _GtkCanvasBoxPoints GtkCanvasBoxPoints;
-typedef struct _GtkCanvasBoxSize GtkCanvasBoxSize;
-
-struct _GtkCanvasBoxPoints
-{
-  const GtkCanvasBoxClass *class;
-
-  GtkCanvasPoint point1;
-  GtkCanvasPoint point2;
-};
-
-struct _GtkCanvasBoxSize
+struct _GtkCanvasBox
 {
-  const GtkCanvasBoxClass *class;
-
   GtkCanvasPoint point;
   GtkCanvasSize size;
   float origin_x;
   float origin_y;
 };
 
-struct _GtkCanvasBox
-{
-  union {
-    const GtkCanvasBoxClass *class;
-    GtkCanvasBoxPoints points;
-    GtkCanvasBoxSize size;
-  };
-};
-
 
 void                    gtk_canvas_box_init                     (GtkCanvasBox           *self,
                                                                  const GtkCanvasPoint   *point,


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