Alexandre Julliard : gdi32: Avoid duplicate computation of text extents in ExtTextOut.
Alexandre Julliard
julliard at winehq.org
Thu Dec 20 12:39:56 CST 2012
Module: wine
Branch: master
Commit: 57f84bc7bb108c7ef3e0d533db7141c7ce18e297
URL: http://source.winehq.org/git/wine.git/?a=commit;h=57f84bc7bb108c7ef3e0d533db7141c7ce18e297
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Dec 20 15:08:23 2012 +0100
gdi32: Avoid duplicate computation of text extents in ExtTextOut.
---
dlls/gdi32/font.c | 43 +++++++++----------------------------------
1 files changed, 9 insertions(+), 34 deletions(-)
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index 51a6c23..fe32167 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -2097,7 +2097,6 @@ BOOL WINAPI ExtTextOutW( HDC hdc, INT x, INT y, UINT flags,
INT char_extra;
SIZE sz;
RECT rc;
- BOOL done_extents = FALSE;
POINT *deltas = NULL, width = {0, 0};
DWORD type;
DC * dc = get_dc_ptr( hdc );
@@ -2125,9 +2124,6 @@ BOOL WINAPI ExtTextOutW( HDC hdc, INT x, INT y, UINT flags,
return ret;
}
- if (!lprect)
- flags &= ~ETO_CLIPPED;
-
if (flags & ETO_RTLREADING) align |= TA_RTLREADING;
if (layout & LAYOUT_RTL)
{
@@ -2189,32 +2185,15 @@ BOOL WINAPI ExtTextOutW( HDC hdc, INT x, INT y, UINT flags,
sinEsc = 0;
}
- if(flags & (ETO_CLIPPED | ETO_OPAQUE))
+ if (lprect)
{
- if(!lprect)
- {
- if(flags & ETO_GLYPH_INDEX)
- GetTextExtentPointI(hdc, glyphs, count, &sz);
- else
- GetTextExtentPointW(hdc, reordered_str, count, &sz);
-
- done_extents = TRUE;
- rc.left = x;
- rc.top = y;
- rc.right = x + sz.cx;
- rc.bottom = y + sz.cy;
- }
- else
- {
- rc = *lprect;
- }
-
+ rc = *lprect;
LPtoDP(hdc, (POINT*)&rc, 2);
order_rect( &rc );
+ if (flags & ETO_OPAQUE)
+ physdev->funcs->pExtTextOut( physdev, 0, 0, ETO_OPAQUE, &rc, NULL, 0, NULL );
}
-
- if (lprect && (flags & ETO_OPAQUE))
- physdev->funcs->pExtTextOut( physdev, 0, 0, ETO_OPAQUE, &rc, NULL, 0, NULL );
+ else flags &= ~ETO_CLIPPED;
if(count == 0)
{
@@ -2306,14 +2285,10 @@ BOOL WINAPI ExtTextOutW( HDC hdc, INT x, INT y, UINT flags,
{
POINT desired[2];
- if(!done_extents)
- {
- if(flags & ETO_GLYPH_INDEX)
- GetTextExtentPointI(hdc, glyphs, count, &sz);
- else
- GetTextExtentPointW(hdc, reordered_str, count, &sz);
- done_extents = TRUE;
- }
+ if(flags & ETO_GLYPH_INDEX)
+ GetTextExtentPointI(hdc, glyphs, count, &sz);
+ else
+ GetTextExtentPointW(hdc, reordered_str, count, &sz);
desired[0].x = desired[0].y = 0;
desired[1].x = sz.cx;
desired[1].y = 0;
More information about the wine-cvs
mailing list