diff options
author | Marco Cecchetti <marco.cecchetti@collabora.com> | 2017-01-01 18:02:51 +0100 |
---|---|---|
committer | Marco Cecchetti <mrcekets@gmail.com> | 2017-03-15 09:59:10 +0000 |
commit | 1b89b61bbf66472e633ee45e05b86c4030575cf0 (patch) | |
tree | 4c29ef5c2abc4e946db62aa72a5843a56b137dfc /svx | |
parent | 57402a5c2d2ba1635c43ef2a97d71e17652b707d (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.cxx | 46 |
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 |