[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