summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorMarco Cecchetti <marco.cecchetti@collabora.com>2017-01-01 18:02:51 +0100
committerMarco Cecchetti <mrcekets@gmail.com>2017-03-15 09:59:10 +0000
commit1b89b61bbf66472e633ee45e05b86c4030575cf0 (patch)
tree4c29ef5c2abc4e946db62aa72a5843a56b137dfc /svx
parent57402a5c2d2ba1635c43ef2a97d71e17652b707d (diff)
LOK: Calc: invalidation on insert image
Change-Id: Ib0ec104b14385473a2a7f7dc2a33558d998996fa Reviewed-on: https://gerrit.libreoffice.org/32690 Reviewed-by: Marco Cecchetti <mrcekets@gmail.com> Tested-by: Marco Cecchetti <mrcekets@gmail.com>
Diffstat (limited to 'svx')
-rw-r--r--svx/source/svdraw/sdrpagewindow.cxx46
1 files changed, 40 insertions, 6 deletions
diff --git a/svx/source/svdraw/sdrpagewindow.cxx b/svx/source/svdraw/sdrpagewindow.cxx
index 642c86769d12..193221554b1f 100644
--- a/svx/source/svdraw/sdrpagewindow.cxx
+++ b/svx/source/svdraw/sdrpagewindow.cxx
@@ -37,6 +37,9 @@
#include <svx/fmview.hxx>
#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <LibreOfficeKit/LibreOfficeKitEnums.h>
+#include <comphelper/lok.hxx>
+#include <sfx2/lokhelper.hxx>
using namespace ::com::sun::star;
@@ -404,14 +407,10 @@ void SdrPageWindow::RedrawLayer( const SdrLayerID* pId, sdr::contact::ViewObject
// reset redirector
GetObjectContact().SetViewObjectContactRedirector(nullptr);
}
-
-// Invalidate call, used from ObjectContact(OfPageView) in InvalidatePartOfView(...)
-void SdrPageWindow::InvalidatePageWindow(const basegfx::B2DRange& rRange)
-{
- if(GetPageView().IsVisible() && GetPaintWindow().OutputToWindow())
+namespace {
+ void lcl_InvalidateWindow(const basegfx::B2DRange& rRange, vcl::Window& rWindow)
{
const SvtOptionsDrawinglayer aDrawinglayerOpt;
- vcl::Window& rWindow(static_cast< vcl::Window& >(GetPaintWindow().GetOutputDevice()));
basegfx::B2DRange aDiscreteRange(rRange);
aDiscreteRange.transform(rWindow.GetViewTransformation());
@@ -433,6 +432,41 @@ void SdrPageWindow::InvalidatePageWindow(const basegfx::B2DRange& rRange)
rWindow.Invalidate(aVCLDiscreteRectangle, InvalidateFlags::NoErase);
rWindow.EnableMapMode(bWasMapModeEnabled);
}
+} // end of anonymous namespace
+
+// Invalidate call, used from ObjectContact(OfPageView) in InvalidatePartOfView(...)
+void SdrPageWindow::InvalidatePageWindow(const basegfx::B2DRange& rRange)
+{
+ if (!GetPageView().IsVisible())
+ return;
+ SdrPaintWindow& rPaintWindow = GetPaintWindow();
+
+ if (comphelper::LibreOfficeKit::isActive())
+ {
+ SfxViewShell* pCurViewShell = SfxViewShell::Current();
+ if (pCurViewShell)
+ {
+ OutputDevice& rOutDev = rPaintWindow.GetOutputDevice();
+ if (pCurViewShell->UseLOKOutputDevice(&rOutDev))
+ {
+ std::function<void(vcl::Window&)> lInvalidateWindow =
+ std::bind(lcl_InvalidateWindow, rRange, std::placeholders::_1);
+
+ SfxViewShell* pViewShell = SfxViewShell::GetFirst();
+ while (pViewShell)
+ {
+ pViewShell->InvalidateWindows(lInvalidateWindow);
+ pViewShell = SfxViewShell::GetNext(*pViewShell);
+ }
+ }
+ }
+ }
+
+ if(rPaintWindow.OutputToWindow())
+ {
+ vcl::Window& rWindow(static_cast< vcl::Window& >(rPaintWindow.GetOutputDevice()));
+ lcl_InvalidateWindow(rRange, rWindow);
+ }
}
// ObjectContact section