diff options
| author | nyamatongwe <unknown> | 2004-12-03 21:41:47 +0000 | 
|---|---|---|
| committer | nyamatongwe <unknown> | 2004-12-03 21:41:47 +0000 | 
| commit | 8ddd9226d19199363ed00801adf7f95b43fd32b6 (patch) | |
| tree | 0dd6208c7f609164ec44cb06f0aa5bf505a5179b | |
| parent | f783df2b29952a3fa046dde5d16aa49c929bb954 (diff) | |
| download | scintilla-mirror-8ddd9226d19199363ed00801adf7f95b43fd32b6.tar.gz | |
Patch from Blair McGlashan to handle WM_PRINTCLIENT.
| -rw-r--r-- | win32/ScintillaWin.cxx | 39 | 
1 files changed, 37 insertions, 2 deletions
| diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index 647ae982e..1f0b6deeb 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -212,6 +212,8 @@ class ScintillaWin :  	void HorizontalScrollMessage(WPARAM wParam);  	void RealizeWindowPalette(bool inBackGround);  	void FullPaint(); +	void FullPaintDC(HDC dc); +	bool IsCompatibleDC(HDC dc);  	virtual int SetScrollInfo(int nBar, LPCSCROLLINFO lpsi, BOOL bRedraw);  	virtual bool GetScrollInfo(int nBar, LPSCROLLINFO lpsi); @@ -548,6 +550,15 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam  	case WM_PAINT:  		return WndPaint(wParam); +	case WM_PRINTCLIENT: { +			HDC hdc = reinterpret_cast<HDC>(wParam); +			if (!IsCompatibleDC(hdc)) { +				return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam); +			} +			FullPaintDC(hdc); +		} +		break; +  	case WM_VSCROLL:  		ScrollMessage(wParam);  		break; @@ -1842,19 +1853,43 @@ void ScintillaWin::RealizeWindowPalette(bool inBackGround) {   * This paint will not be abandoned.   */  void ScintillaWin::FullPaint() { +	HDC hdc = ::GetDC(MainHWND()); +	FullPaintDC(hdc); +	::ReleaseDC(MainHWND(), hdc); +} + +/** + * Redraw all of text area on the specified DC. + * This paint will not be abandoned. + */ +void ScintillaWin::FullPaintDC(HDC hdc) {  	paintState = painting;  	rcPaint = GetClientRectangle();  	paintingAllText = true; -	HDC hdc = ::GetDC(MainHWND());  	AutoSurface surfaceWindow(hdc, this);  	if (surfaceWindow) {  		Paint(surfaceWindow, rcPaint);  		surfaceWindow->Release();  	} -	::ReleaseDC(MainHWND(), hdc);  	paintState = notPainting;  } +static bool CompareDevCap(HDC hdc, HDC hOtherDC, int nIndex) { +	return ::GetDeviceCaps(hdc, nIndex) == ::GetDeviceCaps(hOtherDC, nIndex); +} + +bool ScintillaWin::IsCompatibleDC(HDC hOtherDC) { +	HDC hdc = ::GetDC(MainHWND()); +	bool isCompatible =  +		CompareDevCap(hdc, hOtherDC, TECHNOLOGY) && +		CompareDevCap(hdc, hOtherDC, LOGPIXELSY) && +		CompareDevCap(hdc, hOtherDC, LOGPIXELSX) && +		CompareDevCap(hdc, hOtherDC, BITSPIXEL) && +		CompareDevCap(hdc, hOtherDC, PLANES); +	::ReleaseDC(MainHWND(), hdc); +	return isCompatible; +} +  /// Implement IUnknown  STDMETHODIMP ScintillaWin::QueryInterface(REFIID riid, PVOID *ppv) {  	*ppv = NULL; | 
