Related: tdf#131175 OOXML chart: import data label fill pattern

Change-Id: I2db64489c86e4381167eb13af4ab5118113960d5
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93715
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
diff --git a/chart2/inc/unonames.hxx b/chart2/inc/unonames.hxx
index d7d56d6..2174f4a 100644
--- a/chart2/inc/unonames.hxx
+++ b/chart2/inc/unonames.hxx
@@ -28,6 +28,8 @@
#define CHART_UNONAME_LABEL_BORDER_DASHNAME "LabelBorderDashName"
#define CHART_UNONAME_LABEL_BORDER_TRANS    "LabelBorderTransparency"
#define CHART_UNONAME_LABEL_FILL_STYLE      "LabelFillStyle"
#define CHART_UNONAME_LABEL_FILL_BACKGROUND "LabelFillBackground"
#define CHART_UNONAME_LABEL_FILL_HATCH_NAME "LabelFillHatchName"
#define CHART_UNONAME_LABEL_FILL_COLOR      "LabelFillColor"
#define CHART_UNONAME_CUSTOM_LABEL_FIELDS   "CustomLabelFields"

diff --git a/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx b/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx
index f30e281..e98ebe6 100644
--- a/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx
+++ b/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx
@@ -48,6 +48,7 @@
#include <com/sun/star/drawing/LineJoint.hpp>
#include <com/sun/star/drawing/LineStyle.hpp>
#include <com/sun/star/drawing/FillStyle.hpp>
#include <com/sun/star/drawing/Hatch.hpp>
#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
#include <comphelper/sequence.hxx>
#include <cppuhelper/exc_hlp.hxx>
@@ -84,7 +85,9 @@
    PROP_SERIES_DATAPOINT_LABEL_BORDER_COLOR,
    PROP_SERIES_DATAPOINT_LABEL_BORDER_TRANS,
    PROP_SERIES_DATAPOINT_LABEL_FILL_STYLE,
    PROP_SERIES_DATAPOINT_LABEL_FILL_COLOR
    PROP_SERIES_DATAPOINT_LABEL_FILL_COLOR,
    PROP_SERIES_DATAPOINT_LABEL_FILL_BACKGROUND,
    PROP_SERIES_DATAPOINT_LABEL_FILL_HATCH_NAME
};

