Kaydet (Commit) 501f25e3 authored tarafından Chr. Rossmanith's avatar Chr. Rossmanith Kaydeden (comit) Christina Roßmanith

SVG: handle visibility property

improve import of masking-path-08-b.svg of the W3C svg test suite when using insert->media->image

Change-Id: Ib4d48165f982e394e2171ac82e6cc06911553904
Reviewed-on: https://gerrit.libreoffice.org/12168Reviewed-by: 's avatarChristina Roßmanith <ChrRossmanith@web.de>
Tested-by: 's avatarChristina Roßmanith <ChrRossmanith@web.de>
üst a51aa75d
...@@ -153,6 +153,14 @@ namespace svgio ...@@ -153,6 +153,14 @@ namespace svgio
BaselineShift_Length BaselineShift_Length
}; };
enum Visibility
{
Visibility_visible,
Visibility_hidden,
Visibility_collapse,
Visibility_inherit
};
class SvgStyleAttributes class SvgStyleAttributes
{ {
private: private:
...@@ -185,6 +193,7 @@ namespace svgio ...@@ -185,6 +193,7 @@ namespace svgio
TextAnchor maTextAnchor; TextAnchor maTextAnchor;
SvgPaint maColor; SvgPaint maColor;
SvgNumber maOpacity; SvgNumber maOpacity;
Visibility maVisibility;
OUString maTitle; OUString maTitle;
OUString maDesc; OUString maDesc;
...@@ -401,6 +410,10 @@ namespace svgio ...@@ -401,6 +410,10 @@ namespace svgio
SvgNumber getOpacity() const { return maOpacity; } SvgNumber getOpacity() const { return maOpacity; }
void setOpacity(const SvgNumber& rOpacity = SvgNumber()) { maOpacity = rOpacity; } void setOpacity(const SvgNumber& rOpacity = SvgNumber()) { maOpacity = rOpacity; }
/// Visibility
Visibility getVisibility() const { return maVisibility; }
void setVisibility(Visibility eVisibility) { maVisibility = eVisibility; }
// Title content // Title content
const OUString& getTitle() const { return maTitle; } const OUString& getTitle() const { return maTitle; }
void setTitle(const OUString& rNew) { maTitle = rNew; } void setTitle(const OUString& rNew) { maTitle = rNew; }
......
...@@ -102,6 +102,7 @@ namespace svgio ...@@ -102,6 +102,7 @@ namespace svgio
SVGTokenPatternContentUnits, SVGTokenPatternContentUnits,
SVGTokenPatternTransform, SVGTokenPatternTransform,
SVGTokenOpacity, SVGTokenOpacity,
SVGTokenVisibility,
SVGTokenTitle, SVGTokenTitle,
SVGTokenDesc, SVGTokenDesc,
......
...@@ -496,6 +496,12 @@ namespace svgio ...@@ -496,6 +496,12 @@ namespace svgio
return; return;
} }
const SvgStyleAttributes* pStyles = getSvgStyleAttributes();
if(pStyles && (Visibility_hidden == pStyles->getVisibility() || Visibility_collapse == pStyles->getVisibility()))
{
return;
}
if(!bReferenced) if(!bReferenced)
{ {
if(SVGTokenDefs == getType() || if(SVGTokenDefs == getType() ||
...@@ -534,16 +540,20 @@ namespace svgio ...@@ -534,16 +540,20 @@ namespace svgio
if(pCandidate && Display_none != pCandidate->getDisplay()) if(pCandidate && Display_none != pCandidate->getDisplay())
{ {
drawinglayer::primitive2d::Primitive2DSequence aNewTarget; const SvgStyleAttributes* pChildStyles = pCandidate->getSvgStyleAttributes();
if(pChildStyles && Visibility_hidden != pChildStyles->getVisibility())
{
drawinglayer::primitive2d::Primitive2DSequence aNewTarget;
pCandidate->decomposeSvgNode(aNewTarget, bReferenced); pCandidate->decomposeSvgNode(aNewTarget, bReferenced);
if(aNewTarget.hasElements()) if(aNewTarget.hasElements())
{ {
drawinglayer::primitive2d::appendPrimitive2DSequenceToPrimitive2DSequence(rTarget, aNewTarget); drawinglayer::primitive2d::appendPrimitive2DSequenceToPrimitive2DSequence(rTarget, aNewTarget);
}
} }
} }
else else if(!pCandidate)
{ {
OSL_ENSURE(false, "Null-Pointer in child node list (!)"); OSL_ENSURE(false, "Null-Pointer in child node list (!)");
} }
...@@ -551,8 +561,6 @@ namespace svgio ...@@ -551,8 +561,6 @@ namespace svgio
if(rTarget.hasElements()) if(rTarget.hasElements())
{ {
const SvgStyleAttributes* pStyles = getSvgStyleAttributes();
if(pStyles) if(pStyles)
{ {
// check if we have Title or Desc // check if we have Title or Desc
......
...@@ -1212,6 +1212,7 @@ namespace svgio ...@@ -1212,6 +1212,7 @@ namespace svgio
maTextAnchor(TextAnchor_notset), maTextAnchor(TextAnchor_notset),
maColor(), maColor(),
maOpacity(1.0), maOpacity(1.0),
maVisibility(Visibility_visible),
maTitle(), maTitle(),
maDesc(), maDesc(),
maClipPathXLink(), maClipPathXLink(),
...@@ -1736,6 +1737,29 @@ namespace svgio ...@@ -1736,6 +1737,29 @@ namespace svgio
} }
break; break;
} }
case SVGTokenVisibility:
{
if(!aContent.isEmpty())
{
if(aContent.startsWith("visible"))
{
setVisibility(Visibility_visible);
}
else if(aContent.startsWith("hidden"))
{
setVisibility(Visibility_hidden);
}
else if(aContent.startsWith("collapse"))
{
setVisibility(Visibility_collapse);
}
else if(aContent.startsWith("inherit"))
{
setVisibility(Visibility_inherit);
}
}
break;
}
case SVGTokenTitle: case SVGTokenTitle:
{ {
setTitle(aContent); setTitle(aContent);
......
...@@ -91,6 +91,7 @@ namespace svgio ...@@ -91,6 +91,7 @@ namespace svgio
static OUString aSVGStrPatternContentUnits("patternContentUnits"); static OUString aSVGStrPatternContentUnits("patternContentUnits");
static OUString aSVGStrPatternTransform("patternTransform"); static OUString aSVGStrPatternTransform("patternTransform");
static OUString aSVGStrOpacity("opacity"); static OUString aSVGStrOpacity("opacity");
static OUString aSVGStrVisibility("visibility");
static OUString aSVGStrTitle("title"); static OUString aSVGStrTitle("title");
static OUString aSVGStrDesc("desc"); static OUString aSVGStrDesc("desc");
...@@ -236,6 +237,7 @@ namespace svgio ...@@ -236,6 +237,7 @@ namespace svgio
aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrPatternContentUnits, SVGTokenPatternContentUnits)); aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrPatternContentUnits, SVGTokenPatternContentUnits));
aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrPatternTransform, SVGTokenPatternTransform)); aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrPatternTransform, SVGTokenPatternTransform));
aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrOpacity, SVGTokenOpacity)); aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrOpacity, SVGTokenOpacity));
aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrVisibility, SVGTokenVisibility));
aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrTitle, SVGTokenTitle)); aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrTitle, SVGTokenTitle));
aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrDesc, SVGTokenDesc)); aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrDesc, SVGTokenDesc));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment