d750944db6
- Fix bsc#1165849 - LO-L3: Shadow size for rectangle is only a fraction of Office 365 * bsc1165849-1.diff * bsc1165849-2.diff * bsc1165849-3.diff OBS-URL: https://build.opensuse.org/request/show/809054 OBS-URL: https://build.opensuse.org/package/show/LibreOffice:Factory/libreoffice?expand=0&rev=882
174 lines
7.9 KiB
Diff
174 lines
7.9 KiB
Diff
From 74f3a7b9161ede870fbe2642158601ea3eaa073e Mon Sep 17 00:00:00 2001
|
|
From: Miklos Vajna <vmiklos@collabora.com>
|
|
Date: Wed, 20 Nov 2019 10:18:37 +0100
|
|
Subject: [PATCH] drawinglayer: handle more primitives in the xml dump
|
|
|
|
In preparation of writing a test for semi-transparent shape text.
|
|
|
|
Change-Id: I2dac94a6cd9da48de9a5e407ceab78fb8be933d7
|
|
Reviewed-on: https://gerrit.libreoffice.org/83264
|
|
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
|
|
Tested-by: Jenkins
|
|
(cherry picked from commit b6d794e14e65697fbf47a5b425d9d264e26e0161)
|
|
|
|
tdf#129916 svx: fix origin of scaled shadow
|
|
|
|
We assumed that the top left corner is the origin for scaling, but that
|
|
is not necessarily the case. The intention is that the shadow direction
|
|
can be determined from its x and y offset, and the origin is the
|
|
opposite corner of the shape.
|
|
|
|
(cherry picked from commit e21d522dddce2590ed435890ae8d5fe39658a71a)
|
|
|
|
Conflicts:
|
|
svx/CppunitTest_svx_unit.mk
|
|
|
|
Change-Id: I6759302767d20739b6e2be79d379740dd06f70f5
|
|
---
|
|
.../source/tools/primitive2dxmldump.cxx | 83 ++++++++++++++-
|
|
svx/qa/unit/sdr.cxx | 96 ++++++++++++++++++
|
|
.../sdr/primitive2d/sdrdecompositiontools.cxx | 14 ++-
|
|
4 files changed, 189 insertions(+), 4 deletions(-)
|
|
create mode 100644 svx/qa/unit/data/shadow-scale-origin.pptx
|
|
create mode 100644 svx/qa/unit/sdr.cxx
|
|
|
|
diff --git a/drawinglayer/source/tools/primitive2dxmldump.cxx b/drawinglayer/source/tools/primitive2dxmldump.cxx
|
|
index 65170ae096f2..64117de878bd 100644
|
|
--- a/drawinglayer/source/tools/primitive2dxmldump.cxx
|
|
+++ b/drawinglayer/source/tools/primitive2dxmldump.cxx
|
|
@@ -34,6 +34,7 @@
|
|
|
|
#include <basegfx/polygon/b2dpolypolygontools.hxx>
|
|
#include <basegfx/polygon/b2dpolygontools.hxx>
|
|
+#include <svx/sdr/primitive2d/svx_primitivetypes2d.hxx>
|
|
|
|
using namespace drawinglayer::primitive2d;
|
|
|
|
@@ -155,7 +156,7 @@ void Primitive2dXmlDump::decomposeAndWrite(
|
|
if (!pBasePrimitive)
|
|
continue;
|
|
sal_uInt32 nId = pBasePrimitive->getPrimitive2DID();
|
|
- if (maFilter[nId])
|
|
+ if (nId < maFilter.size() && maFilter[nId])
|
|
continue;
|
|
|
|
OUString sCurrentElementTag = drawinglayer::primitive2d::idToString(nId);
|
|
@@ -336,9 +337,87 @@ void Primitive2dXmlDump::decomposeAndWrite(
|
|
|
|
break;
|
|
|
|
+ case PRIMITIVE2D_ID_SDRRECTANGLEPRIMITIVE2D:
|
|
+ {
|
|
+ // SdrRectanglePrimitive2D is private to us.
|
|
+ rWriter.startElement("sdrrectangle");
|
|
+ drawinglayer::primitive2d::Primitive2DContainer aPrimitiveContainer;
|
|
+ pBasePrimitive->get2DDecomposition(aPrimitiveContainer,
|
|
+ drawinglayer::geometry::ViewInformation2D());
|
|
+ decomposeAndWrite(aPrimitiveContainer, rWriter);
|
|
+ rWriter.endElement();
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ case PRIMITIVE2D_ID_SDRBLOCKTEXTPRIMITIVE2D:
|
|
+ {
|
|
+ // SdrBlockTextPrimitive2D is private to us.
|
|
+ rWriter.startElement("sdrblocktext");
|
|
+ drawinglayer::primitive2d::Primitive2DContainer aPrimitiveContainer;
|
|
+ pBasePrimitive->get2DDecomposition(aPrimitiveContainer,
|
|
+ drawinglayer::geometry::ViewInformation2D());
|
|
+ decomposeAndWrite(aPrimitiveContainer, rWriter);
|
|
+ rWriter.endElement();
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ case PRIMITIVE2D_ID_TEXTHIERARCHYBLOCKPRIMITIVE2D:
|
|
+ {
|
|
+ // TextHierarchyBlockPrimitive2D.
|
|
+ rWriter.startElement("texthierarchyblock");
|
|
+ drawinglayer::primitive2d::Primitive2DContainer aPrimitiveContainer;
|
|
+ pBasePrimitive->get2DDecomposition(aPrimitiveContainer,
|
|
+ drawinglayer::geometry::ViewInformation2D());
|
|
+ decomposeAndWrite(aPrimitiveContainer, rWriter);
|
|
+ rWriter.endElement();
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ case PRIMITIVE2D_ID_TEXTHIERARCHYPARAGRAPHPRIMITIVE2D:
|
|
+ {
|
|
+ // TextHierarchyParagraphPrimitive2D.
|
|
+ rWriter.startElement("texthierarchyparagraph");
|
|
+ drawinglayer::primitive2d::Primitive2DContainer aPrimitiveContainer;
|
|
+ pBasePrimitive->get2DDecomposition(aPrimitiveContainer,
|
|
+ drawinglayer::geometry::ViewInformation2D());
|
|
+ decomposeAndWrite(aPrimitiveContainer, rWriter);
|
|
+ rWriter.endElement();
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ case PRIMITIVE2D_ID_TEXTHIERARCHYLINEPRIMITIVE2D:
|
|
+ {
|
|
+ // TextHierarchyLinePrimitive2D.
|
|
+ rWriter.startElement("texthierarchyline");
|
|
+ drawinglayer::primitive2d::Primitive2DContainer aPrimitiveContainer;
|
|
+ pBasePrimitive->get2DDecomposition(aPrimitiveContainer,
|
|
+ drawinglayer::geometry::ViewInformation2D());
|
|
+ decomposeAndWrite(aPrimitiveContainer, rWriter);
|
|
+ rWriter.endElement();
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ case PRIMITIVE2D_ID_SHADOWPRIMITIVE2D:
|
|
+ {
|
|
+ // ShadowPrimitive2D.
|
|
+ rWriter.startElement("shadow");
|
|
+ drawinglayer::primitive2d::Primitive2DContainer aPrimitiveContainer;
|
|
+ pBasePrimitive->get2DDecomposition(aPrimitiveContainer,
|
|
+ drawinglayer::geometry::ViewInformation2D());
|
|
+ decomposeAndWrite(aPrimitiveContainer, rWriter);
|
|
+ rWriter.endElement();
|
|
+ break;
|
|
+ }
|
|
+
|
|
default:
|
|
{
|
|
- rWriter.element(OUStringToOString(sCurrentElementTag, RTL_TEXTENCODING_UTF8));
|
|
+ rWriter.startElement("unhandled");
|
|
+ rWriter.attribute("id", OUStringToOString(sCurrentElementTag, RTL_TEXTENCODING_UTF8));
|
|
+ drawinglayer::primitive2d::Primitive2DContainer aPrimitiveContainer;
|
|
+ pBasePrimitive->get2DDecomposition(aPrimitiveContainer,
|
|
+ drawinglayer::geometry::ViewInformation2D());
|
|
+ decomposeAndWrite(aPrimitiveContainer, rWriter);
|
|
+ rWriter.endElement();
|
|
}
|
|
break;
|
|
}
|
|
diff --git a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
|
|
index 42c0bb60ecc9..48575d3b4917 100644
|
|
--- a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
|
|
+++ b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
|
|
@@ -499,9 +499,19 @@ namespace drawinglayer
|
|
double fShearX = 0;
|
|
rObjectMatrix.decompose(aScale, aTranslate, fRotate, fShearX);
|
|
// Scale the shadow
|
|
- aShadowOffset.translate(-aTranslate.getX(), -aTranslate.getY());
|
|
+ double nTranslateX = aTranslate.getX();
|
|
+ double nTranslateY = aTranslate.getY();
|
|
+
|
|
+ // The origin for scaling is the top left corner by default. A negative
|
|
+ // shadow offset changes the origin.
|
|
+ if (rShadow.getOffset().getX() < 0)
|
|
+ nTranslateX += aScale.getX();
|
|
+ if (rShadow.getOffset().getY() < 0)
|
|
+ nTranslateY += aScale.getY();
|
|
+
|
|
+ aShadowOffset.translate(-nTranslateX, -nTranslateY);
|
|
aShadowOffset.scale(rShadow.getSize().getX() * 0.00001, rShadow.getSize().getY() * 0.00001);
|
|
- aShadowOffset.translate(aTranslate.getX(), aTranslate.getY());
|
|
+ aShadowOffset.translate(nTranslateX, nTranslateY);
|
|
}
|
|
|
|
aShadowOffset.translate(rShadow.getOffset().getX(), rShadow.getOffset().getY());
|
|
--
|
|
2.26.1
|
|
|