diff options
-rw-r--r-- | win32/PlatWin.cxx | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/win32/PlatWin.cxx b/win32/PlatWin.cxx index f1d6a4fcd..a4b84dc8c 100644 --- a/win32/PlatWin.cxx +++ b/win32/PlatWin.cxx @@ -1564,8 +1564,8 @@ void SurfaceD2D::DrawRGBAImage(PRectangle rc, int width, int height, const unsig if (SUCCEEDED(hr)) { D2D1_RECT_F rcDestination = {rc.left, rc.top, rc.right, rc.bottom}; pRenderTarget->DrawBitmap(bitmap, rcDestination); + bitmap->Release(); } - bitmap->Release(); } } @@ -1669,8 +1669,8 @@ XYPOSITION SurfaceD2D::WidthText(Font &font_, const char *s, int len) { HRESULT hr = pIDWriteFactory->CreateTextLayout(tbuf.buffer, tbuf.tlen, pTextFormat, 1000.0, 1000.0, &pTextLayout); if (SUCCEEDED(hr)) { DWRITE_TEXT_METRICS textMetrics; - pTextLayout->GetMetrics(&textMetrics); - width = textMetrics.widthIncludingTrailingWhitespace; + if (SUCCEEDED(pTextLayout->GetMetrics(&textMetrics))) + width = textMetrics.widthIncludingTrailingWhitespace; pTextLayout->Release(); } } @@ -1694,7 +1694,8 @@ void SurfaceD2D::MeasureWidths(Font &font_, const char *s, int len, XYPOSITION * if (!SUCCEEDED(hr)) return; // For now, assuming WCHAR == cluster - pTextLayout->GetClusterMetrics(clusterMetrics, clusters, &count); + if (!SUCCEEDED(pTextLayout->GetClusterMetrics(clusterMetrics, clusters, &count))) + return; FLOAT position = 0.0f; size_t ti=0; for (size_t ci=0;ci<count;ci++) { @@ -1771,8 +1772,8 @@ XYPOSITION SurfaceD2D::WidthChar(Font &font_, char ch) { HRESULT hr = pIDWriteFactory->CreateTextLayout(&wch, 1, pTextFormat, 1000.0, 1000.0, &pTextLayout); if (SUCCEEDED(hr)) { DWRITE_TEXT_METRICS textMetrics; - pTextLayout->GetMetrics(&textMetrics); - width = textMetrics.widthIncludingTrailingWhitespace; + if (SUCCEEDED(pTextLayout->GetMetrics(&textMetrics))) + width = textMetrics.widthIncludingTrailingWhitespace; pTextLayout->Release(); } } @@ -1814,8 +1815,8 @@ XYPOSITION SurfaceD2D::AverageCharWidth(Font &font_) { pTextFormat, 1000.0, 1000.0, &pTextLayout); if (SUCCEEDED(hr)) { DWRITE_TEXT_METRICS textMetrics; - pTextLayout->GetMetrics(&textMetrics); - width = textMetrics.width / wcslen(wszAllAlpha); + if (SUCCEEDED(pTextLayout->GetMetrics(&textMetrics))) + width = textMetrics.width / wcslen(wszAllAlpha); pTextLayout->Release(); } } @@ -1887,7 +1888,9 @@ static RECT RectFromMonitor(HMONITOR hMonitor) { } } RECT rc = {0, 0, 0, 0}; - ::SystemParametersInfoA(SPI_GETWORKAREA, 0, &rc, 0); + if (::SystemParametersInfoA(SPI_GETWORKAREA, 0, &rc, 0) == 0) { + rc = {0, 0, 0, 0}; + } return rc; } |