Accepting request 810707 from LibreOffice:Factory

OBS-URL: https://build.opensuse.org/request/show/810707
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libreoffice?expand=0&rev=204
This commit is contained in:
Dominique Leuenberger 2020-06-03 18:30:45 +00:00 committed by Git OBS Bridge
commit 3311affae0
19 changed files with 1038 additions and 152 deletions

501
bsc1146025.diff Normal file
View File

@ -0,0 +1,501 @@
From bc15a8241b1c8e113bcbb83343652b2c84820e87 Mon Sep 17 00:00:00 2001
From: Miklos Vajna <vmiklos@collabora.com>
Date: Fri, 22 May 2020 17:58:22 +0200
Subject: [PATCH] bsc1146025.diff
smartart import: handle multiple <a:schemeClr> in <dgm:fillClrLst>
The TODO in the ColorFragmentHandler ctor was right: we only handled the
last <a:schemeClr> child, but there can be multiple one.
Use them based on the index of a shape in a <dgm:forEach> loop.
Move the TODO to the only place which still assumes a single color in
the color list.
(cherry picked from commit 12bea6c897822964ad4705418da54411cb15749e)
Conflicts:
oox/source/drawingml/colorchoicecontext.cxx
oox/source/drawingml/diagram/diagram.cxx
sd/qa/unit/import-tests-smartart.cxx
oox smartart import: fix aspect ratio of shape with composite algo
The layout node has alg=composite, then a parTx and a desTx child layout
nodes. No matter what order is used (parent first, child first), the
result will be wrong, as the constraints refer to each other. I did not
spot any description in ISO 29500-1 that would describe what is the
expected behavior.
Researching this, found "One other consideration when specifying
composite constraints is that the constraints must be specified in the
same order as the nested layout nodes." at
<http://web.archive.org/web/20111015151600/http://msdn.microsoft.com/en-us/magazine/cc163470.aspx>,
which suggests to handle constraints for each shape in a parent -> child
order, but keep a shared state when iterating over the children which
gives us:
- parent node, all direct constraints
- for each child node:
- child's constraints from parent
- child's own constraints
This way the desTx top value can depend on the parTx's height, and it's
supported to define parTx's height only in the parTx layout node, not in
the composite parent.
And after all, it matches what PowerPoint does, so the column headings
in the bugdoc have a 4:10 height:width aspect ratio.
(cherry picked from commit 414586649582e182b2603702f4f586f4beeed8a9)
oox smartart import, composite alg: implement vertical centering
The bugdoc's case was that the total height would be used by 2 shapes,
but then a constraint decreases the height of one shape, so not all
vertical space is used.
We used to just count from the top, need to center vertically, as
PowerPoint does it.
(cherry picked from commit acdde3c643fde015214c546b1567727272ea799e)
Change-Id: I1c5c4f82e621f1110ef06b0490ff79f82f60f214
deb76c1ddd1ffff8d2a217cddf81106d1bb97eb9
436019e9e837b73130e387c9bcd309e20045b0f9
---
oox/inc/drawingml/colorchoicecontext.hxx | 15 ++
oox/source/drawingml/colorchoicecontext.cxx | 25 +++
oox/source/drawingml/diagram/diagram.cxx | 17 +-
oox/source/drawingml/diagram/diagram.hxx | 16 +-
.../diagram/diagramfragmenthandler.cxx | 15 +-
.../drawingml/diagram/diagramlayoutatoms.cxx | 162 ++++++++++++++----
.../drawingml/diagram/diagramlayoutatoms.hxx | 3 +-
.../drawingml/diagram/layoutatomvisitors.cxx | 4 +-
8 files changed, 208 insertions(+), 49 deletions(-)
diff --git a/oox/inc/drawingml/colorchoicecontext.hxx b/oox/inc/drawingml/colorchoicecontext.hxx
index 29889f494e3d..dae8d7fb8e25 100644
--- a/oox/inc/drawingml/colorchoicecontext.hxx
+++ b/oox/inc/drawingml/colorchoicecontext.hxx
@@ -22,6 +22,8 @@
#include <oox/core/contexthandler2.hxx>
+#include <vector>
+
namespace oox {
namespace drawingml {
@@ -65,6 +67,19 @@ private:
Color& mrColor;
};
+/// Same as ColorContext, but handles multiple colors.
+class ColorsContext : public ::oox::core::ContextHandler2
+{
+public:
+ explicit ColorsContext(::oox::core::ContextHandler2Helper const& rParent,
+ std::vector<Color>& rColors);
+
+ virtual ::oox::core::ContextHandlerRef
+ onCreateContext(sal_Int32 nElement, const ::oox::AttributeList& rAttribs) override;
+
+private:
+ std::vector<Color>& mrColors;
+};
} // namespace drawingml
} // namespace oox
diff --git a/oox/source/drawingml/colorchoicecontext.cxx b/oox/source/drawingml/colorchoicecontext.cxx
index cf6c17ecd3b4..a9e0d91ef32e 100644
--- a/oox/source/drawingml/colorchoicecontext.cxx
+++ b/oox/source/drawingml/colorchoicecontext.cxx
@@ -149,6 +149,31 @@ ColorContext::ColorContext( ContextHandler2Helper const & rParent, Color& rColor
return nullptr;
}
+ColorsContext::ColorsContext(ContextHandler2Helper const& rParent, std::vector<Color>& rColors)
+ : ContextHandler2(rParent)
+ , mrColors(rColors)
+{
+}
+
+::oox::core::ContextHandlerRef ColorsContext::onCreateContext(sal_Int32 nElement,
+ const AttributeList&)
+{
+ switch (nElement)
+ {
+ case A_TOKEN(scrgbClr):
+ case A_TOKEN(srgbClr):
+ case A_TOKEN(hslClr):
+ case A_TOKEN(sysClr):
+ case A_TOKEN(schemeClr):
+ case A_TOKEN(prstClr):
+ {
+ mrColors.emplace_back();
+ return new ColorValueContext(*this, mrColors.back());
+ }
+ }
+ return nullptr;
+}
+
} // namespace drawingml
} // namespace oox
diff --git a/oox/source/drawingml/diagram/diagram.cxx b/oox/source/drawingml/diagram/diagram.cxx
index b2f3373ad113..a03a06c39125 100644
--- a/oox/source/drawingml/diagram/diagram.cxx
+++ b/oox/source/drawingml/diagram/diagram.cxx
@@ -321,9 +321,11 @@ void loadDiagram( ShapePtr const & pShape,
if( !pData->getExtDrawings().empty() )
{
const DiagramColorMap::const_iterator aColor = pDiagram->getColors().find("node0");
- if( aColor != pDiagram->getColors().end() )
+ if( aColor != pDiagram->getColors().end() && !aColor->second.maTextFillColors.empty())
{
- pShape->setFontRefColorForNodes(aColor->second.maTextFillColor);
+ // TODO(F1): well, actually, there might be *several* color
+ // definitions in it, after all it's called list.
+ pShape->setFontRefColorForNodes(DiagramColor::getColorByIndex(aColor->second.maTextFillColors, -1));
}
}
@@ -425,6 +427,17 @@ void reloadDiagram(SdrObject* pObj, core::XmlFilterBase& rFilter)
child->addShape(rFilter, rFilter.getCurrentTheme(), xShapes, aTransformation, pShape->getFillProperties());
}
+const oox::drawingml::Color&
+DiagramColor::getColorByIndex(const std::vector<oox::drawingml::Color>& rColors, sal_Int32 nIndex)
+{
+ assert(!rColors.empty());
+ if (nIndex == -1)
+ {
+ return rColors[rColors.size() - 1];
+ }
+
+ return rColors[nIndex % rColors.size()];
+}
} }
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/oox/source/drawingml/diagram/diagram.hxx b/oox/source/drawingml/diagram/diagram.hxx
index 576c4007e29f..a674e248961e 100644
--- a/oox/source/drawingml/diagram/diagram.hxx
+++ b/oox/source/drawingml/diagram/diagram.hxx
@@ -22,6 +22,7 @@
#include <map>
#include <memory>
+#include <vector>
#include <rtl/ustring.hxx>
@@ -111,12 +112,15 @@ typedef std::map<OUString,DiagramStyle> DiagramQStyleMap;
struct DiagramColor
{
- oox::drawingml::Color maFillColor;
- oox::drawingml::Color maLineColor;
- oox::drawingml::Color maEffectColor;
- oox::drawingml::Color maTextFillColor;
- oox::drawingml::Color maTextLineColor;
- oox::drawingml::Color maTextEffectColor;
+ std::vector<oox::drawingml::Color> maFillColors;
+ std::vector<oox::drawingml::Color> maLineColors;
+ std::vector<oox::drawingml::Color> maEffectColors;
+ std::vector<oox::drawingml::Color> maTextFillColors;
+ std::vector<oox::drawingml::Color> maTextLineColors;
+ std::vector<oox::drawingml::Color> maTextEffectColors;
+
+ static const oox::drawingml::Color&
+ getColorByIndex(const std::vector<oox::drawingml::Color>& rColors, sal_Int32 nIndex);
};
typedef std::map<OUString,DiagramColor> DiagramColorMap;
diff --git a/oox/source/drawingml/diagram/diagramfragmenthandler.cxx b/oox/source/drawingml/diagram/diagramfragmenthandler.cxx
index 6e1000af3627..7eae543dc6f9 100644
--- a/oox/source/drawingml/diagram/diagramfragmenthandler.cxx
+++ b/oox/source/drawingml/diagram/diagramfragmenthandler.cxx
@@ -196,21 +196,18 @@ ColorFragmentHandler::ColorFragmentHandler( ::oox::core::XmlFilterBase& rFilter,
{
// the actual colors - defer to color fragment handlers.
- // TODO(F1): well, actually, there might be *several* color
- // definitions in it, after all it's called list. But
- // apparently ColorContext doesn't handle that anyway...
case DGM_TOKEN(fillClrLst):
- return new ColorContext( *this, maColorEntry.maFillColor );
+ return new ColorsContext( *this, maColorEntry.maFillColors );
case DGM_TOKEN(linClrLst):
- return new ColorContext( *this, maColorEntry.maLineColor );
+ return new ColorsContext( *this, maColorEntry.maLineColors );
case DGM_TOKEN(effectClrLst):
- return new ColorContext( *this, maColorEntry.maEffectColor );
+ return new ColorsContext( *this, maColorEntry.maEffectColors );
case DGM_TOKEN(txFillClrLst):
- return new ColorContext( *this, maColorEntry.maTextFillColor );
+ return new ColorsContext( *this, maColorEntry.maTextFillColors );
case DGM_TOKEN(txLinClrLst):
- return new ColorContext( *this, maColorEntry.maTextLineColor );
+ return new ColorsContext( *this, maColorEntry.maTextLineColors );
case DGM_TOKEN(txEffectClrLst):
- return new ColorContext( *this, maColorEntry.maTextEffectColor );
+ return new ColorsContext( *this, maColorEntry.maTextEffectColors );
}
break;
}
diff --git a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx
index ff83dde63fa3..19b1d10679f4 100644
--- a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx
+++ b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx
@@ -430,6 +430,42 @@ sal_Int32 AlgAtom::getVerticalShapesCount(const ShapePtr& rShape)
return nCount;
}
+namespace
+{
+/**
+ * Apply rConstraint to the rProperties shared layout state.
+ *
+ * Note that the order in which constraints are applied matters, given that constraints can refer to
+ * each other, and in case A depends on B and A is applied before B, the effect of A won't be
+ * updated when B is applied.
+ */
+void ApplyConstraintToLayout(const Constraint& rConstraint, LayoutPropertyMap& rProperties)
+{
+ const LayoutPropertyMap::const_iterator aRef = rProperties.find(rConstraint.msRefForName);
+ if (aRef != rProperties.end())
+ {
+ const LayoutProperty::const_iterator aRefType = aRef->second.find(rConstraint.mnRefType);
+ if (aRefType != aRef->second.end())
+ rProperties[rConstraint.msForName][rConstraint.mnType]
+ = aRefType->second * rConstraint.mfFactor;
+ else
+ {
+ // Values are never in EMU, while oox::drawingml::Shape position and size are always in
+ // EMU.
+ double fUnitFactor = 0;
+ if (isFontUnit(rConstraint.mnRefType))
+ // Points -> EMU.
+ fUnitFactor = EMU_PER_PT;
+ else
+ // Millimeters -> EMU.
+ fUnitFactor = EMU_PER_HMM * 100;
+ rProperties[rConstraint.msForName][rConstraint.mnType]
+ = rConstraint.mfValue * fUnitFactor;
+ }
+ }
+}
+}
+
void AlgAtom::layoutShape( const ShapePtr& rShape,
const std::vector<Constraint>& rConstraints )
{
@@ -443,6 +479,11 @@ void AlgAtom::layoutShape( const ShapePtr& rShape,
LayoutProperty& rParent = aProperties[""];
sal_Int32 nParentXOffset = 0;
+
+ // Track min/max vertical positions, so we can center everything at the end, if needed.
+ sal_Int32 nVertMin = std::numeric_limits<sal_Int32>::max();
+ sal_Int32 nVertMax = 0;
+
if (mfAspectRatio != 1.0)
{
rParent[XML_w] = rShape->getSize().Width;
@@ -467,31 +508,74 @@ void AlgAtom::layoutShape( const ShapePtr& rShape,
for (const auto & rConstr : rConstraints)
{
- const LayoutPropertyMap::const_iterator aRef = aProperties.find(rConstr.msRefForName);
- if (aRef != aProperties.end())
+ // Apply direct constraints for all layout nodes.
+ ApplyConstraintToLayout(rConstr, aProperties);
+ }
+
+ for (auto& aCurrShape : rShape->getChildren())
+ {
+ // Apply constraints from the current layout node for this child shape.
+ // Previous child shapes may have changed aProperties.
+ for (const auto& rConstr : rConstraints)
{
- const LayoutProperty::const_iterator aRefType = aRef->second.find(rConstr.mnRefType);
- if (aRefType != aRef->second.end())
- aProperties[rConstr.msForName][rConstr.mnType] = aRefType->second * rConstr.mfFactor;
- else
+ if (rConstr.msForName != aCurrShape->getInternalName())
{
- // Values are never in EMU, while oox::drawingml::Shape
- // position and size are always in EMU.
- double fUnitFactor = 0;
- if (isFontUnit(rConstr.mnRefType))
- // Points -> EMU.
- fUnitFactor = EMU_PER_PT;
- else
- // Millimeters -> EMU.
- fUnitFactor = EMU_PER_HMM * 100;
- aProperties[rConstr.msForName][rConstr.mnType]
- = rConstr.mfValue * fUnitFactor;
+ continue;
+ }
+
+ ApplyConstraintToLayout(rConstr, aProperties);
+ }
+
+ // Apply constraints from the child layout node for this child shape.
+ // This builds on top of the own parent state + the state of previous shapes in the
+ // same composite algorithm.
+ const LayoutNode& rLayoutNode = getLayoutNode();
+ for (const auto& pDirectChild : rLayoutNode.getChildren())
+ {
+ auto pLayoutNode = dynamic_cast<LayoutNode*>(pDirectChild.get());
+ if (!pLayoutNode)
+ {
+ continue;
+ }
+
+ if (pLayoutNode->getName() != aCurrShape->getInternalName())
+ {
+ continue;
+ }
+
+ for (const auto& pChild : pLayoutNode->getChildren())
+ {
+ auto pConstraintAtom = dynamic_cast<ConstraintAtom*>(pChild.get());
+ if (!pConstraintAtom)
+ {
+ continue;
+ }
+
+ const Constraint& rConstraint = pConstraintAtom->getConstraint();
+ if (!rConstraint.msForName.isEmpty())
+ {
+ continue;
+ }
+
+ if (!rConstraint.msRefForName.isEmpty())
+ {
+ continue;
+ }
+
+ // Either an absolute value or a factor of a property.
+ if (rConstraint.mfValue == 0.0 && rConstraint.mnRefType == XML_none)
+ {
+ continue;
+ }
+
+ Constraint aConstraint(rConstraint);
+ aConstraint.msForName = pLayoutNode->getName();
+ aConstraint.msRefForName = pLayoutNode->getName();
+
+ ApplyConstraintToLayout(aConstraint, aProperties);
}
}
- }
- for (auto & aCurrShape : rShape->getChildren())
- {
awt::Size aSize = rShape->getSize();
awt::Point aPos(0, 0);
@@ -535,6 +619,24 @@ void AlgAtom::layoutShape( const ShapePtr& rShape,
aCurrShape->setSize(aSize);
aCurrShape->setChildSize(aSize);
aCurrShape->setPosition(aPos);
+
+ nVertMin = std::min(aPos.Y, nVertMin);
+ nVertMax = std::max(aPos.Y + aSize.Height, nVertMax);
+ }
+
+ // See if all vertical space is used or we have to center the content.
+ if (nVertMin >= 0 && nVertMax <= rParent[XML_h])
+ {
+ sal_Int32 nDiff = rParent[XML_h] - (nVertMax - nVertMin);
+ if (nDiff > 0)
+ {
+ for (auto& aCurrShape : rShape->getChildren())
+ {
+ awt::Point aPosition = aCurrShape->getPosition();
+ aPosition.Y += nDiff / 2;
+ aCurrShape->setPosition(aPosition);
+ }
+ }
}
break;
}
@@ -1275,7 +1377,7 @@ void LayoutNode::accept( LayoutAtomVisitor& rVisitor )
rVisitor.visit(*this);
}
-bool LayoutNode::setupShape( const ShapePtr& rShape, const dgm::Point* pPresNode ) const
+bool LayoutNode::setupShape( const ShapePtr& rShape, const dgm::Point* pPresNode, sal_Int32 nCurrIdx ) const
{
SAL_INFO(
"oox.drawingml",
@@ -1413,15 +1515,17 @@ bool LayoutNode::setupShape( const ShapePtr& rShape, const dgm::Point* pPresNode
const DiagramColorMap::const_iterator aColor = mrDgm.getColors().find(aStyleLabel);
if( aColor != mrDgm.getColors().end() )
{
+ // Take the nth color from the color list in case we are the nth shape in a
+ // <dgm:forEach> loop.
const DiagramColor& rColor=aColor->second;
- if( rColor.maFillColor.isUsed() )
- rShape->getShapeStyleRefs()[XML_fillRef].maPhClr = rColor.maFillColor;
- if( rColor.maLineColor.isUsed() )
- rShape->getShapeStyleRefs()[XML_lnRef].maPhClr = rColor.maLineColor;
- if( rColor.maEffectColor.isUsed() )
- rShape->getShapeStyleRefs()[XML_effectRef].maPhClr = rColor.maEffectColor;
- if( rColor.maTextFillColor.isUsed() )
- rShape->getShapeStyleRefs()[XML_fontRef].maPhClr = rColor.maTextFillColor;
+ if( !rColor.maFillColors.empty() )
+ rShape->getShapeStyleRefs()[XML_fillRef].maPhClr = DiagramColor::getColorByIndex(rColor.maFillColors, nCurrIdx);
+ if( !rColor.maLineColors.empty() )
+ rShape->getShapeStyleRefs()[XML_lnRef].maPhClr = DiagramColor::getColorByIndex(rColor.maLineColors, nCurrIdx);
+ if( !rColor.maEffectColors.empty() )
+ rShape->getShapeStyleRefs()[XML_effectRef].maPhClr = DiagramColor::getColorByIndex(rColor.maEffectColors, nCurrIdx);
+ if( !rColor.maTextFillColors.empty() )
+ rShape->getShapeStyleRefs()[XML_fontRef].maPhClr = DiagramColor::getColorByIndex(rColor.maTextFillColors, nCurrIdx);
}
}
diff --git a/oox/source/drawingml/diagram/diagramlayoutatoms.hxx b/oox/source/drawingml/diagram/diagramlayoutatoms.hxx
index 91028971473e..2e4551642389 100644
--- a/oox/source/drawingml/diagram/diagramlayoutatoms.hxx
+++ b/oox/source/drawingml/diagram/diagramlayoutatoms.hxx
@@ -260,7 +260,8 @@ public:
{ mpNodeShapes.push_back(pShape); }
bool setupShape( const ShapePtr& rShape,
- const dgm::Point* pPresNode ) const;
+ const dgm::Point* pPresNode,
+ sal_Int32 nCurrIdx ) const;
const LayoutNode* getParentLayoutNode() const;
diff --git a/oox/source/drawingml/diagram/layoutatomvisitors.cxx b/oox/source/drawingml/diagram/layoutatomvisitors.cxx
index 4bfadc3affe8..c616ca3a9010 100644
--- a/oox/source/drawingml/diagram/layoutatomvisitors.cxx
+++ b/oox/source/drawingml/diagram/layoutatomvisitors.cxx
@@ -73,7 +73,7 @@ void ShapeCreationVisitor::visit(LayoutNode& rAtom)
{
// reuse existing shape
ShapePtr pShape = rAtom.getExistingShape();
- if (rAtom.setupShape(pShape, pNewNode))
+ if (rAtom.setupShape(pShape, pNewNode, mnCurrIdx))
{
pShape->setInternalName(rAtom.getName());
rAtom.addNodeShape(pShape);
@@ -92,7 +92,7 @@ void ShapeCreationVisitor::visit(LayoutNode& rAtom)
"oox.drawingml",
"processing shape type " << (pShape->getCustomShapeProperties()->getShapePresetType()));
- if (rAtom.setupShape(pShape, pNewNode))
+ if (rAtom.setupShape(pShape, pNewNode, mnCurrIdx))
{
pShape->setInternalName(rAtom.getName());
pCurrParent->addChild(pShape);
--
2.26.1

View File

@ -1,90 +0,0 @@
From fda60625c9e8bbc0259c790e7da76e608a012451 Mon Sep 17 00:00:00 2001
From: Miklos Vajna <vmiklos@collabora.com>
Date: Mon, 27 Apr 2020 10:54:27 +0200
Subject: [PATCH] DOCX import: handle <wp:positionH
relativeFrom="insideMargin">
This is the same as page, but it is from-left on odd pages and
from-right on even pages, i.e. our "mirror on even pages" mode.
(cherry picked from commit fccbb557add457db16e0556c3f0172cafc2cf981)
Conflicts:
writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx
Change-Id: I018e0ac165a3d802f64cfc314d5c5f58da3cb580
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93003
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
---
diff --git a/writerfilter/source/dmapper/GraphicHelpers.cxx b/writerfilter/source/dmapper/GraphicHelpers.cxx
index 3339156ae3b2..9168ad51eebd 100644
--- a/writerfilter/source/dmapper/GraphicHelpers.cxx
+++ b/writerfilter/source/dmapper/GraphicHelpers.cxx
@@ -102,6 +102,11 @@ void PositionHandler::lcl_attribute( Id aName, Value& rVal )
m_nRelation = text::RelOrientation::PAGE_FRAME;
break;
+ case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_insideMargin:
+ m_nRelation = text::RelOrientation::PAGE_FRAME;
+ m_bPageToggle = true;
+ break;
+
case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_column:
m_nRelation = text::RelOrientation::FRAME;
break;
diff --git a/writerfilter/source/dmapper/GraphicHelpers.hxx b/writerfilter/source/dmapper/GraphicHelpers.hxx
index dbfe9ddd9f13..d28f2fb50bf7 100644
--- a/writerfilter/source/dmapper/GraphicHelpers.hxx
+++ b/writerfilter/source/dmapper/GraphicHelpers.hxx
@@ -37,6 +37,7 @@ public:
sal_Int16 orientation() const;
sal_Int16 relation() const { return m_nRelation;}
sal_Int32 position() const { return m_nPosition;}
+ bool GetPageToggle() const { return m_bPageToggle; }
private:
virtual void lcl_attribute( Id aName, Value& rVal ) override;
virtual void lcl_sprm( Sprm& rSprm ) override;
@@ -45,6 +46,7 @@ public:
sal_Int32 m_nPosition;
std::pair<OUString, OUString>& m_rPositionOffsets;
std::pair<OUString, OUString>& m_rAligns;
+ bool m_bPageToggle = false;
};
class WrapHandler: public LoggedProperties
diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx
index 97c807752f60..a2c19383c95d 100644
--- a/writerfilter/source/dmapper/GraphicImport.cxx
+++ b/writerfilter/source/dmapper/GraphicImport.cxx
@@ -193,6 +193,7 @@ public:
sal_Int16 nHoriOrient;
sal_Int16 nHoriRelation;
+ bool bPageToggle = false;
sal_Int16 nVertOrient;
sal_Int16 nVertRelation;
text::WrapTextMode nWrap;
@@ -343,8 +344,8 @@ public:
uno::makeAny(nLeftPosition));
xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_HORI_ORIENT_RELATION ),
uno::makeAny(nHoriRelation));
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_PAGE_TOGGLE ),
- uno::makeAny(false));
+ xGraphicObjectProperties->setPropertyValue(getPropertyName(PROP_PAGE_TOGGLE),
+ uno::makeAny(bPageToggle));
if (!bRelativeOnly)
xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_VERT_ORIENT_POSITION),
uno::makeAny(nTopPosition));
@@ -1089,6 +1090,7 @@ void GraphicImport::lcl_sprm(Sprm& rSprm)
if( !m_pImpl->bUseSimplePos )
{
m_pImpl->nHoriRelation = pHandler->relation();
+ m_pImpl->bPageToggle = pHandler->GetPageToggle();
m_pImpl->nHoriOrient = pHandler->orientation();
m_pImpl->nLeftPosition = pHandler->position();
--
2.26.1

132
bsc1165849-1.diff Normal file
View File

@ -0,0 +1,132 @@
From b4ed373a15b1e8d90c94ec7030ee3d3785f7e8f9 Mon Sep 17 00:00:00 2001
From: Miklos Vajna <vmiklos@collabora.com>
Date: Fri, 8 May 2020 16:43:22 +0200
Subject: [PATCH] Related: tdf#129916 svx: improve shadow size of custom shapes
There are multiple problems with this bug document, the first is that
the shadow primitive got the default position (0) of the owning shape.
Do it the same way as commit 6454b6336b8de9a4c5899adeab552af6f794cdc4
(tdf#130058 Import shadow size., 2020-04-14) did for graphic objects.
This requires constructing a transform matrix in
ViewContactOfSdrObjCustomShape::createViewIndependentPrimitive2DSequence(),
include position and size in that as a start.
(cherry picked from commit e2b0e614e1185c960b3015414919f69a1ed35aa0)
Change-Id: Ia51df555c1984971afe7c52ba3f2658099a4e7b3
---
.../primitive2d/sdrcustomshapeprimitive2d.hxx | 5 ++++-
.../viewcontactofsdrobjcustomshape.cxx | 19 +++++++++++++------
.../primitive2d/sdrcustomshapeprimitive2d.cxx | 14 +++++++++++---
3 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/svx/inc/sdr/primitive2d/sdrcustomshapeprimitive2d.hxx b/svx/inc/sdr/primitive2d/sdrcustomshapeprimitive2d.hxx
index 285185684f15..84488906470a 100644
--- a/svx/inc/sdr/primitive2d/sdrcustomshapeprimitive2d.hxx
+++ b/svx/inc/sdr/primitive2d/sdrcustomshapeprimitive2d.hxx
@@ -47,6 +47,8 @@ namespace drawinglayer
// making exceptions with shadow generation
bool const mb3DShape : 1;
+ basegfx::B2DHomMatrix maTransform;
+
protected:
// local decomposition.
virtual void create2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& aViewInformation) const override;
@@ -57,7 +59,8 @@ namespace drawinglayer
const Primitive2DContainer& rSubPrimitives,
const basegfx::B2DHomMatrix& rTextBox,
bool bWordWrap,
- bool b3DShape);
+ bool b3DShape,
+ const basegfx::B2DHomMatrix& rObjectMatrix);
// data access
const attribute::SdrShadowTextAttribute& getSdrSTAttribute() const { return maSdrSTAttribute; }
diff --git a/svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx b/svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx
index 8630b6dd1923..7a5c0487a13f 100644
--- a/svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx
+++ b/svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx
@@ -157,13 +157,13 @@ namespace sdr
basegfx::B2DHomMatrix aTextBoxMatrix;
bool bWordWrap(false);
+ // take unrotated snap rect as default, then get the
+ // unrotated text box. Rotation needs to be done centered
+ const tools::Rectangle aObjectBound(GetCustomShapeObj().GetGeoRect());
+ const basegfx::B2DRange aObjectRange = vcl::unotools::b2DRectangleFromRectangle(aObjectBound);
+
if(bHasText)
{
- // take unrotated snap rect as default, then get the
- // unrotated text box. Rotation needs to be done centered
- const tools::Rectangle aObjectBound(GetCustomShapeObj().GetGeoRect());
- const basegfx::B2DRange aObjectRange = vcl::unotools::b2DRectangleFromRectangle(aObjectBound);
-
// #i101684# get the text range unrotated and absolute to the object range
const basegfx::B2DRange aTextRange(getCorrectedTextBoundRect());
@@ -238,6 +238,12 @@ namespace sdr
bWordWrap = GetCustomShapeObj().GetMergedItem(SDRATTR_TEXT_WORDWRAP).GetValue();
}
+ // fill object matrix
+ const basegfx::B2DHomMatrix aObjectMatrix(basegfx::utils::createScaleShearXRotateTranslateB2DHomMatrix(
+ aObjectRange.getWidth(), aObjectRange.getHeight(),
+ /*fShearX=*/0, /*fRotate=*/0,
+ aObjectRange.getMinX(), aObjectRange.getMinY()));
+
// create primitive
const drawinglayer::primitive2d::Primitive2DReference xReference(
new drawinglayer::primitive2d::SdrCustomShapePrimitive2D(
@@ -245,7 +251,8 @@ namespace sdr
xGroup,
aTextBoxMatrix,
bWordWrap,
- b3DShape));
+ b3DShape,
+ aObjectMatrix));
xRetval = drawinglayer::primitive2d::Primitive2DContainer { xReference };
}
diff --git a/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx b/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx
index fb3018f7ff88..3e0350aaf56c 100644
--- a/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx
+++ b/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx
@@ -68,7 +68,13 @@ namespace drawinglayer
// shadow will be correct (using ColorModifierStack), but expensive.
if(!get3DShape())
{
- aRetval = createEmbeddedShadowPrimitive(aRetval, getSdrSTAttribute().getShadow());
+ basegfx::B2DTuple aScale;
+ basegfx::B2DTuple aTranslate;
+ double fRotate = 0;
+ double fShearX = 0;
+ maTransform.decompose(aScale, aTranslate, fRotate, fShearX);
+ aRetval = createEmbeddedShadowPrimitive(aRetval, getSdrSTAttribute().getShadow(),
+ aTranslate.getX(), aTranslate.getY());
}
}
@@ -80,13 +86,15 @@ namespace drawinglayer
const Primitive2DContainer& rSubPrimitives,
const basegfx::B2DHomMatrix& rTextBox,
bool bWordWrap,
- bool b3DShape)
+ bool b3DShape,
+ const basegfx::B2DHomMatrix& rTransform)
: BufferedDecompositionPrimitive2D(),
maSdrSTAttribute(rSdrSTAttribute),
maSubPrimitives(rSubPrimitives),
maTextBox(rTextBox),
mbWordWrap(bWordWrap),
- mb3DShape(b3DShape)
+ mb3DShape(b3DShape),
+ maTransform(rTransform)
{
}
--
2.26.1

