svgio/inc/svgio/svgreader/svgstyleattributes.hxx | 23 +++- svgio/source/svgreader/svgcharacternode.cxx | 4 svgio/source/svgreader/svgnode.cxx | 4 svgio/source/svgreader/svgstyleattributes.cxx | 129 ++++++++++++++++++++--- 4 files changed, 140 insertions(+), 20 deletions(-)
New commits: commit 406cdc29039e5e65bacfcd635de8022642d63547 Author: Xisco Fauli <aniste...@gmail.com> Date: Sun Jan 17 19:17:46 2016 +0100 SVGIO: Add support to font-size keywords Similar to 0cae9c32ce9884a9809e220ba80b7c4cb4059565 Change-Id: Iac7a6bb30b36e51ea67a6c4f7b3421f480eeea57 Reviewed-on: https://gerrit.libreoffice.org/21542 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Armin Le Grand <armin.le.gr...@cib.de> diff --git a/svgio/inc/svgio/svgreader/svgstyleattributes.hxx b/svgio/inc/svgio/svgreader/svgstyleattributes.hxx index c227986..02cf55d 100644 --- a/svgio/inc/svgio/svgreader/svgstyleattributes.hxx +++ b/svgio/inc/svgio/svgreader/svgstyleattributes.hxx @@ -56,6 +56,21 @@ namespace svgio StrokeLinejoin_bevel }; + enum FontSize + { + FontSize_notset, + FontSize_xx_small, + FontSize_x_small, + FontSize_small, + FontSize_smaller, + FontSize_medium, + FontSize_large, + FontSize_larger, + FontSize_x_large, + FontSize_xx_large, + FontSize_initial + }; + enum FontStretch { FontStretch_notset, @@ -183,7 +198,8 @@ namespace svgio SvgNumber maStrokeMiterLimit; SvgNumber maStrokeOpacity; SvgStringVector maFontFamily; - SvgNumber maFontSize; + FontSize maFontSize; + SvgNumber maFontSizeNumber; FontStretch maFontStretch; FontStyle maFontStyle; FontVariant maFontVariant; @@ -369,8 +385,9 @@ namespace svgio void setFontFamily(const SvgStringVector& rSvgStringVector = SvgStringVector()) { maFontFamily = rSvgStringVector; } /// FontSize content - SvgNumber getFontSize() const; - void setFontSize(const SvgNumber& rFontSize = SvgNumber()) { maFontSize = rFontSize; } + void setFontSize(const FontSize aFontSize = FontSize_notset) { maFontSize = aFontSize; } + void setFontSizeNumber(const SvgNumber& rFontSize = SvgNumber()) { maFontSizeNumber = rFontSize; } + SvgNumber getFontSizeNumber() const; /// FontStretch content FontStretch getFontStretch() const; diff --git a/svgio/source/svgreader/svgcharacternode.cxx b/svgio/source/svgreader/svgcharacternode.cxx index 9cc4c23..e5bc0a5 100644 --- a/svgio/source/svgreader/svgcharacternode.cxx +++ b/svgio/source/svgreader/svgcharacternode.cxx @@ -272,8 +272,8 @@ namespace svgio bRTL, bBiDiStrong); - // prepare FontSize - double fFontWidth(rSvgStyleAttributes.getFontSize().solve(*this)); + // prepare FontSizeNumber + double fFontWidth(rSvgStyleAttributes.getFontSizeNumber().solve(*this)); double fFontHeight(fFontWidth); // prepare locale diff --git a/svgio/source/svgreader/svgnode.cxx b/svgio/source/svgreader/svgnode.cxx index 4e90d51..b1de51d 100644 --- a/svgio/source/svgreader/svgnode.cxx +++ b/svgio/source/svgreader/svgnode.cxx @@ -624,7 +624,7 @@ namespace svgio double SvgNode::getCurrentFontSize() const { if(getSvgStyleAttributes()) - return getSvgStyleAttributes()->getFontSize().solve(*this, xcoordinate); + return getSvgStyleAttributes()->getFontSizeNumber().solve(*this, xcoordinate); return getCurrentFontSizeInherited(); } @@ -645,7 +645,7 @@ namespace svgio { if(getSvgStyleAttributes()) // for XHeight, use FontSize currently - return getSvgStyleAttributes()->getFontSize().solve(*this, ycoordinate); + return getSvgStyleAttributes()->getFontSizeNumber().solve(*this, ycoordinate); return getCurrentXHeightInherited(); } diff --git a/svgio/source/svgreader/svgstyleattributes.cxx b/svgio/source/svgreader/svgstyleattributes.cxx index 1c93bd9..171545d 100644 --- a/svgio/source/svgreader/svgstyleattributes.cxx +++ b/svgio/source/svgreader/svgstyleattributes.cxx @@ -1201,6 +1201,7 @@ namespace svgio maStrokeOpacity(), maFontFamily(), maFontSize(), + maFontSizeNumber(), maFontStretch(FontStretch_notset), maFontStyle(FontStyle_notset), maFontVariant(FontVariant_notset), @@ -1484,11 +1485,57 @@ namespace svgio } case SVGTokenFontSize: { - SvgNumber aNum; - - if(readSingleNumber(aContent, aNum)) + if(!aContent.isEmpty()) { - setFontSize(aNum); + if(aContent.startsWith("xx-small")) + { + setFontSize(FontSize_xx_small); + } + else if(aContent.startsWith("x-small")) + { + setFontSize(FontSize_x_small); + } + else if(aContent.startsWith("small")) + { + setFontSize(FontSize_small); + } + else if(aContent.startsWith("smaller")) + { + setFontSize(FontSize_smaller); + } + else if(aContent.startsWith("medium")) + { + setFontSize(FontSize_medium); + } + else if(aContent.startsWith("larger")) + { + setFontSize(FontSize_larger); + } + else if(aContent.startsWith("large")) + { + setFontSize(FontSize_large); + } + else if(aContent.startsWith("x-large")) + { + setFontSize(FontSize_x_large); + } + else if(aContent.startsWith("xx-large")) + { + setFontSize(FontSize_xx_large); + } + else if(aContent.startsWith("initial")) + { + setFontSize(FontSize_initial); + } + else + { + SvgNumber aNum; + + if(readSingleNumber(aContent, aNum)) + { + setFontSizeNumber(aNum); + } + } } break; } @@ -2265,40 +2312,96 @@ namespace svgio return maFontFamily; } - SvgNumber SvgStyleAttributes::getFontSize() const + SvgNumber SvgStyleAttributes::getFontSizeNumber() const { - if(maFontSize.isSet()) + if(maFontSizeNumber.isSet()) { // #122524# Handle Unit_percent realtive to parent FontSize (see SVG1.1 // spec 10.10 Font selection properties \91font-size\92, lastline (click 'normative // definition of the property') - if(Unit_percent == maFontSize.getUnit()) + if(Unit_percent == maFontSizeNumber.getUnit()) { const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle(); if(pSvgStyleAttributes) { - const SvgNumber aParentNumber = pSvgStyleAttributes->getFontSize(); + const SvgNumber aParentNumber = pSvgStyleAttributes->getFontSizeNumber(); return SvgNumber( - aParentNumber.getNumber() * maFontSize.getNumber() * 0.01, + aParentNumber.getNumber() * maFontSizeNumber.getNumber() * 0.01, aParentNumber.getUnit(), true); } } - return maFontSize; + return maFontSizeNumber; + } + + // default is 'medium' + const double aDefaultSize = 12.0; + + //In CSS2, the suggested scaling factor between adjacent indexes is 1.2 + switch(maFontSize) + { + case FontSize_notset: + break; + case FontSize_xx_small: + { + return SvgNumber(aDefaultSize / 1.728); + } + case FontSize_x_small: + { + return SvgNumber(aDefaultSize / 1.44); + } + case FontSize_small: + { + return SvgNumber(aDefaultSize / 1.2); + } + case FontSize_smaller: + { + const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle(); + if(pSvgStyleAttributes) + { + const SvgNumber aParentNumber = pSvgStyleAttributes->getFontSizeNumber(); + return SvgNumber(aParentNumber.getNumber() / 1.2, aParentNumber.getUnit()); + } + } + case FontSize_medium: + case FontSize_initial: + { + return SvgNumber(aDefaultSize); + } + case FontSize_large: + { + return SvgNumber(aDefaultSize * 1.2); + } + case FontSize_larger: + { + const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle(); + if(pSvgStyleAttributes) + { + const SvgNumber aParentNumber = pSvgStyleAttributes->getFontSizeNumber(); + return SvgNumber(aParentNumber.getNumber() * 1.2, aParentNumber.getUnit()); + } + } + case FontSize_x_large: + { + return SvgNumber(aDefaultSize * 1.44); + } + case FontSize_xx_large: + { + return SvgNumber(aDefaultSize * 1.728); + } } const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle(); if(pSvgStyleAttributes) { - return pSvgStyleAttributes->getFontSize(); + return pSvgStyleAttributes->getFontSizeNumber(); } - // default is 'medium' - return SvgNumber(12.0); + return SvgNumber(aDefaultSize); } FontStretch SvgStyleAttributes::getFontStretch() const _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits