From f212db2fccfa3825d6a4dc55d5077e5fb756d50b Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Thu, 30 Jun 2016 17:45:45 +0200 Subject: [PATCH] core: fixed code duplication We have two places where copying from box set to clip is implemented in the same way. Just move that to one function. Signed-off-by: Enrico Weigelt, metux IT consult Signed-off-by: Uli Schlachter --- src/cairo-clip-boxes.c | 50 ++++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/src/cairo-clip-boxes.c b/src/cairo-clip-boxes.c index 6e4b50d49..1d33cc892 100644 --- a/src/cairo-clip-boxes.c +++ b/src/cairo-clip-boxes.c @@ -264,6 +264,35 @@ _cairo_clip_intersect_box (cairo_clip_t *clip, return _cairo_clip_intersect_rectangle_box (clip, &r, box); } +/** + * copy a box set to an clip + * + * @param box the box set to copy from + * @param clip the clip to copy to (return buffer) + * @result zero if the allocation failed - the clip will be set to all-clipped + * otherwise non-zero + */ +static cairo_bool_t +_cairo_boxes_copy_to_clip (const cairo_boxes_t *boxes, cairo_clip_t *clip) +{ + /* XXX cow-boxes? */ + if (boxes->num_boxes == 1) { + clip->boxes = &clip->embedded_box; + clip->boxes[0] = boxes->chunks.base[0]; + clip->num_boxes = 1; + return TRUE; + } + + clip->boxes = _cairo_boxes_to_array (boxes, &clip->num_boxes); + if (unlikely (clip->boxes == NULL)) + { + _cairo_clip_set_all_clipped (clip); + return FALSE; + } + + return TRUE; +} + cairo_clip_t * _cairo_clip_intersect_boxes (cairo_clip_t *clip, const cairo_boxes_t *boxes) @@ -301,13 +330,10 @@ _cairo_clip_intersect_boxes (cairo_clip_t *clip, if (boxes->num_boxes == 0) { clip = _cairo_clip_set_all_clipped (clip); goto out; - } else if (boxes->num_boxes == 1) { - clip->boxes = &clip->embedded_box; - clip->boxes[0] = boxes->chunks.base[0]; - clip->num_boxes = 1; - } else { - clip->boxes = _cairo_boxes_to_array (boxes, &clip->num_boxes); } + + _cairo_boxes_copy_to_clip (boxes, clip); + _cairo_boxes_extents (boxes, &limits); _cairo_box_round_to_rectangle (&limits, &extents); @@ -574,16 +600,8 @@ _cairo_clip_from_boxes (const cairo_boxes_t *boxes) if (clip == NULL) return _cairo_clip_set_all_clipped (clip); - /* XXX cow-boxes? */ - if(boxes->num_boxes == 1) { - clip->boxes = &clip->embedded_box; - clip->boxes[0] = boxes->chunks.base[0]; - clip->num_boxes = 1; - } else { - clip->boxes = _cairo_boxes_to_array (boxes, &clip->num_boxes); - if (clip->boxes == NULL) - return _cairo_clip_set_all_clipped (clip); - } + if (unlikely (! _cairo_boxes_copy_to_clip (boxes, clip))) + return clip; _cairo_boxes_extents (boxes, &extents); _cairo_box_round_to_rectangle (&extents, &clip->extents);