141
bsc1165849-2.diff Normal file
View File

@ -0,0 +1,141 @@
From f9dcb113bc2f81ef6abd2044d8512cd4e02f176c Mon Sep 17 00:00:00 2001
From: Miklos Vajna <vmiklos@collabora.com>
Date: Mon, 11 May 2020 10:10:34 +0200
Subject: [PATCH] Related: tdf#129916 svx: clean up duplicated matrix decompose
for shadow size
Pass the object's transform matrix to createEmbeddedShadowPrimitive(),
this allows decomposing it only at a single place. Also, this will allow
creating the shadow based on the object size.
(cherry picked from commit 4ba368a3dd793bdc703858f358e1af7112decadd)
Conflicts:
svx/inc/sdr/primitive2d/sdrdecompositiontools.hxx
svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
Change-Id: I8d8bf59934b00e13cda1da0398910aa9f1ce3c59
---
.../svx/sdr/primitive2d/sdrdecompositiontools.hxx | 4 ++--
.../sdr/primitive2d/sdrcustomshapeprimitive2d.cxx | 7 +------
.../sdr/primitive2d/sdrdecompositiontools.cxx | 13 +++++++++----
svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx | 8 +-------
4 files changed, 13 insertions(+), 19 deletions(-)
diff --git a/include/svx/sdr/primitive2d/sdrdecompositiontools.hxx b/include/svx/sdr/primitive2d/sdrdecompositiontools.hxx
index 844da339c111..8635981dc0ae 100644
--- a/include/svx/sdr/primitive2d/sdrdecompositiontools.hxx
+++ b/include/svx/sdr/primitive2d/sdrdecompositiontools.hxx
@@ -21,6 +21,7 @@
#define INCLUDED_SVX_SDR_PRIMITIVE2D_SDRDECOMPOSITIONTOOLS_HXX
#include <drawinglayer/primitive2d/baseprimitive2d.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
#include <svx/svxdllapi.h>
@@ -72,8 +73,7 @@ namespace drawinglayer
Primitive2DContainer SVX_DLLPUBLIC createEmbeddedShadowPrimitive(
const Primitive2DContainer& rContent,
const attribute::SdrShadowAttribute& rShadow,
- sal_Int32 nGraphicTranslateX = 0,
- sal_Int32 nGraphicTranslateY = 0);
+ const basegfx::B2DHomMatrix& rObjectMatrix = basegfx::B2DHomMatrix());
} // end of namespace primitive2d
} // end of namespace drawinglayer
diff --git a/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx b/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx
index 3e0350aaf56c..2334b1d7fef6 100644
--- a/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx
+++ b/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx
@@ -68,13 +68,8 @@ namespace drawinglayer
// shadow will be correct (using ColorModifierStack), but expensive.
if(!get3DShape())
{
- basegfx::B2DTuple aScale;
- basegfx::B2DTuple aTranslate;
- double fRotate = 0;
- double fShearX = 0;
- maTransform.decompose(aScale, aTranslate, fRotate, fShearX);
aRetval = createEmbeddedShadowPrimitive(aRetval, getSdrSTAttribute().getShadow(),
- aTranslate.getX(), aTranslate.getY());
+ maTransform);
}
}
diff --git a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
index d6822bfd1519..42c0bb60ecc9 100644
--- a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
+++ b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
@@ -44,6 +44,7 @@
#include <drawinglayer/attribute/sdrlineattribute.hxx>
#include <drawinglayer/attribute/sdrlinestartendattribute.hxx>
#include <drawinglayer/attribute/sdrshadowattribute.hxx>
+#include <sal/log.hxx>
using namespace com::sun::star;
@@ -482,8 +483,7 @@ namespace drawinglayer
Primitive2DContainer createEmbeddedShadowPrimitive(
const Primitive2DContainer& rContent,
const attribute::SdrShadowAttribute& rShadow,
- sal_Int32 nGraphicTranslateX,
- sal_Int32 nGraphicTranslateY)
+ const basegfx::B2DHomMatrix& rObjectMatrix)
{
if(!rContent.empty())
{
@@ -493,10 +493,15 @@ namespace drawinglayer
{
if(rShadow.getSize().getX() != 100000)
{
+ basegfx::B2DTuple aScale;
+ basegfx::B2DTuple aTranslate;
+ double fRotate = 0;
+ double fShearX = 0;
+ rObjectMatrix.decompose(aScale, aTranslate, fRotate, fShearX);
// Scale the shadow
- aShadowOffset.translate(-nGraphicTranslateX, -nGraphicTranslateY);
+ aShadowOffset.translate(-aTranslate.getX(), -aTranslate.getY());
aShadowOffset.scale(rShadow.getSize().getX() * 0.00001, rShadow.getSize().getY() * 0.00001);
- aShadowOffset.translate(nGraphicTranslateX, nGraphicTranslateY);
+ aShadowOffset.translate(aTranslate.getX(), aTranslate.getY());
}
aShadowOffset.translate(rShadow.getOffset().getX(), rShadow.getOffset().getY());
diff --git a/svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx b/svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx
index 676b26183b09..be25a1278e64 100644
--- a/svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx
+++ b/svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx
@@ -35,7 +35,6 @@ namespace drawinglayer
void SdrGrafPrimitive2D::create2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& /*aViewInformation*/) const
{
Primitive2DContainer aRetval;
- basegfx::B2DTuple aTranslateGrf;
// create unit outline polygon
const basegfx::B2DPolygon& aUnitOutline(basegfx::utils::createUnitPolygon());
@@ -62,10 +61,6 @@ namespace drawinglayer
getTransform(),
getGraphicObject(),
getGraphicAttr()));
- double fRotate = 0;
- double fShearX = 0;
- basegfx::B2DTuple aScaleGrf;
- getTransform().decompose(aScaleGrf, aTranslateGrf, fRotate, fShearX);
aRetval.push_back(xGraphicContentPrimitive);
}
@@ -127,8 +122,7 @@ namespace drawinglayer
aRetval = createEmbeddedShadowPrimitive(
aRetval,
getSdrLFSTAttribute().getShadow(),
- aTranslateGrf.getX(),
- aTranslateGrf.getY());
+ getTransform());
}
rContainer.insert(rContainer.end(), aRetval.begin(), aRetval.end());
--
2.26.1

