Sam Edwards : gdi32: Improve glyph positioning for the subpixel case in get_glyph_outline.
Alexandre Julliard
julliard at winehq.org
Thu May 2 14:07:02 CDT 2013
Module: wine
Branch: master
Commit: a7dee44c24285bd48d17399d7e3b8822116c894f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a7dee44c24285bd48d17399d7e3b8822116c894f
Author: Sam Edwards <CFSworks at gmail.com>
Date: Wed May 1 09:28:12 2013 -0600
gdi32: Improve glyph positioning for the subpixel case in get_glyph_outline.
---
dlls/gdi32/freetype.c | 34 ++++++++++++++++++++++++----------
1 files changed, 24 insertions(+), 10 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index 5b3c138..30ab574 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -6352,20 +6352,35 @@ static DWORD get_glyph_outline(GdiFont *incoming_font, UINT glyph, UINT format,
}
x_shift = ft_face->glyph->bitmap_left - lpgm->gmptGlyphOrigin.x;
- if ( x_shift < 0 ) x_shift = 0;
- if ( x_shift + (src_width / hmul) > width )
- x_shift = width - (src_width / hmul);
+ if ( x_shift < 0 )
+ {
+ src += hmul * -x_shift;
+ src_width -= hmul * -x_shift;
+ }
+ else if ( x_shift > 0 )
+ {
+ dst += x_shift;
+ width -= x_shift;
+ }
y_shift = lpgm->gmptGlyphOrigin.y - ft_face->glyph->bitmap_top;
- if ( y_shift < 0 ) y_shift = 0;
- if ( y_shift + (src_height / vmul) > height )
- y_shift = height - (src_height / vmul);
+ if ( y_shift < 0 )
+ {
+ src += src_pitch * vmul * -y_shift;
+ src_height -= vmul * -y_shift;
+ }
+ else if ( y_shift > 0 )
+ {
+ dst += y_shift * ( pitch / sizeof(*dst) );
+ height -= y_shift;
+ }
- dst += x_shift + y_shift * ( pitch / 4 );
+ width = min( width, src_width / hmul );
height = min( height, src_height / vmul );
+
while ( height-- )
{
- for ( x = 0; x < width && x < src_width / hmul; x++ )
+ for ( x = 0; x < width; x++ )
{
if ( rgb )
{
@@ -6383,8 +6398,7 @@ static DWORD get_glyph_outline(GdiFont *incoming_font, UINT glyph, UINT format,
}
}
src += src_pitch * vmul;
- dst += pitch / 4;
- src_height -= vmul;
+ dst += pitch / sizeof(*dst);
}
break;
More information about the wine-cvs
mailing list