diff --git a/win32ss/gdi/ntgdi/freetype.c b/win32ss/gdi/ntgdi/freetype.c index 5f9b2213ea..299e9f0b5b 100644 --- a/win32ss/gdi/ntgdi/freetype.c +++ b/win32ss/gdi/ntgdi/freetype.c @@ -5883,25 +5883,35 @@ IntExtTextOutW( // convert vecs for (i = 0; i < 9; ++i) { - POINT pt; FT_Vector_Transform(&vecs[i], &matWidth); FT_Vector_Transform(&vecs[i], &matEscape); - vecs[i].x += (Start.x << 16) + (XStart64 << 10); - vecs[i].y += (Start.y << 16) + (YStart64 << 10); - pt.x = vecs[i].x >> 16; - pt.y = vecs[i].y >> 16; + FT_Vector_Transform(&vecs[i], &matWorld); + } + vecs[2].x += DeltaX64 << 10; + vecs[2].y += DeltaY64 << 10; // upper right + vecs[3].x += DeltaX64 << 10; + vecs[3].y += DeltaY64 << 10; // lower right + vecs[6].x += DeltaX64 << 10; + vecs[6].y += DeltaY64 << 10; // underline right + vecs[8].x += DeltaX64 << 10; + vecs[8].y += DeltaY64 << 10; // strike through right + + { + POINT pt; + pt.x = Start.x + (XStart64 >> 6); + pt.y = Start.y + (YStart64 >> 6); IntLPtoDP(dc, &pt, 1); - vecs[i].x = pt.x + dc->ptlDCOrig.x; - vecs[i].y = pt.y + dc->ptlDCOrig.y; - } - vecs[2].x += DeltaX64 >> 6; - vecs[2].y += DeltaY64 >> 6; // upper right - vecs[3].x += DeltaX64 >> 6; - vecs[3].y += DeltaY64 >> 6; // lower right - vecs[6].x += DeltaX64 >> 6; - vecs[6].y += DeltaY64 >> 6; // underline right - vecs[8].x += DeltaX64 >> 6; - vecs[8].y += DeltaY64 >> 6; // strike through right + + for (i = 0; i < 9; ++i) + { + vecs[i].x += pt.x << 16; + vecs[i].y += pt.y << 16; + vecs[i].x >>= 16; + vecs[i].y >>= 16; + vecs[i].x += dc->ptlDCOrig.x; + vecs[i].y += dc->ptlDCOrig.y; + } + } if (fuOptions & ETO_OPAQUE) {