173
bsc1165849-3.diff Normal file
View File

@ -0,0 +1,173 @@
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

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bc14547c188efa15f4cb36cfb3da7cacb3037a7448d1bba8a58ed6a320ccabb2
size 230409812

View File

@ -1,16 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAl6MoIwACgkQ9DSh76/u
rqNYWRAAqbxZP1XEWo4ibIfzorZWxFSx3aU/pw2BjSDRGIck0Eo5SNn5wPxxqI0U
epwn7hsH8U7VrjT1o2YqO9gmsCmFDq1eooilEopSvy4rlgz//jUdMmd80EzOXoxG
/dKrx8LRSqVDCrh12UfFb+p9l2BfWGdrIrH19RbTqlNprcBdMzOhSTAhtBwVc9Ok
uJUjWh/v1UMxfrKwVwc0J+ywBW/VSik+KaSSXgapwSZXS4EbdIbJWhrBg/72G92w
78ToErqxJwrzJcSR4blcug+emNzvvuZH5X/xJZNstfaaHhCvBwGSxXUwwRizxKEm
UELuQ2C2NJVtcvJPLDNHGeKO57Yra+zhPxgE1jTzwoHpG8kMeY1RhBMI0cfmebci
nnlfjXVKno9GoThrbHYNDgn5gK9whcMQn6ESVcgVfbzzBISBgfokojh6BUKJ+lCc
cBWOez/VRxYWJsuXXT/hIDRQ7X2yuSWYTXLWEzgR8rBrAz2eQ9e3W+36IMpyiZyG
rfieB3wuWLaY3fwDTQ1X2HnfGLRNZ2Ayx94soG0XQvATGW3vjwm/6Bie3jg4cpSG
+iu8fPgyWc7jes6jhGgoCEBFbJr3zor80jKCf+9rDs+Gh5t91XRXgt7P1mDs4Agq
8yPmKQXptFSv5ZvNYUfts03sCmSCRjIpjXn9K5xn+O8shCj6Y8s=
=MjL/
-----END PGP SIGNATURE-----

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:54388597dffc9c32f81446e6e634f7af76ca0e0e5a0d27bc3fe89033a011c078
size 231325236

