From d9b09a3ff38b2cf11ee0b9f9f03d47375f2b11e8 Mon Sep 17 00:00:00 2001 From: Thorsten Behrens Date: Thu, 27 Jun 2013 20:41:29 +0200 Subject: Fix fdo#65847 - avoid infinite recursion in style resolution. That was previously asking back the node for the font size, which was again asking the SvgNumber, which was ... In this case, if the node has relative sizes, this is always relative to the parent. Change-Id: Iaa81d0238d9eb73f5af24df347d12d7cb8ba8c0a --- svgio/source/svgreader/svgnode.cxx | 32 ++++++++++++++++++++------------ svgio/source/svgreader/svgtools.cxx | 4 ++-- 2 files changed, 22 insertions(+), 14 deletions(-) (limited to 'svgio/source/svgreader') diff --git a/svgio/source/svgreader/svgnode.cxx b/svgio/source/svgreader/svgnode.cxx index 3bc092d5ec3e..e1698e81c472 100644 --- a/svgio/source/svgreader/svgnode.cxx +++ b/svgio/source/svgreader/svgnode.cxx @@ -491,13 +491,9 @@ namespace svgio } } - double SvgNode::getCurrentFontSize() const + double SvgNode::getCurrentFontSizeInherited() const { - if(getSvgStyleAttributes()) - { - return getSvgStyleAttributes()->getFontSize().solve(*this, xcoordinate); - } - else if(getParent()) + if(getParent()) { return getParent()->getCurrentFontSize(); } @@ -507,14 +503,17 @@ namespace svgio } } - double SvgNode::getCurrentXHeight() const + double SvgNode::getCurrentFontSize() const { if(getSvgStyleAttributes()) - { - // for XHeight, use FontSize currently - return getSvgStyleAttributes()->getFontSize().solve(*this, ycoordinate); - } - else if(getParent()) + return getSvgStyleAttributes()->getFontSize().solve(*this, xcoordinate); + + return getCurrentFontSizeInherited(); + } + + double SvgNode::getCurrentXHeightInherited() const + { + if(getParent()) { return getParent()->getCurrentXHeight(); } @@ -524,6 +523,15 @@ namespace svgio } } + double SvgNode::getCurrentXHeight() const + { + if(getSvgStyleAttributes()) + // for XHeight, use FontSize currently + return getSvgStyleAttributes()->getFontSize().solve(*this, ycoordinate); + + return getCurrentXHeightInherited(); + } + void SvgNode::setId(const OUString* pfId) { if(mpId) diff --git a/svgio/source/svgreader/svgtools.cxx b/svgio/source/svgreader/svgtools.cxx index 2b89f0df6f1b..7607a439a3ed 100644 --- a/svgio/source/svgreader/svgtools.cxx +++ b/svgio/source/svgreader/svgtools.cxx @@ -159,11 +159,11 @@ namespace svgio { case Unit_em: { - return mfNumber * rInfoProvider.getCurrentFontSize(); + return mfNumber * rInfoProvider.getCurrentFontSizeInherited(); } case Unit_ex: { - return mfNumber * rInfoProvider.getCurrentXHeight() * 0.5; + return mfNumber * rInfoProvider.getCurrentXHeightInherited() * 0.5; } case Unit_px: { -- cgit