Module: wine Branch: master Commit: d10dfd41021ce4b6c68f66b239a5313b018dae54 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d10dfd41021ce4b6c68f66b239...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Fri Feb 3 13:37:12 2017 +0100
d2d1: Take the source transformation into account when creating a transformed geometry.
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/d2d1/d2d1_private.h | 1 + dlls/d2d1/geometry.c | 11 ++++++++--- dlls/d2d1/tests/d2d1.c | 4 ++-- 3 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h index 2274a8e..336be96 100644 --- a/dlls/d2d1/d2d1_private.h +++ b/dlls/d2d1/d2d1_private.h @@ -366,6 +366,7 @@ struct d2d_geometry struct { ID2D1Geometry *src_geometry; + D2D_MATRIX_3X2_F transform; } transformed; } u; }; diff --git a/dlls/d2d1/geometry.c b/dlls/d2d1/geometry.c index 79250ab..b268b7d 100644 --- a/dlls/d2d1/geometry.c +++ b/dlls/d2d1/geometry.c @@ -3090,7 +3090,7 @@ static void STDMETHODCALLTYPE d2d_transformed_geometry_GetTransform(ID2D1Transfo
TRACE("iface %p, transform %p.\n", iface, transform);
- *transform = geometry->transform; + *transform = geometry->u.transformed.transform; }
static const struct ID2D1TransformedGeometryVtbl d2d_transformed_geometry_vtbl = @@ -3120,10 +3120,15 @@ void d2d_transformed_geometry_init(struct d2d_geometry *geometry, ID2D1Factory * ID2D1Geometry *src_geometry, const D2D_MATRIX_3X2_F *transform) { struct d2d_geometry *src_impl; + D2D_MATRIX_3X2_F g;
- d2d_geometry_init(geometry, factory, transform, (ID2D1GeometryVtbl *)&d2d_transformed_geometry_vtbl); - ID2D1Geometry_AddRef(geometry->u.transformed.src_geometry = src_geometry); src_impl = unsafe_impl_from_ID2D1Geometry(src_geometry); + + g = src_impl->transform; + d2d_matrix_multiply(&g, transform); + d2d_geometry_init(geometry, factory, &g, (ID2D1GeometryVtbl *)&d2d_transformed_geometry_vtbl); + ID2D1Geometry_AddRef(geometry->u.transformed.src_geometry = src_geometry); + geometry->u.transformed.transform = *transform; geometry->fill = src_impl->fill; geometry->outline = src_impl->outline; } diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c index 9a11f10..7dccbd7 100644 --- a/dlls/d2d1/tests/d2d1.c +++ b/dlls/d2d1/tests/d2d1.c @@ -3817,7 +3817,7 @@ static void test_draw_geometry(void) "ATNaJogBM2IlgAEzayV4M3MlbzN8JWczhAElXjONASVWM5UBJU0zngElRTOmASU8M68BJTQztgEm" "KzO/ASUkM8cBJRsz0AElEzPYASUKM+EBJQIz6QFR8gFJ+gFAgwI4igIwkwIomwIfpAIXrAIOtQIG" "8XYA"); - todo_wine ok(match, "Figure does not match.\n"); + ok(match, "Figure does not match.\n"); match = compare_figure(surface, 0, 160, 160, 320, 0xff652e89, 32, "ujEBngECnQEDnQEEmwEFmgEHmQEHmAEIlwEKlgEKlQELlAENkwENkgEOkQEQjwERjwESjQETjAEU" "jAEKAQqKAQoCCokBCgMKiQEKBAqHAQoFCoYBCgYKhgEKBwqEAQoICoMBCgkKgwEKCgqBAQoLCoAB" @@ -3836,7 +3836,7 @@ static void test_draw_geometry(void) "ChcKdQoWCncKFAp4ChQKeAoTCnoKEQp7ChALewoQCn0KDgp+Cg0LfgoNCoABCgsKgQEKCgqDAQoJ" "CoMBCggKhAEKBwqGAQoGCoYBCgUKhwEKBAqJAQoDCokBCgIKigEKAQqMARSMARONARKPARGPARCR" "AQ6SAQ2TAQ2UAQuVAQqWAQqXAQiYAQeZAQeaAQWbAQSdAQOdAQKeAQG6MQAA"); - todo_wine ok(match, "Figure does not match.\n"); + ok(match, "Figure does not match.\n"); match = compare_figure(surface, 160, 160, 320, 320, 0xff652e89, 64, "82ICvQIEugIHuAIJtgIKtAINsgIPsAIRrQITrAIVqQIYpwIZpgIbowIeoQIgnwIhnQIkmwImmAIp" "lgIVARSVAhUDFJICFQUVkAIVBxSPAhUJFIwCFQwUigIVDRWHAhYPFIYCFRIUhAIVFBSBAhUWFf8B"