user32: Fix TabbedTextOut.
The TEXT_TabbedTextOut didn't set correctly the text starting point (x0) for left-aligned tabs and was ignoring the last tab. I've also changed GetTextMetricsA to W as this should be slightly faster.
This commit is contained in:
parent
7ca4e025e7
commit
521cba2bc7
|
@ -1248,8 +1248,8 @@ static LONG TEXT_TabbedTextOut( HDC hdc, INT x, INT y, LPCWSTR lpstr,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TEXTMETRICA tm;
|
TEXTMETRICW tm;
|
||||||
GetTextMetricsA( hdc, &tm );
|
GetTextMetricsW( hdc, &tm );
|
||||||
defWidth = 8 * tm.tmAveCharWidth;
|
defWidth = 8 * tm.tmAveCharWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1270,12 +1270,13 @@ static LONG TEXT_TabbedTextOut( HDC hdc, INT x, INT y, LPCWSTR lpstr,
|
||||||
/* and if there is a <tab>, calculate its position */
|
/* and if there is a <tab>, calculate its position */
|
||||||
if( i) {
|
if( i) {
|
||||||
/* get x coordinate for the drawing of this string */
|
/* get x coordinate for the drawing of this string */
|
||||||
for (; cTabStops > i; lpTabPos++, cTabStops--)
|
for (; cTabStops >= i; lpTabPos++, cTabStops--)
|
||||||
{
|
{
|
||||||
if( nTabOrg + abs( *lpTabPos) > x) {
|
if( nTabOrg + abs( *lpTabPos) > x) {
|
||||||
if( lpTabPos[ i - 1] >= 0) {
|
if( lpTabPos[ i - 1] >= 0) {
|
||||||
/* a left aligned tab */
|
/* a left aligned tab */
|
||||||
x = nTabOrg + lpTabPos[ i-1] + extent.cx;
|
x0 = nTabOrg + lpTabPos[i-1];
|
||||||
|
x = x0 + extent.cx;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1294,10 +1295,10 @@ static LONG TEXT_TabbedTextOut( HDC hdc, INT x, INT y, LPCWSTR lpstr,
|
||||||
}
|
}
|
||||||
/* if we have run out of tab stops and we have a valid default tab
|
/* if we have run out of tab stops and we have a valid default tab
|
||||||
* stop width then round x up to that width */
|
* stop width then round x up to that width */
|
||||||
if ((cTabStops <= i) && (defWidth > 0)) {
|
if ((cTabStops < i) && (defWidth > 0)) {
|
||||||
x0 = nTabOrg + ((x - nTabOrg) / defWidth + i) * defWidth;
|
x0 = nTabOrg + ((x - nTabOrg) / defWidth + i) * defWidth;
|
||||||
x = x0 + extent.cx;
|
x = x0 + extent.cx;
|
||||||
} else if ((cTabStops <= i) && (defWidth < 0)) {
|
} else if ((cTabStops < i) && (defWidth < 0)) {
|
||||||
x = nTabOrg + ((x - nTabOrg + extent.cx) / -defWidth + i)
|
x = nTabOrg + ((x - nTabOrg + extent.cx) / -defWidth + i)
|
||||||
* -defWidth;
|
* -defWidth;
|
||||||
x0 = x - extent.cx;
|
x0 = x - extent.cx;
|
||||||
|
|
Loading…
Reference in New Issue