[gtk/wip/otte/canvas: 30/36] canvas: CanvasSize => CanvasVector




commit 366ab8ca7c2c09890c00b8ee87a32c1e86f8867c
Author: Benjamin Otte <otte redhat com>
Date:   Mon Jul 4 08:25:25 2022 +0200

    canvas: CanvasSize => CanvasVector
    
    unify the point and size objects.

 demos/gtk-demo/canvas_intro.c  |   5 +-
 demos/gtk-demo/canvas_puzzle.c |   7 +-
 gtk/gtk.h                      |   1 -
 gtk/gtkcanvas.c                |   5 +-
 gtk/gtkcanvas.h                |   2 +-
 gtk/gtkcanvasbox.c             |   6 +-
 gtk/gtkcanvasbox.h             |   4 +-
 gtk/gtkcanvasitem.c            |  12 ++-
 gtk/gtkcanvasitemprivate.h     |   3 -
 gtk/gtkcanvassize.c            | 195 -----------------------------------------
 gtk/gtkcanvassize.h            |  69 ---------------
 gtk/gtkcanvasvector.c          |  34 +++++++
 gtk/gtkcanvasvector.h          |  13 +++
 gtk/gtktypes.h                 |   1 -
 gtk/meson.build                |   2 -
 15 files changed, 69 insertions(+), 290 deletions(-)
