summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cppcanvas/source/mtfrenderer/implrenderer.cxx6
-rw-r--r--drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx53
-rw-r--r--include/svx/xdash.hxx22
-rw-r--r--include/vcl/lineinfo.hxx26
-rw-r--r--sd/qa/unit/export-tests-ooxml2.cxx6
-rw-r--r--sd/qa/unit/uiimpress.cxx24
-rw-r--r--svx/source/xoutdev/xattr.cxx12
-rw-r--r--vcl/source/filter/idxf/dxfvec.cxx6
-rw-r--r--vcl/source/gdi/lineinfo.cxx55
-rw-r--r--vcl/source/outdev/polyline.cxx8
10 files changed, 122 insertions, 96 deletions
diff --git a/cppcanvas/source/mtfrenderer/implrenderer.cxx b/cppcanvas/source/mtfrenderer/implrenderer.cxx
index 24f7f3fbf969..a9df9eb2c6b8 100644
--- a/cppcanvas/source/mtfrenderer/implrenderer.cxx
+++ b/cppcanvas/source/mtfrenderer/implrenderer.cxx
@@ -161,13 +161,13 @@ namespace
// interpret dash info only if explicitly enabled as
// style
const ::basegfx::B2DSize aDistance( rLineInfo.GetDistance(), 0 );
- const double nDistance( (rState.mapModeTransform * aDistance).getX() );
+ const double nDistance( (rState.mapModeTransform * aDistance).getLength() );
const ::basegfx::B2DSize aDashLen( rLineInfo.GetDashLen(), 0 );
- const double nDashLen( (rState.mapModeTransform * aDashLen).getX() );
+ const double nDashLen( (rState.mapModeTransform * aDashLen).getLength() );
const ::basegfx::B2DSize aDotLen( rLineInfo.GetDotLen(), 0 );
- const double nDotLen( (rState.mapModeTransform * aDotLen).getX() );
+ const double nDotLen( (rState.mapModeTransform * aDotLen).getLength() );
const sal_Int32 nNumArryEntries( 2*rLineInfo.GetDashCount() +
2*rLineInfo.GetDotCount() );
diff --git a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx b/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx
index 6f690ca55f46..0dc0904015f0 100644
--- a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx
+++ b/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx
@@ -1574,31 +1574,60 @@ void VclMetafileProcessor2D::processPolygonStrokePrimitive2D(
if (basegfx::fTools::more(rLine.getWidth(), 0.0))
{
const attribute::StrokeAttribute& rStroke = rStrokePrimitive.getStrokeAttribute();
- basegfx::B2DPolyPolygon aHairLinePolyPolygon;
+ const basegfx::BColor aHairlineColor(
+ maBColorModifierStack.getModifiedColor(rLine.getColor()));
+ mpOutputDevice->SetLineColor(Color(aHairlineColor));
+ mpOutputDevice->SetFillColor();
+
+ // use the transformed line width
+ LineInfo aLineInfo(LineStyle::Solid,
+ basegfx::fround(getTransformedLineWidth(rLine.getWidth())));
+ aLineInfo.SetLineJoin(rLine.getLineJoin());
+ aLineInfo.SetLineCap(rLine.getLineCap());
+
+ basegfx::B2DPolyPolygon aHairLinePolyPolygon;
if (0.0 == rStroke.getFullDotDashLen())
{
aHairLinePolyPolygon.append(rBasePolygon);
}
+ else if (rStroke.getDotDashArray().size() == 2)
+ {
+ aHairLinePolyPolygon.append(rBasePolygon);
+ // This will be used by setupStrokeAttributes() in cppcanvas.
+ aLineInfo.SetStyle(LineStyle::Dash);
+ aLineInfo.SetDashCount(1);
+ aLineInfo.SetDashLen(
+ basegfx::fround(getTransformedLineWidth(rStroke.getDotDashArray()[0])));
+ aLineInfo.SetDistance(
+ basegfx::fround(getTransformedLineWidth(rStroke.getDotDashArray()[1])));
+ }
+ else if (rStroke.getDotDashArray().size() == 4
+ && rStroke.getDotDashArray()[1] == rStroke.getDotDashArray()[3])
+ {
+ aHairLinePolyPolygon.append(rBasePolygon);
+ // This will be used by setupStrokeAttributes() in cppcanvas.
+ aLineInfo.SetStyle(LineStyle::Dash);
+ aLineInfo.SetDashCount(1);
+ aLineInfo.SetDashLen(
+ basegfx::fround(getTransformedLineWidth(rStroke.getDotDashArray()[0])));
+ aLineInfo.SetDistance(
+ basegfx::fround(getTransformedLineWidth(rStroke.getDotDashArray()[1])));
+ aLineInfo.SetDotCount(1);
+ aLineInfo.SetDotLen(
+ basegfx::fround(getTransformedLineWidth(rStroke.getDotDashArray()[2])));
+ }
else
{
+ // LineInfo can hold only limited info about dashing, apply dashing manually
+ // if LineInfo cannot describe it. That should not happen though.
+ SAL_WARN("drawinglayer", "dotdash array cannot be converted to LineInfo");
basegfx::utils::applyLineDashing(rBasePolygon, rStroke.getDotDashArray(),
&aHairLinePolyPolygon, nullptr,
rStroke.getFullDotDashLen());
}
-
- const basegfx::BColor aHairlineColor(
- maBColorModifierStack.getModifiedColor(rLine.getColor()));
- mpOutputDevice->SetLineColor(Color(aHairlineColor));
- mpOutputDevice->SetFillColor();
aHairLinePolyPolygon.transform(maCurrentTransformation);
- // use the transformed line width
- LineInfo aLineInfo(LineStyle::Solid,
- basegfx::fround(getTransformedLineWidth(rLine.getWidth())));
- aLineInfo.SetLineJoin(rLine.getLineJoin());
- aLineInfo.SetLineCap(rLine.getLineCap());
-
for (sal_uInt32 a(0); a < aHairLinePolyPolygon.count(); a++)
{
const basegfx::B2DPolygon& aCandidate(aHairLinePolyPolygon.getB2DPolygon(a));
diff --git a/include/svx/xdash.hxx b/include/svx/xdash.hxx
index e1fca6b67f14..e789830e2736 100644
--- a/include/svx/xdash.hxx
+++ b/include/svx/xdash.hxx
@@ -31,32 +31,32 @@
class SVXCORE_DLLPUBLIC XDash final
{
css::drawing::DashStyle eDash;
- sal_uInt32 nDotLen;
sal_uInt16 nDots;
sal_uInt16 nDashes;
- sal_uInt32 nDashLen;
- sal_uInt32 nDistance;
+ double nDotLen;
+ double nDashLen;
+ double nDistance;
public:
XDash(css::drawing::DashStyle eDash = css::drawing::DashStyle_RECT,
- sal_uInt16 nDots = 1, sal_uInt32 nDotLen = 20,
- sal_uInt16 nDashes = 1, sal_uInt32 nDashLen = 20, sal_uInt32 nDistance = 20);
+ sal_uInt16 nDots = 1, double nDotLen = 20,
+ sal_uInt16 nDashes = 1, double nDashLen = 20, double nDistance = 20);
bool operator==(const XDash& rDash) const;
void SetDashStyle(css::drawing::DashStyle eNewStyle) { eDash = eNewStyle; }
void SetDots(sal_uInt16 nNewDots) { nDots = nNewDots; }
- void SetDotLen(sal_uInt32 nNewDotLen) { nDotLen = nNewDotLen; }
+ void SetDotLen(double nNewDotLen) { nDotLen = nNewDotLen; }
void SetDashes(sal_uInt16 nNewDashes) { nDashes = nNewDashes; }
- void SetDashLen(sal_uInt32 nNewDashLen) { nDashLen = nNewDashLen; }
- void SetDistance(sal_uInt32 nNewDistance) { nDistance = nNewDistance; }
+ void SetDashLen(double nNewDashLen) { nDashLen = nNewDashLen; }
+ void SetDistance(double nNewDistance) { nDistance = nNewDistance; }
css::drawing::DashStyle GetDashStyle() const { return eDash; }
sal_uInt16 GetDots() const { return nDots; }
- sal_uInt32 GetDotLen() const { return nDotLen; }
+ double GetDotLen() const { return nDotLen; }
sal_uInt16 GetDashes() const { return nDashes; }
- sal_uInt32 GetDashLen() const { return nDashLen; }
- sal_uInt32 GetDistance() const { return nDistance; }
+ double GetDashLen() const { return nDashLen; }
+ double GetDistance() const { return nDistance; }
// XDash is translated into an array of doubles which describe the lengths of the
// dashes, dots and empty passages. It returns the complete length of the full DashDot
diff --git a/include/vcl/lineinfo.hxx b/include/vcl/lineinfo.hxx
index 09cc074075a2..73ed0d3a5771 100644
--- a/include/vcl/lineinfo.hxx
+++ b/include/vcl/lineinfo.hxx
@@ -32,10 +32,10 @@ namespace basegfx { class B2DPolyPolygon; }
struct ImplLineInfo
{
- sal_Int32 mnWidth;
- sal_Int32 mnDashLen;
- sal_Int32 mnDotLen;
- sal_Int32 mnDistance;
+ double mnWidth;
+ double mnDashLen;
+ double mnDotLen;
+ double mnDistance;
basegfx::B2DLineJoin meLineJoin;
css::drawing::LineCap meLineCap;
@@ -53,7 +53,7 @@ struct ImplLineInfo
class VCL_DLLPUBLIC LineInfo
{
public:
- LineInfo( LineStyle eLineStyle = LineStyle::Solid, sal_Int32 nWidth = 0 );
+ LineInfo( LineStyle eLineStyle = LineStyle::Solid, double nWidth = 0 );
LineInfo( const LineInfo& rLineInfo );
LineInfo( LineInfo&& rLineInfo );
~LineInfo();
@@ -66,23 +66,23 @@ public:
void SetStyle( LineStyle eStyle );
LineStyle GetStyle() const { return mpImplLineInfo->meStyle; }
- void SetWidth( sal_Int32 nWidth );
- sal_Int32 GetWidth() const { return mpImplLineInfo->mnWidth; }
+ void SetWidth( double nWidth );
+ double GetWidth() const { return mpImplLineInfo->mnWidth; }
void SetDashCount( sal_uInt16 nDashCount );
sal_uInt16 GetDashCount() const { return mpImplLineInfo->mnDashCount; }
- void SetDashLen( sal_Int32 nDashLen );
- sal_Int32 GetDashLen() const { return mpImplLineInfo->mnDashLen; }
+ void SetDashLen( double nDashLen );
+ double GetDashLen() const { return mpImplLineInfo->mnDashLen; }
void SetDotCount( sal_uInt16 nDotCount );
sal_uInt16 GetDotCount() const { return mpImplLineInfo->mnDotCount; }
- void SetDotLen( sal_Int32 nDotLen );
- sal_Int32 GetDotLen() const { return mpImplLineInfo->mnDotLen; }
+ void SetDotLen( double nDotLen );
+ double GetDotLen() const { return mpImplLineInfo->mnDotLen; }
- void SetDistance( sal_Int32 nDistance );
- sal_Int32 GetDistance() const { return mpImplLineInfo->mnDistance; }
+ void SetDistance( double nDistance );
+ double GetDistance() const { return mpImplLineInfo->mnDistance; }
void SetLineJoin(basegfx::B2DLineJoin eLineJoin);
basegfx::B2DLineJoin GetLineJoin() const { return mpImplLineInfo->meLineJoin; }
diff --git a/sd/qa/unit/export-tests-ooxml2.cxx b/sd/qa/unit/export-tests-ooxml2.cxx
index 7d3acad7ab04..6c12ac08928c 100644
--- a/sd/qa/unit/export-tests-ooxml2.cxx
+++ b/sd/qa/unit/export-tests-ooxml2.cxx
@@ -2854,10 +2854,10 @@ void SdOOXMLExportTest2::testTdf126741()
CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_DASH, rStyleItem.GetValue());
CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), rDashItem.GetDashValue().GetDots());
- CPPUNIT_ASSERT_EQUAL(sal_uInt32(800), rDashItem.GetDashValue().GetDotLen());
+ CPPUNIT_ASSERT_EQUAL(800.0, rDashItem.GetDashValue().GetDotLen());
CPPUNIT_ASSERT_EQUAL(sal_uInt16(2), rDashItem.GetDashValue().GetDashes());
- CPPUNIT_ASSERT_EQUAL(sal_uInt32(100), rDashItem.GetDashValue().GetDashLen());
- CPPUNIT_ASSERT_EQUAL(sal_uInt32(300), rDashItem.GetDashValue().GetDistance());
+ CPPUNIT_ASSERT_EQUAL(100.0, rDashItem.GetDashValue().GetDashLen());
+ CPPUNIT_ASSERT_EQUAL(300.0, rDashItem.GetDashValue().GetDistance());
xDocShRef->DoClose();
}
diff --git a/sd/qa/unit/uiimpress.cxx b/sd/qa/unit/uiimpress.cxx
index 9a1ab0a52c82..7d0045646876 100644
--- a/sd/qa/unit/uiimpress.cxx
+++ b/sd/qa/unit/uiimpress.cxx
@@ -31,6 +31,7 @@
#include <svx/xfillit0.hxx>
#include <svx/xflclit.hxx>
#include <svx/xflgrit.hxx>
+#include <svx/xlndsit.hxx>
#include <SlideSorterViewShell.hxx>
#include <SlideSorter.hxx>
#include <controller/SlideSorterController.hxx>
@@ -632,27 +633,12 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf134053)
SdrObject* pShape = pActualPage->GetObj(0);
CPPUNIT_ASSERT_MESSAGE("No Shape", pShape);
- // Break line into single dash and dot objects
- SdrView* pView = pViewShell->GetView();
- pView->MarkObj(pShape, pView->GetSdrPageView());
- dispatchCommand(mxComponent, ".uno:ConvertIntoMetafile", {});
- dispatchCommand(mxComponent, ".uno:Break", {});
-
- // Measure the rendered length of dash, dot and distance
- SdrObject* pDash = pActualPage->GetObj(0);
- const tools::Rectangle& rBoundDashRect = pDash->GetCurrentBoundRect();
- const double fDashLength(rBoundDashRect.GetWidth());
- SdrObject* pDot = pActualPage->GetObj(1);
- const tools::Rectangle& rBoundDotRect = pDot->GetCurrentBoundRect();
- const double fDotLength(rBoundDotRect.GetWidth());
- const double fDistance(rBoundDotRect.Left() - rBoundDashRect.Right());
+ XDash dash = pShape->GetMergedItem(XATTR_LINEDASH).GetDashValue();
// Because 0% is not possible as dash length (as of June 2020) 1% is used in the fix.
- // For that a larger delta is here allowed to the ideal value than needed for
- // rounding errors.
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Distance", 2117, fDistance, 12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Dot length", 706, fDotLength, 12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Dash length", 2822, fDashLength, 12);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Distance", 399.0, dash.GetDistance());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Dot length", 301.0, dash.GetDotLen());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Dash length", 1.0, dash.GetDashLen());
}
CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testSpellOnlineParameter)
diff --git a/svx/source/xoutdev/xattr.cxx b/svx/source/xoutdev/xattr.cxx
index 27f11861e927..421094428fb3 100644
--- a/svx/source/xoutdev/xattr.cxx
+++ b/svx/source/xoutdev/xattr.cxx
@@ -400,12 +400,12 @@ sal_uInt16 XLineStyleItem::GetValueCount() const
return 3;
}
-XDash::XDash(css::drawing::DashStyle eTheDash, sal_uInt16 nTheDots, sal_uInt32 nTheDotLen,
- sal_uInt16 nTheDashes, sal_uInt32 nTheDashLen, sal_uInt32 nTheDistance) :
+XDash::XDash(css::drawing::DashStyle eTheDash, sal_uInt16 nTheDots, double nTheDotLen,
+ sal_uInt16 nTheDashes, double nTheDashLen, double nTheDistance) :
eDash(eTheDash),
- nDotLen(nTheDotLen),
nDots(nTheDots),
nDashes(nTheDashes),
+ nDotLen(nTheDotLen),
nDashLen(nTheDashLen),
nDistance(nTheDistance)
{
@@ -433,9 +433,9 @@ double XDash::CreateDotDashArray(::std::vector< double >& rDotDashArray, double
rDotDashArray.resize( nNumDotDashArray, 0.0 );
sal_uInt16 a;
sal_uInt16 nIns(0);
- double fDashDotDistance = static_cast<double>(GetDistance());
- double fSingleDashLen = static_cast<double>(GetDashLen());
- double fSingleDotLen = static_cast<double>(GetDotLen());
+ double fDashDotDistance = GetDistance();
+ double fSingleDashLen = GetDashLen();
+ double fSingleDotLen = GetDotLen();
if (fLineWidth == 0.0)
fLineWidth = SMALLEST_DASH_WIDTH;
diff --git a/vcl/source/filter/idxf/dxfvec.cxx b/vcl/source/filter/idxf/dxfvec.cxx
index fb1ff647d591..58b4d1f6e200 100644
--- a/vcl/source/filter/idxf/dxfvec.cxx
+++ b/vcl/source/filter/idxf/dxfvec.cxx
@@ -207,10 +207,10 @@ LineInfo DXFTransform::Transform(const DXFLineInfo& aDXFLineInfo) const
aLineInfo.SetStyle( aDXFLineInfo.eStyle );
aLineInfo.SetWidth( 0 );
aLineInfo.SetDashCount( static_cast< sal_uInt16 >( aDXFLineInfo.nDashCount ) );
- aLineInfo.SetDashLen( static_cast<sal_Int32>(aDXFLineInfo.fDashLen * scale + 0.5) );
+ aLineInfo.SetDashLen( aDXFLineInfo.fDashLen * scale );
aLineInfo.SetDotCount( static_cast< sal_uInt16 >( aDXFLineInfo.nDotCount ) );
- aLineInfo.SetDotLen( static_cast<sal_Int32>(aDXFLineInfo.fDotLen * scale + 0.5) );
- aLineInfo.SetDistance( static_cast<sal_Int32>(aDXFLineInfo.fDistance * scale + 0.5) );
+ aLineInfo.SetDotLen( aDXFLineInfo.fDotLen * scale );
+ aLineInfo.SetDistance( aDXFLineInfo.fDistance * scale );
if ( aLineInfo.GetDashCount() > 0 && aLineInfo.GetDashLen() == 0 )
aLineInfo.SetDashLen(1);
diff --git a/vcl/source/gdi/lineinfo.cxx b/vcl/source/gdi/lineinfo.cxx
index 94c1d1b05569..345eeb21a678 100644
--- a/vcl/source/gdi/lineinfo.cxx
+++ b/vcl/source/gdi/lineinfo.cxx
@@ -53,7 +53,7 @@ inline bool ImplLineInfo::operator==( const ImplLineInfo& rB ) const
}
-LineInfo::LineInfo( LineStyle eStyle, sal_Int32 nWidth ) : mpImplLineInfo()
+LineInfo::LineInfo( LineStyle eStyle, double nWidth ) : mpImplLineInfo()
{
mpImplLineInfo->meStyle = eStyle;
mpImplLineInfo->mnWidth = nWidth;
@@ -79,7 +79,7 @@ void LineInfo::SetStyle( LineStyle eStyle )
mpImplLineInfo->meStyle = eStyle;
}
-void LineInfo::SetWidth( sal_Int32 nWidth )
+void LineInfo::SetWidth( double nWidth )
{
mpImplLineInfo->mnWidth = nWidth;
}
@@ -89,7 +89,7 @@ void LineInfo::SetDashCount( sal_uInt16 nDashCount )
mpImplLineInfo->mnDashCount = nDashCount;
}
-void LineInfo::SetDashLen( sal_Int32 nDashLen )
+void LineInfo::SetDashLen( double nDashLen )
{
mpImplLineInfo->mnDashLen = nDashLen;
}
@@ -99,31 +99,24 @@ void LineInfo::SetDotCount( sal_uInt16 nDotCount )
mpImplLineInfo->mnDotCount = nDotCount;
}
-void LineInfo::SetDotLen( sal_Int32 nDotLen )
+void LineInfo::SetDotLen( double nDotLen )
{
mpImplLineInfo->mnDotLen = nDotLen;
}
-void LineInfo::SetDistance( sal_Int32 nDistance )
+void LineInfo::SetDistance( double nDistance )
{
mpImplLineInfo->mnDistance = nDistance;
}
void LineInfo::SetLineJoin(basegfx::B2DLineJoin eLineJoin)
{
-
- if(eLineJoin != mpImplLineInfo->meLineJoin)
- {
- mpImplLineInfo->meLineJoin = eLineJoin;
- }
+ mpImplLineInfo->meLineJoin = eLineJoin;
}
void LineInfo::SetLineCap(css::drawing::LineCap eLineCap)
{
- if(eLineCap != mpImplLineInfo->meLineCap)
- {
- mpImplLineInfo->meLineCap = eLineCap;
- }
+ mpImplLineInfo->meLineCap = eLineCap;
}
bool LineInfo::IsDefault() const
@@ -139,7 +132,8 @@ SvStream& ReadLineInfo( SvStream& rIStm, LineInfo& rLineInfo )
sal_uInt16 nTmp16(0);
sal_Int32 nTmp32(0);
- rIStm.ReadUInt16( nTmp16 ); rLineInfo.mpImplLineInfo->meStyle = static_cast<LineStyle>(nTmp16);
+ rIStm.ReadUInt16( nTmp16 );
+ rLineInfo.mpImplLineInfo->meStyle = static_cast<LineStyle>(nTmp16);
rIStm.ReadInt32( nTmp32 );
rLineInfo.mpImplLineInfo->mnWidth = nTmp32;
@@ -157,13 +151,24 @@ SvStream& ReadLineInfo( SvStream& rIStm, LineInfo& rLineInfo )
if( aCompat.GetVersion() >= 3 )
{
// version 3
- rIStm.ReadUInt16( nTmp16 ); rLineInfo.mpImplLineInfo->meLineJoin = static_cast<basegfx::B2DLineJoin>(nTmp16);
+ rIStm.ReadUInt16( nTmp16 );
+ rLineInfo.mpImplLineInfo->meLineJoin = static_cast<basegfx::B2DLineJoin>(nTmp16);
}
if( aCompat.GetVersion() >= 4 )
{
// version 4
- rIStm.ReadUInt16( nTmp16 ); rLineInfo.mpImplLineInfo->meLineCap = static_cast<css::drawing::LineCap>(nTmp16);
+ rIStm.ReadUInt16( nTmp16 );
+ rLineInfo.mpImplLineInfo->meLineCap = static_cast<css::drawing::LineCap>(nTmp16);
+ }
+
+ if( aCompat.GetVersion() >= 5 )
+ {
+ // version 5
+ rIStm.ReadDouble( rLineInfo.mpImplLineInfo->mnWidth );
+ rIStm.ReadDouble( rLineInfo.mpImplLineInfo->mnDashLen );
+ rIStm.ReadDouble( rLineInfo.mpImplLineInfo->mnDotLen );
+ rIStm.ReadDouble( rLineInfo.mpImplLineInfo->mnDistance );
}
return rIStm;
@@ -171,18 +176,18 @@ SvStream& ReadLineInfo( SvStream& rIStm, LineInfo& rLineInfo )
SvStream& WriteLineInfo( SvStream& rOStm, const LineInfo& rLineInfo )
{
- VersionCompatWrite aCompat( rOStm, 4 );
+ VersionCompatWrite aCompat( rOStm, 5 );
// version 1
rOStm.WriteUInt16( static_cast<sal_uInt16>(rLineInfo.mpImplLineInfo->meStyle) )
- .WriteInt32( rLineInfo.mpImplLineInfo->mnWidth );
+ .WriteInt32( basegfx::fround( rLineInfo.mpImplLineInfo->mnWidth ));
// since version2
rOStm.WriteUInt16( rLineInfo.mpImplLineInfo->mnDashCount )
- .WriteInt32( rLineInfo.mpImplLineInfo->mnDashLen );
+ .WriteInt32( basegfx::fround( rLineInfo.mpImplLineInfo->mnDashLen ));
rOStm.WriteUInt16( rLineInfo.mpImplLineInfo->mnDotCount )
- .WriteInt32( rLineInfo.mpImplLineInfo->mnDotLen );
- rOStm.WriteInt32( rLineInfo.mpImplLineInfo->mnDistance );
+ .WriteInt32( basegfx::fround( rLineInfo.mpImplLineInfo->mnDotLen ));
+ rOStm.WriteInt32( basegfx::fround( rLineInfo.mpImplLineInfo->mnDistance ));
// since version3
rOStm.WriteUInt16( static_cast<sal_uInt16>(rLineInfo.mpImplLineInfo->meLineJoin) );
@@ -190,6 +195,12 @@ SvStream& WriteLineInfo( SvStream& rOStm, const LineInfo& rLineInfo )
// since version4
rOStm.WriteUInt16( static_cast<sal_uInt16>(rLineInfo.mpImplLineInfo->meLineCap) );
+ // since version5
+ rOStm.WriteDouble( rLineInfo.mpImplLineInfo->mnWidth );
+ rOStm.WriteDouble( rLineInfo.mpImplLineInfo->mnDashLen );
+ rOStm.WriteDouble( rLineInfo.mpImplLineInfo->mnDotLen );
+ rOStm.WriteDouble( rLineInfo.mpImplLineInfo->mnDistance );
+
return rOStm;
}
diff --git a/vcl/source/outdev/polyline.cxx b/vcl/source/outdev/polyline.cxx
index 5da5ccdd8033..e3ec909c733b 100644
--- a/vcl/source/outdev/polyline.cxx
+++ b/vcl/source/outdev/polyline.cxx
@@ -122,7 +122,7 @@ void OutputDevice::DrawPolyLine( const tools::Polygon& rPoly, const LineInfo& rL
{
DrawPolyLine(
rPoly.getB2DPolygon(),
- static_cast< double >(rLineInfo.GetWidth()),
+ rLineInfo.GetWidth(),
rLineInfo.GetLineJoin(),
rLineInfo.GetLineCap(),
basegfx::deg2rad(15.0) /* default fMiterMinimumAngle, value not available in LineInfo */);
@@ -147,7 +147,7 @@ void OutputDevice::DrawPolyLine( const basegfx::B2DPolygon& rB2DPolygon,
{
LineInfo aLineInfo;
if( fLineWidth != 0.0 )
- aLineInfo.SetWidth( static_cast<tools::Long>(fLineWidth+0.5) );
+ aLineInfo.SetWidth( fLineWidth );
const tools::Polygon aToolsPolygon( rB2DPolygon );
mpMetaFile->AddAction( new MetaPolyLineAction( aToolsPolygon, aLineInfo ) );
@@ -235,7 +235,7 @@ void OutputDevice::DrawPolyLine( const basegfx::B2DPolygon& rB2DPolygon,
const tools::Polygon aToolsPolygon( rB2DPolygon );
LineInfo aLineInfo;
if( fLineWidth != 0.0 )
- aLineInfo.SetWidth( static_cast<tools::Long>(fLineWidth+0.5) );
+ aLineInfo.SetWidth( fLineWidth );
drawPolyLine( aToolsPolygon, aLineInfo );
}
@@ -310,7 +310,7 @@ bool OutputDevice::DrawPolyLineDirect(
{
LineInfo aLineInfo;
if( fLineWidth != 0.0 )
- aLineInfo.SetWidth( static_cast<tools::Long>(fLineWidth+0.5) );
+ aLineInfo.SetWidth( fLineWidth );
// Transport known information, might be needed
aLineInfo.SetLineJoin(eLineJoin);
aLineInfo.SetLineCap(eLineCap);