diff options
author | Benjamin Otte <otte@redhat.com> | 2022-07-04 08:25:25 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2022-07-05 07:38:32 +0200 |
commit | 366ab8ca7c2c09890c00b8ee87a32c1e86f8867c (patch) | |
tree | 61029036599db590372f789346fb6fcbb60e4c17 | |
parent | 068d73f3aee960d1d3c6f74b89ec757891d94932 (diff) | |
download | gtk+-366ab8ca7c2c09890c00b8ee87a32c1e86f8867c.tar.gz |
canvas: CanvasSize => CanvasVector
unify the point and size objects.
-rw-r--r-- | demos/gtk-demo/canvas_intro.c | 5 | ||||
-rw-r--r-- | demos/gtk-demo/canvas_puzzle.c | 7 | ||||
-rw-r--r-- | gtk/gtk.h | 1 | ||||
-rw-r--r-- | gtk/gtkcanvas.c | 5 | ||||
-rw-r--r-- | gtk/gtkcanvas.h | 2 | ||||
-rw-r--r-- | gtk/gtkcanvasbox.c | 6 | ||||
-rw-r--r-- | gtk/gtkcanvasbox.h | 4 | ||||
-rw-r--r-- | gtk/gtkcanvasitem.c | 12 | ||||
-rw-r--r-- | gtk/gtkcanvasitemprivate.h | 3 | ||||
-rw-r--r-- | gtk/gtkcanvassize.c | 195 | ||||
-rw-r--r-- | gtk/gtkcanvassize.h | 69 | ||||
-rw-r--r-- | gtk/gtkcanvasvector.c | 34 | ||||
-rw-r--r-- | gtk/gtkcanvasvector.h | 13 | ||||
-rw-r--r-- | gtk/gtktypes.h | 1 | ||||
-rw-r--r-- | 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); @@ -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/gtkcanvassize.c b/gtk/gtkcanvassize.c deleted file mode 100644 index 3da516faf7..0000000000 --- a/gtk/gtkcanvassize.c +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright © 2022 Benjamin Otte - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - * Authors: Benjamin Otte <otte@gnome.org> - */ - - -/** - * GtkCanvasSize: - * - * `GtkCanvasSize` describes a size in a `GtkCanvas`. - */ - -#include "config.h" - -#include "gtkcanvassize.h" - -#include "gtkcanvasboxprivate.h" -#include "gtkcanvasitemprivate.h" -#include "gtkcanvasvector.h" -#include "gtkcanvasvectorprivate.h" - -G_DEFINE_BOXED_TYPE (GtkCanvasSize, gtk_canvas_size, - gtk_canvas_size_copy, - gtk_canvas_size_free) - -struct _GtkCanvasSize -{ - GtkCanvasVector vec2; -}; - -static GtkCanvasSize * -gtk_canvas_size_alloc (void) -{ - return g_slice_new (GtkCanvasSize); -} - -/** - * gtk_canvas_size_new: - * @width: width of the size - * @height: height of the size - * - * Creates a new size with the given dimensions - * - * Returns: a new size - **/ -GtkCanvasSize * -gtk_canvas_size_new (float width, - float height) -{ - GtkCanvasSize *self; - - self = gtk_canvas_size_alloc (); - gtk_canvas_vector_init_constant (&self->vec2, width, height); - - return self; -} - -/** - * gtk_canvas_size_new_from_box: - * @box: a box - * - * Creates a size for the given box. - * - * Returns: a new size - **/ -GtkCanvasSize * -gtk_canvas_size_new_from_box (const GtkCanvasBox *box) -{ - GtkCanvasSize *self; - - self = gtk_canvas_size_alloc (); - gtk_canvas_vector_init_copy (&self->vec2, &box->size); - - return self; -} - -/** - * gtk_canvas_size_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 - **/ -GtkCanvasSize * -gtk_canvas_size_new_distance (const GtkCanvasVector *from, - const GtkCanvasVector *to) -{ - GtkCanvasSize *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_size_alloc (); - gtk_canvas_vector_init_sum (&self->vec2, - graphene_vec2_one (), - from, - &minus_one, - to, - NULL); - - return self; -} - -/** - * gtk_canvas_size_new_measure_item: - * @item: the item - * @measure: how to measure the item - * - * Measures the widget of @item with the given method to determine - * a size. - * - * Returns: a new size - **/ -GtkCanvasSize * -gtk_canvas_size_new_measure_item (GtkCanvasItem *item, - GtkCanvasItemMeasurement measure) -{ - GtkCanvasSize *self; - - g_return_val_if_fail (GTK_IS_CANVAS_ITEM (item), NULL); - - self = gtk_canvas_size_alloc (); - gtk_canvas_vector_init_copy (&self->vec2, - gtk_canvas_item_get_measure_vec2 (item, measure)); - - return self; -} - -GtkCanvasSize * -gtk_canvas_size_copy (const GtkCanvasSize *self) -{ - GtkCanvasSize *copy; - - g_return_val_if_fail (self != NULL, NULL); - - copy = gtk_canvas_size_alloc (); - gtk_canvas_vector_init_copy (©->vec2, &self->vec2); - - return copy; -} - -void -gtk_canvas_size_free (GtkCanvasSize *self) -{ - g_return_if_fail (self != NULL); - - gtk_canvas_vector_finish (&self->vec2); - - g_slice_free (GtkCanvasSize, self); -} - -gboolean -gtk_canvas_size_eval (const GtkCanvasSize *self, - float *width, - float *height) -{ - graphene_vec2_t vec2; - - g_return_val_if_fail (self != NULL, FALSE); - g_return_val_if_fail (width != NULL, FALSE); - g_return_val_if_fail (height != NULL, FALSE); - - if (!gtk_canvas_vector_eval (&self->vec2, &vec2)) - { - *width = 0; - *height = 0; - return FALSE; - } - - *width = graphene_vec2_get_x (&vec2); - *height = graphene_vec2_get_y (&vec2); - return TRUE; -} - diff --git a/gtk/gtkcanvassize.h b/gtk/gtkcanvassize.h deleted file mode 100644 index 26e5ef1733..0000000000 --- a/gtk/gtkcanvassize.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright © 2022 Benjamin Otte - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - * Authors: Benjamin Otte <otte@gnome.org> - */ - - -#ifndef __GTK_CANVAS_SIZE_H__ -#define __GTK_CANVAS_SIZE_H__ - -#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only <gtk/gtk.h> can be included directly." -#endif - -#include <gtk/gtktypes.h> - -G_BEGIN_DECLS - -#define GTK_TYPE_CANVAS_SIZE (gtk_canvas_size_get_type ()) - -GDK_AVAILABLE_IN_ALL -GType gtk_canvas_size_get_type (void) G_GNUC_CONST; - -GDK_AVAILABLE_IN_ALL -GtkCanvasSize * gtk_canvas_size_copy (const GtkCanvasSize *self); -GDK_AVAILABLE_IN_ALL -void gtk_canvas_size_free (GtkCanvasSize *self); - -GDK_AVAILABLE_IN_ALL -gboolean gtk_canvas_size_eval (const GtkCanvasSize *self, - float *width, - float *height) G_GNUC_WARN_UNUSED_RESULT; - -GDK_AVAILABLE_IN_ALL -GtkCanvasSize * gtk_canvas_size_new (float width, - float height); -GDK_AVAILABLE_IN_ALL -GtkCanvasSize * gtk_canvas_size_new_distance (const GtkCanvasVector *from, - const GtkCanvasVector *to); -GDK_AVAILABLE_IN_ALL -GtkCanvasSize * gtk_canvas_size_new_from_box (const GtkCanvasBox *box); - -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 -} GtkCanvasItemMeasurement; - -GDK_AVAILABLE_IN_ALL -GtkCanvasSize * gtk_canvas_size_new_measure_item (GtkCanvasItem *item, - GtkCanvasItemMeasurement measure); - -G_END_DECLS - -#endif /* __GTK_SIZE_H__ */ 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', |