[PATCH 3/5] gdiplus: Add internal string format properties used by typographical format

Nikolay Sivov nsivov at codeweavers.com
Tue Oct 17 07:49:13 CDT 2017


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/gdiplus/gdiplus_private.h |  4 +++-
 dlls/gdiplus/graphics.c        |  6 +++---
 dlls/gdiplus/stringformat.c    | 15 ++++++---------
 3 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h
index d4c1fd94af..329cf47e59 100644
--- a/dlls/gdiplus/gdiplus_private.h
+++ b/dlls/gdiplus/gdiplus_private.h
@@ -513,7 +513,9 @@ struct GpStringFormat{
     REAL *tabs;
     CharacterRange *character_ranges;
     INT range_count;
-    BOOL generic_typographic;
+    REAL leading_margin;
+    REAL trailing_margin;
+    REAL tracking;
 };
 
 extern void init_generic_string_formats(void) DECLSPEC_HIDDEN;
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index 020738556d..766adf681b 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -5293,7 +5293,7 @@ GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics* graphics,
     args.rel_height = sqrt((pt[2].Y-pt[0].Y)*(pt[2].Y-pt[0].Y)+
                       (pt[2].X-pt[0].X)*(pt[2].X-pt[0].X));
 
-    margin_x = stringFormat->generic_typographic ? 0.0 : font->emSize / 6.0;
+    margin_x = stringFormat->leading_margin * font->emSize;
     margin_x *= units_scale(font->unit, graphics->unit, graphics->xres);
 
     scaled_rect.X = (layoutRect->X + margin_x) * args.rel_width;
@@ -5416,7 +5416,7 @@ GpStatus WINGDIPAPI GdipMeasureString(GpGraphics *graphics,
     args.rel_height = sqrt((pt[2].Y-pt[0].Y)*(pt[2].Y-pt[0].Y)+
                       (pt[2].X-pt[0].X)*(pt[2].X-pt[0].X));
 
-    margin_x = (format && format->generic_typographic) ? 0.0 : font->emSize / 6.0;
+    margin_x = format ? font->emSize * format->leading_margin : 0.0f;
     margin_x *= units_scale(font->unit, graphics->unit, graphics->xres);
 
     scaled_rect.X = (rect->X + margin_x) * args.rel_width;
@@ -5594,7 +5594,7 @@ GpStatus WINGDIPAPI GdipDrawString(GpGraphics *graphics, GDIPCONST WCHAR *string
     gdip_transform_points(graphics, WineCoordinateSpaceGdiDevice, CoordinateSpaceWorld, rectcpy, 4);
     round_points(corners, rectcpy, 4);
 
-    margin_x = (format && format->generic_typographic) ? 0.0 : font->emSize / 6.0;
+    margin_x = format ? format->leading_margin * font->emSize : 0.0f;
     margin_x *= units_scale(font->unit, graphics->unit, graphics->xres);
 
     scaled_rect.X = margin_x * rel_width;
diff --git a/dlls/gdiplus/stringformat.c b/dlls/gdiplus/stringformat.c
index e376e7b36c..cd2ab31abd 100644
--- a/dlls/gdiplus/stringformat.c
+++ b/dlls/gdiplus/stringformat.c
@@ -47,7 +47,9 @@ const GpStringFormat default_drawstring_format =
     NULL,
     NULL,
     0,
-    FALSE
+    0.0,
+    0.0,
+    1.0,
 };
 
 static GpStringFormat generic_default_format;
@@ -61,7 +63,6 @@ void init_generic_string_formats(void)
     generic_typographic_format.attr = StringFormatFlagsNoFitBlackBox | StringFormatFlagsLineLimit |
         StringFormatFlagsNoClip;
     generic_typographic_format.trimming = StringTrimmingNone;
-    generic_typographic_format.generic_typographic = TRUE;
 }
 
 void free_generic_string_formats(void)
@@ -89,13 +90,9 @@ GpStatus WINGDIPAPI GdipCreateStringFormat(INT attr, LANGID lang,
     (*format)->digitlang = LANG_NEUTRAL;
     (*format)->trimming = StringTrimmingCharacter;
     (*format)->digitsub = StringDigitSubstituteUser;
-    (*format)->character_ranges = NULL;
-    (*format)->range_count = 0;
-    (*format)->generic_typographic = FALSE;
-    /* tabstops */
-    (*format)->tabcount = 0;
-    (*format)->firsttab = 0.0;
-    (*format)->tabs = NULL;
+    (*format)->leading_margin = 1.0 / 6.0;
+    (*format)->trailing_margin = 1.0 / 6.0;
+    (*format)->tracking = 1.03f;
 
     TRACE("<-- %p\n", *format);
 
-- 
2.14.2




More information about the wine-patches mailing list