void lcl_AddPropertiesToVector_PointProperties(
@@ -170,6 +173,16 @@
                  | beans::PropertyAttribute::MAYBEVOID
                  | beans::PropertyAttribute::MAYBEDEFAULT );

    rOutProperties.emplace_back( CHART_UNONAME_LABEL_FILL_BACKGROUND,
                  PROP_SERIES_DATAPOINT_LABEL_FILL_BACKGROUND,
                  cppu::UnoType<sal_Bool>::get(),
                  beans::PropertyAttribute::BOUND
                  | beans::PropertyAttribute::MAYBEDEFAULT );
    rOutProperties.emplace_back( CHART_UNONAME_LABEL_FILL_HATCH_NAME,
                  PROP_SERIES_DATAPOINT_LABEL_FILL_HATCH_NAME,
                  cppu::UnoType<OUString>::get(),
                  beans::PropertyAttribute::BOUND
                  | beans::PropertyAttribute::MAYBEDEFAULT );
    rOutProperties.emplace_back( CHART_UNONAME_LABEL_BORDER_WIDTH,
                  PROP_SERIES_DATAPOINT_LABEL_BORDER_WIDTH,
                  cppu::UnoType<sal_Int32>::get(),
diff --git a/chart2/source/model/main/DataPointProperties.cxx b/chart2/source/model/main/DataPointProperties.cxx
index be665c6..7bc20bb 100644
--- a/chart2/source/model/main/DataPointProperties.cxx
+++ b/chart2/source/model/main/DataPointProperties.cxx
@@ -396,6 +396,16 @@
                  beans::PropertyAttribute::BOUND
                  | beans::PropertyAttribute::MAYBEVOID
                  | beans::PropertyAttribute::MAYBEDEFAULT );
    rOutProperties.emplace_back( CHART_UNONAME_LABEL_FILL_BACKGROUND,
                  PROP_DATAPOINT_LABEL_FILL_BACKGROUND,
                  cppu::UnoType<sal_Bool>::get(),
                  beans::PropertyAttribute::BOUND
                  | beans::PropertyAttribute::MAYBEDEFAULT );
    rOutProperties.emplace_back( CHART_UNONAME_LABEL_FILL_HATCH_NAME,
                  PROP_DATAPOINT_LABEL_FILL_HATCH_NAME,
                  cppu::UnoType<OUString>::get(),
                  beans::PropertyAttribute::BOUND
                  | beans::PropertyAttribute::MAYBEDEFAULT );
    rOutProperties.emplace_back( CHART_UNONAME_LABEL_BORDER_WIDTH,
                  PROP_DATAPOINT_LABEL_BORDER_WIDTH,
                  cppu::UnoType<sal_Int32>::get(),
@@ -506,6 +516,8 @@
    PropertyHelper::setEmptyPropertyValueDefault(rOutMap, PROP_DATAPOINT_LABEL_BORDER_COLOR);
    PropertyHelper::setEmptyPropertyValueDefault(rOutMap, PROP_DATAPOINT_LABEL_FILL_STYLE);
    PropertyHelper::setEmptyPropertyValueDefault(rOutMap, PROP_DATAPOINT_LABEL_FILL_COLOR);
    PropertyHelper::setEmptyPropertyValueDefault(rOutMap, PROP_DATAPOINT_LABEL_FILL_BACKGROUND);
    PropertyHelper::setEmptyPropertyValueDefault(rOutMap, PROP_DATAPOINT_LABEL_FILL_HATCH_NAME);
    PropertyHelper::setPropertyValueDefault<sal_Int32>(rOutMap, PROP_DATAPOINT_LABEL_BORDER_WIDTH, 0);
    PropertyHelper::setPropertyValueDefault(rOutMap, PROP_DATAPOINT_LABEL_BORDER_DASH, drawing::LineDash());
    PropertyHelper::setEmptyPropertyValueDefault(rOutMap, PROP_DATAPOINT_LABEL_BORDER_DASH_NAME);
diff --git a/chart2/source/model/main/DataPointProperties.hxx b/chart2/source/model/main/DataPointProperties.hxx
index 0482108..1998c4e 100644
--- a/chart2/source/model/main/DataPointProperties.hxx
+++ b/chart2/source/model/main/DataPointProperties.hxx
@@ -37,6 +37,8 @@
    {
        PROP_DATAPOINT_LABEL_FILL_STYLE,
        PROP_DATAPOINT_LABEL_FILL_COLOR,
        PROP_DATAPOINT_LABEL_FILL_BACKGROUND,
        PROP_DATAPOINT_LABEL_FILL_HATCH_NAME,

        // common
        PROP_DATAPOINT_COLOR = FAST_PROPERTY_ID_START_DATA_POINT,
diff --git a/chart2/source/view/main/PropertyMapper.cxx b/chart2/source/view/main/PropertyMapper.cxx
index 271c8e3..c062eb2 100644
--- a/chart2/source/view/main/PropertyMapper.cxx
+++ b/chart2/source/view/main/PropertyMapper.cxx
@@ -341,7 +341,9 @@
            {"LineColor", CHART_UNONAME_LABEL_BORDER_COLOR},
            {"LineTransparence", CHART_UNONAME_LABEL_BORDER_TRANS},
            {"FillStyle", CHART_UNONAME_LABEL_FILL_STYLE},
            {"FillColor", CHART_UNONAME_LABEL_FILL_COLOR}
            {"FillColor", CHART_UNONAME_LABEL_FILL_COLOR},
            {"FillBackground", CHART_UNONAME_LABEL_FILL_BACKGROUND},
            {"FillHatchName", CHART_UNONAME_LABEL_FILL_HATCH_NAME}
            });
                // fix the spelling!
        return map;
