Andrew Eikum : user32: Use font default height if GetTextExtentPoint returns empty rectangle.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Nov 16 09:43:47 CST 2015
Module: wine
Branch: master
Commit: c465209cc1578cf39074b4a8574f7444a0a03891
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c465209cc1578cf39074b4a8574f7444a0a03891
Author: Andrew Eikum <aeikum at codeweavers.com>
Date: Fri Nov 13 14:52:10 2015 -0600
user32: Use font default height if GetTextExtentPoint returns empty rectangle.
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/user32/tests/text.c | 48 +++++++++++++++++++++++-------------------------
dlls/user32/text.c | 9 +++++++--
2 files changed, 30 insertions(+), 27 deletions(-)
diff --git a/dlls/user32/tests/text.c b/dlls/user32/tests/text.c
index 06705a7..df8d3ee 100644
--- a/dlls/user32/tests/text.c
+++ b/dlls/user32/tests/text.c
@@ -604,15 +604,13 @@ static void strfmt( const char *str, char *strout)
#define TABTEST( tabval, tabcount, string, _exp) \
-{ int i,x_act, x_exp; char strdisp[64];\
+{ int i; char strdisp[64];\
for(i=0;i<8;i++) tabs[i]=(i+1)*(tabval); \
extent = GetTabbedTextExtentA( hdc, string, strlen( string), (tabcount), tabs); \
strfmt( string, strdisp); \
/* trace( "Extent is %08lx\n", extent); */\
- x_act = LOWORD( extent); \
- x_exp = (_exp); \
- ok( x_act == x_exp, "Test case \"%s\". Text extent is %d, expected %d tab %d tabcount %d\n", \
- strdisp, x_act, x_exp, tabval, tabcount); \
+ ok( extent == _exp, "Test case \"%s\". Text extent is 0x%x, expected 0x%x tab %d tabcount %d\n", \
+ strdisp, extent, _exp, tabval, tabcount); \
} \
@@ -649,16 +647,16 @@ static void test_TabbedText(void)
tab = (cx *4 + t);
/* test the special case tabcount =1 and the general array (80 of tabs */
for( tabcount = 1; tabcount <= 8; tabcount +=7) {
- TABTEST( align * tab, tabcount, "\t", tab)
- TABTEST( align * tab, tabcount, "xxx\t", tab)
- TABTEST( align * tab, tabcount, "\tx", tab+cx)
- TABTEST( align * tab, tabcount, "\t\t", tab*2)
- TABTEST( align * tab, tabcount, "\tx\t", tab*2)
- TABTEST( align * tab, tabcount, "x\tx", tab+cx)
- TABTEST( align * tab, tabcount, "xx\tx", tab+cx)
- TABTEST( align * tab, tabcount, "xxx\tx", tab+cx)
- TABTEST( align * tab, tabcount, "xxxx\tx", t>0 ? tab + cx : 2*tab+cx)
- TABTEST( align * tab, tabcount, "xxxxx\tx", 2*tab+cx)
+ TABTEST( align * tab, tabcount, "\t", MAKELONG(tab, cy))
+ TABTEST( align * tab, tabcount, "xxx\t", MAKELONG(tab, cy))
+ TABTEST( align * tab, tabcount, "\tx", MAKELONG(tab+cx, cy))
+ TABTEST( align * tab, tabcount, "\t\t", MAKELONG(tab*2, cy))
+ TABTEST( align * tab, tabcount, "\tx\t", MAKELONG(tab*2, cy))
+ TABTEST( align * tab, tabcount, "x\tx", MAKELONG(tab+cx, cy))
+ TABTEST( align * tab, tabcount, "xx\tx", MAKELONG(tab+cx, cy))
+ TABTEST( align * tab, tabcount, "xxx\tx", MAKELONG(tab+cx, cy))
+ TABTEST( align * tab, tabcount, "xxxx\tx", MAKELONG(t>0 ? tab + cx : 2*tab+cx, cy))
+ TABTEST( align * tab, tabcount, "xxxxx\tx", MAKELONG(2*tab+cx, cy))
}
}
align=-1;
@@ -667,16 +665,16 @@ static void test_TabbedText(void)
tab = (cx *4 + t);
/* test the special case tabcount =1 and the general array (8) of tabs */
for( tabcount = 1; tabcount <= 8; tabcount +=7) {
- TABTEST( align * tab, tabcount, "\t", tab)
- TABTEST( align * tab, tabcount, "xxx\t", tab)
- TABTEST( align * tab, tabcount, "\tx", tab)
- TABTEST( align * tab, tabcount, "\t\t", tab*2)
- TABTEST( align * tab, tabcount, "\tx\t", tab*2)
- TABTEST( align * tab, tabcount, "x\tx", tab)
- TABTEST( align * tab, tabcount, "xx\tx", tab)
- TABTEST( align * tab, tabcount, "xxx\tx", 4 * cx >= tab ? 2*tab :tab)
- TABTEST( align * tab, tabcount, "xxxx\tx", 2*tab)
- TABTEST( align * tab, tabcount, "xxxxx\tx", 2*tab)
+ TABTEST( align * tab, tabcount, "\t", MAKELONG(tab, cy))
+ TABTEST( align * tab, tabcount, "xxx\t", MAKELONG(tab, cy))
+ TABTEST( align * tab, tabcount, "\tx", MAKELONG(tab, cy))
+ TABTEST( align * tab, tabcount, "\t\t", MAKELONG(tab*2, cy))
+ TABTEST( align * tab, tabcount, "\tx\t", MAKELONG(tab*2, cy))
+ TABTEST( align * tab, tabcount, "x\tx", MAKELONG(tab, cy))
+ TABTEST( align * tab, tabcount, "xx\tx", MAKELONG(tab, cy))
+ TABTEST( align * tab, tabcount, "xxx\tx", MAKELONG(4 * cx >= tab ? 2*tab :tab, cy))
+ TABTEST( align * tab, tabcount, "xxxx\tx", MAKELONG(2*tab, cy))
+ TABTEST( align * tab, tabcount, "xxxxx\tx", MAKELONG(2*tab, cy))
}
}
diff --git a/dlls/user32/text.c b/dlls/user32/text.c
index 642da57..7b0302e 100644
--- a/dlls/user32/text.c
+++ b/dlls/user32/text.c
@@ -1316,12 +1316,15 @@ static LONG TEXT_TabbedTextOut( HDC hdc, INT x, INT y, LPCWSTR lpstr,
SIZE extent;
int i, j;
int start = x;
+ TEXTMETRICW tm;
if (!lpstr || count == 0) return 0;
if (!lpTabPos)
cTabStops=0;
+ GetTextMetricsW( hdc, &tm );
+
if (cTabStops == 1)
{
defWidth = *lpTabPos;
@@ -1329,8 +1332,6 @@ static LONG TEXT_TabbedTextOut( HDC hdc, INT x, INT y, LPCWSTR lpstr,
}
else
{
- TEXTMETRICW tm;
- GetTextMetricsW( hdc, &tm );
defWidth = 8 * tm.tmAveCharWidth;
}
@@ -1398,6 +1399,10 @@ static LONG TEXT_TabbedTextOut( HDC hdc, INT x, INT y, LPCWSTR lpstr,
count -= j;
lpstr += j;
}
+
+ if(!extent.cy)
+ extent.cy = tm.tmHeight;
+
return MAKELONG(x - start, extent.cy);
}
More information about the wine-cvs
mailing list