View File

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAl676X8ACgkQ9DSh76/u
rqNCFw/+NZHnL5hxsyxa0UF0vnEofwFl1oYMfNK0ab7iM1GqeNIRAoZDsRNGFrqE
wQNpxA3zK6L1wC09Qgg7p2U2jpOlKMrppiCE7TOvZ4hoZDQVDr2vMzfQeaY/IkLt
Hm5GGGxIq7HAmgkRTomtfJZHQerbBa+h0GQ7cyO3HWV0wZ+yxH8dYeSFllpPuori
3lHVULa2dw8ZCZcS05PDc5sACZiuG0otu3kzVXJ8j+9HpKBO5msrnBPaHq6/xilg
Oh/TP3HJ2xOEHBnlh2Ng1aHK+rTzsMr4woNvvrJq0t8wFHBPxWRv9s9dnbPTnC4i
G7F34F0/Tjd6iajXUhA5bXQl+zxCDg/bCTdobMBzCIsoWxAqVbIYFaruV8Db8i4n
w/IOz+BIuZYc/kvXQrgCl8aLqfkv66ATxtaSaiHXrhPT0R2G4Uyhz0wcEba9QN/u
vyBsxTxkPGhktlfSSRjd8Om3XQpq1qJ8ciC6mMOBB0XQUYXRsJYVLXW7Z6kSqKsd
82Vk1q67njNBS0IuhjEQ3F4ubrJCyVJTSBKZ7RQv13N0vwXQe4wHcywEdwo7/EAH
ciVX8IN/crnirM3fQYCYSb8C4/wb8fbj34+AgKlD07HYTwuFUADtS9iw2JcW49od
L2aRiVIsTyBnWWstZu/ryrapSzMWhSKUDHMedU7TXonXrcWVj4o=
=G7OO
-----END PGP SIGNATURE-----

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8570eaa8903e4fb747500adbf06d69d2d3cb6ed3a11a3a804403878f1ecfef56
size 88297704

