diff options
author | nyamatongwe <unknown> | 2011-11-26 19:48:06 +1100 |
---|---|---|
committer | nyamatongwe <unknown> | 2011-11-26 19:48:06 +1100 |
commit | a3533121defe1542aaf59cb396820ea4ac5c0a70 (patch) | |
tree | 4be442388afc860efbd751d04bcea8a489b0b65a | |
parent | 35d45027480e563c744561dd27e772fdfe103a56 (diff) | |
download | scintilla-mirror-a3533121defe1542aaf59cb396820ea4ac5c0a70.tar.gz |
Defer dropping the render target until after painting has finished to
avoid accessing a released render target.
-rw-r--r-- | win32/ScintillaWin.cxx | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index 73e8736fd..35f2044fc 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -204,6 +204,7 @@ class ScintillaWin : #if defined(USE_D2D) ID2D1HwndRenderTarget *pRenderTarget; + bool renderTargetValid; #endif ScintillaWin(HWND hwnd); @@ -362,6 +363,7 @@ ScintillaWin::ScintillaWin(HWND hwnd) { #if defined(USE_D2D) pRenderTarget = 0; + renderTargetValid = true; #endif keysAlwaysUnicode = false; @@ -407,6 +409,10 @@ void ScintillaWin::Finalise() { void ScintillaWin::EnsureRenderTarget() { #if defined(USE_D2D) + if (!renderTargetValid) { + DropRenderTarget(); + renderTargetValid = true; + } if (pD2DFactory && !pRenderTarget) { RECT rc; HWND hw = MainHWND(); @@ -745,7 +751,13 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam break; case WM_SIZE: { - DropRenderTarget(); +#if defined(USE_D2D) + if (paintState == notPainting) { + DropRenderTarget(); + } else { + renderTargetValid = false; + } +#endif //Platform::DebugPrintf("Scintilla WM_SIZE %d %d\n", LoWord(lParam), HiWord(lParam)); ChangeSize(); } |