From 85db25b8a1eba2ce6dd54faa7f496bbb08c1b02f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20H=C3=B8gsberg?= Date: Sun, 27 Feb 2005 11:21:39 +0000 Subject: [PATCH] Fix this function again. Problem with signed/unsigned types reported by Jeff Muizelaar . --- ChangeLog | 6 ++++++ src/cairo-gstate.c | 17 ++++++++++------- src/cairo_gstate.c | 17 ++++++++++------- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2897bc1ac..19dd31958 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-02-27 Kristian Høgsberg + + * src/cairo_gstate.c (_cairo_rectangle_intersect): Fix this + function again. Problem with signed/unsigned types reported by + Jeff Muizelaar . + 2005-02-27 Kristian Høgsberg * src/cairo.h (cairo_fill_rule_t): Remove newline in comment which diff --git a/src/cairo-gstate.c b/src/cairo-gstate.c index 003cbf886..f027d6792 100644 --- a/src/cairo-gstate.c +++ b/src/cairo-gstate.c @@ -1407,20 +1407,23 @@ _cairo_box_round_to_rectangle (cairo_box_t *box, cairo_rectangle_t *rectangle) static void _cairo_rectangle_intersect (cairo_rectangle_t *dest, cairo_rectangle_t *src) { - cairo_rectangle_t out; + int x1, y1, x2, y2; - out.x = MAX (dest->x, src->x); - out.y = MAX (dest->y, src->y); - out.width = MIN (dest->x + dest->width, src->x + src->width) - out.x; - out.height = MIN (dest->y + dest->height, src->y + src->height) - out.y; + x1 = MAX (dest->x, src->x); + y1 = MAX (dest->y, src->y); + x2 = MIN (dest->x + dest->width, src->x + src->width); + y2 = MIN (dest->y + dest->height, src->y + src->height); - if (out.width <= 0 || out.height <= 0) { + if (x1 >= x2 || y1 >= y2) { dest->x = 0; dest->y = 0; dest->width = 0; dest->height = 0; } else { - *dest = out; + dest->x = x1; + dest->y = y1; + dest->width = x2 - x1; + dest->height = y2 - y1; } } diff --git a/src/cairo_gstate.c b/src/cairo_gstate.c index 003cbf886..f027d6792 100644 --- a/src/cairo_gstate.c +++ b/src/cairo_gstate.c @@ -1407,20 +1407,23 @@ _cairo_box_round_to_rectangle (cairo_box_t *box, cairo_rectangle_t *rectangle) static void _cairo_rectangle_intersect (cairo_rectangle_t *dest, cairo_rectangle_t *src) { - cairo_rectangle_t out; + int x1, y1, x2, y2; - out.x = MAX (dest->x, src->x); - out.y = MAX (dest->y, src->y); - out.width = MIN (dest->x + dest->width, src->x + src->width) - out.x; - out.height = MIN (dest->y + dest->height, src->y + src->height) - out.y; + x1 = MAX (dest->x, src->x); + y1 = MAX (dest->y, src->y); + x2 = MIN (dest->x + dest->width, src->x + src->width); + y2 = MIN (dest->y + dest->height, src->y + src->height); - if (out.width <= 0 || out.height <= 0) { + if (x1 >= x2 || y1 >= y2) { dest->x = 0; dest->y = 0; dest->width = 0; dest->height = 0; } else { - *dest = out; + dest->x = x1; + dest->y = y1; + dest->width = x2 - x1; + dest->height = y2 - y1; } }