diff options
author | Ashod Nakashian <ashod.nakashian@collabora.co.uk> | 2016-06-16 07:28:58 -0400 |
---|---|---|
committer | Ashod Nakashian <ashnakash@gmail.com> | 2016-06-16 11:59:55 +0000 |
commit | 60fdcda65bad242f99895cb453182578250fbdea (patch) | |
tree | 72e80652f345417180b1bde41e0ed89d259c471a | |
parent | 0dbffca63191712d9f77297061a3d4651b8410aa (diff) |
LOK: tile rendering regression fix
Calc fast rendering requires us to offset
the are being rendered and shift all
bitmaps accordingly. This however is
breaking Impress rendering since the
offseting logic is common (in svx and vcl).
This adds new API to enable or disable
this local rendering (as opposed to
rendering a full document as was previously
done.
The new flag is then set by Calc to
enable the offseting logic in isolation
without affecting other applications.
In one case isolation was achieved by
checking the MapModeUnit.
Change-Id: Ia0aadfc3f6df7c1a891b97dc731f5897414c9420
Reviewed-on: https://gerrit.libreoffice.org/26367
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Tested-by: Ashod Nakashian <ashnakash@gmail.com>
-rw-r--r-- | comphelper/source/misc/lok.cxx | 12 | ||||
-rw-r--r-- | include/comphelper/lok.hxx | 7 | ||||
-rw-r--r-- | sc/source/ui/view/gridwin4.cxx | 1 | ||||
-rw-r--r-- | svx/source/sdr/contact/objectcontactofpageview.cxx | 9 | ||||
-rw-r--r-- | vcl/source/outdev/bitmap.cxx | 4 |
5 files changed, 28 insertions, 5 deletions
diff --git a/comphelper/source/misc/lok.cxx b/comphelper/source/misc/lok.cxx index 279ec65c600c..d2467e75b324 100644 --- a/comphelper/source/misc/lok.cxx +++ b/comphelper/source/misc/lok.cxx @@ -39,6 +39,18 @@ bool isViewCallback() return g_bViewCallback; } +static bool g_bLocalRendering(false); + +void setLocalRendering(bool bLocalRendering) +{ + g_bLocalRendering = bLocalRendering; +} + +bool isLocalRendering() +{ + return g_bLocalRendering; +} + static void (*pStatusIndicatorCallback)(void *data, statusIndicatorCallbackType type, int percent)(nullptr); static void *pStatusIndicatorCallbackData(nullptr); diff --git a/include/comphelper/lok.hxx b/include/comphelper/lok.hxx index 2cc38c60e455..8afd3d82a77d 100644 --- a/include/comphelper/lok.hxx +++ b/include/comphelper/lok.hxx @@ -36,6 +36,13 @@ COMPHELPER_DLLPUBLIC void setStatusIndicatorCallback(void (*callback)(void *data // Check whether the code is running as invoked through LibreOfficeKit. COMPHELPER_DLLPUBLIC bool isActive(); +/// Shift the coordinates before rendering each bitmap. +/// Used by Calc to render each tile separately. +/// This should be unnecessary (and removed) once Calc +/// moves to using 100MM Unit. +COMPHELPER_DLLPUBLIC void setLocalRendering(bool bLocalRendering = true); +COMPHELPER_DLLPUBLIC bool isLocalRendering(); + /// Check whether clients register a callback for each view. COMPHELPER_DLLPUBLIC bool isViewCallback(); /// Set whether clients register a callback for each view. diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx index dc6d66b12631..cc6c733694a9 100644 --- a/sc/source/ui/view/gridwin4.cxx +++ b/sc/source/ui/view/gridwin4.cxx @@ -828,6 +828,7 @@ void ScGridWindow::DrawContent(OutputDevice &rDevice, const ScTableInfo& rTableI aOrigin.getY() - aOrigin.getY() / twipFactor); aNew.SetOrigin(aOrigin); pContentDev->SetMapMode(aNew); + comphelper::LibreOfficeKit::setLocalRendering(); } DrawRedraw( aOutputData, eMode, SC_LAYER_FRONT ); diff --git a/svx/source/sdr/contact/objectcontactofpageview.cxx b/svx/source/sdr/contact/objectcontactofpageview.cxx index 6238cadb2f51..1f6fcecd618a 100644 --- a/svx/source/sdr/contact/objectcontactofpageview.cxx +++ b/svx/source/sdr/contact/objectcontactofpageview.cxx @@ -231,7 +231,8 @@ namespace sdr // transform to world coordinates aViewRange.transform(rTargetOutDev.GetInverseViewTransformation()); - if (comphelper::LibreOfficeKit::isActive()) + if (comphelper::LibreOfficeKit::isActive() && + comphelper::LibreOfficeKit::isLocalRendering()) { const int TWIPS_PER_PIXEL = 15; aViewRange = basegfx::B2DRange(aViewRange.getMinimum().getX(), @@ -308,7 +309,8 @@ namespace sdr drawinglayer::processor2d::createProcessor2DFromOutputDevice( rTargetOutDev, getViewInformation2D())); - if (comphelper::LibreOfficeKit::isActive()) + if (comphelper::LibreOfficeKit::isActive() && + comphelper::LibreOfficeKit::isLocalRendering()) { // Restore the origin. MapMode aMapMode = pOutDev->GetMapMode(); @@ -321,7 +323,8 @@ namespace sdr pProcessor2D->process(xPrimitiveSequence); } - if (comphelper::LibreOfficeKit::isActive()) + if (comphelper::LibreOfficeKit::isActive() && + comphelper::LibreOfficeKit::isLocalRendering()) { // Restore the original map-mode. pOutDev->SetMapMode(aOrigMapMode); diff --git a/vcl/source/outdev/bitmap.cxx b/vcl/source/outdev/bitmap.cxx index ef81682480bd..2db0cc8f90b5 100644 --- a/vcl/source/outdev/bitmap.cxx +++ b/vcl/source/outdev/bitmap.cxx @@ -1197,14 +1197,14 @@ void OutputDevice::DrawTransformedBitmapEx( basegfx::fround(aScale.getX() + aTranslate.getX()) - aDestPt.X(), basegfx::fround(aScale.getY() + aTranslate.getY()) - aDestPt.Y()); const Point aOrigin = GetMapMode().GetOrigin(); - if (comphelper::LibreOfficeKit::isActive()) + if (comphelper::LibreOfficeKit::isActive() && GetMapMode().GetMapUnit() != MAP_PIXEL) { aDestPt.Move(aOrigin.getX(), aOrigin.getY()); EnableMapMode(false); } DrawBitmapEx(aDestPt, aDestSize, rBitmapEx); - if (comphelper::LibreOfficeKit::isActive()) + if (comphelper::LibreOfficeKit::isActive() && GetMapMode().GetMapUnit() != MAP_PIXEL) { EnableMapMode(true); aDestPt.Move(-aOrigin.getX(), -aOrigin.getY()); |