diff --git a/oox/inc/drawingml/hatchmap.hxx b/oox/inc/drawingml/hatchmap.hxx
new file mode 100644
index 0000000..f0621f8
--- /dev/null
+++ b/oox/inc/drawingml/hatchmap.hxx
@@ -0,0 +1,296 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */

#include <com/sun/star/drawing/Hatch.hpp>
#include <oox/token/tokens.hxx>

using namespace com::sun::star;
using namespace oox;

static drawing::Hatch createHatch(sal_Int32 nHatchToken, ::Color nColor)
{
    drawing::Hatch aHatch;
    aHatch.Color = sal_Int32(nColor);
    // best-effort mapping; we do not support all the styles in core
    switch (nHatchToken)
    {
        case XML_pct5:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 250;
            aHatch.Angle = 450;
            break;
        case XML_pct10:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 200;
            aHatch.Angle = 450;
            break;
        case XML_pct20:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 150;
            aHatch.Angle = 450;
            break;
        case XML_pct25:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 200;
            aHatch.Angle = 450;
            break;
        case XML_pct30:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 175;
            aHatch.Angle = 450;
            break;
        case XML_pct40:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 150;
            aHatch.Angle = 450;
            break;
        case XML_pct50:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 125;
            aHatch.Angle = 450;
            break;
        case XML_pct60:
            aHatch.Style = drawing::HatchStyle_TRIPLE;
            aHatch.Distance = 150;
            aHatch.Angle = 450;
            break;
        case XML_pct70:
            aHatch.Style = drawing::HatchStyle_TRIPLE;
            aHatch.Distance = 125;
            aHatch.Angle = 450;
            break;
        case XML_pct75:
            aHatch.Style = drawing::HatchStyle_TRIPLE;
            aHatch.Distance = 100;
            aHatch.Angle = 450;
            break;
        case XML_pct80:
            aHatch.Style = drawing::HatchStyle_TRIPLE;
            aHatch.Distance = 75;
            aHatch.Angle = 450;
            break;
        case XML_pct90:
            aHatch.Style = drawing::HatchStyle_TRIPLE;
            aHatch.Distance = 50;
            aHatch.Angle = 450;
            break;
        case XML_horz:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 100;
            aHatch.Angle = 0;
            break;
        case XML_vert:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 100;
            aHatch.Angle = 900;
            break;
        case XML_ltHorz:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 50;
            aHatch.Angle = 0;
            break;
        case XML_ltVert:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 50;
            aHatch.Angle = 900;
            break;
        case XML_dkHorz:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 25;
            aHatch.Angle = 0;
            break;
        case XML_dkVert:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 25;
            aHatch.Angle = 900;
            break;
        case XML_narHorz:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 50;
            aHatch.Angle = 0;
            break;
        case XML_narVert:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 50;
            aHatch.Angle = 900;
            break;
        case XML_dashHorz:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 150;
            aHatch.Angle = 0;
            break;
        case XML_dashVert:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 150;
            aHatch.Angle = 900;
            break;
        case XML_cross:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 100;
            aHatch.Angle = 0;
            break;
        case XML_dnDiag:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 100;
            aHatch.Angle = 1350;
            break;
        case XML_upDiag:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 100;
            aHatch.Angle = 450;
            break;
        case XML_ltDnDiag:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 50;
            aHatch.Angle = 1350;
            break;
        case XML_ltUpDiag:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 50;
            aHatch.Angle = 450;
            break;
        case XML_dkDnDiag:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 50;
            aHatch.Angle = 1350;
            break;
        case XML_dkUpDiag:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 50;
            aHatch.Angle = 450;
            break;
        case XML_wdDnDiag:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 100;
            aHatch.Angle = 1350;
            break;
        case XML_wdUpDiag:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 100;
            aHatch.Angle = 450;
            break;
        case XML_dashDnDiag:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 150;
            aHatch.Angle = 1350;
            break;
        case XML_dashUpDiag:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 150;
            aHatch.Angle = 450;
            break;
        case XML_diagCross:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 100;
            aHatch.Angle = 450;
            break;
        case XML_smCheck:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 50;
            aHatch.Angle = 450;
            break;
        case XML_lgCheck:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 100;
            aHatch.Angle = 450;
            break;
        case XML_smGrid:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 50;
            aHatch.Angle = 0;
            break;
        case XML_lgGrid:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 100;
            aHatch.Angle = 0;
            break;
        case XML_dotGrid:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 400;
            aHatch.Angle = 0;
            break;
        case XML_smConfetti:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 200;
            aHatch.Angle = 600;
            break;
        case XML_lgConfetti:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 100;
            aHatch.Angle = 600;
            break;
        case XML_horzBrick:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 300;
            aHatch.Angle = 0;
            break;
        case XML_diagBrick:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 300;
            aHatch.Angle = 450;
            break;
        case XML_solidDmnd:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 100;
            aHatch.Angle = 450;
            break;
        case XML_openDmnd:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 100;
            aHatch.Angle = 450;
            break;
        case XML_dotDmnd:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 300;
            aHatch.Angle = 450;
            break;
        case XML_plaid:
            aHatch.Style = drawing::HatchStyle_TRIPLE;
            aHatch.Distance = 200;
            aHatch.Angle = 900;
            break;
        case XML_sphere:
            aHatch.Style = drawing::HatchStyle_TRIPLE;
            aHatch.Distance = 100;
            aHatch.Angle = 0;
            break;
        case XML_weave:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 150;
            aHatch.Angle = 450;
            break;
        case XML_divot:
            aHatch.Style = drawing::HatchStyle_TRIPLE;
            aHatch.Distance = 400;
            aHatch.Angle = 450;
            break;
        case XML_shingle:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 200;
            aHatch.Angle = 1350;
            break;
        case XML_wave:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 100;
            aHatch.Angle = 0;
            break;
        case XML_trellis:
            aHatch.Style = drawing::HatchStyle_DOUBLE;
            aHatch.Distance = 75;
            aHatch.Angle = 450;
            break;
        case XML_zigZag:
            aHatch.Style = drawing::HatchStyle_SINGLE;
            aHatch.Distance = 75;
            aHatch.Angle = 0;
            break;
    }

    return aHatch;
}
diff --git a/oox/source/drawingml/chart/seriesconverter.cxx b/oox/source/drawingml/chart/seriesconverter.cxx
index c55c389..f2df3ae 100644
--- a/oox/source/drawingml/chart/seriesconverter.cxx
+++ b/oox/source/drawingml/chart/seriesconverter.cxx
@@ -23,6 +23,7 @@
#include <com/sun/star/chart2/RelativePosition.hpp>
#include <com/sun/star/chart/ErrorBarStyle.hpp>
#include <com/sun/star/chart2/DataPointLabel.hpp>
#include <com/sun/star/drawing/Hatch.hpp>
#include <com/sun/star/chart2/XChartDocument.hpp>
#include <com/sun/star/chart2/XDataPointCustomLabelField.hpp>
#include <com/sun/star/chart2/DataPointCustomLabelField.hpp>
@@ -42,6 +43,7 @@
#include <drawingml/fillproperties.hxx>
#include <oox/core/xmlfilterbase.hxx>
#include <oox/helper/containerhelper.hxx>
#include <oox/helper/modelobjecthelper.hxx>
#include <oox/token/properties.hxx>
#include <oox/token/tokens.hxx>
#include <drawingml/lineproperties.hxx>
@@ -49,6 +51,7 @@
#include <drawingml/textrun.hxx>
#include <drawingml/textfield.hxx>
#include <drawingml/textbody.hxx>
#include <drawingml/hatchmap.hxx>

