[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-5.0' - comphelper/source include/comphelper sc/source svx/source vcl/source

Ashod Nakashian ashod.nakashian at collabora.co.uk
Thu Jun 16 12:00:24 UTC 2016


 comphelper/source/misc/lok.cxx                     |   12 ++++++++++++
 include/comphelper/lok.hxx                         |    7 +++++++
 sc/source/ui/view/gridwin4.cxx                     |    1 +
 svx/source/sdr/contact/objectcontactofpageview.cxx |    9 ++++++---
 vcl/source/outdev/bitmap.cxx                       |    4 ++--
 5 files changed, 28 insertions(+), 5 deletions(-)

New commits:
commit 60fdcda65bad242f99895cb453182578250fbdea
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Thu Jun 16 07:28:58 2016 -0400

    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 at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/comphelper/source/misc/lok.cxx b/comphelper/source/misc/lok.cxx
index 279ec65..d2467e7 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 2cc38c6..8afd3d8 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 dc6d66b..cc6c733 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 6238cad..1f6fcec 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 ef81682..2db0cc8 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());


More information about the Libreoffice-commits mailing list