View File

@ -1,16 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAl6MoJEACgkQ9DSh76/u
rqN2CRAAid8Yd7XXHE/zNk4iRsKhXvZ3QGilno1F4NTu3y9OK48F3Nxo+CF/pSBm
KNUmVFzFrd58D8gPwmh8Ka6yipjArHi2NJUoGUBqCrTkz615ZF+10nO6c/mwPYJb
te/gz+M0fC8DcRxydZdJqxZPNbQSGC1T6tRqqfJUZK7y6Q9VQZQG55UMaDBcGb6q
OBQFdQgRLGhwrF+KyvTXu5vIvWtk8CLOp3qwQKYU+zlTECWZ3SCgPnHPbE3sF8So
RX/ATUY/xM2qdoihBtuGi6TPRnW/SZWa+jqaeNdKP0ode6/0N54Thcl8RS7ao8pb
hMWEsGUUPZs8xo8B4qxFmQZld+zmlyroaYl0AGu1KEAdj1JJexxXyKH5UY5DJduN
t2DU0fyUdqMzEPT5cU8XztjfY7rVVUaSbvp7RpZZbnkPw3++14e6sxAIkAcZ6+Cl
T9b7mcVRBnqGLiAsNskvF8QIKJGG83CZrARPr/++suoZzZNU4vnUkhV9+lLywZ7k
1VgH4wYKsGX3QnOzFCOwK2X3RFJfOrdtxSA2YkQhfxf7XYLSSX7CW6g+b+7paHVU
tCCWTvIh8RdQavJ/lmvxGckJrunefTS6Qako2DiGGLH7OM20Hna/PoVZVovej8yi
inpxxVJb7jufRy922Yt2a7Vi59tyBeZC2rJGo0upacd/3YpDg60=
=f4yA
-----END PGP SIGNATURE-----

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c61ac7b9ceac9aa0813bce405ce25b13dc1b698509ce33827ff7c65dffde25ac
size 88296340