namespace oox::drawingml::chart {

@@ -201,7 +204,7 @@
    rPropSet.setProperty(PROP_LabelBorderColor, uno::makeAny(nColor));
}

void importFillProperties( PropertySet& rPropSet, Shape& rShape, const GraphicHelper& rGraphicHelper )
void importFillProperties( PropertySet& rPropSet, Shape& rShape, const GraphicHelper& rGraphicHelper, ModelObjectHelper& rModelObjHelper )
{
    FillProperties& rFP = rShape.getFillProperties();

@@ -213,6 +216,22 @@
        ::Color nColor = aColor.getColor(rGraphicHelper);
        rPropSet.setProperty(PROP_LabelFillColor, uno::makeAny(nColor));
    }
    else if(rFP.moFillType.has() && rFP.moFillType.get() == XML_pattFill)
    {
        rPropSet.setProperty(PROP_LabelFillStyle, drawing::FillStyle_HATCH);
        rPropSet.setProperty(PROP_LabelFillBackground, true);

        Color aHatchColor( rFP.maPatternProps.maPattFgColor );
        drawing::Hatch aHatch = createHatch(rFP.maPatternProps.moPattPreset.get(), aHatchColor.getColor(rGraphicHelper, 0));

        OUString sHatchName = rModelObjHelper.insertFillHatch(aHatch);
        rPropSet.setProperty(PROP_LabelFillHatchName, sHatchName);

        const Color& aColor = rFP.maPatternProps.maPattBgColor;
        ::Color nColor = aColor.getColor(rGraphicHelper);
        rPropSet.setProperty(PROP_LabelFillColor, uno::makeAny(nColor));
    }

}

