Alexandre Julliard : gdi32: Pre-multiply RGB values by alpha for subpixel font rendering.
Alexandre Julliard
julliard at winehq.org
Mon May 17 09:39:32 CDT 2010
Module: wine
Branch: master
Commit: aff0eac21b7d66a0ba4869cade6368a988ab34ee
URL: http://source.winehq.org/git/wine.git/?a=commit;h=aff0eac21b7d66a0ba4869cade6368a988ab34ee
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon May 17 14:25:14 2010 +0200
gdi32: Pre-multiply RGB values by alpha for subpixel font rendering.
---
dlls/gdi32/freetype.c | 19 +++++++++++--------
1 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index c384218..129245a 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -5044,19 +5044,22 @@ DWORD WineEngGetGlyphOutline(GdiFont *incoming_font, UINT glyph, UINT format,
{
for ( x = 0; x < src_width / hmul; x++ )
{
+ unsigned int alpha = (src[hmul * x + rgb_interval * 0] +
+ src[hmul * x + rgb_interval * 1] +
+ src[hmul * x + rgb_interval * 2]) / 3;
if ( rgb )
{
- dst[x] = ((unsigned int)src[hmul * x + rgb_interval * 0] << 16) |
- ((unsigned int)src[hmul * x + rgb_interval * 1] << 8) |
- ((unsigned int)src[hmul * x + rgb_interval * 2] << 0) |
- ((unsigned int)src[hmul * x + rgb_interval * 1] << 24) ;
+ dst[x] = ((src[hmul * x + rgb_interval * 0] * alpha / 255) << 16) |
+ ((src[hmul * x + rgb_interval * 1] * alpha / 255) << 8) |
+ ((src[hmul * x + rgb_interval * 2] * alpha / 255) << 0) |
+ (alpha << 24);
}
else
{
- dst[x] = ((unsigned int)src[hmul * x + rgb_interval * 2] << 16) |
- ((unsigned int)src[hmul * x + rgb_interval * 1] << 8) |
- ((unsigned int)src[hmul * x + rgb_interval * 0] << 0) |
- ((unsigned int)src[hmul * x + rgb_interval * 1] << 24) ;
+ dst[x] = ((src[hmul * x + rgb_interval * 2] * alpha / 255) << 16) |
+ ((src[hmul * x + rgb_interval * 1] * alpha / 255) << 8) |
+ ((src[hmul * x + rgb_interval * 0] * alpha / 255) << 0) |
+ (alpha << 24);
}
}
src += src_pitch * vmul;
More information about the wine-cvs
mailing list