View File

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAl676YMACgkQ9DSh76/u
rqOy8RAAlD39J0T8PxoyiiJ+NFLNhWbywavtjHDbAObvSN4x83MbYEbRNzayQCSU
MnFxustGK9jJzZ9DI4edZ8rjUBO7zOSsHcd5MXpupL8ye0Fp8YYafBeHiS8Q+FF8
x3e5EpPotZxx5ne54VqG46C3+PzqA9YZ+GIyBRVkrO4YWKfJYA6rlxJn0AQXEX2A
lNU/oZq6JX4BafG0bX0Qcz4KGKNtrpCqoHyj9auzLF+kV8c1zzPqU5A6pW2B8kQk
mZfz57bIomtmVSO7gqhc7ZSe7wHLmhsx79NZo/LPjxWxQ8c/P12dbHPxmQkIaPmQ
96kfoakR+ExAMzrHPSniATgipJrhdvX+HJXVvl7cPYwtLihM+CwzamMjUcaEszqG
EWFnaoVcIoX6KNvGIO8hZ9IoNwdgPkhaYMp9U1gIcmryHak+AAeLBNDVK4hMQEZQ
cPS95gCofaY2TzoQMpAy8qe600+oGZIsvWX9212w+NhqO5oYhtq2URrQkyeFobtw
hFe0/BjPlS4HEPGC8kM80TfWmc+oOL0sjLb5Uccb8WMoZ4/PGttBFSe5Kbdo/ivH
bRCXtSe3dwinKFcf97SLlWhUsIvPRq1zMLeTl475KiCBxnNZnE2Nt4hV1FBEaHla
fzd9z7OPmV2zCgcERX+834RTVtWlYQ0EwbAGlaCOcKqUXAQh9yg=
=jDpN
-----END PGP SIGNATURE-----

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:03260badad37d1d96c9bcac79ee48ab2ab00000aba78c3a4a4accd51c987e91b
size 172348568

