static void _cairo_stroker_limit (cairo_stroker_t *stroker, const cairo_path_fixed_t *path, const cairo_box_t *boxes, int num_boxes) { double dx, dy; cairo_fixed_t fdx, fdy; stroker->has_bounds = TRUE; _cairo_boxes_get_extents (boxes, num_boxes, &stroker->bounds); /* Extend the bounds in each direction to account for the maximum area * we might generate trapezoids, to capture line segments that are outside * of the bounds but which might generate rendering that's within bounds. */ _cairo_stroke_style_max_distance_from_path (&stroker->style, path, stroker->ctm, &dx, &dy); fdx = _cairo_fixed_from_double (dx); fdy = _cairo_fixed_from_double (dy); stroker->bounds.p1.x -= fdx; stroker->bounds.p2.x += fdx; stroker->bounds.p1.y -= fdy; stroker->bounds.p2.y += fdy; }
static void _cairo_rectilinear_stroker_limit (cairo_rectilinear_stroker_t *stroker, const cairo_box_t *boxes, int num_boxes) { stroker->has_bounds = TRUE; _cairo_boxes_get_extents (boxes, num_boxes, &stroker->bounds); stroker->bounds.p1.x -= stroker->half_line_x; stroker->bounds.p2.x += stroker->half_line_x; stroker->bounds.p1.y -= stroker->half_line_y; stroker->bounds.p2.y += stroker->half_line_y; }