[cairo] RFC: helper macros for rect -> box conversions

Enrico Weigelt, metux IT consult enrico.weigelt at gr13.net
Wed Dec 16 06:57:19 PST 2015


Hi folks,

I've seem lots of places where rects are converted to boxes.

Should we introduce some helper macros / inline functions,
which later can also be optimized in arch-specific way
(eg. vector ops) ?


Maybe something like this ?

diff --git a/src/cairo-box-inline.h b/src/cairo-box-inline.h
index 406102a..c20c28f 100644
--- a/src/cairo-box-inline.h
+++ b/src/cairo-box-inline.h
@@ -57,6 +57,16 @@ _cairo_box_from_integers (cairo_box_t *box, int x,
int y, int w, int h)
     box->p2.y = _cairo_fixed_from_int (y + h);
 }

+static inline void
+_cairo_box_from_rectangle_int(cairo_box_t *box,
+                             const cairo_rectangle_int_t *rect)
+{
+    box->p1.x = _cairo_fixed_from_int (rect->x);
+    box->p1.y = _cairo_fixed_from_int (rect->y);
+    box->p2.x = _cairo_fixed_from_int (rect->x + rect->width);
+    box->p2.y = _cairo_fixed_from_int (rect->y + rect->height);
+}
+
 /* assumes box->p1 is top-left, p2 bottom-right */
 static inline void
 _cairo_box_add_point (cairo_box_t *box,
diff --git a/src/cairo-clip-boxes.c b/src/cairo-clip-boxes.c
index 7bcbeb1..abf634e 100644
--- a/src/cairo-clip-boxes.c
+++ b/src/cairo-clip-boxes.c
@@ -119,11 +119,7 @@ _cairo_clip_contains_rectangle (const cairo_clip_t
*clip,
 {
     cairo_box_t box;

-    box.p1.x = _cairo_fixed_from_int (rect->x);
-    box.p1.y = _cairo_fixed_from_int (rect->y);
-    box.p2.x = _cairo_fixed_from_int (rect->x + rect->width);
-    box.p2.y = _cairo_fixed_from_int (rect->y + rect->height);
-
+    _cairo_box_from_rectangle_int(&box, rect);
     return _cairo_clip_contains_rectangle_box (clip, rect, &box);
 }

@@ -347,10 +343,7 @@ _cairo_clip_intersect_rectangle (cairo_clip_t
 *clip,
     if (r->width == 0 || r->height == 0)
        return _cairo_clip_set_all_clipped (clip);

-    box.p1.x = _cairo_fixed_from_int (r->x);
-    box.p1.y = _cairo_fixed_from_int (r->y);
-    box.p2.x = _cairo_fixed_from_int (r->x + r->width);
-    box.p2.y = _cairo_fixed_from_int (r->y + r->height);
+    _cairo_box_from_rectangle_int(&box, r);

     return _cairo_clip_intersect_rectangle_box (clip, r, &box);
 }


--mtx


--
Enrico Weigelt,
metux IT consulting
+49-151-27565287


More information about the cairo mailing list