DataPointCustomLabelFieldType lcl_ConvertFieldNameToFieldEnum( const OUString& rField )
@@ -264,7 +283,7 @@
        if (mrModel.mxShapeProp)
        {
            importBorderProperties(aPropSet, *mrModel.mxShapeProp, getFilter().getGraphicHelper());
            importFillProperties(aPropSet, *mrModel.mxShapeProp, getFilter().getGraphicHelper());
            importFillProperties(aPropSet, *mrModel.mxShapeProp, getFilter().getGraphicHelper(), getFilter().getModelObjectHelper());
        }
        if( mrModel.mxText && mrModel.mxText->mxTextBody && !mrModel.mxText->mxTextBody->getParagraphs().empty() )
        {
@@ -351,7 +370,7 @@
        {
            // Import baseline border properties for these data labels.
            importBorderProperties(aPropSet, *mrModel.mxShapeProp, getFilter().getGraphicHelper());
            importFillProperties(aPropSet, *mrModel.mxShapeProp, getFilter().getGraphicHelper());
            importFillProperties(aPropSet, *mrModel.mxShapeProp, getFilter().getGraphicHelper(), getFilter().getModelObjectHelper());
        }
    }
    // import leaderline of data labels
diff --git a/oox/source/drawingml/fillproperties.cxx b/oox/source/drawingml/fillproperties.cxx
index 023af3b..963c400 100644
--- a/oox/source/drawingml/fillproperties.cxx
+++ b/oox/source/drawingml/fillproperties.cxx
@@ -36,6 +36,7 @@
#include <oox/helper/graphichelper.hxx>
#include <oox/drawingml/drawingmltypes.hxx>
#include <oox/drawingml/shapepropertymap.hxx>
#include <drawingml/hatchmap.hxx>
#include <oox/token/namespaces.hxx>
#include <oox/token/properties.hxx>
#include <oox/token/tokens.hxx>
@@ -253,74 +254,6 @@
    return aSolidColor;
}

