[Libreoffice-commits] core.git: 3 commits - drawinglayer/source filter/source include/vcl scripting/source vcl/source
Caolán McNamara
caolanm at redhat.com
Mon Jun 17 05:50:53 PDT 2013
drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx | 29 +-
filter/source/svg/svgwriter.cxx | 152 ++++++++-----
include/vcl/graphictools.hxx | 28 ++
scripting/source/pyprov/mailmerge.py | 11
vcl/source/gdi/graphictools.cxx | 11
vcl/source/gdi/metaact.cxx | 14 +
6 files changed, 172 insertions(+), 73 deletions(-)
New commits:
commit 06f22f5ae0eafe094b280f03c770eebdbb33d403
Author: Caolán McNamara <caolanm at redhat.com>
Date: Mon Jun 17 11:08:15 2013 +0100
Resolves: fdo#55411 python 2 vs 3 str/bytes encoding issues
Change-Id: Ic1aac1609f3a1fcbd0af9a1c9ecc07a735c8785a
diff --git a/scripting/source/pyprov/mailmerge.py b/scripting/source/pyprov/mailmerge.py
index 18b476c..f70f034 100755
--- a/scripting/source/pyprov/mailmerge.py
+++ b/scripting/source/pyprov/mailmerge.py
@@ -239,11 +239,14 @@ class PyMailSMTPService(unohelper.Base, XSmtpService):
encode_base64(msgattachment)
fname = attachment.ReadableName
try:
- fname.encode('ascii')
+ msgattachment.add_header('Content-Disposition', 'attachment', \
+ filename=fname)
except:
- fname = ('utf-8','',fname.encode('utf-8'))
- msgattachment.add_header('Content-Disposition', 'attachment', \
- filename=fname)
+ msgattachment.add_header('Content-Disposition', 'attachment', \
+ filename=('utf-8','',fname))
+ if dbg:
+ print(("PyMailSMTPService attachmentheader: ", str(msgattachment)), file=dbgout)
+
msg.attach(msgattachment)
uniquer = {}
commit 64aed8554510ec3c288ccc247701cf048df59860
Author: Armin Le Grand <alg at apache.org>
Date: Wed Apr 24 16:26:20 2013 +0000
Resolves: #i122132# Some simple extensions to exporter
(cherry picked from commit 3454d18694e0ddcf9bc71661bf48c37450fa1fab)
Conflicts:
filter/source/svg/svgwriter.cxx
Change-Id: I2f9d96ffce0d51695a665b58a776807bab5d277e
diff --git a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx b/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx
index 59080d3..83238c0 100644
--- a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx
+++ b/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx
@@ -402,6 +402,7 @@ namespace drawinglayer
if(rB2DPolygon.count() && !mnSvtGraphicStrokeCount)
{
+ basegfx::B2DPolygon aLocalPolygon(rB2DPolygon);
basegfx::BColor aStrokeColor;
basegfx::B2DPolyPolygon aStartArrow;
basegfx::B2DPolyPolygon aEndArrow;
@@ -419,29 +420,37 @@ namespace drawinglayer
// SvtGraphicStroke has NO entry for stroke color(!)
mpOutputDevice->SetLineColor(Color(aStrokeColor));
- if(!rB2DPolygon.isClosed())
+ if(!aLocalPolygon.isClosed())
{
double fPolyLength(0.0);
+ double fStart(0.0);
+ double fEnd(0.0);
if(pStart && pStart->isActive())
{
- fPolyLength = basegfx::tools::getLength(rB2DPolygon);
+ fPolyLength = basegfx::tools::getLength(aLocalPolygon);
aStartArrow = basegfx::tools::createAreaGeometryForLineStartEnd(
- rB2DPolygon, pStart->getB2DPolyPolygon(), true, pStart->getWidth(),
- fPolyLength, pStart->isCentered() ? 0.5 : 0.0, 0);
+ aLocalPolygon, pStart->getB2DPolyPolygon(), true, pStart->getWidth(),
+ fPolyLength, pStart->isCentered() ? 0.5 : 0.0, &fStart);
}
if(pEnd && pEnd->isActive())
{
if(basegfx::fTools::equalZero(fPolyLength))
{
- fPolyLength = basegfx::tools::getLength(rB2DPolygon);
+ fPolyLength = basegfx::tools::getLength(aLocalPolygon);
}
aEndArrow = basegfx::tools::createAreaGeometryForLineStartEnd(
- rB2DPolygon, pEnd->getB2DPolyPolygon(), false, pEnd->getWidth(),
- fPolyLength, pEnd->isCentered() ? 0.5 : 0.0, 0);
+ aLocalPolygon, pEnd->getB2DPolyPolygon(), false, pEnd->getWidth(),
+ fPolyLength, pEnd->isCentered() ? 0.5 : 0.0, &fEnd);
+ }
+
+ if(0.0 != fStart || 0.0 != fEnd)
+ {
+ // build new poly, consume something from old poly
+ aLocalPolygon = basegfx::tools::getSnippetAbsolute(aLocalPolygon, fStart, fPolyLength - fEnd, fPolyLength);
}
}
@@ -517,14 +526,12 @@ namespace drawinglayer
// concept of PDF export and SvtGraphicStroke usage does simply not
// allow handling such definitions. The only clean way would be to
// add the transformation to SvtGraphicStroke and to handle it there
- basegfx::B2DPolygon aB2DPolygon(rB2DPolygon);
-
- aB2DPolygon.transform(maCurrentTransformation);
+ aLocalPolygon.transform(maCurrentTransformation);
aStartArrow.transform(maCurrentTransformation);
aEndArrow.transform(maCurrentTransformation);
pRetval = new SvtGraphicStroke(
- Polygon(aB2DPolygon),
+ Polygon(aLocalPolygon),
PolyPolygon(aStartArrow),
PolyPolygon(aEndArrow),
mfCurrentUnifiedTransparence,
diff --git a/filter/source/svg/svgwriter.cxx b/filter/source/svg/svgwriter.cxx
index d1f3c4a..f48cdde 100644
--- a/filter/source/svg/svgwriter.cxx
+++ b/filter/source/svg/svgwriter.cxx
@@ -2805,6 +2805,14 @@ void SVGActionWriter::ImplWriteActions( const GDIMetaFile& rMtf,
if( rPoly.GetSize() )
{
+ const LineInfo& rLineInfo = pA->GetLineInfo();
+
+ if(rLineInfo.GetWidth())
+ {
+ sal_Int32 nStrokeWidth = ImplMap(rLineInfo.GetWidth());
+ mrExport.AddAttribute( XML_NAMESPACE_NONE, aXMLAttrStrokeWidth, OUString::valueOf( nStrokeWidth ) );
+ }
+
mpContext->AddPaintAttr( mpVDev->GetLineColor(), Color( COL_TRANSPARENT ) );
ImplAddLineAttr( pA->GetLineInfo() );
ImplWritePolyPolygon( rPoly, sal_True );
@@ -3043,83 +3051,109 @@ void SVGActionWriter::ImplWriteActions( const GDIMetaFile& rMtf,
aStroke.getEndArrow( aEndArrow );
// Currently no support for strokes with start/end arrow(s)
- sal_Bool bSkip = ( !aStartArrow.Count() && !aEndArrow.Count() );
-
- if( bSkip )
- {
- Polygon aPoly;
+ // added that support
+ Polygon aPoly;
- aStroke.getPath(aPoly);
+ aStroke.getPath(aPoly);
- if(mapCurShape.get())
+ if(mapCurShape.get())
+ {
+ if(1 != mapCurShape->maShapePolyPoly.Count()
+ || !mapCurShape->maShapePolyPoly[0].IsEqual(aPoly))
{
- if(1 != mapCurShape->maShapePolyPoly.Count()
- || !mapCurShape->maShapePolyPoly[0].IsEqual(aPoly))
- {
- // this path action is not covering the same path than the already existing
- // fill polypolygon, so write out the fill polygon
- ImplWriteShape( *mapCurShape );
- mapCurShape.reset();
- }
+ // this path action is not covering the same path than the already existing
+ // fill polypolygon, so write out the fill polygon
+ ImplWriteShape( *mapCurShape );
+ mapCurShape.reset();
}
+ }
- if( !mapCurShape.get() )
- {
- mapCurShape.reset( new SVGShapeDescriptor );
+ if( !mapCurShape.get() )
+ {
- if( pElementId )
- {
- mapCurShape->maId = *pElementId + "_" + OUString::valueOf(nEntryCount++);
- }
+ mapCurShape.reset( new SVGShapeDescriptor );
- aStroke.getPath( aPoly );
- mapCurShape->maShapePolyPoly = aPoly;
+ if( pElementId )
+ {
+ mapCurShape->maId = *pElementId + "_" + OUString::valueOf(nEntryCount++);
}
- mapCurShape->maShapeLineColor = mpVDev->GetLineColor();
- mapCurShape->maShapeLineColor.SetTransparency( (sal_uInt8) FRound( aStroke.getTransparency() * 255.0 ) );
- mapCurShape->mnStrokeWidth = FRound( aStroke.getStrokeWidth() );
- aStroke.getDashArray( mapCurShape->maDashArray );
+ mapCurShape->maShapePolyPoly = aPoly;
}
- // support for LineJoin
+ mapCurShape->maShapeLineColor = mpVDev->GetLineColor();
+ mapCurShape->maShapeLineColor.SetTransparency( (sal_uInt8) FRound( aStroke.getTransparency() * 255.0 ) );
+ mapCurShape->mnStrokeWidth = FRound( aStroke.getStrokeWidth() );
+ aStroke.getDashArray( mapCurShape->maDashArray );
+
+ // added support for LineJoin
switch(aStroke.getJoinType())
{
- default: /* SvtGraphicStroke::joinMiter, SvtGraphicStroke::joinNone */
- {
- mapCurShape->maLineJoin = basegfx::B2DLINEJOIN_MITER;
- break;
- }
- case SvtGraphicStroke::joinRound:
- {
- mapCurShape->maLineJoin = basegfx::B2DLINEJOIN_ROUND;
- break;
- }
- case SvtGraphicStroke::joinBevel:
- {
- mapCurShape->maLineJoin = basegfx::B2DLINEJOIN_BEVEL;
- break;
- }
+ default: /* SvtGraphicStroke::joinMiter, SvtGraphicStroke::joinNone */
+ {
+ mapCurShape->maLineJoin = basegfx::B2DLINEJOIN_MITER;
+ break;
+ }
+ case SvtGraphicStroke::joinRound:
+ {
+ mapCurShape->maLineJoin = basegfx::B2DLINEJOIN_ROUND;
+ break;
+ }
+ case SvtGraphicStroke::joinBevel:
+ {
+ mapCurShape->maLineJoin = basegfx::B2DLINEJOIN_BEVEL;
+ break;
+ }
}
- // support for LineCap
+ // added support for LineCap
switch(aStroke.getCapType())
{
- default: /* SvtGraphicStroke::capButt */
- {
- mapCurShape->maLineCap = com::sun::star::drawing::LineCap_BUTT;
- break;
- }
- case SvtGraphicStroke::capRound:
- {
- mapCurShape->maLineCap = com::sun::star::drawing::LineCap_ROUND;
- break;
+ default: /* SvtGraphicStroke::capButt */
+ {
+ mapCurShape->maLineCap = com::sun::star::drawing::LineCap_BUTT;
+ break;
+ }
+ case SvtGraphicStroke::capRound:
+ {
+ mapCurShape->maLineCap = com::sun::star::drawing::LineCap_ROUND;
+ break;
+ }
+ case SvtGraphicStroke::capSquare:
+ {
+ mapCurShape->maLineCap = com::sun::star::drawing::LineCap_SQUARE;
+ break;
+ }
}
- case SvtGraphicStroke::capSquare:
+
+ if(mapCurShape.get() &&(aStartArrow.Count() || aEndArrow.Count()))
{
- mapCurShape->maLineCap = com::sun::star::drawing::LineCap_SQUARE;
- break;
- }
+ ImplWriteShape( *mapCurShape );
+
+ mapCurShape->maShapeFillColor = mapCurShape->maShapeLineColor;
+ mapCurShape->maShapeLineColor = Color(COL_TRANSPARENT);
+ mapCurShape->mnStrokeWidth = 0;
+ mapCurShape->maDashArray.clear();
+ mapCurShape->maLineJoin = basegfx::B2DLINEJOIN_MITER;
+ mapCurShape->maLineCap = com::sun::star::drawing::LineCap_BUTT;
+
+ if(aStartArrow.Count())
+ {
+ mapCurShape->maShapePolyPoly = aStartArrow;
+ mapCurShape->maId = *pElementId + "_" + OUString::valueOf(nEntryCount++);
+
+ ImplWriteShape( *mapCurShape );
+ }
+
+ if(aEndArrow.Count())
+ {
+ mapCurShape->maShapePolyPoly = aEndArrow;
+ mapCurShape->maId = *pElementId + "_" + OUString::valueOf(nEntryCount++);
+
+ ImplWriteShape( *mapCurShape );
+ }
+
+ mapCurShape.reset();
}
// write open shape in every case
@@ -3130,6 +3164,8 @@ void SVGActionWriter::ImplWriteActions( const GDIMetaFile& rMtf,
}
// skip rest of comment
+ sal_Bool bSkip = true;
+
while( bSkip && ( ++nCurAction < nCount ) )
{
pAction = rMtf.GetAction( nCurAction );
diff --git a/vcl/source/gdi/metaact.cxx b/vcl/source/gdi/metaact.cxx
index ed066a2..64664d5 100644
--- a/vcl/source/gdi/metaact.cxx
+++ b/vcl/source/gdi/metaact.cxx
@@ -4040,20 +4040,34 @@ void MetaCommentAction::Move( long nXMove, long nYMove )
{
SvtGraphicStroke aStroke;
aMemStm >> aStroke;
+
Polygon aPath;
aStroke.getPath( aPath );
aPath.Move( nXMove, nYMove );
aStroke.setPath( aPath );
+
+ PolyPolygon aStartArrow;
+ aStroke.getStartArrow(aStartArrow);
+ aStartArrow.Move(nXMove, nYMove);
+ aStroke.setStartArrow(aStartArrow);
+
+ PolyPolygon aEndArrow;
+ aStroke.getEndArrow(aEndArrow);
+ aEndArrow.Move(nXMove, nYMove);
+ aStroke.setEndArrow(aEndArrow);
+
aDest << aStroke;
}
else
{
SvtGraphicFill aFill;
aMemStm >> aFill;
+
PolyPolygon aPath;
aFill.getPath( aPath );
aPath.Move( nXMove, nYMove );
aFill.setPath( aPath );
+
aDest << aFill;
}
delete[] mpData;
commit d7cebf0f211053960fba5c0bf1179df54fd35456
Author: Caolán McNamara <caolanm at redhat.com>
Date: Mon Jun 17 11:12:16 2013 +0100
restore SvtGraphicStroke::set[Start|End]Arrow
partial revert of 743e627bcfc9c87d806109fe6f3f4e2817b73dda
because we want to use that then unused code now
Change-Id: I94fe173dda053ce1b72b3b776a9855ce9ecc249b
diff --git a/include/vcl/graphictools.hxx b/include/vcl/graphictools.hxx
index 3600f1a..70a17fd 100644
--- a/include/vcl/graphictools.hxx
+++ b/include/vcl/graphictools.hxx
@@ -142,6 +142,34 @@ public:
// mutators
/// Set path to stroke
void setPath ( const Polygon& );
+ /** Set the polygon that is put at the start of the line
+
+ The polygon has to be in a special normalized position, and
+ already scaled to the desired size: the center of the stroked
+ path will meet the given polygon at (0,0) from negative y
+ values. Thus, an arrow would have its baseline on the x axis,
+ going upwards to positive y values. Furthermore, the polygon
+ also has to be scaled appropriately: the width of the joining
+ stroke is defined to be SvtGraphicStroke::normalizedArrowWidth
+ (0x10000), i.e. ranging from x=-0x8000 to x=0x8000. If your
+ arrow does have this width, it will fit every stroke with
+ every stroke width exactly.
+ */
+ void setStartArrow ( const PolyPolygon& );
+ /** Set the polygon that is put at the end of the line
+
+ The polygon has to be in a special normalized position, and
+ already scaled to the desired size: the center of the stroked
+ path will meet the given polygon at (0,0) from negative y
+ values. Thus, an arrow would have its baseline on the x axis,
+ going upwards to positive y values. Furthermore, the polygon
+ also has to be scaled appropriately: the width of the joining
+ stroke is defined to be SvtGraphicStroke::normalizedArrowWidth
+ (0x10000), i.e. ranging from x=-0x8000 to x=0x8000. If your
+ arrow does have this width, it will fit every stroke with
+ every stroke width exactly.
+ */
+ void setEndArrow ( const PolyPolygon& );
/// Affine scaling in both X and Y dimensions
void scale ( double fScaleX, double fScaleY );
diff --git a/vcl/source/gdi/graphictools.cxx b/vcl/source/gdi/graphictools.cxx
index 26cb977..1a0190a 100644
--- a/vcl/source/gdi/graphictools.cxx
+++ b/vcl/source/gdi/graphictools.cxx
@@ -111,6 +111,17 @@ void SvtGraphicStroke::setPath( const Polygon& rPoly )
maPath = rPoly;
}
+void SvtGraphicStroke::setStartArrow( const PolyPolygon& rPoly )
+{
+ maStartArrow = rPoly;
+}
+
+void SvtGraphicStroke::setEndArrow( const PolyPolygon& rPoly )
+{
+ maEndArrow = rPoly;
+}
+
+
void SvtGraphicStroke::scale( double fXScale, double fYScale )
{
// Clearly scaling stroke-width for fat lines is rather a problem
More information about the Libreoffice-commits
mailing list