diff --git a/bsc1110348.patch b/bsc1110348.patch deleted file mode 100644 index f679997..0000000 --- a/bsc1110348.patch +++ /dev/null @@ -1,275 +0,0 @@ -From b77f4f69bb2f1d3ab740446799da2fd3db9094da Mon Sep 17 00:00:00 2001 -From: Balazs Varga -Date: Wed, 31 Oct 2018 08:43:47 +0100 -Subject: [PATCH] tdf#108104 OOXML Import: Fix Hatch fill in Charts - -Sets an explicit fill hatch, or creates a named fill hatch -and stored in a global container. With this patch the -SUPPORTED MS Office hatch styles by LibreOffice, or the custom -LibreOffice hatches will be appeared correctly instead of the -previous display as horizontal lines in LibreOffice. -(The background color of the hatch styles are not imported correcty, -but that is another BUG.) - -Change-Id: Ifda9dc805dd08f58db10b35f40d7f511a8614f77 -Reviewed-on: https://gerrit.libreoffice.org/62681 -Tested-by: Jenkins -Reviewed-by: Miklos Vajna -Reviewed-on: https://gerrit.libreoffice.org/62891 -Reviewed-by: Andras Timar ---- - -diff --git a/include/oox/drawingml/shapepropertymap.hxx b/include/oox/drawingml/shapepropertymap.hxx -index 2fb237c..dd2d0d4 100644 ---- a/include/oox/drawingml/shapepropertymap.hxx -+++ b/include/oox/drawingml/shapepropertymap.hxx -@@ -71,7 +71,7 @@ - FillBitmapOffsetX, - FillBitmapOffsetY, - FillBitmapRectanglePoint, -- FillHatch, -+ FillHatch, /// Explicit fill hatch or name of a fill hatch stored in a global container. - ShadowXDistance, - FillBitmapName, - FillBackground, -@@ -87,12 +87,13 @@ - bool mbNamedLineDash; /// True = use named line dash instead of explicit line dash. - bool mbNamedFillGradient; /// True = use named fill gradient instead of explicit fill gradient. - bool mbNamedFillBitmap; /// True = use named fill bitmap instead of explicit fill bitmap. -+ bool mbNamedFillHatch; /// True = use named fill hatch instead of explicit fill hatch. - - static ShapePropertyInfo DEFAULT; /// Default property info (used as default parameter of other methods). - - explicit ShapePropertyInfo(const ShapePropertyIds& rnPropertyIds, - bool bNamedLineMarker, bool bNamedLineDash, -- bool bNamedFillGradient, bool bNamedFillBitmap); -+ bool bNamedFillGradient, bool bNamedFillBitmap, bool bNamedFillHatch); - - bool has(ShapeProperty ePropId) const - { -@@ -147,6 +148,8 @@ - bool setFillBitmap( sal_Int32 nPropId, const css::uno::Any& rValue ); - /** Sets an explicit fill bitmap and pushes the name to FillBitmapName */ - bool setFillBitmapName( const css::uno::Any& rValue ); -+ /** Sets an explicit fill hatch, or creates a named fill hatch. */ -+ bool setFillHatch( sal_Int32 nPropId, const css::uno::Any& rValue ); - - // not implemented, to prevent implicit conversion from enum to int - css::uno::Any& operator[]( ShapeProperty ePropId ) = delete; -diff --git a/include/oox/helper/modelobjecthelper.hxx b/include/oox/helper/modelobjecthelper.hxx -index eb9c7ba..016b963 100644 ---- a/include/oox/helper/modelobjecthelper.hxx -+++ b/include/oox/helper/modelobjecthelper.hxx -@@ -32,6 +32,7 @@ - namespace graphic { class XGraphic; } - namespace container { class XNameContainer; } - namespace drawing { struct LineDash; } -+ namespace drawing { struct Hatch; } - namespace drawing { struct PolyPolygonBezierCoords; } - namespace lang { class XMultiServiceFactory; } - } } } -@@ -105,6 +106,8 @@ - - OUString insertTransGrandient( const css::awt::Gradient& rGradient ); - -+ OUString insertFillHatch( const css::drawing::Hatch& rHatch ); -+ - /** Inserts a new named fill graphic, returns the bitmap name, based on - an internal constant name with a new unused index appended. */ - OUString insertFillBitmapXGraphic(css::uno::Reference const & rxGraphic); -@@ -117,10 +120,12 @@ - ObjectContainer maGradientContainer; ///< Contains all named fill gradients. - ObjectContainer maTransGradContainer; ///< Contains all named transparency Gradients. - ObjectContainer maBitmapUrlContainer; ///< Contains all named fill bitmap URLs. -+ ObjectContainer maHatchContainer; ///< Contains all named fill hatches. - const OUString maDashNameBase; ///< Base name for all named line dashes. - const OUString maGradientNameBase; ///< Base name for all named fill gradients. - const OUString maTransGradNameBase; ///< Base name for all named fill gradients. - const OUString maBitmapUrlNameBase; ///< Base name for all named fill bitmap URLs. -+ const OUString maHatchNameBase; ///< Base name for all named fill hatch URLs. - }; - - -diff --git a/oox/source/drawingml/chart/objectformatter.cxx b/oox/source/drawingml/chart/objectformatter.cxx -index 5b5f67b..2eaad42 100644 ---- a/oox/source/drawingml/chart/objectformatter.cxx -+++ b/oox/source/drawingml/chart/objectformatter.cxx -@@ -449,7 +449,8 @@ - PROP_INVALID, PROP_INVALID, PROP_INVALID, PROP_INVALID, PROP_INVALID, PROP_INVALID, PROP_INVALID, - PROP_FillStyle, PROP_FillColor, PROP_FillTransparence, PROP_INVALID, PROP_FillGradientName, - PROP_FillBitmapName, PROP_FillBitmapMode, PROP_FillBitmapSizeX, PROP_FillBitmapSizeY, -- PROP_FillBitmapPositionOffsetX, PROP_FillBitmapPositionOffsetY, PROP_FillBitmapRectanglePoint -+ PROP_FillBitmapPositionOffsetX, PROP_FillBitmapPositionOffsetY, PROP_FillBitmapRectanglePoint, -+ PROP_FillHatchName - }; - - static const ShapePropertyIds spnLinearPropIds = -@@ -458,7 +459,8 @@ - PROP_INVALID, PROP_INVALID, PROP_INVALID, PROP_INVALID, PROP_INVALID, PROP_INVALID, PROP_INVALID, - PROP_INVALID, PROP_INVALID, PROP_INVALID, PROP_INVALID, PROP_INVALID, - PROP_INVALID, PROP_INVALID, PROP_INVALID, PROP_INVALID, -- PROP_INVALID, PROP_INVALID, PROP_INVALID -+ PROP_INVALID, PROP_INVALID, PROP_INVALID, -+ PROP_INVALID - }; - - static const ShapePropertyIds spnFilledPropIds = -@@ -487,15 +489,15 @@ - PROP_FillBitmapPositionOffsetX, - PROP_FillBitmapPositionOffsetY, - PROP_FillBitmapRectanglePoint, -- PROP_FillHatch -+ PROP_HatchName - }; - - /** Property info for common chart objects, to be used in ShapePropertyMap. */ --static const ShapePropertyInfo saCommonPropInfo( spnCommonPropIds, false, true, true, true ); -+static const ShapePropertyInfo saCommonPropInfo( spnCommonPropIds, false, true, true, true, true ); - /** Property info for linear data series, to be used in ShapePropertyMap. */ --static const ShapePropertyInfo saLinearPropInfo( spnLinearPropIds, false, true, true, true ); -+static const ShapePropertyInfo saLinearPropInfo( spnLinearPropIds, false, true, true, true, true ); - /** Property info for filled data series, to be used in ShapePropertyMap. */ --static const ShapePropertyInfo saFilledPropInfo( spnFilledPropIds, false, true, true, true ); -+static const ShapePropertyInfo saFilledPropInfo( spnFilledPropIds, false, true, true, true, true ); - - /** Contains information about formatting of a specific chart object type. */ - struct ObjectTypeFormatEntry -diff --git a/oox/source/drawingml/shapepropertymap.cxx b/oox/source/drawingml/shapepropertymap.cxx -index fcb1549..b072403 100644 ---- a/oox/source/drawingml/shapepropertymap.cxx -+++ b/oox/source/drawingml/shapepropertymap.cxx -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -53,15 +54,16 @@ - - } // namespace - --ShapePropertyInfo ShapePropertyInfo::DEFAULT( spnDefaultShapeIds, true, false, false, false ); -+ShapePropertyInfo ShapePropertyInfo::DEFAULT( spnDefaultShapeIds, true, false, false, false, false ); - - ShapePropertyInfo::ShapePropertyInfo( const ShapePropertyIds& rnPropertyIds, -- bool bNamedLineMarker, bool bNamedLineDash, bool bNamedFillGradient, bool bNamedFillBitmap ) : -+ bool bNamedLineMarker, bool bNamedLineDash, bool bNamedFillGradient, bool bNamedFillBitmap, bool bNamedFillHatch ) : - mrPropertyIds(rnPropertyIds), - mbNamedLineMarker( bNamedLineMarker ), - mbNamedLineDash( bNamedLineDash ), - mbNamedFillGradient( bNamedFillGradient ), -- mbNamedFillBitmap( bNamedFillBitmap ) -+ mbNamedFillBitmap( bNamedFillBitmap ), -+ mbNamedFillHatch( bNamedFillHatch ) - { - } - -@@ -108,6 +110,9 @@ - - case ShapeProperty::FillBitmapName: - return setFillBitmapName(rValue); -+ -+ case ShapeProperty::FillHatch: -+ return setFillHatch( nPropId, rValue ); - - default:; // suppress compiler warnings - } -@@ -168,6 +173,22 @@ - return false; - } - -+bool ShapePropertyMap::setFillHatch( sal_Int32 nPropId, const Any& rValue ) -+{ -+ // push hatch explicitly -+ if( !maShapePropInfo.mbNamedFillHatch ) -+ return setAnyProperty( nPropId, rValue ); -+ -+ // create named hatch and push its name -+ if( rValue.has< Hatch >() ) -+ { -+ OUString aHatchName = mrModelObjHelper.insertFillHatch( rValue.get< Hatch >() ); -+ return !aHatchName.isEmpty() && setProperty( nPropId, aHatchName ); -+ } -+ -+ return false; -+} -+ - bool ShapePropertyMap::setGradientTrans( sal_Int32 nPropId, const Any& rValue ) - { - // create named gradient and push its name -diff --git a/oox/source/helper/modelobjecthelper.cxx b/oox/source/helper/modelobjecthelper.cxx -index 4929dc2..02481e2 100644 ---- a/oox/source/helper/modelobjecthelper.cxx -+++ b/oox/source/helper/modelobjecthelper.cxx -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -92,12 +93,14 @@ - maMarkerContainer( rxModelFactory, "com.sun.star.drawing.MarkerTable" ), - maDashContainer( rxModelFactory, "com.sun.star.drawing.DashTable" ), - maGradientContainer( rxModelFactory, "com.sun.star.drawing.GradientTable" ), -- maTransGradContainer( rxModelFactory, "com.sun.star.drawing.TransparencyGradientTable" ), -+ maTransGradContainer( rxModelFactory, "com.sun.star.drawing.TransparencyGradientTable" ), - maBitmapUrlContainer( rxModelFactory, "com.sun.star.drawing.BitmapTable" ), -+ maHatchContainer( rxModelFactory, "com.sun.star.drawing.HatchTable" ), - maDashNameBase( "msLineDash " ), - maGradientNameBase( "msFillGradient " ), - maTransGradNameBase( "msTransGradient " ), -- maBitmapUrlNameBase( "msFillBitmap " ) -+ maBitmapUrlNameBase( "msFillBitmap " ), -+ maHatchNameBase( "msFillHatch " ) - { - } - -@@ -137,6 +140,11 @@ - return OUString(); - } - -+OUString ModelObjectHelper::insertFillHatch( const Hatch& rHatch ) -+{ -+ return maHatchContainer.insertObject( maHatchNameBase, Any( rHatch ), true ); -+} -+ - uno::Reference ModelObjectHelper::getFillBitmap(OUString const & rGraphicName) - { - uno::Reference xBitmap; -diff --git a/oox/source/ppt/slidepersist.cxx b/oox/source/ppt/slidepersist.cxx -index 8d6abaa..2704a24 100644 ---- a/oox/source/ppt/slidepersist.cxx -+++ b/oox/source/ppt/slidepersist.cxx -@@ -171,7 +171,7 @@ - - oox::drawingml::ShapePropertyIds aPropertyIds = oox::drawingml::ShapePropertyInfo::DEFAULT.mrPropertyIds; - aPropertyIds[oox::drawingml::ShapeProperty::FillGradient] = PROP_FillGradientName; -- oox::drawingml::ShapePropertyInfo aPropInfo( aPropertyIds, true, false, true, false ); -+ oox::drawingml::ShapePropertyInfo aPropInfo( aPropertyIds, true, false, true, false, false ); - oox::drawingml::ShapePropertyMap aPropMap( rFilterBase.getModelObjectHelper(), aPropInfo ); - mpBackgroundPropertiesPtr->pushToPropMap( aPropMap, rFilterBase.getGraphicHelper(), 0, nPhClr ); - PropertySet( mxPage ).setProperty( PROP_Background, aPropMap.makePropertySet() ); -diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt -index 86dd843..1b06aa7 100644 ---- a/oox/source/token/properties.txt -+++ b/oox/source/token/properties.txt -@@ -171,6 +171,7 @@ - FillGradient - FillGradientName - FillHatch -+FillHatchName - FillStyle - FillTransparence - FillTransparenceGradient -@@ -202,6 +203,7 @@ - GenerateVbaEvents - Geometry3D - GradientName -+HatchName - Graphic - GraphicBitmap - GraphicColorMode diff --git a/bsc1112112.patch b/bsc1112112.patch deleted file mode 100644 index ab42331..0000000 --- a/bsc1112112.patch +++ /dev/null @@ -1,669 +0,0 @@ -diff --git a/oox/inc/drawingml/diagram/diagram.hxx b/oox/inc/drawingml/diagram/diagram.hxx -index 5277d98d2dee..a528668c08b4 100644 ---- a/oox/inc/drawingml/diagram/diagram.hxx -+++ b/oox/inc/drawingml/diagram/diagram.hxx -@@ -39,7 +39,8 @@ void loadDiagram( ShapePtr const & pShape, - const OUString& rDataModelPath, - const OUString& rLayoutPath, - const OUString& rQStylePath, -- const OUString& rColorStylePath ); -+ const OUString& rColorStylePath, -+ const oox::core::Relations& rRelations ); - - void loadDiagram( const ShapePtr& pShape, - core::XmlFilterBase& rFilter, -diff --git a/oox/source/drawingml/diagram/constraintlistcontext.cxx b/oox/source/drawingml/diagram/constraintlistcontext.cxx -index 99e3f3d10e72..cc71c89b226a 100644 ---- a/oox/source/drawingml/diagram/constraintlistcontext.cxx -+++ b/oox/source/drawingml/diagram/constraintlistcontext.cxx -@@ -50,7 +50,7 @@ ConstraintListContext::onCreateContext( ::sal_Int32 aElement, - case DGM_TOKEN( constr ): - { - std::shared_ptr< ConstraintAtom > pNode( new ConstraintAtom(mpNode->getLayoutNode()) ); -- mpNode->addChild( pNode ); -+ LayoutAtom::connect(mpNode, pNode); - - Constraint& rConstraint = pNode->getConstraint(); - rConstraint.mnFor = rAttribs.getToken( XML_for, XML_none ); -diff --git a/oox/source/drawingml/diagram/diagram.cxx b/oox/source/drawingml/diagram/diagram.cxx -index e7a2df78bd5e..4664a55e594c 100644 ---- a/oox/source/drawingml/diagram/diagram.cxx -+++ b/oox/source/drawingml/diagram/diagram.cxx -@@ -30,6 +30,7 @@ - #include - #include - #include -+#include - - #include "diagramlayoutatoms.hxx" - #include "layoutatomvisitors.hxx" -@@ -375,12 +376,57 @@ void importFragment( core::XmlFilterBase& rFilter, - rFilter.importFragment( rxHandler, xSerializer ); - } - -+namespace -+{ -+/** -+ * A fragment handler that just counts the number of elements in a -+ * fragment. -+ */ -+class DiagramShapeCounter : public oox::core::FragmentHandler2 -+{ -+public: -+ DiagramShapeCounter(oox::core::XmlFilterBase& rFilter, const OUString& rFragmentPath, -+ sal_Int32& nCounter); -+ oox::core::ContextHandlerRef onCreateContext(sal_Int32 nElement, -+ const AttributeList& rAttribs) override; -+ -+private: -+ sal_Int32& m_nCounter; -+}; -+ -+DiagramShapeCounter::DiagramShapeCounter(oox::core::XmlFilterBase& rFilter, -+ const OUString& rFragmentPath, sal_Int32& nCounter) -+ : FragmentHandler2(rFilter, rFragmentPath) -+ , m_nCounter(nCounter) -+{ -+} -+ -+oox::core::ContextHandlerRef DiagramShapeCounter::onCreateContext(sal_Int32 nElement, -+ const AttributeList& /*rAttribs*/) -+{ -+ switch (nElement) -+ { -+ case DSP_TOKEN(drawing): -+ case DSP_TOKEN(spTree): -+ return this; -+ case DSP_TOKEN(sp): -+ ++m_nCounter; -+ break; -+ default: -+ break; -+ } -+ -+ return nullptr; -+} -+} -+ - void loadDiagram( ShapePtr const & pShape, - core::XmlFilterBase& rFilter, - const OUString& rDataModelPath, - const OUString& rLayoutPath, - const OUString& rQStylePath, -- const OUString& rColorStylePath ) -+ const OUString& rColorStylePath, -+ const oox::core::Relations& rRelations ) - { - DiagramPtr pDiagram( new Diagram ); - -@@ -407,11 +453,26 @@ void loadDiagram( ShapePtr const & pShape, - - // Pass the info to pShape - for (auto const& extDrawing : pData->getExtDrawings()) -- pShape->addExtDrawingRelId(extDrawing); -+ { -+ OUString aFragmentPath = rRelations.getFragmentPathFromRelId(extDrawing); -+ // Ignore RelIds which don't resolve to a fragment path. -+ if (aFragmentPath.isEmpty()) -+ continue; -+ -+ sal_Int32 nCounter = 0; -+ rtl::Reference xCounter( -+ new DiagramShapeCounter(rFilter, aFragmentPath, nCounter)); -+ rFilter.importFragment(xCounter); -+ // Ignore ext drawings which don't actually have any shapes. -+ if (nCounter == 0) -+ continue; -+ -+ pShape->addExtDrawingRelId(extDrawing); -+ } - } - - // extLst is present, lets bet on that and ignore the rest of the data from here -- if( pData->getExtDrawings().empty() ) -+ if( pShape->getExtDrawings().empty() ) - { - // layout - if( !rLayoutPath.isEmpty() ) -diff --git a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx -index 3c8993bd687d..c1aaf6e07025 100644 ---- a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx -+++ b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx -@@ -35,6 +35,27 @@ using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::xml::sax; - using namespace ::oox::core; - -+namespace -+{ -+/// Looks up the value of the rInternalName -> nProperty key in rProperties. -+oox::OptValue findProperty(const oox::drawingml::LayoutPropertyMap& rProperties, -+ const OUString& rInternalName, sal_Int32 nProperty) -+{ -+ oox::OptValue oRet; -+ -+ auto it = rProperties.find(rInternalName); -+ if (it != rProperties.end()) -+ { -+ const oox::drawingml::LayoutProperty& rProperty = it->second; -+ auto itProperty = rProperty.find(nProperty); -+ if (itProperty != rProperty.end()) -+ oRet = itProperty->second; -+ } -+ -+ return oRet; -+} -+} -+ - namespace oox { namespace drawingml { - - IteratorAttr::IteratorAttr( ) -@@ -145,6 +166,36 @@ const dgm::Point* ConditionAtom::getPresNode() const - return nullptr; - } - -+namespace -+{ -+/** -+ * Takes the connection list from rLayoutNode, navigates from rFrom on an edge -+ * of type nType, using a direction determined by bSourceToDestination. -+ */ -+OUString navigate(const LayoutNode& rLayoutNode, sal_Int32 nType, const OUString& rFrom, -+ bool bSourceToDestination) -+{ -+ for (const auto& rConnection : rLayoutNode.getDiagram().getData()->getConnections()) -+ { -+ if (rConnection.mnType != nType) -+ continue; -+ -+ if (bSourceToDestination) -+ { -+ if (rConnection.msSourceId == rFrom) -+ return rConnection.msDestId; -+ } -+ else -+ { -+ if (rConnection.msDestId == rFrom) -+ return rConnection.msSourceId; -+ } -+ } -+ -+ return OUString(); -+} -+} -+ - sal_Int32 ConditionAtom::getNodeCount() const - { - sal_Int32 nCount = 0; -@@ -153,9 +204,21 @@ sal_Int32 ConditionAtom::getNodeCount() const - { - OUString sNodeId = ""; - -- for (const auto& aCxn : mrLayoutNode.getDiagram().getData()->getConnections()) -- if (aCxn.mnType == XML_presOf && aCxn.msDestId == pPoint->msModelId) -- sNodeId = aCxn.msSourceId; -+ sNodeId -+ = navigate(mrLayoutNode, XML_presOf, pPoint->msModelId, /*bSourceToDestination*/ false); -+ -+ if (sNodeId.isEmpty()) -+ { -+ // The current layout node is not a presentation of anything. Look -+ // up the first presentation child of the layout node. -+ OUString sFirstPresChildId = navigate(mrLayoutNode, XML_presParOf, pPoint->msModelId, -+ /*bSourceToDestination*/ true); -+ if (!sFirstPresChildId.isEmpty()) -+ // It has a presentation child: is that a presentation of a -+ // model node? -+ sNodeId = navigate(mrLayoutNode, XML_presOf, sFirstPresChildId, -+ /*bSourceToDestination*/ false); -+ } - - if (!sNodeId.isEmpty()) - { -@@ -224,8 +287,22 @@ void AlgAtom::accept( LayoutAtomVisitor& rVisitor ) - } - - void AlgAtom::layoutShape( const ShapePtr& rShape, -- const std::vector& rConstraints ) const -+ const std::vector& rOwnConstraints ) const - { -+ // Algorithm result may depend on the parent constraints as well. -+ std::vector aParentConstraints; -+ const LayoutNode* pParent = getLayoutNode().getParentLayoutNode(); -+ if (pParent) -+ { -+ for (const auto& pChild : pParent->getChildren()) -+ { -+ auto pConstraintAtom = dynamic_cast(pChild.get()); -+ if (pConstraintAtom) -+ pConstraintAtom->parseConstraint(aParentConstraints); -+ } -+ } -+ const std::vector& rConstraints = rOwnConstraints.empty() ? aParentConstraints : rOwnConstraints; -+ - switch(mnType) - { - case XML_composite: -@@ -356,9 +433,9 @@ void AlgAtom::layoutShape( const ShapePtr& rShape, - double fSpace = 0.3; - - awt::Size aChildSize = rShape->getSize(); -- if (nIncX) -+ if (nDir == XML_fromL || nDir == XML_fromR) - aChildSize.Width /= (nCount + (nCount-1)*fSpace); -- if (nIncY) -+ else if (nDir == XML_fromT || nDir == XML_fromB) - aChildSize.Height /= (nCount + (nCount-1)*fSpace); - - awt::Point aCurrPos(0, 0); -@@ -367,12 +444,64 @@ void AlgAtom::layoutShape( const ShapePtr& rShape, - if (nIncY == -1) - aCurrPos.Y = rShape->getSize().Height - aChildSize.Height; - -+ // Find out which contraint is relevant for which (internal) name. -+ LayoutPropertyMap aProperties; -+ for (const auto& rConstraint : rConstraints) -+ { -+ if (rConstraint.msForName.isEmpty()) -+ continue; -+ -+ LayoutProperty& rProperty = aProperties[rConstraint.msForName]; -+ if (rConstraint.mnType == XML_w) -+ rProperty[XML_w] = rShape->getSize().Width * rConstraint.mfFactor; -+ } -+ -+ // See if children requested more than 100% space in total: scale -+ // down in that case. -+ sal_Int32 nTotalWidth = 0; -+ bool bSpaceFromConstraints = false; - for (auto & aCurrShape : rShape->getChildren()) - { -+ oox::OptValue oWidth -+ = findProperty(aProperties, aCurrShape->getInternalName(), XML_w); -+ -+ awt::Size aSize = aChildSize; -+ if (oWidth.has()) -+ { -+ aSize.Width = oWidth.get(); -+ bSpaceFromConstraints = true; -+ } -+ if (nDir == XML_fromL || nDir == XML_fromR) -+ nTotalWidth += aSize.Width; -+ } -+ -+ double fWidthScale = 1.0; -+ if (nTotalWidth > rShape->getSize().Width && nTotalWidth) -+ { -+ fWidthScale = rShape->getSize().Width; -+ fWidthScale /= nTotalWidth; -+ } -+ -+ // Don't add automatic space if we take space from constraints. -+ if (bSpaceFromConstraints) -+ fSpace = 0; -+ -+ for (auto& aCurrShape : rShape->getChildren()) -+ { -+ // Extract properties relevant for this shape from constraints. -+ oox::OptValue oWidth -+ = findProperty(aProperties, aCurrShape->getInternalName(), XML_w); -+ - aCurrShape->setPosition(aCurrPos); -- aCurrShape->setSize(aChildSize); -+ -+ awt::Size aSize = aChildSize; -+ if (oWidth.has()) -+ aSize.Width = oWidth.get(); -+ aSize.Width *= fWidthScale; -+ aCurrShape->setSize(aSize); -+ - aCurrShape->setChildSize(aChildSize); -- aCurrPos.X += nIncX * (aChildSize.Width + fSpace*aChildSize.Width); -+ aCurrPos.X += nIncX * (aSize.Width + fSpace*aSize.Width); - aCurrPos.Y += nIncY * (aChildSize.Height + fSpace*aChildSize.Height); - } - break; -@@ -402,18 +531,19 @@ void AlgAtom::layoutShape( const ShapePtr& rShape, - // TODO: get values from constraints - sal_Int32 nCount = rShape->getChildren().size(); - double fSpace = 0.3; -- double fAspectRatio = 0.6; -+ double fAspectRatio = 0.54; // diagram should not spill outside, earlier it was 0.6 - - sal_Int32 nCol = 1; - sal_Int32 nRow = 1; -- for ( ; nColgetSize().Height; - const double fShapeWidth = rShape->getSize().Width; -- if ((fShapeHeight / nRow) / (fShapeWidth / nCol) >= fAspectRatio) -+ if ((fShapeHeight / nCol) / (fShapeWidth / nRow) >= fAspectRatio) - break; - } -+ - SAL_INFO("oox.drawingml", "Snake layout grid: " << nCol << "x" << nRow); - - sal_Int32 nWidth = rShape->getSize().Width / (nCol + (nCol-1)*fSpace); -@@ -426,20 +556,89 @@ void AlgAtom::layoutShape( const ShapePtr& rShape, - aCurrPos.Y = rShape->getSize().Height - aChildSize.Height; - - sal_Int32 nStartX = aCurrPos.X; -- sal_Int32 nColIdx = 0; -+ sal_Int32 nColIdx = 0,index = 0; - -- for (auto & aCurrShape : rShape->getChildren()) -+ sal_Int32 num = rShape->getChildren().size(); -+ -+ const sal_Int32 aContDir = maMap.count(XML_contDir) ? maMap.find(XML_contDir)->second : XML_sameDir; -+ -+ switch(aContDir) - { -- aCurrShape->setPosition(aCurrPos); -- aCurrShape->setSize(aChildSize); -- aCurrShape->setChildSize(aChildSize); -- aCurrPos.X += nIncX * (aChildSize.Width + fSpace*aChildSize.Width); -- if (++nColIdx == nCol) -+ case XML_sameDir: -+ for (auto & aCurrShape : rShape->getChildren()) - { -- aCurrPos.X = nStartX; -- aCurrPos.Y += nIncY * (aChildSize.Height + fSpace*aChildSize.Height); -- nColIdx = 0; -+ aCurrShape->setPosition(aCurrPos); -+ aCurrShape->setSize(aChildSize); -+ aCurrShape->setChildSize(aChildSize); -+ -+ index++; // counts index of child, helpful for positioning. -+ -+ if(index%nCol==0 || ((index/nCol)+1)!=nRow) -+ aCurrPos.X += nIncX * (aChildSize.Width + fSpace*aChildSize.Width); -+ -+ if(++nColIdx == nCol) // condition for next row -+ { -+ // if last row, then position children according to number of shapes. -+ if((index+1)%nCol!=0 && (index+1)>=3 && ((index+1)/nCol+1)==nRow && num!=nRow*nCol) -+ // position first child of last row -+ aCurrPos.X = nStartX + (nIncX * (aChildSize.Width + fSpace*aChildSize.Width))/2; -+ else -+ // if not last row, positions first child of that row -+ aCurrPos.X = nStartX; -+ aCurrPos.Y += nIncY * (aChildSize.Height + fSpace*aChildSize.Height); -+ nColIdx = 0; -+ } -+ -+ // positions children in the last row. -+ if(index%nCol!=0 && index>=3 && ((index/nCol)+1)==nRow) -+ aCurrPos.X += (nIncX * (aChildSize.Width + fSpace*aChildSize.Width)); - } -+ break; -+ case XML_revDir: -+ for (auto & aCurrShape : rShape->getChildren()) -+ { -+ aCurrShape->setPosition(aCurrPos); -+ aCurrShape->setSize(aChildSize); -+ aCurrShape->setChildSize(aChildSize); -+ -+ index++; // counts index of child, helpful for positioning. -+ -+ /* -+ index%col -> tests node is at last column -+ ((index/nCol)+1)!=nRow) -> tests node is at last row or not -+ ((index/nCol)+1)%2!=0 -> tests node is at row which is multiple of 2, important for revDir -+ num!=nRow*nCol -> tests how last row nodes should be spread. -+ */ -+ -+ if((index%nCol==0 || ((index/nCol)+1)!=nRow) && ((index/nCol)+1)%2!=0) -+ aCurrPos.X += (aChildSize.Width + fSpace*aChildSize.Width); -+ else if( index%nCol!=0 && ((index/nCol)+1)!=nRow) // child other than placed at last column -+ aCurrPos.X -= (aChildSize.Width + fSpace*aChildSize.Width); -+ -+ if(++nColIdx == nCol) // condition for next row -+ { -+ // if last row, then position children according to number of shapes. -+ if((index+1)%nCol!=0 && (index+1)>=4 && ((index+1)/nCol+1)==nRow && num!=nRow*nCol && ((index/nCol)+1)%2==0) -+ // position first child of last row -+ aCurrPos.X -= aChildSize.Width*3/2; -+ else if((index+1)%nCol!=0 && (index+1)>=4 && ((index+1)/nCol+1)==nRow && num!=nRow*nCol && ((index/nCol)+1)%2!=0) -+ aCurrPos.X = nStartX + (nIncX * (aChildSize.Width + fSpace*aChildSize.Width))/2; -+ else if(((index/nCol)+1)%2!=0) -+ aCurrPos.X = nStartX; -+ -+ aCurrPos.Y += nIncY * (aChildSize.Height + fSpace*aChildSize.Height); -+ nColIdx = 0; -+ } -+ -+ // positions children in the last row. -+ if(index%nCol!=0 && index>=3 && ((index/nCol)+1)==nRow && ((index/nCol)+1)%2==0) -+ //if row%2=0 then start from left else -+ aCurrPos.X -= (nIncX * (aChildSize.Width + fSpace*aChildSize.Width)); -+ else if(index%nCol!=0 && index>=3 && ((index/nCol)+1)==nRow && ((index/nCol)+1)%2!=0) -+ // start from right -+ aCurrPos.X += (nIncX * (aChildSize.Width + fSpace*aChildSize.Width)); -+ } -+ break; - } - break; - } -@@ -456,7 +655,6 @@ void AlgAtom::layoutShape( const ShapePtr& rShape, - { - // adjust text alignment - // TODO: adjust text size to fit shape -- - TextBodyPtr pTextBody = rShape->getTextBody(); - if (!pTextBody || - pTextBody->getParagraphs().empty() || -@@ -465,12 +663,44 @@ void AlgAtom::layoutShape( const ShapePtr& rShape, - break; - } - -- if (rShape->getRotation()) -- pTextBody->getTextProperties().moRotation = -rShape->getRotation(); -+ const sal_Int32 nautoTxRot = maMap.count(XML_autoTxRot) ? maMap.find(XML_autoTxRot)->second : XML_upr; -+ -+ switch(nautoTxRot) -+ { -+ case XML_upr: -+ { -+ if (rShape->getRotation()) -+ pTextBody->getTextProperties().moRotation = -F_PI180*90*rShape->getRotation(); -+ } -+ break; -+ case XML_grav: -+ { -+ if (rShape->getRotation()==90*F_PI180 || rShape->getRotation()==180*F_PI180) -+ pTextBody->getTextProperties().moRotation = 180*F_PI180; -+ } -+ break; -+ case XML_none: -+ break; -+ } -+ -+ const sal_Int32 atxAnchorVert = maMap.count(XML_txAnchorVert) ? maMap.find(XML_txAnchorVert)->second : XML_mid; -+ -+ switch(atxAnchorVert) -+ { -+ case XML_t: -+ pTextBody->getTextProperties().meVA = css::drawing::TextVerticalAdjust_TOP; -+ break; -+ case XML_b: -+ pTextBody->getTextProperties().meVA = css::drawing::TextVerticalAdjust_BOTTOM; -+ break; -+ case XML_mid: -+ // text centered vertically by default -+ default: -+ pTextBody->getTextProperties().meVA = css::drawing::TextVerticalAdjust_CENTER; -+ break; -+ } - -- // text centered vertically by default -- pTextBody->getTextProperties().meVA = css::drawing::TextVerticalAdjust_CENTER; -- pTextBody->getTextProperties().maPropertyMap.setProperty(PROP_TextVerticalAdjust, css::drawing::TextVerticalAdjust_CENTER); -+ pTextBody->getTextProperties().maPropertyMap.setProperty(PROP_TextVerticalAdjust, pTextBody->getTextProperties().meVA); - - // normalize list level - sal_Int32 nBaseLevel = pTextBody->getParagraphs().front()->getProperties().getLevel(); -@@ -653,6 +883,18 @@ bool LayoutNode::setupShape( const ShapePtr& rShape, const dgm::Point* pPresNode - return true; - } - -+const LayoutNode* LayoutNode::getParentLayoutNode() const -+{ -+ for (LayoutAtomPtr pAtom = getParent(); pAtom; pAtom = pAtom->getParent()) -+ { -+ auto pLayoutNode = dynamic_cast(pAtom.get()); -+ if (pLayoutNode) -+ return pLayoutNode; -+ } -+ -+ return nullptr; -+} -+ - void ShapeAtom::accept( LayoutAtomVisitor& rVisitor ) - { - rVisitor.visit(*this); -diff --git a/oox/source/drawingml/diagram/diagramlayoutatoms.hxx b/oox/source/drawingml/diagram/diagramlayoutatoms.hxx -index 5ab34b042c86..3d4d9c05aae2 100644 ---- a/oox/source/drawingml/diagram/diagramlayoutatoms.hxx -+++ b/oox/source/drawingml/diagram/diagramlayoutatoms.hxx -@@ -106,17 +106,30 @@ public: - const OUString& getName() const - { return msName; } - -+private: - void addChild( const LayoutAtomPtr & pNode ) - { mpChildNodes.push_back( pNode ); } -+ void setParent(const LayoutAtomPtr& pParent) { mpParent = pParent; } -+ -+public: - virtual const std::vector& getChildren() const - { return mpChildNodes; } - -+ LayoutAtomPtr getParent() const { return mpParent.lock(); } -+ -+ static void connect(const LayoutAtomPtr& pParent, const LayoutAtomPtr& pChild) -+ { -+ pParent->addChild(pChild); -+ pChild->setParent(pParent); -+ } -+ - // dump for debug - void dump(int level = 0); - - protected: - const LayoutNode& mrLayoutNode; - std::vector< LayoutAtomPtr > mpChildNodes; -+ std::weak_ptr mpParent; - OUString msName; - }; - -@@ -238,6 +251,8 @@ public: - bool setupShape( const ShapePtr& rShape, - const dgm::Point* pPresNode ) const; - -+ const LayoutNode* getParentLayoutNode() const; -+ - private: - const Diagram& mrDgm; - VarMap mVariables; -diff --git a/oox/source/drawingml/diagram/layoutnodecontext.cxx b/oox/source/drawingml/diagram/layoutnodecontext.cxx -index 9bbe8b31421c..257f490f7c7c 100644 ---- a/oox/source/drawingml/diagram/layoutnodecontext.cxx -+++ b/oox/source/drawingml/diagram/layoutnodecontext.cxx -@@ -105,14 +105,14 @@ public: - { - // CT_When - ConditionAtomPtr pNode( new ConditionAtom(mpNode->getLayoutNode(), false, rAttribs.getFastAttributeList()) ); -- mpNode->addChild( pNode ); -+ LayoutAtom::connect(mpNode, pNode); - return new IfContext( *this, rAttribs, pNode ); - } - case DGM_TOKEN( else ): - { - // CT_Otherwise - ConditionAtomPtr pNode( new ConditionAtom(mpNode->getLayoutNode(), true, rAttribs.getFastAttributeList()) ); -- mpNode->addChild( pNode ); -+ LayoutAtom::connect(mpNode, pNode); - return new IfContext( *this, rAttribs, pNode ); - } - default: -@@ -182,7 +182,7 @@ LayoutNodeContext::onCreateContext( ::sal_Int32 aElement, - case DGM_TOKEN( layoutNode ): - { - LayoutNodePtr pNode( new LayoutNode(mpNode->getLayoutNode().getDiagram()) ); -- mpNode->addChild( pNode ); -+ LayoutAtom::connect(mpNode, pNode); - pNode->setChildOrder( rAttribs.getToken( XML_chOrder, XML_b ) ); - pNode->setMoveWith( rAttribs.getString( XML_moveWith ).get() ); - pNode->setStyleLabel( rAttribs.getString( XML_styleLbl ).get() ); -@@ -210,7 +210,7 @@ LayoutNodeContext::onCreateContext( ::sal_Int32 aElement, - pShape->setDiagramRotation(rAttribs.getInteger(XML_rot, 0) * PER_DEGREE); - - ShapeAtomPtr pAtom( new ShapeAtom(mpNode->getLayoutNode(), pShape) ); -- mpNode->addChild( pAtom ); -+ LayoutAtom::connect(mpNode, pAtom); - return new ShapeContext( *this, ShapePtr(), pShape ); - } - case DGM_TOKEN( extLst ): -@@ -219,21 +219,21 @@ LayoutNodeContext::onCreateContext( ::sal_Int32 aElement, - { - // CT_Algorithm - AlgAtomPtr pAtom( new AlgAtom(mpNode->getLayoutNode()) ); -- mpNode->addChild( pAtom ); -+ LayoutAtom::connect(mpNode, pAtom); - return new AlgorithmContext( *this, rAttribs, pAtom ); - } - case DGM_TOKEN( choose ): - { - // CT_Choose - LayoutAtomPtr pAtom( new ChooseAtom(mpNode->getLayoutNode()) ); -- mpNode->addChild( pAtom ); -+ LayoutAtom::connect(mpNode, pAtom); - return new ChooseContext( *this, rAttribs, pAtom ); - } - case DGM_TOKEN( forEach ): - { - // CT_ForEach - ForEachAtomPtr pAtom( new ForEachAtom(mpNode->getLayoutNode(), rAttribs.getFastAttributeList()) ); -- mpNode->addChild( pAtom ); -+ LayoutAtom::connect(mpNode, pAtom); - return new ForEachContext( *this, rAttribs, pAtom ); - } - case DGM_TOKEN( constrLst ): -diff --git a/oox/source/drawingml/graphicshapecontext.cxx b/oox/source/drawingml/graphicshapecontext.cxx -index f8cfc0d40b0a..135966eee9b9 100644 ---- a/oox/source/drawingml/graphicshapecontext.cxx -+++ b/oox/source/drawingml/graphicshapecontext.cxx -@@ -262,7 +262,8 @@ ContextHandlerRef DiagramGraphicDataContext::onCreateContext( ::sal_Int32 aEleme - getFragmentPathFromRelId( msDm ), - getFragmentPathFromRelId( msLo ), - getFragmentPathFromRelId( msQs ), -- getFragmentPathFromRelId( msCs )); -+ getFragmentPathFromRelId( msCs ), -+ getRelations()); - SAL_INFO("oox.drawingml", "DiagramGraphicDataContext::onCreateContext: added shape " << mpShapePtr->getName() - << " of type " << mpShapePtr->getServiceName() - << ", position: " << mpShapePtr->getPosition().X -diff --git a/oox/source/ppt/dgmimport.cxx b/oox/source/ppt/dgmimport.cxx -index c10dc48a72ef..191ec1771028 100644 ---- a/oox/source/ppt/dgmimport.cxx -+++ b/oox/source/ppt/dgmimport.cxx -@@ -68,6 +68,7 @@ bool QuickDiagrammingImport::importDocument() - - Reference xParentShape(getParentShape(), - UNO_QUERY_THROW); -+ oox::core::Relations aRelations(""); - oox::drawingml::ShapePtr pShape( - new oox::drawingml::Shape( "com.sun.star.drawing.DiagramShape" ) ); - drawingml::loadDiagram(pShape, -@@ -75,7 +76,8 @@ bool QuickDiagrammingImport::importDocument() - "", - aFragmentPath, - "", -- ""); -+ "", -+ aRelations); - oox::drawingml::ThemePtr pTheme( - new oox::drawingml::Theme()); - basegfx::B2DHomMatrix aMatrix; diff --git a/bsc1112113.patch b/bsc1112113.patch new file mode 100644 index 0000000..d899c48 --- /dev/null +++ b/bsc1112113.patch @@ -0,0 +1,528 @@ +From 73cc724dc35551ea349b3da0c4ecd6cba2fdd0ae Mon Sep 17 00:00:00 2001 +From: Miklos Vajna +Date: Tue, 13 Nov 2018 18:00:50 +0100 +Subject: [PATCH] Related: tdf#117761 oox smartart: backport fixes related to process types + +This is a combination of 9 commits. + +This is the 1st commit: + +oox smartart, accent process: add support for reading values from constraints + +(cherry picked from commit b389aafee9cfba9dc4dfa552347be39ff9fe41b2) + +This is the commit #2: + +oox smartart, accent process: add support for zorder offsets + +(cherry picked from commit cd348a6244a092c251a8e1362cd78de562d7bef6) + +This is the commit #3: + +oox smartart, accent process: fix overlapping shape pairs + +(cherry picked from commit 67e062aa5e5946d4985921fe2b6f87766f363ddc) + +This is the commit #4: + +oox smartart, accent process: handle multiple runs from a data point + +(cherry picked from commit cfa76f538a44d4396574ece59e8a3953c22c6eb7) + +This is the commit #5: + +oox smartart, accent process: handle followSib axis of forEach + +(cherry picked from commit aedc5427e4b6645ff3257e523c33190cf5e1934d) + +This is the commit #6: + +oox smartart, accent process: handle connector shape between pairs + +(cherry picked from commit 7f66a340933339974b5c6d70af4ae3c17e4f001a) + +This is the commit #7: + +oox smartart, accent process: adjust size of connector from constraints + +(cherry picked from commit ddc2786831367577967e806d603f337a2e42806a) + +This is the commit #8: + +oox smartart, continuous block process: read space width from constraint + +(cherry picked from commit ee6787fc5597b7f730c4ee3a1f2a1b261d0a5644) + +Conflicts: + oox/source/drawingml/diagram/diagramlayoutatoms.cxx + +This is the commit #9: + +oox smartart, accent process: fix missing bullets and large para indent + +(cherry picked from commit 6277a767f33bb5327408dafff2fed199087e938d) + +Change-Id: I60bbee75f3e834551ebb1963a2f42101f3bd91d4 +Reviewed-on: https://gerrit.libreoffice.org/65352 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +--- + +diff --git a/include/oox/drawingml/shape.hxx b/include/oox/drawingml/shape.hxx +index 6028a11..e04a58beb 100644 +--- a/include/oox/drawingml/shape.hxx ++++ b/include/oox/drawingml/shape.hxx +@@ -214,6 +214,14 @@ + const LinkedTxbxAttr& getLinkedTxbxAttributes() { return maLinkedTxbxAttr; }; + bool isLinkedTxbx() { return mbHasLinkedTxbx; }; + ++ void setZOrder(sal_Int32 nZOrder) { mnZOrder = nZOrder; } ++ ++ sal_Int32 getZOrder() const { return mnZOrder; } ++ ++ void setZOrderOff(sal_Int32 nZOrderOff) { mnZOrderOff = nZOrderOff; } ++ ++ sal_Int32 getZOrderOff() const { return mnZOrderOff; } ++ + protected: + + css::uno::Reference< css::drawing::XShape > const & +@@ -327,6 +335,12 @@ + bool mbHasLinkedTxbx; // this text box has linked text box ? + + css::uno::Sequence maDiagramDoms; ++ ++ /// Z-Order. ++ sal_Int32 mnZOrder = 0; ++ ++ /// Z-Order offset. ++ sal_Int32 mnZOrderOff = 0; + }; + + } } +diff --git a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx +index c1aaf6e..5024709 100644 +--- a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx ++++ b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx +@@ -54,6 +54,50 @@ + + return oRet; + } ++ ++/** ++ * Determines if nUnit is a font unit (measured in points) or not (measured in ++ * millimeters). ++ */ ++bool isFontUnit(sal_Int32 nUnit) ++{ ++ return nUnit == oox::XML_primFontSz || nUnit == oox::XML_secFontSz; ++} ++ ++/// Determines the connector shape type from a linear alg. ++sal_Int32 getConnectorType(const oox::drawingml::LayoutNode* pNode) ++{ ++ sal_Int32 nType = oox::XML_rightArrow; ++ ++ if (!pNode) ++ return nType; ++ ++ for (const auto& pChild : pNode->getChildren()) ++ { ++ auto pAlgAtom = dynamic_cast(pChild.get()); ++ if (!pAlgAtom) ++ continue; ++ ++ if (pAlgAtom->getType() != oox::XML_lin) ++ continue; ++ ++ sal_Int32 nDir = oox::XML_fromL; ++ if (pAlgAtom->getMap().count(oox::XML_linDir)) ++ nDir = pAlgAtom->getMap().find(oox::XML_linDir)->second; ++ ++ switch (nDir) ++ { ++ case oox::XML_fromL: ++ nType = oox::XML_rightArrow; ++ break; ++ case oox::XML_fromR: ++ nType = oox::XML_leftArrow; ++ break; ++ } ++ } ++ ++ return nType; ++} + } + + namespace oox { namespace drawingml { +@@ -269,13 +313,15 @@ + rVisitor.visit(*this); + } + +-void ConstraintAtom::parseConstraint(std::vector& rConstraints) const ++void ConstraintAtom::parseConstraint(std::vector& rConstraints, ++ bool bRequireForName) const + { ++ if (bRequireForName && maConstraint.msForName.isEmpty()) ++ return; ++ + // accepting only basic equality constraints +- if (!maConstraint.msForName.isEmpty() && +- (maConstraint.mnOperator == XML_none || maConstraint.mnOperator == XML_equ) && +- maConstraint.mnType != XML_none && +- maConstraint.mfValue == 0) ++ if ((maConstraint.mnOperator == XML_none || maConstraint.mnOperator == XML_equ) ++ && maConstraint.mnType != XML_none) + { + rConstraints.push_back(maConstraint); + } +@@ -290,7 +336,7 @@ + const std::vector& rOwnConstraints ) const + { + // Algorithm result may depend on the parent constraints as well. +- std::vector aParentConstraints; ++ std::vector aMergedConstraints; + const LayoutNode* pParent = getLayoutNode().getParentLayoutNode(); + if (pParent) + { +@@ -298,10 +344,12 @@ + { + auto pConstraintAtom = dynamic_cast(pChild.get()); + if (pConstraintAtom) +- pConstraintAtom->parseConstraint(aParentConstraints); ++ pConstraintAtom->parseConstraint(aMergedConstraints, /*bRequireForName=*/true); + } + } +- const std::vector& rConstraints = rOwnConstraints.empty() ? aParentConstraints : rOwnConstraints; ++ aMergedConstraints.insert(aMergedConstraints.end(), rOwnConstraints.begin(), ++ rOwnConstraints.end()); ++ const std::vector& rConstraints = aMergedConstraints; + + switch(mnType) + { +@@ -327,7 +375,19 @@ + if (aRefType != aRef->second.end()) + aProperties[rConstr.msForName][rConstr.mnType] = aRefType->second * rConstr.mfFactor; + else +- aProperties[rConstr.msForName][rConstr.mnType] = 0; // TODO: val ++ { ++ // 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; ++ } + } + } + +@@ -376,7 +436,54 @@ + } + + case XML_conn: ++ { ++ if (rShape->getSubType() == XML_conn) ++ { ++ // There is no shape type "conn", replace it by an arrow based ++ // on the direction of the parent linear layout. ++ sal_Int32 nType = getConnectorType(pParent); ++ ++ rShape->setSubType(nType); ++ rShape->getCustomShapeProperties()->setShapePresetType(nType); ++ } ++ ++ // Parse constraints to adjust the size. ++ std::vector aDirectConstraints; ++ const LayoutNode& rLayoutNode = getLayoutNode(); ++ for (const auto& pChild : rLayoutNode.getChildren()) ++ { ++ auto pConstraintAtom = dynamic_cast(pChild.get()); ++ if (pConstraintAtom) ++ pConstraintAtom->parseConstraint(aDirectConstraints, /*bRequireForName=*/false); ++ } ++ ++ LayoutPropertyMap aProperties; ++ LayoutProperty& rParent = aProperties[""]; ++ rParent[XML_w] = rShape->getSize().Width; ++ rParent[XML_h] = rShape->getSize().Height; ++ rParent[XML_l] = 0; ++ rParent[XML_t] = 0; ++ rParent[XML_r] = rShape->getSize().Width; ++ rParent[XML_b] = rShape->getSize().Height; ++ for (const auto& rConstr : aDirectConstraints) ++ { ++ const LayoutPropertyMap::const_iterator aRef ++ = aProperties.find(rConstr.msRefForName); ++ if (aRef != aProperties.end()) ++ { ++ const LayoutProperty::const_iterator aRefType ++ = aRef->second.find(rConstr.mnRefType); ++ if (aRefType != aRef->second.end()) ++ aProperties[rConstr.msForName][rConstr.mnType] ++ = aRefType->second * rConstr.mfFactor; ++ } ++ } ++ awt::Size aSize; ++ aSize.Width = rParent[XML_w]; ++ aSize.Height = rParent[XML_h]; ++ rShape->setSize(aSize); + break; ++ } + + case XML_cycle: + { +@@ -428,9 +535,24 @@ + const sal_Int32 nIncX = nDir==XML_fromL ? 1 : (nDir==XML_fromR ? -1 : 0); + const sal_Int32 nIncY = nDir==XML_fromT ? 1 : (nDir==XML_fromB ? -1 : 0); + +- // TODO: get values from constraints + sal_Int32 nCount = rShape->getChildren().size(); + double fSpace = 0.3; ++ ++ // Find out which contraint is relevant for which (internal) name. ++ LayoutPropertyMap aProperties; ++ for (const auto& rConstraint : rConstraints) ++ { ++ if (rConstraint.msForName.isEmpty()) ++ continue; ++ ++ LayoutProperty& rProperty = aProperties[rConstraint.msForName]; ++ if (rConstraint.mnType == XML_w) ++ rProperty[XML_w] = rShape->getSize().Width * rConstraint.mfFactor; ++ ++ // TODO: get values from differently named constraints as well ++ if (rConstraint.msForName == "sibTrans" && rConstraint.mnType == XML_w) ++ fSpace = rConstraint.mfFactor; ++ } + + awt::Size aChildSize = rShape->getSize(); + if (nDir == XML_fromL || nDir == XML_fromR) +@@ -443,18 +565,6 @@ + aCurrPos.X = rShape->getSize().Width - aChildSize.Width; + if (nIncY == -1) + aCurrPos.Y = rShape->getSize().Height - aChildSize.Height; +- +- // Find out which contraint is relevant for which (internal) name. +- LayoutPropertyMap aProperties; +- for (const auto& rConstraint : rConstraints) +- { +- if (rConstraint.msForName.isEmpty()) +- continue; +- +- LayoutProperty& rProperty = aProperties[rConstraint.msForName]; +- if (rConstraint.mnType == XML_w) +- rProperty[XML_w] = rShape->getSize().Width * rConstraint.mfFactor; +- } + + // See if children requested more than 100% space in total: scale + // down in that case. +@@ -500,7 +610,7 @@ + aSize.Width *= fWidthScale; + aCurrShape->setSize(aSize); + +- aCurrShape->setChildSize(aChildSize); ++ aCurrShape->setChildSize(aSize); + aCurrPos.X += nIncX * (aSize.Width + fSpace*aSize.Width); + aCurrPos.Y += nIncY * (aChildSize.Height + fSpace*aChildSize.Height); + } +@@ -711,13 +821,27 @@ + } + + ParamMap::const_iterator aBulletLvl = maMap.find(XML_stBulletLvl); ++ int nStartBulletsAtLevel = 0; + if (aBulletLvl != maMap.end()) ++ { + nBaseLevel -= aBulletLvl->second; ++ nStartBulletsAtLevel = aBulletLvl->second; ++ } + + for (auto & aParagraph : pTextBody->getParagraphs()) + { + sal_Int32 nLevel = aParagraph->getProperties().getLevel(); + aParagraph->getProperties().setLevel(nLevel - nBaseLevel); ++ if (nStartBulletsAtLevel > 0 && nLevel >= nStartBulletsAtLevel) ++ { ++ // It is not possible to change the bullet style for text. ++ sal_Int32 nLeftMargin = 285750 * (nLevel - nStartBulletsAtLevel) / EMU_PER_HMM; ++ aParagraph->getProperties().getParaLeftMargin() = nLeftMargin; ++ aParagraph->getProperties().getFirstLineIndentation() = -285750 / EMU_PER_HMM; ++ OUString aBulletChar = OUString::fromUtf8(u8"•"); ++ aParagraph->getProperties().getBulletList().setBulletChar(aBulletChar); ++ aParagraph->getProperties().getBulletList().setSuffixNone(); ++ } + } + + // explicit alignment +@@ -821,8 +945,10 @@ + if( aVecIter->second != -1 ) + rPara.getProperties().setLevel(aVecIter->second); + +- rPara.addRun( +- aDataNode2->second->mpShape->getTextBody()->getParagraphs().front()->getRuns().front()); ++ std::shared_ptr pSourceParagraph ++ = aDataNode2->second->mpShape->getTextBody()->getParagraphs().front(); ++ for (const auto& pRun : pSourceParagraph->getRuns()) ++ rPara.addRun(pRun); + rPara.getProperties().apply( + aDataNode2->second->mpShape->getTextBody()->getParagraphs().front()->getProperties()); + } +diff --git a/oox/source/drawingml/diagram/diagramlayoutatoms.hxx b/oox/source/drawingml/diagram/diagramlayoutatoms.hxx +index 3d4d9c0..500495b 100644 +--- a/oox/source/drawingml/diagram/diagramlayoutatoms.hxx ++++ b/oox/source/drawingml/diagram/diagramlayoutatoms.hxx +@@ -141,7 +141,7 @@ + virtual void accept( LayoutAtomVisitor& ) override; + Constraint& getConstraint() + { return maConstraint; } +- void parseConstraint(std::vector& rConstraints) const; ++ void parseConstraint(std::vector& rConstraints, bool bRequireForName) const; + private: + Constraint maConstraint; + }; +@@ -162,6 +162,13 @@ + { maMap[nType]=nVal; } + void layoutShape( const ShapePtr& rShape, + const std::vector& rConstraints ) const; ++ ++ /// Gives access to . ++ sal_Int32 getType() const { return mnType; } ++ ++ /// Gives access to . ++ const ParamMap& getMap() const { return maMap; } ++ + private: + sal_Int32 mnType; + ParamMap maMap; +diff --git a/oox/source/drawingml/diagram/layoutatomvisitors.cxx b/oox/source/drawingml/diagram/layoutatomvisitors.cxx +index ce8e6ab..49a664c 100644 +--- a/oox/source/drawingml/diagram/layoutatomvisitors.cxx ++++ b/oox/source/drawingml/diagram/layoutatomvisitors.cxx +@@ -46,6 +46,14 @@ + + void ShapeCreationVisitor::visit(ForEachAtom& rAtom) + { ++ if (rAtom.iterator().mnAxis == XML_followSib) ++ { ++ // If the axis is the follow sibling, then the last atom should not be ++ // visited. ++ if (mnCurrIdx + mnCurrStep >= mnCurrCnt) ++ return; ++ } ++ + const std::vector& rChildren=rAtom.getChildren(); + + sal_Int32 nChildren=1; +@@ -65,7 +73,11 @@ + rAtom.iterator().mnCnt==-1 ? nChildren : rAtom.iterator().mnCnt); + + const sal_Int32 nOldIdx=mnCurrIdx; ++ const sal_Int32 nOldStep = mnCurrStep; ++ const sal_Int32 nOldCnt = mnCurrCnt; + const sal_Int32 nStep=rAtom.iterator().mnStep; ++ mnCurrStep = nStep; ++ mnCurrCnt = nCnt; + for( mnCurrIdx=0; mnCurrIdx0; mnCurrIdx+=nStep ) + { + // TODO there is likely some conditions +@@ -75,6 +87,8 @@ + + // and restore idx + mnCurrIdx = nOldIdx; ++ mnCurrStep = nOldStep; ++ mnCurrCnt = nOldCnt; + } + + void ShapeCreationVisitor::visit(ConditionAtom& rAtom) +@@ -166,6 +180,38 @@ + std::remove_if(pCurrParent->getChildren().begin(), pCurrParent->getChildren().end(), + [] (const ShapePtr & aChild) { return aChild->getServiceName() == "com.sun.star.drawing.GroupShape" && aChild->getChildren().empty(); }), + pCurrParent->getChildren().end()); ++ ++ // Offset the children from their default z-order stacking, if necessary. ++ std::vector& rChildren = pCurrParent->getChildren(); ++ for (size_t i = 0; i < rChildren.size(); ++i) ++ rChildren[i]->setZOrder(i); ++ ++ for (size_t i = 0; i < rChildren.size(); ++i) ++ { ++ const ShapePtr& pChild = rChildren[i]; ++ sal_Int32 nZOrderOff = pChild->getZOrderOff(); ++ if (nZOrderOff <= 0) ++ continue; ++ ++ // Increase my ZOrder by nZOrderOff. ++ pChild->setZOrder(pChild->getZOrder() + nZOrderOff); ++ pChild->setZOrderOff(0); ++ ++ for (sal_Int32 j = 0; j < nZOrderOff; ++j) ++ { ++ size_t nIndex = i + j + 1; ++ if (nIndex >= rChildren.size()) ++ break; ++ ++ // Decrease the ZOrder of the next nZOrderOff elements by one. ++ const ShapePtr& pNext = rChildren[nIndex]; ++ pNext->setZOrder(pNext->getZOrder() - 1); ++ } ++ } ++ ++ // Now that the ZOrders are adjusted, sort the children. ++ std::sort(rChildren.begin(), rChildren.end(), ++ [](const ShapePtr& a, const ShapePtr& b) { return a->getZOrder() < b->getZOrder(); }); + } + + void ShapeCreationVisitor::visit(ShapeAtom& /*rAtom*/) +@@ -235,7 +281,7 @@ + void ShapeLayoutingVisitor::visit(ConstraintAtom& rAtom) + { + if (meLookFor == CONSTRAINT) +- rAtom.parseConstraint(maConstraints); ++ rAtom.parseConstraint(maConstraints, /*bRequireForName=*/true); + } + + void ShapeLayoutingVisitor::visit(AlgAtom& rAtom) +diff --git a/oox/source/drawingml/diagram/layoutatomvisitors.hxx b/oox/source/drawingml/diagram/layoutatomvisitors.hxx +index 2997391..f395f6a 100644 +--- a/oox/source/drawingml/diagram/layoutatomvisitors.hxx ++++ b/oox/source/drawingml/diagram/layoutatomvisitors.hxx +@@ -33,6 +33,8 @@ + ShapePtr mpParentShape; + const Diagram& mrDgm; + sal_Int32 mnCurrIdx; ++ sal_Int32 mnCurrStep = 0; ++ sal_Int32 mnCurrCnt = 0; + const dgm::Point* mpCurrentNode; + + void defaultVisit(LayoutAtom const & rAtom); +diff --git a/oox/source/drawingml/diagram/layoutnodecontext.cxx b/oox/source/drawingml/diagram/layoutnodecontext.cxx +index 257f490..ad62ba5 100644 +--- a/oox/source/drawingml/diagram/layoutnodecontext.cxx ++++ b/oox/source/drawingml/diagram/layoutnodecontext.cxx +@@ -209,6 +209,8 @@ + + pShape->setDiagramRotation(rAttribs.getInteger(XML_rot, 0) * PER_DEGREE); + ++ pShape->setZOrderOff(rAttribs.getInteger(XML_zOrderOff, 0)); ++ + ShapeAtomPtr pAtom( new ShapeAtom(mpNode->getLayoutNode(), pShape) ); + LayoutAtom::connect(mpNode, pAtom); + return new ShapeContext( *this, ShapePtr(), pShape ); +diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx +index 2926614..16bc511 100644 +--- a/oox/source/drawingml/shape.cxx ++++ b/oox/source/drawingml/shape.cxx +@@ -175,6 +175,8 @@ + , maLinkedTxbxAttr() + , mbHasLinkedTxbx(false) + , maDiagramDoms( pSourceShape->maDiagramDoms ) ++, mnZOrder(pSourceShape->mnZOrder) ++, mnZOrderOff(pSourceShape->mnZOrderOff) + {} + + Shape::~Shape() diff --git a/bsc1117300.patch b/bsc1117300.patch deleted file mode 100644 index a8a979a..0000000 --- a/bsc1117300.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 4846848941241f92b32bcffef3489736d1baffec Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Thu, 8 Nov 2018 09:58:58 +0000 -Subject: Resolves: tdf#119790 for gtk3 save and restore typed name on changing filter - -Change-Id: I17c3d154144b13ce401b0e4afe84c91a2fe98d8e -Reviewed-on: https://gerrit.libreoffice.org/63076 -Tested-by: Jenkins -Reviewed-by: Christian Lohmaier ---- - vcl/unx/gtk/fpicker/SalGtkFilePicker.cxx | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/vcl/unx/gtk/fpicker/SalGtkFilePicker.cxx b/vcl/unx/gtk/fpicker/SalGtkFilePicker.cxx -index 16a845eabe81..75458dae1a13 100644 ---- a/vcl/unx/gtk/fpicker/SalGtkFilePicker.cxx -+++ b/vcl/unx/gtk/fpicker/SalGtkFilePicker.cxx -@@ -807,7 +807,16 @@ uno::Sequence SAL_CALL SalGtkFilePicker::getSelectedFiles() - } - } - if( bChangeFilter && bExtensionTypedIn ) -+ { -+#if GTK_CHECK_VERSION(3,0,0) -+ gchar* pCurrentName = gtk_file_chooser_get_current_name(GTK_FILE_CHOOSER(m_pDialog)); -+ setCurrentFilter( aNewFilter ); -+ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(m_pDialog), pCurrentName); -+ g_free(pCurrentName); -+#else - setCurrentFilter( aNewFilter ); -+#endif -+ } - } - } - diff --git a/bsc882383.patch b/bsc882383.patch deleted file mode 100644 index cd11305..0000000 --- a/bsc882383.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 7ff2bfbf8af599bb7536721e6c221486519d7e42 Mon Sep 17 00:00:00 2001 -From: Tamas Bunth -Date: Mon, 26 Nov 2018 07:19:41 +0100 -Subject: [PATCH] Put text label outside of the pie if.. - -performLabelBestFitInnerPlacement fails. - -Change-Id: Ic84e8b42e02da2023b22a9406c44d462170c5305 -Reviewed-on: https://gerrit.libreoffice.org/64015 -Tested-by: Jenkins -Reviewed-by: Tamás Bunth -(cherry picked from commit 3339c730f8c9a6088a2e8b335185f1bf0b232216) ---- - -diff --git a/chart2/source/view/charttypes/PieChart.cxx b/chart2/source/view/charttypes/PieChart.cxx -index f3f1ef3..3cc4dc3 100644 ---- a/chart2/source/view/charttypes/PieChart.cxx -+++ b/chart2/source/view/charttypes/PieChart.cxx -@@ -1590,7 +1590,18 @@ - - if( !performLabelBestFitInnerPlacement(rShapeParam, rPieLabelInfo) ) - { -- // TODO -+ // If it does not fit inside, let's put it outside -+ PolarLabelPositionHelper aPolarPosHelper(m_pPosHelper.get(),m_nDimension,m_xLogicTarget,m_pShapeFactory); -+ auto eAlignment = LABEL_ALIGN_CENTER; -+ awt::Point aScreenPosition2D( -+ aPolarPosHelper.getLabelScreenPositionAndAlignmentForUnitCircleValues(eAlignment, css::chart::DataLabelPlacement::OUTSIDE -+ , rShapeParam.mfUnitCircleStartAngleDegree, rShapeParam.mfUnitCircleWidthAngleDegree -+ , rShapeParam.mfUnitCircleInnerRadius, rShapeParam.mfUnitCircleOuterRadius, rShapeParam.mfLogicZ+0.5, 0 )); -+ basegfx::B2IVector aTranslationVector = rPieLabelInfo.aFirstPosition - rPieLabelInfo.aOrigin; -+ aTranslationVector.setLength(150); -+ aScreenPosition2D.X += aTranslationVector.getX(); -+ aScreenPosition2D.Y += aTranslationVector.getY(); -+ rPieLabelInfo.xLabelGroupShape->setPosition(aScreenPosition2D); - } - } - diff --git a/libreoffice-6.1.3.2.tar.xz b/libreoffice-6.1.3.2.tar.xz deleted file mode 100644 index 850344e..0000000 --- a/libreoffice-6.1.3.2.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d46f38f6c48c6d2338fb97c6d0fae9b43802f9849b50817b3bcf9910f1708f44 -size 207404836 diff --git a/libreoffice-6.1.3.2.tar.xz.asc b/libreoffice-6.1.3.2.tar.xz.asc deleted file mode 100644 index 98dc780..0000000 --- a/libreoffice-6.1.3.2.tar.xz.asc +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIcBAABAgAGBQJb12pFAAoJEPQ0oe+v7q6jdn8P/j/mhjmzut53ZCmFZOH5ZuZH -Wc7F5Q0zbugCMMtWTgv2rmV9CbLJrO0A8ix/1mO5/8h07zWFXnCpBkJX2OeZJYYs -h88VoApEXIkGuUWfn5c2d+m01ajotAis/a4vODbcZnQfJc6t4CRtKWFhQV+bVwgS -XHR5Oictp1PjfztArr6YwcoQVU+JtideTTd5AYEhgDbk0mhKgp1NSRc1KrySA7Um -gig3UTB7Su/4euMVwGJRsyR2nbvDdyYVB4GbmEN+zOZv109GLQxIyp5eeFHnDqVW -mOyOxNEbGhzWDr6+11yuXkGH7BUnHmvLaXmpYLwBgnHzcNSlzzxTIU6M5r9GUgjS -Kn5L04OYCOL7iH5o0VmY6P26lfWWd8zJTOmpm1PjCZ29aWGF5OPkLJuYFI95NJ9C -ZXeqvH1kU6j8g54G50VakCQuMaZRIa9f6utBok/lq3nIbDBT6OX8u0MsGTPNqV/V -zTGhWK6CbX1Ap/jITp2+BNHcYzdwS4ROKICvHiHWCq4+c39Mp3fUNsmwGz/GcfRj -+6yYdtPTVC+NuRIJHO/o3kLfJBcBwjrn2bV1v8Nflo7rcIdhDK/J76z9eO8+ZRNR -Unz8imkXzXNQRMsKsHZfUtkZSzLlYf0L31EnvG9YL9fQNRQPCyK4Lln7RRmaFKSQ -ZGYGiezz0OwQOEcOD26+ -=ii+N ------END PGP SIGNATURE----- diff --git a/libreoffice-6.1.4.2.tar.xz b/libreoffice-6.1.4.2.tar.xz new file mode 100644 index 0000000..90b9ba6 --- /dev/null +++ b/libreoffice-6.1.4.2.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:648fe9177e0813625a99e775dac1354a416eef2f3ef44eab4e770d08293b37fe +size 207710664 diff --git a/libreoffice-6.1.4.2.tar.xz.asc b/libreoffice-6.1.4.2.tar.xz.asc new file mode 100644 index 0000000..ec17486 --- /dev/null +++ b/libreoffice-6.1.4.2.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIcBAABAgAGBQJcEenIAAoJEPQ0oe+v7q6jzigP/i6pE9iu8BZb0LqOgvYZ1aSB ++aCzBThvtxcJM7MIZcTxe9paDdAWnhka5IQhpjLTBplxf9K7Lo94ljvaMcHFZNMU +diV/Hd+avGGJI//5/UEwTIkbmSs96ErKU8UQHLOogbSI2j7OlALIercZRmcrzOrB +lbF28euFThDiG6knKD/ocuFg0GkLgcBXQmEyJXitfrQnIh5uQQjyV9hd93X3hK/o +lbupzVs0ldufXmuQf0v/AjB3rjOe+RCcN/gkE2MHLcJ8QoeK2POUTuHlradSBR3r +Vw0ZH1mG+jU1FU0OGonX7jP7A7QBcPIxYJ7NmtziGgulSKZYNOhImLFBav+aPNJO +XvMMCkHtKMRn+6t8soYQRoZZymgOAgDfYLC8it2crxmaUHMs4I3WPy5R+e4eLEV6 +i8q9gBPO2r3DUph/0t7qU1hscOZ/8KiauciE66PiNPyDTvTJBBHN/fbqHSXTTPf9 +YPvubsv9zBbRKNP10yXg4ja8/7pRbmgF6/oN/igPTImlmfTqigMEIs07E41/VoOq +7kPsTE1MeZVFiSD//dwIbpyM6d3kWzyX/byltQNqTVqoLf/PCxNwakXfBX5nEMNn +XRjT5ku3dRil00zC/nTd+53N8ntuLBhb+RoFkJLdfcw2Ig7BkNkIb21duFH1omI0 +UKm4vr28lgZR46jadg0S +=64CE +-----END PGP SIGNATURE----- diff --git a/libreoffice-help-6.1.3.2.tar.xz b/libreoffice-help-6.1.3.2.tar.xz deleted file mode 100644 index 000c48c..0000000 --- a/libreoffice-help-6.1.3.2.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8a3fccb9cddb0ae38cba23704fc19734a0a4381eba25cb009e96094cc5fa4660 -size 15757496 diff --git a/libreoffice-help-6.1.3.2.tar.xz.asc b/libreoffice-help-6.1.3.2.tar.xz.asc deleted file mode 100644 index 5239d86..0000000 --- a/libreoffice-help-6.1.3.2.tar.xz.asc +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIcBAABAgAGBQJb12pNAAoJEPQ0oe+v7q6j7TAP/1JL/GBDY2znAh17Rvk1M7QA -ZcJulVfgQR4Z34+fPKRBkeZs7qzenKAxtWYhCowabML9Od38mZfKQJ00stOxXyRh -OGjZnZnG5xIhjUdgs1MWv860E0ZVmymkQeBSwFhJ3phNs61fp52KMM856g/tuD83 -IF6qhkyaZaISg2xSdAGPMJGEAzQH2DfxnQHTBYXVVYfEtAELlqSsjDxx6nZqkO4S -7sv7SeYmj4F3WIw6rIzCvwCBVhqZslQfV/JaliApgaCLLv15XbQ7ZRHmFWwDwgP9 -zZsBUdBaNWvbNRHvCKeEDkYfgY94rKJxNLhwXt4pIgtQUL2UILYlGoHlYWpQgQu4 -R62jj7Yr5hnR1BcAHVHU5KOjQ4d0VorqKc4E19dTkKSd3nR9cp8fIiMlFaOTHp9a -HPKYjHAjD6rwCwe4EHaHiJEmm6uUPoTG8PinpTucJajut0jdn2Rwv6df3L88ZCrB -sv4B+VjuDrbCj8cCnOr/N63iH1/75pjdfiveztBzuKwMsuaZDzFUHKvlJJSHrlYk -+xBBtCh0g3FltKR87SOgoO340r7ptXdk5p/r5B8HDtMATdWpXbWZKp24noEZX5MR -Rdu/PRl4eYVobDalO1ccVLzSj690qW5wqXtGe7R5AfWsu7s14z84c6NK17N9RqKs -4fzEbSYbsZmQu5/XXxNJ -=ZQem ------END PGP SIGNATURE----- diff --git a/libreoffice-help-6.1.4.2.tar.xz b/libreoffice-help-6.1.4.2.tar.xz new file mode 100644 index 0000000..01ba6af --- /dev/null +++ b/libreoffice-help-6.1.4.2.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5b21510942e63829744cf0dfdcf556ada854fced168e54a25105a3d3b484445 +size 15757700 diff --git a/libreoffice-help-6.1.4.2.tar.xz.asc b/libreoffice-help-6.1.4.2.tar.xz.asc new file mode 100644 index 0000000..df02fb4 --- /dev/null +++ b/libreoffice-help-6.1.4.2.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIcBAABAgAGBQJcEenRAAoJEPQ0oe+v7q6jhMkP/2sJ8r7hw2BRjv3Uu8NPFVW6 ++we/lU3bhqnwEpCntqu3p/47IDYM+h+IUyRlZ4AQKQ8q5JYYTg0LpEfxZibx/bjW +nGkzQ+naqQH7xkUreDwPzN7uAejz6V14hVgmnlwHiXkq0sZ8/qXUsMaaOAdsTWsd +w310S98XLNhCjDNo0Pym3v3G3+8h4wbJKHxywai4xFvXlai2nPAtkUzMe/W60ebb +LZNI/wzfVzaUca4nttj25r/F1n0T4QCAm48lzYtxaBQPkC/U60ot3NhlU3AZ/dZZ +JTDX+HF2QwwoDfpL/sddlkD/qOAPTO+TnjmJnhObkAWpaDWRrW1iIiltPMySU51G +EmbJ61CeSCktiJKgdluk90i7Euyr4DX3wZEJ311mbN7h2EupgMCv/cLJjP8LnvK1 +yaVwDBK5DH/zV/+j4mQ52iOuN940KKbAvZkr6u4Cl0L1dxwO5QBVIkuelqGeIMXE +21i31URdmZRn18igSaP6DPquHI/E6PYQXmVUYwuR9ObqTk3gsm8CLrLGIc/hCvM4 +WkO+5ex1vvrsQLNm3lsLnY2XuC3Qt0GVgZ5HXN+eg1Iha2bjD8sdH7qHrEbX6fx4 +ouDO/iTX8W3CC9gxnBlRzDlJP1mPqYS7Sa5g7yAuKWN2ueHKcQE07ORyi6tD2B8H +NfUv29L5rMq2PZUPvWQA +=YiRk +-----END PGP SIGNATURE----- diff --git a/libreoffice-translations-6.1.3.2.tar.xz b/libreoffice-translations-6.1.3.2.tar.xz deleted file mode 100644 index 72f9cc1..0000000 --- a/libreoffice-translations-6.1.3.2.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8e3752ee250f85f3859cd03689b968d17505c470ee9229c371329cb9e71b3eb3 -size 141258352 diff --git a/libreoffice-translations-6.1.3.2.tar.xz.asc b/libreoffice-translations-6.1.3.2.tar.xz.asc deleted file mode 100644 index 09e943b..0000000 --- a/libreoffice-translations-6.1.3.2.tar.xz.asc +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIcBAABAgAGBQJb12pQAAoJEPQ0oe+v7q6jPYsQALgJe/8X1eguLTrD2SLN4rK4 -MNULIxX/DEgThDcFw5QUsm1l+OmQJkFuEAGA03JU1y7yCx7foBd/Ut3gJZEmZi6n -28YpwBAku0l2OerN1w26ULseY8Bb0auIW+cQazbWtNvjn4CwVT03MIcS9Snc93li -UsY1OQEc1K4i+/qf4QK+9FDJD8GH/XVuqsr2qOLjDujcSBqfBlKMM/Zva0BwxlKl -R4NPUZCyjWgW6o7A/OsdVhYQRC/QpPA2UA/e3Dz5WUFKb1txgmVD/YCbgJ21zPKy -UbP7Hvb/I7MC2/wuLg+g69D6vE/bQeITde16buFHEk4Y+aP3+MHEAsfobiaGeRFv -xktz83G9yyyL/kp3ZOQxMS+v53o/D/IF1D2ZTeQvYW5biL/krEt6+CxhdrReM8vE -/83eSUQmHLBJnfbt2krn2baNmkuq2/cTSuuRb0oNnhBaKOQj8dERfutElHkF0qp+ -b2NMHGi52BCf/H0NRNd5ThdnLl+1wDrVUxKF7cGirwNBSOdU/ALEIlEep+2MauOH -7QQBH7tjSjcKUhIuTjdoNoADpqhMxU1Gz0eKonPtu5p/YkO3vvQ8gzUR0UET8KeZ -csFAph+t91ckSOBaNsXc8i5DRX004Mvu6+51zYv736tNcY/MZICFnMfFMbCSBMbB -giZW0auyIy8g7mGfYdqf -=ib7f ------END PGP SIGNATURE----- diff --git a/libreoffice-translations-6.1.4.2.tar.xz b/libreoffice-translations-6.1.4.2.tar.xz new file mode 100644 index 0000000..bbf6de9 --- /dev/null +++ b/libreoffice-translations-6.1.4.2.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:010505af211b9e4aa841c27443957297c58a7bb434ee8cce0d7ef2fa91b6fed1 +size 141263088 diff --git a/libreoffice-translations-6.1.4.2.tar.xz.asc b/libreoffice-translations-6.1.4.2.tar.xz.asc new file mode 100644 index 0000000..f437bca --- /dev/null +++ b/libreoffice-translations-6.1.4.2.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIcBAABAgAGBQJcEenVAAoJEPQ0oe+v7q6jZpgQALga4TdAjiME3SN6qMjjcuQE +rplwddLi/6Dt3QKa9A1q4hzb/BF2E1ffzCtE3h4yN8gjVGZvI9ZolPZtZppmNCIK +1crNlt+hA4Se8XQxs3yco3ZaNuVEEaqi04aj6XpXepIAZxyxpiZq4Of7ewl/ApSO +T6AqbOyVS0FU4t1Bgc5wxykePWvxKWdYxQVXlvgx9NmPiTfG7nY26FH/TYQwnKGb +lrasFuY/NE87f9JMbWLOGGkEzkqKhqOccubK+DHaJzON67gGlMcvXqtHYl5nvpHm +6eMX+p6v6yFFAvqpMnd5j2zgcllHYegqp2d1ejoyBP9Vfrd8stblhoFzt9K1THUg +64OWZPlNFqckwjekLIUyu7RT/LPiSArQ1Q4m6KpamC398OrYLmpKBeT33WBq41a1 +HiG8WY7AkdteMMtzeG/UaUNNX8CB5azGZEYrA/9yW3kbkOwz6HdSw2geibuAlCxO +yTma7/HXkZ/qXMdEMmHkhZZcYUUbsnC9JlyahZM4mJFc4CNn0BVvBJNDP6TuY1TC +oJ9aLT32v8ugbNc6GN2E/QL9l5/Cgsh9ASUen/8nHmac6UixVOlb7Xpt4ruzOMkA +LVqcN2wigO9FVKn+gCvfJBQTQdksav+JsBD1ef3UvGO074iObI5U5l4QYoIzOQtF +8My2fJIEP2sSOZvpeFjH +=j3XX +-----END PGP SIGNATURE----- diff --git a/libreoffice.changes b/libreoffice.changes index 3f9b87d..f05eabb 100644 --- a/libreoffice.changes +++ b/libreoffice.changes @@ -1,3 +1,20 @@ +------------------------------------------------------------------- +Fri Dec 21 15:01:49 UTC 2018 - Andras Timar + +- [Bug 1112113] LO-L3: [PPTX] SmartArt: Basic rendering of Accent Process and Continuous Block Process + * bsc1112113.patch + +------------------------------------------------------------------- +Thu Dec 13 11:23:56 UTC 2018 - Tomáš Chvátal + +- Version update to 6.1.4.2 release: + * many various fixes and compatibility tweaks +- Remove merged patches: + * bsc1110348.patch + * bsc1112112.patch + * bsc1117300.patch + * bsc882383.patch + ------------------------------------------------------------------- Mon Dec 3 22:27:53 UTC 2018 - bjorn.lie@gmail.com diff --git a/libreoffice.spec b/libreoffice.spec index 33385a8..6c8aa06 100644 --- a/libreoffice.spec +++ b/libreoffice.spec @@ -12,7 +12,7 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# Please submit bugfixes or comments via http://bugs.opensuse.org/ # @@ -52,7 +52,7 @@ %bcond_with gtk3 %endif Name: libreoffice -Version: 6.1.3.2 +Version: 6.1.4.2 Release: 0 Summary: A Free Office Suite (Framework) License: LGPL-3.0-or-later AND MPL-2.0+ @@ -104,17 +104,11 @@ Patch3: mediawiki-no-broken-help.diff Patch4: libreoffice-java-sched.patch Patch5: old-boost.patch Patch6: 0001-call-System.runFinalizersOnExit-by-reflection-since-.patch -# Bug 1110348 - LO-L3: [PPTX] Charts having weird/darker/ugly background versus Office 365 and strange artefacts where overlapping -Patch7: bsc1110348.patch -# Bug 1112112 - LO-L3: [PPTX] SmartArt: Basic rendering of several list types -Patch8: bsc1112112.patch -# Bug 882383 - LO-L3: Chart in PPTX lacks color and is too large -Patch9: bsc882383.patch -# Bug 1117300 - [DATA LOSS] Saving a new document can silently overwrite an existing document -Patch10: bsc1117300.patch Patch11: boost_1_69.patch # PATCH-FIX-UPSTREAM libreoffice-poppler-0.71.patch -- Fix build with poppler 0.71 Patch12: libreoffice-poppler-0.71.patch +# [Bug 1112113] LO-L3: [PPTX] SmartArt: Basic rendering of Accent Process and Continuous Block Process +Patch13: bsc1112113.patch # try to save space by using hardlinks Patch990: install-with-hardlinks.diff BuildRequires: %{name}-share-linker @@ -961,12 +955,9 @@ Provides %{langname} translations and additional resources (help files, etc.) fo %patch3 %patch4 -p1 %patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 %patch11 -p1 %patch12 -p1 +%patch13 -p1 %patch990 -p1 # Disable some of the failing tests (some are random)