[PATCH 2/2] d2d1: Implement GetBounds() for path geometries

Henri Verbeet hverbeet at gmail.com
Fri Sep 15 06:15:00 CDT 2017


On 14 September 2017 at 14:10, Nikolay Sivov <nsivov at codeweavers.com> wrote:
> +    /* GetBounds() with bezier segments. */
> +    hr = ID2D1Factory_CreatePathGeometry(factory, &geometry);
> +    ok(SUCCEEDED(hr), "Failed to create path geometry, hr %#x.\n", hr);
> +    hr = ID2D1PathGeometry_Open(geometry, &sink);
> +    ok(SUCCEEDED(hr), "Failed to open geometry sink, hr %#x.\n", hr);
> +    fill_geometry_sink_bezier(sink);
> +    hr = ID2D1GeometrySink_Close(sink);
> +    ok(SUCCEEDED(hr), "Failed to close geometry sink, hr %#x.\n", hr);
> +    ID2D1GeometrySink_Release(sink);
> +
> +    set_rect(&rect, 0.0f, 0.0f, 0.0f, 0.0f);
> +    hr = ID2D1PathGeometry_GetBounds(geometry, NULL, &rect);
> +    ok(SUCCEEDED(hr), "Failed to get geometry bounds, hr %#x.\n", hr);
> +    match = compare_rect(&rect, 5.0f, 20.0f, 75.0f, 752.0f, 0);
> +    ok(match, "Got unexpected rectangle {%.8e, %.8e, %.8e, %.8e}.\n",
> +            rect.left, rect.top, rect.right, rect.bottom);

Note that the way fill_geometry_sink_bezier() is constructed, the
bounds tend to coincide with the control points, probably even under a
carefully chosen rotation. The figure from test_bezier_intersect()
under various rotations may be more interesting.



More information about the wine-devel mailing list