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