c35863cc97
- bsc#1110348 LO-L3: [PPTX] Charts having weird/darker/ugly background versus Office 365 and strange artefacts where overlapping * bsc1110348.patch OBS-URL: https://build.opensuse.org/request/show/646502 OBS-URL: https://build.opensuse.org/package/show/LibreOffice:Factory/libreoffice?expand=0&rev=724
276 lines
12 KiB
Diff
276 lines
12 KiB
Diff
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
|