/// Maps the hatch token to drawing::Hatch.
static drawing::Hatch createHatch( sal_Int32 nHatchToken, ::Color nColor )
{
    drawing::Hatch aHatch;
    aHatch.Color = sal_Int32(nColor);

    // best-effort mapping; we do not support all the styles in core
    switch ( nHatchToken )
    {
        case XML_pct5:       aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 250; aHatch.Angle = 450;  break;
        case XML_pct10:      aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 200; aHatch.Angle = 450;  break;
        case XML_pct20:      aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 150; aHatch.Angle = 450;  break;
        case XML_pct25:      aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 200; aHatch.Angle = 450;  break;
        case XML_pct30:      aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 175; aHatch.Angle = 450;  break;
        case XML_pct40:      aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 150; aHatch.Angle = 450;  break;
        case XML_pct50:      aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 125; aHatch.Angle = 450;  break;
        case XML_pct60:      aHatch.Style = drawing::HatchStyle_TRIPLE; aHatch.Distance = 150; aHatch.Angle = 450;  break;
        case XML_pct70:      aHatch.Style = drawing::HatchStyle_TRIPLE; aHatch.Distance = 125; aHatch.Angle = 450;  break;
        case XML_pct75:      aHatch.Style = drawing::HatchStyle_TRIPLE; aHatch.Distance = 100; aHatch.Angle = 450;  break;
        case XML_pct80:      aHatch.Style = drawing::HatchStyle_TRIPLE; aHatch.Distance = 75;  aHatch.Angle = 450;  break;
        case XML_pct90:      aHatch.Style = drawing::HatchStyle_TRIPLE; aHatch.Distance = 50;  aHatch.Angle = 450;  break;
        case XML_horz:       aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 100; aHatch.Angle = 0;    break;
        case XML_vert:       aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 100; aHatch.Angle = 900;  break;
        case XML_ltHorz:     aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 50;  aHatch.Angle = 0;    break;
        case XML_ltVert:     aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 50;  aHatch.Angle = 900;  break;
        case XML_dkHorz:     aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 25;  aHatch.Angle = 0;    break;
        case XML_dkVert:     aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 25;  aHatch.Angle = 900;  break;
        case XML_narHorz:    aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 50;  aHatch.Angle = 0;    break;
        case XML_narVert:    aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 50;  aHatch.Angle = 900;  break;
        case XML_dashHorz:   aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 150; aHatch.Angle = 0;    break;
        case XML_dashVert:   aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 150; aHatch.Angle = 900;  break;
        case XML_cross:      aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 100; aHatch.Angle = 0;    break;
        case XML_dnDiag:     aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 100; aHatch.Angle = 1350; break;
        case XML_upDiag:     aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 100; aHatch.Angle = 450;  break;
        case XML_ltDnDiag:   aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 50;  aHatch.Angle = 1350; break;
        case XML_ltUpDiag:   aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 50;  aHatch.Angle = 450;  break;
        case XML_dkDnDiag:   aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 50;  aHatch.Angle = 1350; break;
        case XML_dkUpDiag:   aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 50;  aHatch.Angle = 450;  break;
        case XML_wdDnDiag:   aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 100; aHatch.Angle = 1350; break;
        case XML_wdUpDiag:   aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 100; aHatch.Angle = 450;  break;
        case XML_dashDnDiag: aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 150; aHatch.Angle = 1350; break;
        case XML_dashUpDiag: aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 150; aHatch.Angle = 450;  break;
        case XML_diagCross:  aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 100; aHatch.Angle = 450;  break;
        case XML_smCheck:    aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 50;  aHatch.Angle = 450;  break;
        case XML_lgCheck:    aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 100; aHatch.Angle = 450;  break;
        case XML_smGrid:     aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 50;  aHatch.Angle = 0;    break;
        case XML_lgGrid:     aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 100; aHatch.Angle = 0;    break;
        case XML_dotGrid:    aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 400; aHatch.Angle = 0;    break;
        case XML_smConfetti: aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 200; aHatch.Angle = 600;  break;
        case XML_lgConfetti: aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 100; aHatch.Angle = 600;  break;
        case XML_horzBrick:  aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 300; aHatch.Angle = 0;    break;
        case XML_diagBrick:  aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 300; aHatch.Angle = 450;  break;
        case XML_solidDmnd:  aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 100; aHatch.Angle = 450;  break;
        case XML_openDmnd:   aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 100; aHatch.Angle = 450;  break;
        case XML_dotDmnd:    aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 300; aHatch.Angle = 450;  break;
        case XML_plaid:      aHatch.Style = drawing::HatchStyle_TRIPLE; aHatch.Distance = 200; aHatch.Angle = 900;  break;
        case XML_sphere:     aHatch.Style = drawing::HatchStyle_TRIPLE; aHatch.Distance = 100; aHatch.Angle = 0;    break;
        case XML_weave:      aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 150; aHatch.Angle = 450;  break;
        case XML_divot:      aHatch.Style = drawing::HatchStyle_TRIPLE; aHatch.Distance = 400; aHatch.Angle = 450;  break;
        case XML_shingle:    aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 200; aHatch.Angle = 1350; break;
        case XML_wave:       aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 100; aHatch.Angle = 0;    break;
        case XML_trellis:    aHatch.Style = drawing::HatchStyle_DOUBLE; aHatch.Distance = 75;  aHatch.Angle = 450;  break;
        case XML_zigZag:     aHatch.Style = drawing::HatchStyle_SINGLE; aHatch.Distance = 75;  aHatch.Angle = 0;    break;
    }

    return aHatch;
}

