- 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

OBS-URL: https://build.opensuse.org/package/show/LibreOffice:Factory/libreoffice?expand=0&rev=735
This commit is contained in:
Tomáš Chvátal 2018-12-13 11:37:44 +00:00 committed by Git OBS Bridge
parent 850ee7ec12
commit 161bed9c68
18 changed files with 69 additions and 1086 deletions

View File

@ -1,275 +0,0 @@
From b77f4f69bb2f1d3ab740446799da2fd3db9094da Mon Sep 17 00:00:00 2001
From: Balazs Varga <balazs.varga991@gmail.com>
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 <vmiklos@collabora.co.uk>
Reviewed-on: https://gerrit.libreoffice.org/62891
Reviewed-by: Andras Timar <andras.timar@collabora.com>
---
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<css::graphic::XGraphic> 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 <com/sun/star/awt/Gradient.hpp>
#include <com/sun/star/beans/NamedValue.hpp>
#include <com/sun/star/drawing/LineDash.hpp>
+#include <com/sun/star/drawing/Hatch.hpp>
#include <com/sun/star/drawing/PolyPolygonBezierCoords.hpp>
#include <com/sun/star/graphic/XGraphic.hpp>
@@ -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 <com/sun/star/awt/Gradient.hpp>
#include <com/sun/star/container/XNameContainer.hpp>
#include <com/sun/star/drawing/LineDash.hpp>
+#include <com/sun/star/drawing/Hatch.hpp>
#include <com/sun/star/drawing/PolyPolygonBezierCoords.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/graphic/XGraphic.hpp>
@@ -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<awt::XBitmap> ModelObjectHelper::getFillBitmap(OUString const & rGraphicName)
{
uno::Reference<awt::XBitmap> 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

View File

@ -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 <drawingml/fillproperties.hxx>
#include <oox/ppt/pptshapegroupcontext.hxx>
#include <oox/ppt/pptshape.hxx>
+#include <oox/token/namespaces.hxx>
#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 <dsp:sp> 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<core::FragmentHandler> 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<sal_Int32> findProperty(const oox::drawingml::LayoutPropertyMap& rProperties,
+ const OUString& rInternalName, sal_Int32 nProperty)
+{
+ oox::OptValue<sal_Int32> 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<Constraint>& rConstraints ) const
+ const std::vector<Constraint>& rOwnConstraints ) const
{
+ // Algorithm result may depend on the parent constraints as well.
+ std::vector<Constraint> aParentConstraints;
+ const LayoutNode* pParent = getLayoutNode().getParentLayoutNode();
+ if (pParent)
+ {
+ for (const auto& pChild : pParent->getChildren())
+ {
+ auto pConstraintAtom = dynamic_cast<ConstraintAtom*>(pChild.get());
+ if (pConstraintAtom)
+ pConstraintAtom->parseConstraint(aParentConstraints);
+ }
+ }
+ const std::vector<Constraint>& 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<sal_Int32> 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<sal_Int32> 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 ( ; nCol<nCount; nCol++)
+ for ( ; nRow<nCount; nRow++)
{
- nRow = (nCount+nCol-1) / nCol;
+ nCol = (nCount+nRow-1) / nRow;
const double fShapeHeight = rShape->getSize().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<LayoutNode*>(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<LayoutAtomPtr>& 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<LayoutAtom> 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<drawing::XShapes> 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;

View File

@ -1,34 +0,0 @@
From 4846848941241f92b32bcffef3489736d1baffec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
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 <lohmaier+LibreOffice@googlemail.com>
---
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<OUString> 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
+ }
}
}

View File

@ -1,38 +0,0 @@
From 7ff2bfbf8af599bb7536721e6c221486519d7e42 Mon Sep 17 00:00:00 2001
From: Tamas Bunth <tamas.bunth@collabora.co.uk>
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 <btomi96@gmail.com>
(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);
}
}

View File

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

View File

@ -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-----

View File

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

View File

@ -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-----

View File

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

View File

@ -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-----

View File

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

View File

@ -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-----

View File

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

View File

@ -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-----

View File

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

View File

@ -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-----

View File

@ -1,3 +1,14 @@
-------------------------------------------------------------------
Thu Dec 13 11:23:56 UTC 2018 - Tomáš Chvátal <tchvatal@suse.com>
- 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

View File

@ -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,14 +104,6 @@ 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
@ -961,10 +953,6 @@ 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
%patch990 -p1