---
diff --git a/demos/gtk-demo/canvas_intro.c b/demos/gtk-demo/canvas_intro.c
index 2ab4974076..2ef1846321 100644
--- a/demos/gtk-demo/canvas_intro.c
+++ b/demos/gtk-demo/canvas_intro.c
@@ -15,7 +15,7 @@ bind_item (GtkListItemFactory *factory,
            GtkCanvasItem      *ci)
 {
   GtkCanvasVector *point;
-  GtkCanvasSize *size;
+  const GtkCanvasVector *size;
   GtkCanvasBox *box;
 
   gtk_canvas_item_set_widget (ci, gtk_canvas_item_get_item (ci));
@@ -29,10 +29,9 @@ bind_item (GtkListItemFactory *factory,
 
   point = gtk_canvas_vector_new_from_box (box, 0.5, 0.5);
   gtk_canvas_box_free (box);
-  size = gtk_canvas_size_new_measure_item (ci, GTK_CANVAS_ITEM_MEASURE_MIN_FOR_MIN);
+  size = gtk_canvas_vector_get_item_measure (ci, GTK_CANVAS_ITEM_MEASURE_MIN_FOR_MIN);
   box = gtk_canvas_box_new (point, size, 0.5, 0.5);
   gtk_canvas_vector_free (point);
-  gtk_canvas_size_free (size);
 
   gtk_canvas_item_set_bounds (ci, box);
   gtk_canvas_box_free (box);
diff --git a/demos/gtk-demo/canvas_puzzle.c b/demos/gtk-demo/canvas_puzzle.c
index 09cb2a6eff..f1ee30703b 100644
--- a/demos/gtk-demo/canvas_puzzle.c
+++ b/demos/gtk-demo/canvas_puzzle.c
@@ -14,8 +14,7 @@ set_item_position (GtkCanvasItem *ci,
                    float          x,
                    float          y)
 {
-  GtkCanvasVector *point;
-  GtkCanvasSize *size;
+  GtkCanvasVector *point, *size;
   GtkCanvasBox *box, *viewport;
 
   x = CLAMP (x, 0, 1);
@@ -29,10 +28,10 @@ set_item_position (GtkCanvasItem *ci,
 
   point = gtk_canvas_vector_new_from_box (viewport, x, y);
   gtk_canvas_box_free (viewport);
-  size = gtk_canvas_size_new (0, 0);
+  size = gtk_canvas_vector_new (0, 0);
   box = gtk_canvas_box_new (point, size, x, y);
   gtk_canvas_vector_free (point);
-  gtk_canvas_size_free (size);
+  gtk_canvas_vector_free (size);
 
   gtk_canvas_item_set_bounds (ci, box);
   gtk_canvas_box_free (box);
diff --git a/gtk/gtk.h b/gtk/gtk.h
index d534c33517..010d0fed01 100644
--- a/gtk/gtk.h
+++ b/gtk/gtk.h
@@ -63,7 +63,6 @@
 #include <gtk/gtkcanvasbox.h>
 #include <gtk/gtkcanvasitem.h>
 #include <gtk/gtkcanvasvector.h>
-#include <gtk/gtkcanvassize.h>
 #include <gtk/gtkcellarea.h>
 #include <gtk/gtkcellareabox.h>
 #include <gtk/gtkcellareacontext.h>
diff --git a/gtk/gtkcanvas.c b/gtk/gtkcanvas.c
index 2b15c21c74..e638cff9af 100644
--- a/gtk/gtkcanvas.c
+++ b/gtk/gtkcanvas.c
@@ -23,7 +23,6 @@
 
 #include "gtkcanvasbox.h"
 #include "gtkcanvasitemprivate.h"
-#include "gtkcanvassize.h"
 #include "gtkcanvasvectorprivate.h"
 #include "gtkintl.h"
 #include "gtklistitemfactory.h"
@@ -544,8 +543,8 @@ gtk_canvas_lookup_item (GtkCanvas *self,
   return g_hash_table_lookup (self->item_lookup, item);
 }
 
-const GtkCanvasSize *
+const GtkCanvasVector *
 gtk_canvas_get_viewport_size (GtkCanvas *self)
 {
-  return (const GtkCanvasSize *) &self->viewport_size;
+  return &self->viewport_size;
 }
diff --git a/gtk/gtkcanvas.h b/gtk/gtkcanvas.h
index da1ab2e210..75e8f8b093 100644
--- a/gtk/gtkcanvas.h
+++ b/gtk/gtkcanvas.h
@@ -54,7 +54,7 @@ GtkCanvasItem *         gtk_canvas_lookup_item                  (GtkCanvas
                                                                  gpointer                item);
 
 GDK_AVAILABLE_IN_ALL
-const GtkCanvasSize *   gtk_canvas_get_viewport_size            (GtkCanvas              *self);
+const GtkCanvasVector * gtk_canvas_get_viewport_size            (GtkCanvas              *self);
 
 G_END_DECLS
 
diff --git a/gtk/gtkcanvasbox.c b/gtk/gtkcanvasbox.c
index 7851d7b0fe..a5d2cb5cb8 100644
--- a/gtk/gtkcanvasbox.c
+++ b/gtk/gtkcanvasbox.c
@@ -130,7 +130,7 @@ gtk_canvas_box_new_points (const GtkCanvasVector *point1,
  **/
 GtkCanvasBox *
 gtk_canvas_box_new (const GtkCanvasVector *point,
-                    const GtkCanvasSize   *size,
+                    const GtkCanvasVector *size,
                     float                  origin_x,
                     float                  origin_y)
 {
@@ -207,12 +207,12 @@ gtk_canvas_box_get_point (const GtkCanvasBox *self)
   return &self->point;
 }
 
-const GtkCanvasSize *
+const GtkCanvasVector *
 gtk_canvas_box_get_size (const GtkCanvasBox *self)
 {
   g_return_val_if_fail (self != NULL, NULL);
 
-  return (GtkCanvasSize *) &self->size;
+  return &self->size;
 }
 
 void
diff --git a/gtk/gtkcanvasbox.h b/gtk/gtkcanvasbox.h
index 7101be12d5..34884e687d 100644
--- a/gtk/gtkcanvasbox.h
+++ b/gtk/gtkcanvasbox.h
@@ -43,7 +43,7 @@ void                    gtk_canvas_box_free                   (GtkCanvasBox
 GDK_AVAILABLE_IN_ALL
 const GtkCanvasVector * gtk_canvas_box_get_point              (const GtkCanvasBox       *self) G_GNUC_PURE;
 GDK_AVAILABLE_IN_ALL
-const GtkCanvasSize *   gtk_canvas_box_get_size               (const GtkCanvasBox       *self) G_GNUC_PURE;
+const GtkCanvasVector * gtk_canvas_box_get_size               (const GtkCanvasBox       *self) G_GNUC_PURE;
 GDK_AVAILABLE_IN_ALL
 void                    gtk_canvas_box_get_origin             (const GtkCanvasBox       *self,
                                                                float                    *x,
@@ -55,7 +55,7 @@ gboolean                gtk_canvas_box_eval                   (const GtkCanvasBo
 
 GDK_AVAILABLE_IN_ALL
 GtkCanvasBox *          gtk_canvas_box_new                    (const GtkCanvasVector    *point,
-                                                               const GtkCanvasSize      *size,
+                                                               const GtkCanvasVector    *size,
                                                                float                     origin_x,
                                                                float                     origin_y);
 GDK_AVAILABLE_IN_ALL
diff --git a/gtk/gtkcanvasitem.c b/gtk/gtkcanvasitem.c
index 745057657f..05ec3845fa 100644
--- a/gtk/gtkcanvasitem.c
+++ b/gtk/gtkcanvasitem.c
@@ -325,21 +325,27 @@ gtk_canvas_item_has_allocation (GtkCanvasItem *self)
 }
 
 const GtkCanvasVector *
-gtk_canvas_item_get_measure_vec2 (GtkCanvasItem            *self,
-                                  GtkCanvasItemMeasurement  measure)
+gtk_canvas_vector_get_item_measure (GtkCanvasItem        *item,
+                                    GtkCanvasItemMeasure  measure)
 {
-  return &self->size_vecs[measure];
+  g_return_val_if_fail (GTK_IS_CANVAS_ITEM (item), NULL);
+
+  return &item->size_vecs[measure];
 }
 
 const GtkCanvasBox *
 gtk_canvas_box_get_item_bounds (GtkCanvasItem *item)
 {
+  g_return_val_if_fail (GTK_IS_CANVAS_ITEM (item), NULL);
+
   return &item->bounds_var;
 }
 
 const GtkCanvasBox *
 gtk_canvas_box_get_item_allocation (GtkCanvasItem *item)
 {
+  g_return_val_if_fail (GTK_IS_CANVAS_ITEM (item), NULL);
+
   return &item->allocation_var;
 }
 
diff --git a/gtk/gtkcanvasitemprivate.h b/gtk/gtkcanvasitemprivate.h
index 9e8eb6874c..cf1adbfc24 100644
--- a/gtk/gtkcanvasitemprivate.h
+++ b/gtk/gtkcanvasitemprivate.h
@@ -3,7 +3,6 @@
 
 #include "gtkcanvasitem.h"
 
-#include "gtkcanvassize.h"
 #include "gtkcanvasvectorprivate.h"
 
 G_BEGIN_DECLS
@@ -18,8 +17,6 @@ void                    gtk_canvas_item_allocate_widget          (GtkCanvasItem
                                                                   float                  dx,
                                                                   float                  dy);
 gboolean                gtk_canvas_item_has_allocation           (GtkCanvasItem         *self);
-const GtkCanvasVector *   gtk_canvas_item_get_measure_vec2         (GtkCanvasItem         *self,
-                                                                  GtkCanvasItemMeasurement measure);
 
 void                    gtk_canvas_item_clear_canvas             (GtkCanvasItem         *self);
 
diff --git a/gtk/gtkcanvasvector.c b/gtk/gtkcanvasvector.c
index 81b87c81fd..81009fcbdb 100644
--- a/gtk/gtkcanvasvector.c
+++ b/gtk/gtkcanvasvector.c
@@ -103,6 +103,40 @@ gtk_canvas_vector_new_from_box (const GtkCanvasBox *box,
   return self;
 }
 
+/**
+ * gtk_canvas_vector_new_distance:
+ * @from: point from where to compute the distance
+ * @to: point to where to compute the distance
+ *
+ * Creates a size for the given distance. Note that both width and height
+ * can be negative if the coordinate of @to is smaller than @from in the
+ * corresponding dimension.
+ *
+ * Returns: a new size
+ **/
+GtkCanvasVector *
+gtk_canvas_vector_new_distance (const GtkCanvasVector *from,
+                                const GtkCanvasVector *to)
+{
+  GtkCanvasVector *self;
+  graphene_vec2_t minus_one;
+
+  g_return_val_if_fail (from != NULL, NULL);
+  g_return_val_if_fail (to != NULL, NULL);
+
+  graphene_vec2_init (&minus_one, -1.f, -1.f);
+
+  self = gtk_canvas_vector_alloc ();
+  gtk_canvas_vector_init_sum (self,
+                              graphene_vec2_one (),
+                              from,
+                              &minus_one,
+                              to,
+                              NULL);
+
+  return self;
+}
+
 GtkCanvasVector *
 gtk_canvas_vector_copy (const GtkCanvasVector *self)
 {
diff --git a/gtk/gtkcanvasvector.h b/gtk/gtkcanvasvector.h
index 3222dae8c8..bd031ecec9 100644
--- a/gtk/gtkcanvasvector.h
+++ b/gtk/gtkcanvasvector.h
@@ -48,10 +48,23 @@ GDK_AVAILABLE_IN_ALL
 GtkCanvasVector *       gtk_canvas_vector_new                   (float                   x,
                                                                  float                   y);
 GDK_AVAILABLE_IN_ALL
+GtkCanvasVector *       gtk_canvas_vector_new_distance          (const GtkCanvasVector  *from,
+                                                                 const GtkCanvasVector  *to);
+GDK_AVAILABLE_IN_ALL
 GtkCanvasVector *       gtk_canvas_vector_new_from_box          (const GtkCanvasBox     *box,
                                                                  float                   origin_x,
                                                                  float                   origin_y);
 
+typedef enum {
+  GTK_CANVAS_ITEM_MEASURE_MIN_FOR_MIN,
+  GTK_CANVAS_ITEM_MEASURE_MIN_FOR_NAT,
+  GTK_CANVAS_ITEM_MEASURE_NAT_FOR_MIN,
+  GTK_CANVAS_ITEM_MEASURE_NAT_FOR_NAT
+} GtkCanvasItemMeasure;
+
+GDK_AVAILABLE_IN_ALL
+const GtkCanvasVector * gtk_canvas_vector_get_item_measure      (GtkCanvasItem          *item,
+                                                                 GtkCanvasItemMeasure    measure);
 G_END_DECLS
 
 #endif /* __GTK_VECTOR_H__ */
diff --git a/gtk/gtktypes.h b/gtk/gtktypes.h
index 72f36347a4..da949a6bd9 100644
--- a/gtk/gtktypes.h
+++ b/gtk/gtktypes.h
@@ -41,7 +41,6 @@ typedef struct _GtkCanvas              GtkCanvas;
 typedef struct _GtkCanvasBox           GtkCanvasBox;
 typedef struct _GtkCanvasItem          GtkCanvasItem;
 typedef struct _GtkCanvasVector        GtkCanvasVector;
-typedef struct _GtkCanvasSize          GtkCanvasSize;
 typedef struct _GtkCssStyleChange      GtkCssStyleChange;
 typedef struct _GtkEventController     GtkEventController;
 typedef struct _GtkGesture             GtkGesture;
diff --git a/gtk/meson.build b/gtk/meson.build
index f447ff26ed..594808de9e 100644
--- a/gtk/meson.build
+++ b/gtk/meson.build
@@ -187,7 +187,6 @@ gtk_public_sources = files([
   'gtkcanvasbox.c',
   'gtkcanvasitem.c',
   'gtkcanvasvector.c',
-  'gtkcanvassize.c',
   'gtkcellarea.c',
   'gtkcellareabox.c',
   'gtkcellareacontext.c',
@@ -483,7 +482,6 @@ gtk_public_headers = files([
   'gtkcanvasbox.h',
   'gtkcanvasitem.h',
   'gtkcanvasvector.h',
-  'gtkcanvassize.h',
   'gtkcenterbox.h',
   'gtkcenterlayout.h',
   'gtkcellarea.h',


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