void FillProperties::pushToPropMap( ShapePropertyMap& rPropMap,
        const GraphicHelper& rGraphicHelper, sal_Int32 nShapeRotation, ::Color nPhClr,
        bool bFlipH, bool bFlipV ) const
diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt
index 3c9ba16..fe8d755 100644
--- a/oox/source/token/properties.txt
+++ b/oox/source/token/properties.txt
@@ -287,6 +287,8 @@
LabelPlacement
LabelPosition
LabelSeparator
LabelFillBackground
LabelFillHatchName
LabelFillStyle
LabelFillColor
CustomLabelFields
diff --git a/xmloff/source/chart/PropertyMap.hxx b/xmloff/source/chart/PropertyMap.hxx
index aec0091..d114978 100644
--- a/xmloff/source/chart/PropertyMap.hxx
+++ b/xmloff/source/chart/PropertyMap.hxx
@@ -156,6 +156,8 @@

    MAP_ENTRY_ODF_EXT( "LabelFillColor", LO_EXT, XML_LABEL_FILL_COLOR, XML_TYPE_COLOR ),
    MAP_ENTRY_ODF_EXT( "LabelFillStyle", LO_EXT, XML_LABEL_FILL, XML_SCH_TYPE_LABEL_FILL_STYLE ),
    MAP_ENTRY_ODF_EXT( "LabelFillBackground", LO_EXT, XML_FILL_HATCH_SOLID, XML_TYPE_BOOL ),
    MAP_ENTRY_ODF_EXT( "LabelFillHatchName", LO_EXT, XML_FILL_HATCH_NAME, XML_TYPE_STYLENAME),

    MAP_ENTRY( "ScaleText", CHART, XML_SCALE_TEXT, XML_TYPE_BOOL ),

diff --git a/xmloff/source/chart/PropertyMaps.cxx b/xmloff/source/chart/PropertyMaps.cxx
index 8701c0c..ce3b458 100644
--- a/xmloff/source/chart/PropertyMaps.cxx
+++ b/xmloff/source/chart/PropertyMaps.cxx
@@ -75,7 +75,8 @@
SvXMLEnumMapEntry<drawing::FillStyle> const aFillStyleMap[] =
{
    { XML_NONE,     drawing::FillStyle_NONE },
    { XML_SOLID,    drawing::FillStyle_SOLID }
    { XML_SOLID,    drawing::FillStyle_SOLID },
    { XML_HATCH,    drawing::FillStyle_HATCH }
};

}