diff options
author | Armin Le Grand <alg@apache.org> | 2013-05-15 08:47:52 +0000 |
---|---|---|
committer | Armin Le Grand <alg@apache.org> | 2013-05-15 08:47:52 +0000 |
commit | 4f49f1d95e8d0be7df259ad1458441fd858be735 (patch) | |
tree | 690898c7864d1ca98d933b5dffbd22e11aebb8e0 /svgio/source/svgreader | |
parent | 58d204292c12eb5237106d223251d8855aca3ca2 (diff) |
i121801 Corrected handling of gradient transformations
Notes
Notes:
merged as: b7a425aab6122b5848362815e5fe665c7e38da05
Diffstat (limited to 'svgio/source/svgreader')
-rw-r--r-- | svgio/source/svgreader/svggnode.cxx | 2 | ||||
-rw-r--r-- | svgio/source/svgreader/svgnode.cxx | 193 | ||||
-rw-r--r-- | svgio/source/svgreader/svgstyleattributes.cxx | 19 |
3 files changed, 120 insertions, 94 deletions
diff --git a/svgio/source/svgreader/svggnode.cxx b/svgio/source/svgreader/svggnode.cxx index 6d37dbf3e048..9498a883893f 100644 --- a/svgio/source/svgreader/svggnode.cxx +++ b/svgio/source/svgreader/svggnode.cxx @@ -96,7 +96,7 @@ namespace svgio { const double fOpacity(pStyle->getOpacity().getNumber()); - if(fOpacity > 0.0) + if(fOpacity > 0.0 && Display_none != getDisplay()) { drawinglayer::primitive2d::Primitive2DSequence aContent; diff --git a/svgio/source/svgreader/svgnode.cxx b/svgio/source/svgreader/svgnode.cxx index 50b51b897055..4a6f266d6c1a 100644 --- a/svgio/source/svgreader/svgnode.cxx +++ b/svgio/source/svgreader/svgnode.cxx @@ -194,6 +194,107 @@ namespace svgio } } + Display getDisplayFromContent(const rtl::OUString& aContent) + { + if(aContent.getLength()) + { + static rtl::OUString aStrInline(rtl::OUString::createFromAscii("inline")); + static rtl::OUString aStrBlock(rtl::OUString::createFromAscii("block")); + static rtl::OUString aStrList_item(rtl::OUString::createFromAscii("list-item")); + static rtl::OUString aStrRun_in(rtl::OUString::createFromAscii("run-in")); + static rtl::OUString aStrCompact(rtl::OUString::createFromAscii("compact")); + static rtl::OUString aStrMarker(rtl::OUString::createFromAscii("marker")); + static rtl::OUString aStrTable(rtl::OUString::createFromAscii("table")); + static rtl::OUString aStrInline_table(rtl::OUString::createFromAscii("inline-table")); + static rtl::OUString aStrTable_row_group(rtl::OUString::createFromAscii("table-row-group")); + static rtl::OUString aStrTable_header_group(rtl::OUString::createFromAscii("table-header-group")); + static rtl::OUString aStrTable_footer_group(rtl::OUString::createFromAscii("table-footer-group")); + static rtl::OUString aStrTable_row(rtl::OUString::createFromAscii("table-row")); + static rtl::OUString aStrTable_column_group(rtl::OUString::createFromAscii("table-column-group")); + static rtl::OUString aStrTable_column(rtl::OUString::createFromAscii("table-column")); + static rtl::OUString aStrTable_cell(rtl::OUString::createFromAscii("table-cell")); + static rtl::OUString aStrTable_caption(rtl::OUString::createFromAscii("table-caption")); + static rtl::OUString aStrNone(rtl::OUString::createFromAscii("none")); + static rtl::OUString aStrInherit(rtl::OUString::createFromAscii("inherit")); + + if(aContent.match(aStrInline)) + { + return Display_inline; + } + else if(aContent.match(aStrNone)) + { + return Display_none; + } + else if(aContent.match(aStrInherit)) + { + return Display_inherit; + } + else if(aContent.match(aStrBlock)) + { + return Display_block; + } + else if(aContent.match(aStrList_item)) + { + return Display_list_item; + } + else if(aContent.match(aStrRun_in)) + { + return Display_run_in; + } + else if(aContent.match(aStrCompact)) + { + return Display_compact; + } + else if(aContent.match(aStrMarker)) + { + return Display_marker; + } + else if(aContent.match(aStrTable)) + { + return Display_table; + } + else if(aContent.match(aStrInline_table)) + { + return Display_inline_table; + } + else if(aContent.match(aStrTable_row_group)) + { + return Display_table_row_group; + } + else if(aContent.match(aStrTable_header_group)) + { + return Display_table_header_group; + } + else if(aContent.match(aStrTable_footer_group)) + { + return Display_table_footer_group; + } + else if(aContent.match(aStrTable_row)) + { + return Display_table_row; + } + else if(aContent.match(aStrTable_column_group)) + { + return Display_table_column_group; + } + else if(aContent.match(aStrTable_column)) + { + return Display_table_column; + } + else if(aContent.match(aStrTable_cell)) + { + return Display_table_cell; + } + else if(aContent.match(aStrTable_caption)) + { + return Display_table_caption; + } + } + + // return the default + return Display_inline; + } + void SvgNode::parseAttribute(const rtl::OUString& /*rTokenName*/, SVGToken aSVGToken, const rtl::OUString& aContent) { switch(aSVGToken) @@ -236,97 +337,7 @@ namespace svgio { if(aContent.getLength()) { - static rtl::OUString aStrInline(rtl::OUString::createFromAscii("inline")); - static rtl::OUString aStrBlock(rtl::OUString::createFromAscii("block")); - static rtl::OUString aStrList_item(rtl::OUString::createFromAscii("list-item")); - static rtl::OUString aStrRun_in(rtl::OUString::createFromAscii("run-in")); - static rtl::OUString aStrCompact(rtl::OUString::createFromAscii("compact")); - static rtl::OUString aStrMarker(rtl::OUString::createFromAscii("marker")); - static rtl::OUString aStrTable(rtl::OUString::createFromAscii("table")); - static rtl::OUString aStrInline_table(rtl::OUString::createFromAscii("inline-table")); - static rtl::OUString aStrTable_row_group(rtl::OUString::createFromAscii("table-row-group")); - static rtl::OUString aStrTable_header_group(rtl::OUString::createFromAscii("table-header-group")); - static rtl::OUString aStrTable_footer_group(rtl::OUString::createFromAscii("table-footer-group")); - static rtl::OUString aStrTable_row(rtl::OUString::createFromAscii("table-row")); - static rtl::OUString aStrTable_column_group(rtl::OUString::createFromAscii("table-column-group")); - static rtl::OUString aStrTable_column(rtl::OUString::createFromAscii("table-column")); - static rtl::OUString aStrTable_cell(rtl::OUString::createFromAscii("table-cell")); - static rtl::OUString aStrTable_caption(rtl::OUString::createFromAscii("table-caption")); - static rtl::OUString aStrNone(rtl::OUString::createFromAscii("none")); - static rtl::OUString aStrInherit(rtl::OUString::createFromAscii("inherit")); - - if(aContent.match(aStrInline)) - { - setDisplay(Display_inline); - } - else if(aContent.match(aStrNone)) - { - setDisplay(Display_none); - } - else if(aContent.match(aStrInherit)) - { - setDisplay(Display_inherit); - } - else if(aContent.match(aStrBlock)) - { - setDisplay(Display_block); - } - else if(aContent.match(aStrList_item)) - { - setDisplay(Display_list_item); - } - else if(aContent.match(aStrRun_in)) - { - setDisplay(Display_run_in); - } - else if(aContent.match(aStrCompact)) - { - setDisplay(Display_compact); - } - else if(aContent.match(aStrMarker)) - { - setDisplay(Display_marker); - } - else if(aContent.match(aStrTable)) - { - setDisplay(Display_table); - } - else if(aContent.match(aStrInline_table)) - { - setDisplay(Display_inline_table); - } - else if(aContent.match(aStrTable_row_group)) - { - setDisplay(Display_table_row_group); - } - else if(aContent.match(aStrTable_header_group)) - { - setDisplay(Display_table_header_group); - } - else if(aContent.match(aStrTable_footer_group)) - { - setDisplay(Display_table_footer_group); - } - else if(aContent.match(aStrTable_row)) - { - setDisplay(Display_table_row); - } - else if(aContent.match(aStrTable_column_group)) - { - setDisplay(Display_table_column_group); - } - else if(aContent.match(aStrTable_column)) - { - setDisplay(Display_table_column); - } - else if(aContent.match(aStrTable_cell)) - { - setDisplay(Display_table_cell); - } - else if(aContent.match(aStrTable_caption)) - { - setDisplay(Display_table_caption); - } + setDisplay(getDisplayFromContent(aContent)); } break; } diff --git a/svgio/source/svgreader/svgstyleattributes.cxx b/svgio/source/svgreader/svgstyleattributes.cxx index 94d432448520..c9d181ddb924 100644 --- a/svgio/source/svgreader/svgstyleattributes.cxx +++ b/svgio/source/svgreader/svgstyleattributes.cxx @@ -318,10 +318,11 @@ namespace svgio if(!aSvgGradientEntryVector.empty()) { basegfx::B2DHomMatrix aGeoToUnit; + basegfx::B2DHomMatrix aGradientTransform; if(rFillGradient.getGradientTransform()) { - aGeoToUnit = *rFillGradient.getGradientTransform(); + aGradientTransform = *rFillGradient.getGradientTransform(); } if(userSpaceOnUse == rFillGradient.getGradientUnits()) @@ -366,6 +367,7 @@ namespace svgio drawinglayer::primitive2d::appendPrimitive2DReferenceToPrimitive2DSequence( rTarget, new drawinglayer::primitive2d::SvgLinearGradientPrimitive2D( + aGradientTransform, rPath, aSvgGradientEntryVector, aStart, @@ -427,6 +429,7 @@ namespace svgio drawinglayer::primitive2d::appendPrimitive2DReferenceToPrimitive2DSequence( rTarget, new drawinglayer::primitive2d::SvgRadialGradientPrimitive2D( + aGradientTransform, rPath, aSvgGradientEntryVector, aStart, @@ -1184,7 +1187,7 @@ namespace svgio { } - void SvgStyleAttributes::parseStyleAttribute(const rtl::OUString& /*rTokenName*/, SVGToken aSVGToken, const rtl::OUString& aContent) + void SvgStyleAttributes::parseStyleAttribute(const rtl::OUString& rTokenName, SVGToken aSVGToken, const rtl::OUString& aContent) { switch(aSVGToken) { @@ -1788,6 +1791,18 @@ namespace svgio readLocalUrl(aContent, maMarkerEndXLink); break; } + case SVGTokenDisplay: + { + // There may be display:none statements inside of style defines, e.g. the following line: + // style="display:none" + // taken from a svg example; this needs to be parsed and set at the owning node. Do not call + // mrOwner.parseAttribute(...) here, this would lead to a recursion + if(aContent.getLength()) + { + mrOwner.setDisplay(getDisplayFromContent(aContent)); + } + break; + } default: { break; |