summaryrefslogtreecommitdiff
path: root/oox/source
diff options
context:
space:
mode:
authorAdam Kovacs <christo161@gmail.com>2018-09-03 11:05:44 -0400
committerLászló Németh <nemeth@numbertext.org>2018-09-10 08:50:43 +0200
commitf3d6c44c9cb533fe4f1cd28fc95adc36cac4bfd5 (patch)
tree39cdd5cc21a14b6cb3a394ccee92de085d0a2d60 /oox/source
parenta6a5064c371017676f606a7a2823214146003572 (diff)
tdf#108064 OOXML export: keep preset dashes with any line width
Change-Id: I496e1cbac527383837a4e8fcdee42967ecf555e4 Reviewed-on: https://gerrit.libreoffice.org/59968 Tested-by: Jenkins Reviewed-by: László Németh <nemeth@numbertext.org>
Diffstat (limited to 'oox/source')
-rw-r--r--oox/source/export/drawingml.cxx40
1 files changed, 28 insertions, 12 deletions
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index c42a74a95267..eb3eb27c85d9 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -700,35 +700,51 @@ void DrawingML::WriteOutline( const Reference<XPropertySet>& rXPropSet )
if( bDashSet && aStyleLineStyle != drawing::LineStyle_DASH )
{
- // keep default preset linestyles (instead of custdash)
- if (aLineDash.Dots == 1 && aLineDash.DotLen == 141 && aLineDash.Dashes == 0 && aLineDash.DashLen == 0 && aLineDash.Distance == 141)
+ // convert absolute dash/dot length to relative length
+ int relDotLen = aLineDash.DotLen / nLineWidth;
+ int relDashLen = aLineDash.DashLen / nLineWidth;
+ int relDistance = aLineDash.Distance / nLineWidth;
+ // keep default mso preset linestyles (instead of custdash)
+ if (aLineDash.Dots == 1 && relDotLen == 1 && aLineDash.Dashes == 0 && relDashLen == 0 && relDistance == 3)
{
- mpFS->singleElementNS(XML_a, XML_prstDash, XML_val, "sysDot", FSEND);
- }
- else if (aLineDash.Dots == 0 && aLineDash.DotLen == 0 && aLineDash.Dashes == 1 && aLineDash.DashLen == 423 && aLineDash.Distance == 141)
- {
- mpFS->singleElementNS(XML_a, XML_prstDash, XML_val, "sysDash", FSEND);
+ mpFS->singleElementNS(XML_a, XML_prstDash, XML_val, "dot", FSEND);
}
- else if (aLineDash.Dots == 0 && aLineDash.DotLen == 0 && aLineDash.Dashes == 1 && aLineDash.DashLen == 564 && aLineDash.Distance == 423)
+ else if (aLineDash.Dots == 0 && relDotLen == 0 && aLineDash.Dashes == 1 && relDashLen == 4 && relDistance == 3)
{
mpFS->singleElementNS(XML_a, XML_prstDash, XML_val, "dash", FSEND);
}
- else if (aLineDash.Dots == 1 && aLineDash.DotLen == 141 && aLineDash.Dashes == 1 && aLineDash.DashLen == 564 && aLineDash.Distance == 423)
+ else if (aLineDash.Dots == 1 && relDotLen == 1 && aLineDash.Dashes == 1 && relDashLen == 4 && relDistance == 3)
{
mpFS->singleElementNS(XML_a, XML_prstDash, XML_val, "dashDot", FSEND);
}
- else if (aLineDash.Dots == 0 && aLineDash.DotLen == 0 && aLineDash.Dashes == 1 && aLineDash.DashLen == 1128 && aLineDash.Distance == 423)
+ else if (aLineDash.Dots == 0 && relDotLen == 0 && aLineDash.Dashes == 1 && relDashLen == 8 && relDistance == 3)
{
mpFS->singleElementNS(XML_a, XML_prstDash, XML_val, "lgDash", FSEND);
}
- else if (aLineDash.Dots == 1 && aLineDash.DotLen == 141 && aLineDash.Dashes == 1 && aLineDash.DashLen == 1128 && aLineDash.Distance == 423)
+ else if (aLineDash.Dots == 1 && relDotLen == 1 && aLineDash.Dashes == 1 && relDashLen == 8 && relDistance == 3)
{
mpFS->singleElementNS(XML_a, XML_prstDash, XML_val, "lgDashDot", FSEND);
}
- else if (aLineDash.Dots == 2 && aLineDash.DotLen == 141 && aLineDash.Dashes == 1 && aLineDash.DashLen == 1128 && aLineDash.Distance == 423)
+ else if (aLineDash.Dots == 2 && relDotLen == 1 && aLineDash.Dashes == 1 && relDashLen == 8 && relDistance == 3)
{
mpFS->singleElementNS(XML_a, XML_prstDash, XML_val, "lgDashDotDot", FSEND);
}
+ else if (aLineDash.Dots == 1 && relDotLen == 1 && aLineDash.Dashes == 0 && relDashLen == 0 && relDistance == 1)
+ {
+ mpFS->singleElementNS(XML_a, XML_prstDash, XML_val, "sysDot", FSEND);
+ }
+ else if (aLineDash.Dots == 0 && relDotLen == 0 && aLineDash.Dashes == 1 && relDashLen == 3 && relDistance == 1)
+ {
+ mpFS->singleElementNS(XML_a, XML_prstDash, XML_val, "sysDash", FSEND);
+ }
+ else if (aLineDash.Dots == 1 && relDotLen == 1 && aLineDash.Dashes == 1 && relDashLen == 3 && relDistance == 1)
+ {
+ mpFS->singleElementNS(XML_a, XML_prstDash, XML_val, "sysDashDot", FSEND);
+ }
+ else if (aLineDash.Dots == 2 && relDotLen == 1 && aLineDash.Dashes == 1 && relDashLen == 3 && relDistance == 1)
+ {
+ mpFS->singleElementNS(XML_a, XML_prstDash, XML_val, "sysDashDotDot", FSEND);
+ }
else
{
mpFS->startElementNS( XML_a, XML_custDash, FSEND );