From 075f0302cd57aac01b72a02a18bc0ebecb4920df Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Sat, 28 Jun 2008 10:58:57 +0000 Subject: [PATCH] consider also the Stroke child of Path elements svn path=/trunk/KDE/kdegraphics/okular/; revision=825466 --- generators/xps/generator_xps.cpp | 21 ++++++++++++++++++++- generators/xps/generator_xps.h | 1 + 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/generators/xps/generator_xps.cpp b/generators/xps/generator_xps.cpp index 9ef40614b..9a4fd9ddd 100644 --- a/generators/xps/generator_xps.cpp +++ b/generators/xps/generator_xps.cpp @@ -847,6 +847,17 @@ void XpsHandler::processFill( XpsRenderNode &node ) } } +void XpsHandler::processStroke( XpsRenderNode &node ) +{ + //TODO Ignored child elements: RadialGradientBrush, VirtualBrush + + if (node.children.size() != 1) { + kDebug(XpsDebug) << "Stroke element should have exactly one child"; + } else { + node.data = node.children[0].data; + } +} + void XpsHandler::processImageBrush( XpsRenderNode &node ) { //TODO Ignored attributes: Opacity, x:key, TileMode, ViewBoxUnits, ViewPortUnits @@ -889,7 +900,7 @@ void XpsHandler::processImageBrush( XpsRenderNode &node ) void XpsHandler::processPath( XpsRenderNode &node ) { //TODO Ignored attributes: Clip, OpacityMask, StrokeEndLineCap, StorkeStartLineCap, Name, FixedPage.NavigateURI, xml:lang, x:key, AutomationProperties.Name, AutomationProperties.HelpText, SnapsToDevicePixels - //TODO Ignored child elements: RenderTransform, Clip, OpacityMask, Stroke, Data + //TODO Ignored child elements: RenderTransform, Clip, OpacityMask, Data // Handled separately: RenderTransform m_painter->save(); @@ -926,6 +937,12 @@ void XpsHandler::processPath( XpsRenderNode &node ) QPen pen( Qt::transparent ); if (! att.isEmpty() ) { pen = parseRscRefColorForPen( att ); + } else { + XpsFill * data = (XpsFill *)node.getChildData( "Path.Stroke" ); + if (data != NULL) { + pen.setBrush( *data ); + delete data; + } } att = node.attributes.value( "StrokeThickness" ); if (! att.isEmpty() ) { @@ -1038,6 +1055,8 @@ void XpsHandler::processEndElement( XpsRenderNode &node ) m_painter->restore(); } else if ((node.name == "Path.Fill") || (node.name == "Glyphs.Fill")) { processFill( node ); + } else if (node.name == "Path.Stroke") { + processStroke( node ); } else if (node.name == "SolidColorBrush") { //TODO Ignoring opacity, x:key node.data = new QBrush( QColor (hexToRgba( node.attributes.value( "Color" ).toLatin1() ) ) ); diff --git a/generators/xps/generator_xps.h b/generators/xps/generator_xps.h index 7638ea17b..30091dd2b 100644 --- a/generators/xps/generator_xps.h +++ b/generators/xps/generator_xps.h @@ -107,6 +107,7 @@ protected: void processGlyph( XpsRenderNode &node ); void processPath( XpsRenderNode &node ); void processFill( XpsRenderNode &node ); + void processStroke( XpsRenderNode &node ); void processImageBrush (XpsRenderNode &node ); QPainter *m_painter;