View File

@ -1,16 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAl6MoJIACgkQ9DSh76/u
rqMKKA/9FHGaXiRnc8azGnAkNXBJPVFctd0/HD0mfAc8DEesznj7Zo4yzWCR4Luj
SKErnPq7Zqx6ijcYI1dLggppihWThQzs5CzOffQpFuWpT8dmHxPSV4quck+aGVE7
/9jlFzD1SX7UiyJu8fqelJtPbtZUiJT9gG7uo2MzGaOTYWQkxwYwGoO2xD5ivH9U
CGsnxJWX3YlMCI+0q6XHgJ/FVijdD6RIUhZHgmgbCglQ7o5f5MwEmew5dJcOY4Qv
80FMaUdMQOATOtbGbFP/etWVgPGAVFCUHnF31MT6ZF4BCgI09fy16PELNmQQWFUz
r2sDwFQez3whjjxE2JFqjSqsPOZ9YARz9+j2exTg6rDWrkQy9vXNGfoqba4Wh76Q
3xbwrosTXHM0JWoKlIbiwlbm1kg8wS5kg9FtX4P3pj67fGDGvvDBGJ6sQa6rEblz
2A5uKbx9XGjFQBpPdYbIBk7uFLYQSOpf9sP6spITATxIIUnp6z4iBTkSJOoeZHLL
Iy/hn4L6YGGsZHYZmIfcw9xYlU2eCaangFDzIlR0/DgU533X//wmLGD+Nu0FM0oe
1FM3cGmltVZJrK0C7124eJBxcaKRsJv6h5V+0NPc8+IkyMnwOZqMHnwPVRoE46m/
gyn2wQ7RRUkhAUsC52cUJ+3/6sfg3IYbuLWi1jfIMw/8ejrydqY=
=+KxM
-----END PGP SIGNATURE-----

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:49cd385aabe7f197447ac0645a8fcdba75b04642b38fac49342aace2055098bd
size 172568720

