...because the text style gets some properties added after style id
lookup. That leads to a stroke="none" and fill="none" style for a
rectangle following a text element with identical style.
With this patch the rectangle gets its own styleid and is rendered
correctly :-)
This is another step towards rendering coords-trans-03-t.svg as
expected...next step: text placement.
Christina
From b4a26d95edee5591fcf3f434628d29d8b52f6923 Mon Sep 17 00:00:00 2001
From: "Chr. Rossmanith" <Chr.Rossmanith@gmx.de>
Date: Sun, 29 Apr 2012 22:12:29 +0200
Subject: [PATCH] SVG: text elements and graphic elements should not share
style ids
---
filter/source/svg/gfxtypes.hxx | 8 ++++++--
filter/source/svg/svgreader.cxx | 7 +++++++
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/filter/source/svg/gfxtypes.hxx b/filter/source/svg/gfxtypes.hxx
index 24c4cbd..daca2be 100644
--- a/filter/source/svg/gfxtypes.hxx
+++ b/filter/source/svg/gfxtypes.hxx
@@ -173,10 +173,11 @@ struct State
maTransform(),
maViewport(),
maViewBox(),
+ mbIsText(false),
maFontFamily(), // app-default
mnFontSize(0),
- maFontStyle(RTL_CONSTASCII_USTRINGPARAM("normal")),
- maFontVariant(RTL_CONSTASCII_USTRINGPARAM("normal")),
+ maFontStyle("normal"),
+ maFontVariant("normal"),
mnFontWeight(400.0),
meTextAnchor(BEFORE),
meTextDisplayAlign(BEFORE),
@@ -211,6 +212,7 @@ struct State
basegfx::B2DRange maViewport;
basegfx::B2DRange maViewBox;
+ bool mbIsText;
rtl::OUString maFontFamily;
/** Absolute: xx-small=6.94 | x-small=8.33 | small=10 | medium=12 | large=14.4 | x-large=17.28
| xx-large=20.736
@@ -263,6 +265,7 @@ inline bool operator==(const State& rLHS, const State& rRHS )
rLHS.maTransform==rRHS.maTransform &&
rLHS.maViewport==rRHS.maViewport &&
rLHS.maViewBox==rRHS.maViewBox &&
+ rLHS.mbIsText==rRHS.mbIsText &&
rLHS.maFontFamily==rRHS.maFontFamily &&
rLHS.mnFontSize==rRHS.mnFontSize &&
rLHS.maFontStyle==rRHS.maFontStyle &&
@@ -309,6 +312,7 @@ struct StateHash
^ size_t(rState.maViewport.getHeight())
^ size_t(rState.maViewBox.getWidth())
^ size_t(rState.maViewBox.getHeight())
+ ^ size_t(rState.mbIsText)
^ size_t(rState.maFontFamily.hashCode())
^ size_t(rState.mnFontSize)
^ size_t(rState.maFontStyle.hashCode())
diff --git a/filter/source/svg/svgreader.cxx b/filter/source/svg/svgreader.cxx
index dfb33c8..2c0c09b 100644
--- a/filter/source/svg/svgreader.cxx
+++ b/filter/source/svg/svgreader.cxx
@@ -521,8 +521,12 @@ struct AnnotatingVisitor
rtl::Reference<SvXMLAttributeList> xAttrs( new SvXMLAttributeList() );
uno::Reference<xml::sax::XAttributeList> xUnoAttrs( xAttrs.get() );
+ if (XML_TEXT == nTagId)
+ rState.mbIsText = true;
std::pair<StatePool::iterator,
bool> aRes = mrStates.insert(rState);
+ SAL_INFO ("svg", "size " << mrStates.size() << " id " <<
const_cast<State&>(*aRes.first).mnStyleId);
+
if( !aRes.second )
return false; // not written
@@ -530,6 +534,8 @@ struct AnnotatingVisitor
// mnStyleId does not take part in hashing/comparison
const_cast<State&>(*aRes.first).mnStyleId = mnCurrStateId;
+ SAL_INFO ("svg", " --> " << const_cast<State&>(*aRes.first).mnStyleId);
+
mrStateMap.insert(std::make_pair(
mnCurrStateId,
rState));
@@ -750,6 +756,7 @@ struct AnnotatingVisitor
void writeStyle(const uno::Reference<xml::dom::XElement>& xElem, const sal_Int32 nTagId)
{
+ SAL_INFO ("svg", "writeStyle xElem " << xElem->getTagName());
sal_Int32 nEmulatedStyleId=0;
if( maCurrState.maDashArray.size() &&
maCurrState.meStrokeType != NONE )
--
1.7.9.5
Context
- [PATCH] SVG: text elements and graphic elements should not share style ids · Christina Roßmanith
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.