lok sc: Don't depend on the OutputDevice existence when invalidating.

We know that the drawinglayer operates in 100th of millimetre, and that we
need twips for LOK.

Change-Id: I8813f936ab66eaca4d6b9c03341e090d703decb8
This commit is contained in:
Jan Holesovsky
2017-03-31 18:17:23 +02:00
parent 3b65c16604
commit 83487c28d3

View File

@@ -36,7 +36,7 @@
#include <osl/mutex.hxx>
#include <svx/fmview.hxx>
#include <basegfx/matrix/b2dhommatrix.hxx>
#include <sfx2/lokhelper.hxx>
using namespace ::com::sun::star;
@@ -409,7 +409,23 @@ void SdrPageWindow::RedrawLayer(const SdrLayerID* pId,
// Invalidate call, used from ObjectContact(OfPageView) in InvalidatePartOfView(...)
void SdrPageWindow::InvalidatePageWindow(const basegfx::B2DRange& rRange)
{
if(GetPageView().IsVisible() && GetPaintWindow().OutputToWindow())
if (comphelper::LibreOfficeKit::isActive())
{
// we don't really have a paint window with LOK; OTOH we know that the
// drawinglayer units are 100ths of mm, so they are easy to convert to
// twips
const Rectangle aRect100thMM(
static_cast<long>(floor(rRange.getMinX())),
static_cast<long>(floor(rRange.getMinY())),
static_cast<long>(ceil(rRange.getMaxX())),
static_cast<long>(ceil(rRange.getMaxY())));
const Rectangle aRectTwips = OutputDevice::LogicToLogic(aRect100thMM, MapUnit::Map100thMM, MapUnit::MapTwip);
if (SfxViewShell* pViewShell = SfxViewShell::Current())
SfxLokHelper::notifyInvalidation(pViewShell, aRectTwips.toString());
}
else if (GetPageView().IsVisible() && GetPaintWindow().OutputToWindow())
{
const SvtOptionsDrawinglayer aDrawinglayerOpt;
vcl::Window& rWindow(static_cast< vcl::Window& >(GetPaintWindow().GetOutputDevice()));