[Libreoffice-commits] core.git: 2 commits - drawinglayer/source vcl/inc vcl/source
Michael Meeks
michael.meeks at suse.com
Mon Mar 25 14:36:37 PDT 2013
drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx | 16 ++++++++-----
drawinglayer/source/processor2d/vclprocessor2d.cxx | 2 -
vcl/inc/vcl/graphictools.hxx | 2 +
vcl/source/gdi/graphictools.cxx | 15 ++++++++++++
vcl/source/gdi/metaact.cxx | 5 ----
5 files changed, 30 insertions(+), 10 deletions(-)
New commits:
commit fd335d180b1d549e884b9692ba1a4e51a014dcd5
Author: Michael Meeks <michael.meeks at suse.com>
Date: Mon Mar 25 21:34:51 2013 +0000
fdo#61789 - improve SvtGraphicStroke / metafile scaling
diff --git a/vcl/inc/vcl/graphictools.hxx b/vcl/inc/vcl/graphictools.hxx
index c8713fd..3600f1a 100644
--- a/vcl/inc/vcl/graphictools.hxx
+++ b/vcl/inc/vcl/graphictools.hxx
@@ -142,6 +142,8 @@ public:
// mutators
/// Set path to stroke
void setPath ( const Polygon& );
+ /// Affine scaling in both X and Y dimensions
+ void scale ( double fScaleX, double fScaleY );
private:
// friends
diff --git a/vcl/source/gdi/graphictools.cxx b/vcl/source/gdi/graphictools.cxx
index 4961389..da1cbac 100644
--- a/vcl/source/gdi/graphictools.cxx
+++ b/vcl/source/gdi/graphictools.cxx
@@ -115,6 +115,21 @@ void SvtGraphicStroke::setPath( const Polygon& rPoly )
maPath = rPoly;
}
+void SvtGraphicStroke::scale( double fXScale, double fYScale )
+{
+ // Clearly scaling stroke-width for fat lines is rather a problem
+ maPath.Scale( fXScale, fYScale );
+
+ double fScale = sqrt (fabs (fXScale * fYScale) ); // clearly not ideal.
+ fprintf( stderr, " HIT A SCALING ! by %g %g %g\n",
+ (double) fXScale, (double) fYScale, (double) fScale );
+ mfStrokeWidth *= fScale;
+ mfMiterLimit *= fScale;
+
+ maStartArrow.Scale( fXScale, fYScale );
+ maEndArrow.Scale( fXScale, fYScale );
+}
+
SvStream& operator<<( SvStream& rOStm, const SvtGraphicStroke& rClass )
{
VersionCompat aCompat( rOStm, STREAM_WRITE, 1 );
diff --git a/vcl/source/gdi/metaact.cxx b/vcl/source/gdi/metaact.cxx
index b63ca2d..c9c5e08 100644
--- a/vcl/source/gdi/metaact.cxx
+++ b/vcl/source/gdi/metaact.cxx
@@ -4066,10 +4066,7 @@ void MetaCommentAction::Scale( double fXScale, double fYScale )
{
SvtGraphicStroke aStroke;
aMemStm >> aStroke;
- Polygon aPath;
- aStroke.getPath( aPath );
- aPath.Scale( fXScale, fYScale );
- aStroke.setPath( aPath );
+ aStroke.scale( fXScale, fYScale );
aDest << aStroke;
}
else
commit 432b6ab482d6fcef05514ab17e4bc762ee552139
Author: Michael Meeks <michael.meeks at suse.com>
Date: Mon Mar 25 21:33:00 2013 +0000
fdo#61789 - move metafile line width scaling somewhere more sensible.
diff --git a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx b/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx
index f9d583d..9663384 100644
--- a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx
+++ b/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx
@@ -444,6 +444,15 @@ namespace drawinglayer
// pre-fill fLineWidth
fLineWidth = pLineAttribute->getWidth();
+ // #i113922# the LineWidth is duplicated in the MetaPolylineAction,
+ // and also inside the SvtGraphicStroke and needs transforming into
+ // the same space as its co-ordinates here cf. fdo#61789
+ // This is a partial fix. When a object transformation is used which
+ // e.g. contains a scaleX != scaleY, an unproportional scaling will happen.
+ const basegfx::B2DVector aDiscreteUnit(maCurrentTransformation *
+ basegfx::B2DVector(pLineAttribute->getWidth(), 0.0 ));
+ fLineWidth = aDiscreteUnit.getLength();
+
// pre-fill fMiterLength
fMiterLength = fLineWidth;
@@ -1233,11 +1242,8 @@ namespace drawinglayer
mpOutputDevice->SetFillColor();
aHairLinePolyPolygon.transform(maCurrentTransformation);
- // #i113922# LineWidth needs to be transformed, too
- const basegfx::B2DVector aDiscreteUnit(maCurrentTransformation * basegfx::B2DVector(rLine.getWidth(), 0.0));
- const double fDiscreteLineWidth(aDiscreteUnit.getLength());
-
- LineInfo aLineInfo(LINE_SOLID, basegfx::fround(fDiscreteLineWidth));
+ // use the transformed line width from the stroke info.
+ LineInfo aLineInfo(LINE_SOLID, basegfx::fround(pSvtGraphicStroke->getStrokeWidth()));
aLineInfo.SetLineJoin(rLine.getLineJoin());
aLineInfo.SetLineCap(rLine.getLineCap());
diff --git a/drawinglayer/source/processor2d/vclprocessor2d.cxx b/drawinglayer/source/processor2d/vclprocessor2d.cxx
index 8423069..92d843c 100644
--- a/drawinglayer/source/processor2d/vclprocessor2d.cxx
+++ b/drawinglayer/source/processor2d/vclprocessor2d.cxx
@@ -1350,7 +1350,7 @@ namespace drawinglayer
{
// #i101491# If the polygon complexity uses more than a given amount, do
// use OuputDevice::DrawPolyLine directly; this will avoid buffering all
- // decompositions in primtives (memory) and fallback to old line painting
+ // decompositions in primitives (memory) and fallback to old line painting
// for very complex polygons, too
for(sal_uInt32 a(0); a < nCount; a++)
{
More information about the Libreoffice-commits
mailing list