summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2015-07-31 15:28:20 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2015-07-31 15:52:54 +0200
commit161f7533ac177c25516ec206233936bd6982e3df (patch)
tree3915e8a8e6350a0a791a77bdb15066fd5456c322
parent7cc7d5787c715e7782a3cfc3a882f2a2edfbd66a (diff)
tdf#92982 vcl rendercontext: set buffer size in ImplHandleResize()
Instead of in PaintHelper::StartBufferedPaint(). If the buffer size is set to match the size of a sub-widget (for which the paint was triggered), then client using the buffer as a persistent vdev are unable to paint at arbitrary locations. For example, if we painted the ruler, then the blinking cursor won't be able to paint to the SwEditWin area. Change-Id: Iba07070baafb5b802fc6da200696611afd2010d7
-rw-r--r--vcl/source/window/paint.cxx3
-rw-r--r--vcl/source/window/winproc.cxx7
2 files changed, 7 insertions, 3 deletions
diff --git a/vcl/source/window/paint.cxx b/vcl/source/window/paint.cxx
index 29aaa2d9fd2d..9a4ca08b2518 100644
--- a/vcl/source/window/paint.cxx
+++ b/vcl/source/window/paint.cxx
@@ -125,9 +125,6 @@ void PaintHelper::StartBufferedPaint()
// Remember what was the map mode of m_aPaintRect.
m_aPaintRectMapMode = m_pWindow->GetMapMode();
- // update the output size now, after all the settings were copied
- pFrameData->mpBuffer->SetOutputSize(m_pWindow->GetOutputSize());
-
// we need to remember the mnOutOffX / mnOutOffY, but actually really
// set it just temporarily for the subwidgets - so we are setting it here
// only to remember the value & to be able to pass it to the descendants
diff --git a/vcl/source/window/winproc.cxx b/vcl/source/window/winproc.cxx
index 280db2325733..0af0cb5992d0 100644
--- a/vcl/source/window/winproc.cxx
+++ b/vcl/source/window/winproc.cxx
@@ -35,6 +35,7 @@
#include <vcl/help.hxx>
#include <vcl/dockwin.hxx>
#include <vcl/menu.hxx>
+#include <vcl/virdev.hxx>
#include <touch/touch.h>
#include <svdata.hxx>
@@ -1714,6 +1715,12 @@ void ImplHandleResize( vcl::Window* pWindow, long nNewWidth, long nNewHeight )
}
else
pWindow->ImplGetWindowImpl()->mbCallResize = true;
+
+ if (pWindow->SupportsDoubleBuffering() && pWindow->ImplGetWindowImpl()->mbFrame)
+ {
+ // Propagate resize for the frame's buffer.
+ pWindow->ImplGetWindowImpl()->mpFrameData->mpBuffer->SetOutputSizePixel(pWindow->GetOutputSizePixel());
+ }
}
}