[PATCH 2/2] dwrite: Store outline offset as a vector.

Nikolay Sivov nsivov at codeweavers.com
Fri Feb 8 02:59:15 CST 2019


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/dwrite/freetype.c | 28 +++++++++++++---------------
 1 file changed, 13 insertions(+), 15 deletions(-)

diff --git a/dlls/dwrite/freetype.c b/dlls/dwrite/freetype.c
index 29acb5e0de..58cad41340 100644
--- a/dlls/dwrite/freetype.c
+++ b/dlls/dwrite/freetype.c
@@ -317,17 +317,16 @@ BOOL freetype_is_monospaced(IDWriteFontFace4 *fontface)
 
 struct decompose_context {
     IDWriteGeometrySink *sink;
-    FLOAT xoffset;
-    FLOAT yoffset;
+    D2D1_POINT_2F offset;
     BOOL figure_started;
     BOOL move_to;     /* last call was 'move_to' */
     FT_Vector origin; /* 'pen' position from last call */
 };
 
-static inline void ft_vector_to_d2d_point(const FT_Vector *v, FLOAT xoffset, FLOAT yoffset, D2D1_POINT_2F *p)
+static inline void ft_vector_to_d2d_point(const FT_Vector *v, D2D1_POINT_2F offset, D2D1_POINT_2F *p)
 {
-    p->x = (v->x / 64.0f) + xoffset;
-    p->y = (v->y / 64.0f) + yoffset;
+    p->x = (v->x / 64.0f) + offset.x;
+    p->y = (v->y / 64.0f) + offset.y;
 }
 
 static void decompose_beginfigure(struct decompose_context *ctxt)
@@ -337,7 +336,7 @@ static void decompose_beginfigure(struct decompose_context *ctxt)
     if (!ctxt->move_to)
         return;
 
-    ft_vector_to_d2d_point(&ctxt->origin, ctxt->xoffset, ctxt->yoffset, &point);
+    ft_vector_to_d2d_point(&ctxt->origin, ctxt->offset, &point);
     ID2D1SimplifiedGeometrySink_BeginFigure(ctxt->sink, point, D2D1_FIGURE_BEGIN_FILLED);
 
     ctxt->figure_started = TRUE;
@@ -369,7 +368,7 @@ static int decompose_line_to(const FT_Vector *to, void *user)
 
     decompose_beginfigure(ctxt);
 
-    ft_vector_to_d2d_point(to, ctxt->xoffset, ctxt->yoffset, &point);
+    ft_vector_to_d2d_point(to, ctxt->offset, &point);
     ID2D1SimplifiedGeometrySink_AddLines(ctxt->sink, &point, 1);
 
     ctxt->origin = *to;
@@ -414,9 +413,9 @@ static int decompose_conic_to(const FT_Vector *control, const FT_Vector *to, voi
     cubic[1].y += (to->y + 1) / 3;
     cubic[2] = *to;
 
-    ft_vector_to_d2d_point(cubic, ctxt->xoffset, ctxt->yoffset, points);
-    ft_vector_to_d2d_point(cubic + 1, ctxt->xoffset, ctxt->yoffset, points + 1);
-    ft_vector_to_d2d_point(cubic + 2, ctxt->xoffset, ctxt->yoffset, points + 2);
+    ft_vector_to_d2d_point(cubic, ctxt->offset, points);
+    ft_vector_to_d2d_point(cubic + 1, ctxt->offset, points + 1);
+    ft_vector_to_d2d_point(cubic + 2, ctxt->offset, points + 2);
     ID2D1SimplifiedGeometrySink_AddBeziers(ctxt->sink, (D2D1_BEZIER_SEGMENT*)points, 1);
     ctxt->origin = *to;
     return 0;
@@ -430,9 +429,9 @@ static int decompose_cubic_to(const FT_Vector *control1, const FT_Vector *contro
 
     decompose_beginfigure(ctxt);
 
-    ft_vector_to_d2d_point(control1, ctxt->xoffset, ctxt->yoffset, points);
-    ft_vector_to_d2d_point(control2, ctxt->xoffset, ctxt->yoffset, points + 1);
-    ft_vector_to_d2d_point(to, ctxt->xoffset, ctxt->yoffset, points + 2);
+    ft_vector_to_d2d_point(control1, ctxt->offset, points);
+    ft_vector_to_d2d_point(control2, ctxt->offset, points + 1);
+    ft_vector_to_d2d_point(to, ctxt->offset, points + 2);
     ID2D1SimplifiedGeometrySink_AddBeziers(ctxt->sink, (D2D1_BEZIER_SEGMENT*)points, 1);
     ctxt->origin = *to;
     return 0;
@@ -451,8 +450,7 @@ static void decompose_outline(FT_Outline *outline, D2D1_POINT_2F offset, IDWrite
     struct decompose_context context;
 
     context.sink = sink;
-    context.xoffset = offset.x;
-    context.yoffset = offset.y;
+    context.offset = offset;
     context.figure_started = FALSE;
     context.move_to = FALSE;
     context.origin.x = 0;
-- 
2.20.1




More information about the wine-devel mailing list