summaryrefslogtreecommitdiff
path: root/svx/source/sdr/contact
diff options
context:
space:
mode:
authorAshod Nakashian <ashod.nakashian@collabora.co.uk>2016-06-04 21:29:30 -0400
committerAshod Nakashian <ashnakash@gmail.com>2016-06-17 23:32:29 +0000
commit9d6f4cf26e59b846bcdf4139c6aeb76db5a554f7 (patch)
treec750cf2cecc153ef54534c6b43c030d69afa83ac /svx/source/sdr/contact
parent9113f17e65b1dafbc178fd269e2967c1e2632f0e (diff)
LOK: fast tile rendering (graphics and buttons)
Since embedded graphics and buttons use absolute coordinates, we set the origin to be the top-left corner of the tile. This includes the origin + ScrPos (see previous patch). Then, the coordinates of the graphic is shifted by this amount to make sure it renders in its relative position to the tile. This renders embedded graphics and buttons at their correct position, with some limitations. Tiles large enough to cover a graphic object show the graphic object where it should be. However, rendering a relatively small tile doesn't render the graphic. This seems to be an issue with moving the graphic's coordinate at a later stage than the 2D Processor decides what objects intersect with the 'view area' that is rendered. Another issue is that graphs don't render. What they seem to suffer is incorrect scale and a fix coordinates (they show up as tiny thumbnails at the top-left corner and grow in proportion to the real graph when resized). These shall be addressed in a separate patch. Reviewed-on: https://gerrit.libreoffice.org/26204 Reviewed-by: Ashod Nakashian <ashnakash@gmail.com> Tested-by: Ashod Nakashian <ashnakash@gmail.com> (cherry picked from commit 5f01d80f75dc86b393cc2fdb66b94aece964c674) Change-Id: I4b71bf5f2e357d1114d46022bc00905ceed0c2f9 Reviewed-on: https://gerrit.libreoffice.org/26376 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Diffstat (limited to 'svx/source/sdr/contact')
-rw-r--r--svx/source/sdr/contact/objectcontactofpageview.cxx28
1 files changed, 27 insertions, 1 deletions
diff --git a/svx/source/sdr/contact/objectcontactofpageview.cxx b/svx/source/sdr/contact/objectcontactofpageview.cxx
index 6dcd57725946..cead940fab6a 100644
--- a/svx/source/sdr/contact/objectcontactofpageview.cxx
+++ b/svx/source/sdr/contact/objectcontactofpageview.cxx
@@ -36,6 +36,7 @@
#include <drawinglayer/processor2d/processor2dtools.hxx>
#include <svx/unoapi.hxx>
#include <unotools/configmgr.hxx>
+#include <comphelper/lok.hxx>
#include "eventhandler.hxx"
#include <memory>
@@ -168,7 +169,7 @@ namespace sdr
bool bClipRegionPushed(false);
const vcl::Region& rRedrawArea(rDisplayInfo.GetRedrawArea());
- if(!rRedrawArea.IsEmpty())
+ if(!rRedrawArea.IsEmpty() && !comphelper::LibreOfficeKit::isActive())
{
bClipRegionPushed = true;
pOutDev->Push(PushFlags::CLIPREGION);
@@ -231,6 +232,14 @@ namespace sdr
// transform to world coordinates
aViewRange.transform(rTargetOutDev.GetInverseViewTransformation());
+ if (comphelper::LibreOfficeKit::isActive())
+ {
+ const int TWIPS_PER_PIXEL = 15;
+ aViewRange = basegfx::B2DRange(aViewRange.getMinimum().getX(),
+ aViewRange.getMinimum().getY(),
+ aViewRange.getMaximum().getX() * TWIPS_PER_PIXEL,
+ aViewRange.getMaximum().getY() * TWIPS_PER_PIXEL);
+ }
}
// update local ViewInformation2D
@@ -292,15 +301,32 @@ namespace sdr
rDisplayInfo.ClearGhostedDrawMode(); // reset, else the VCL-paint with the processor will not do the right thing
pOutDev->SetLayoutMode(ComplexTextLayoutFlags::Default); // reset, default is no BiDi/RTL
+ // Save the map-mode since creating the 2D processor will replace it.
+ const MapMode aOrigMapMode = pOutDev->GetMapMode();
+
// create renderer
std::unique_ptr<drawinglayer::processor2d::BaseProcessor2D> pProcessor2D(
drawinglayer::processor2d::createProcessor2DFromOutputDevice(
rTargetOutDev, getViewInformation2D()));
+ if (comphelper::LibreOfficeKit::isActive())
+ {
+ // Restore the origin.
+ MapMode aMapMode = pOutDev->GetMapMode();
+ aMapMode.SetOrigin(aOrigMapMode.GetOrigin());
+ pOutDev->SetMapMode(aMapMode);
+ }
+
if(pProcessor2D)
{
pProcessor2D->process(xPrimitiveSequence);
}
+
+ if (comphelper::LibreOfficeKit::isActive())
+ {
+ // Restore the original map-mode.
+ pOutDev->SetMapMode(aOrigMapMode);
+ }
}
// #114359# restore old ClipReghion