View File

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAl676YQACgkQ9DSh76/u
rqOzARAAp6IVNSlCoMHryOk9Zx6LsWhsYnAQdyi7ZwxNecHU/PkzuadIlFIfXxYi
omUTCf8elq+NSjpMnnois+FjBFZsdzMmYX8w5ktyWwO0Y6c5tzZbfX/gbz3QU0Hn
/eY3UR8323Pkrpgag5yK/v8F+Z74OFuQrJC368kwPX4sQHBSrhtqAQ5eu5Q7rJif
N7KREGDu22Tjy9/+8XzaP6kj71QYhYQKybrGOOdfjg15spdK4zUW7cgtXgVZ2pB5
rG0yK7/fTOaM7A0fQOVoV3Aj1EGbC7E6Jd+spYJBnjYVrDH9JwseIulrCBAguBGo
c60+vPyFj6yGFFUXqlcyEBPmJ4mmZDYdSYdyxjXQkbhduEE2okoXl2cCA9yWPL8r
8uGOU5Ze7LAQWV1xRO2oVu2UsceP/3OasbrnIy24A4LNzFG0JhJqavjQawRmWYey
iXqpz1Kjj5RaEUTFV8G8x3zVq8bi0s5d0QqDTgajsSmUjaWyhw02i9vyMGW6utW2
3jieB3Ndre2B6Xjg+n6MeIkrzl/c+PVRiQ/17zjMFSpNTksm0HNj78rkrI6F0vH6
OkLUlimeKgS4907wL0AVqws350PIsS6iXIYTCfYLh2ougKOgwIpSfmfW4a5lMuf1
O9nsAcZWousnZDjqOg7Yom51X86VkQdV0Vf69gtkFP1bfwDw5Ps=
=fuqE
-----END PGP SIGNATURE-----

View File

@ -1,3 +1,24 @@
-------------------------------------------------------------------
Mon Jun 1 18:25:46 UTC 2020 - Andras Timar <andras.timar@collabora.com>
- Fix bsc#1146025 - LO-L3: Colored textboxes in PPTX look very odd (SmartArt)
* bsc1146025.diff
-------------------------------------------------------------------
Tue May 26 11:25:10 UTC 2020 - Andras Timar <andras.timar@collabora.com>
- 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
-------------------------------------------------------------------
Thu May 21 09:12:27 UTC 2020 - Tomáš Chvátal <tchvatal@suse.com>
- Update to 6.4.4.2:
* 6.4.4 release
- Remove merged patch bsc1160687-1.diff
-------------------------------------------------------------------
Tue May 12 08:57:23 UTC 2020 - Andras Timar <andras.timar@collabora.com>
@ -20,8 +41,8 @@ Tue May 5 12:36:00 UTC 2020 - Andras Timar <andras.timar@collabora.com>
-------------------------------------------------------------------
Wed Apr 8 11:13:30 UTC 2020 - Tomáš Chvátal <tchvatal@suse.com>
- Update to 6.4.3.2:
* 6.4.2 RC2 release
- Update to 6.4.3.2 bsc#1171997 CVE-2020-12801:
* 6.4.3 RC2 release
- Drop merged patch adapt-o3tl-span-to-removal-of-std-span-cbegin-et-al.patch
-------------------------------------------------------------------

View File

@ -50,7 +50,7 @@
%bcond_with system_gpgme
%endif
Name: libreoffice
Version: 6.4.3.2
Version: 6.4.4.2
Release: 0
Summary: A Free Office Suite (Framework)
License: LGPL-3.0-or-later AND MPL-2.0+
@ -104,7 +104,6 @@ Patch8: replace-boost-bimap-in-sdext-pdfimport.patch
# Bug 1165870 - LO-L3: Image shadow that should be invisible shown as extraneous line below
Patch9: bsc1165870.diff
# Bug 1160687 - LO-L3: Elements on title page mixed up
Patch10: bsc1160687-1.diff
Patch11: bsc1160687-2.diff
Patch12: bsc1160687-3.diff
Patch13: bsc1160687-4.diff
@ -112,6 +111,12 @@ Patch14: bsc1160687-5.diff
Patch15: bsc1160687-6.diff
Patch16: bsc1160687-7.diff
Patch17: bsc1160687-8.diff
# Bug 1165849 - LO-L3: Shadow size for rectangle is only a fraction of Office 365
Patch18: bsc1165849-1.diff
Patch19: bsc1165849-2.diff
Patch20: bsc1165849-3.diff
# Bug 1146025 - LO-L3: Colored textboxes in PPTX look very odd (SmartArt)
Patch21: bsc1146025.diff
# try to save space by using hardlinks
Patch990: install-with-hardlinks.diff
# save time by relying on rpm check rather than doing stupid find+grep
@ -971,7 +976,6 @@ Provides %{langname} translations and additional resources (help files, etc.) fo
%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13 -p1
@ -979,6 +983,10 @@ Provides %{langname} translations and additional resources (help files, etc.) fo
%patch15 -p1
%patch16 -p1
%patch17 -p1
%patch18 -p1
%patch19 -p1
%patch20 -p1
%patch21 -p1
%patch990 -p1
%patch991 -p1