From bc7df7ad80af9822a7d22d77289d9a13a63bc588 Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Sun, 22 Oct 2006 21:48:19 +0200 Subject: [PATCH] gdi32: Better error handling in enhanced metafile. --- dlls/gdi32/enhmfdrv/graphics.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/dlls/gdi32/enhmfdrv/graphics.c b/dlls/gdi32/enhmfdrv/graphics.c index 13b4a0661b7..cf4603b409f 100644 --- a/dlls/gdi32/enhmfdrv/graphics.c +++ b/dlls/gdi32/enhmfdrv/graphics.c @@ -756,18 +756,19 @@ BOOL EMFDRV_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, for (i = 0; i < count; i++) { textWidth += lpDx[i]; } - GetTextExtentPoint32W(physDev->hdc, str, count, &strSize); - textHeight = strSize.cy; + if (GetTextExtentPoint32W(physDev->hdc, str, count, &strSize)) + textHeight = strSize.cy; } else { UINT i; INT *dx = (INT *)((char*)pemr + pemr->emrtext.offDx); SIZE charSize; for (i = 0; i < count; i++) { - GetTextExtentPoint32W(physDev->hdc, str + i, 1, &charSize); - dx[i] = charSize.cx; - textWidth += charSize.cx; - textHeight = max(textHeight, charSize.cy); + if (GetTextExtentPoint32W(physDev->hdc, str + i, 1, &charSize)) { + dx[i] = charSize.cx; + textWidth += charSize.cx; + textHeight = max(textHeight, charSize.cy); + } } } @@ -791,7 +792,8 @@ BOOL EMFDRV_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, switch (textAlign & (TA_TOP | TA_BOTTOM | TA_BASELINE)) { case TA_BASELINE: { TEXTMETRICW tm; - GetTextMetricsW(physDev->hdc, &tm); + if (!GetTextMetricsW(physDev->hdc, &tm)) + tm.tmDescent = 0; /* Play safe here... it's better to have a bounding box */ /* that is too big than too small. */ pemr->rclBounds.top = y - textHeight - 1;