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;  } | 
