Kaydet (Commit) d41dc0bb authored tarafından Oliver-Rainer Wittmann's avatar Oliver-Rainer Wittmann

122600: solve access memory problem of <SvgSvgNode::getCurrentViewPort()>

üst f29c386d
......@@ -74,7 +74,7 @@ namespace svgio
const drawinglayer::primitive2d::Primitive2DSequence& getMarkerPrimitives() const;
/// InfoProvider support for % values
virtual const basegfx::B2DRange* getCurrentViewPort() const;
virtual const basegfx::B2DRange getCurrentViewPort() const;
/// viewBox content
const basegfx::B2DRange* getViewBox() const { return mpViewBox; }
......
......@@ -137,7 +137,7 @@ namespace svgio
const SvgNodeVector& getChildren() const { return maChildren; }
/// InfoProvider support for %, em and ex values
virtual const basegfx::B2DRange* getCurrentViewPort() const;
virtual const basegfx::B2DRange getCurrentViewPort() const;
virtual double getCurrentFontSize() const;
virtual double getCurrentXHeight() const;
......
......@@ -77,7 +77,7 @@ namespace svgio
const drawinglayer::primitive2d::Primitive2DSequence& getPatternPrimitives() const;
/// InfoProvider support for % values
virtual const basegfx::B2DRange* getCurrentViewPort() const;
virtual const basegfx::B2DRange getCurrentViewPort() const;
/// viewBox content
const basegfx::B2DRange* getViewBox() const;
......
......@@ -65,7 +65,7 @@ namespace svgio
// The returned 'CurrentViewPort' is the viewport as it is set by this svg element
// and as it is needed to resolve relative values in childs
// The method does not check for invalid width and height
virtual const basegfx::B2DRange* getCurrentViewPort() const;
virtual const basegfx::B2DRange getCurrentViewPort() const;
/// viewBox content
const basegfx::B2DRange* getViewBox() const { return mpViewBox; }
......
......@@ -68,7 +68,7 @@ namespace svgio
class InfoProvider
{
public:
virtual const basegfx::B2DRange* getCurrentViewPort() const = 0;
virtual const basegfx::B2DRange getCurrentViewPort() const = 0;
virtual double getCurrentFontSize() const = 0;
virtual double getCurrentXHeight() const = 0;
};
......
......@@ -196,11 +196,11 @@ namespace svgio
return aPrimitives;
}
const basegfx::B2DRange* SvgMarkerNode::getCurrentViewPort() const
const basegfx::B2DRange SvgMarkerNode::getCurrentViewPort() const
{
if(getViewBox())
{
return getViewBox();
return *(getViewBox());
}
else
{
......
......@@ -485,7 +485,7 @@ namespace svgio
}
}
const basegfx::B2DRange* SvgNode::getCurrentViewPort() const
const basegfx::B2DRange SvgNode::getCurrentViewPort() const
{
if(getParent())
{
......@@ -493,7 +493,7 @@ namespace svgio
}
else
{
return 0;
return basegfx::B2DRange(); // return empty B2DRange
}
}
......
......@@ -293,11 +293,11 @@ namespace svgio
return aPrimitives;
}
const basegfx::B2DRange* SvgPatternNode::getCurrentViewPort() const
const basegfx::B2DRange SvgPatternNode::getCurrentViewPort() const
{
if(getViewBox())
{
return getViewBox();
return *(getViewBox());
}
else
{
......
......@@ -605,11 +605,11 @@ namespace svgio
}
}
const basegfx::B2DRange* SvgSvgNode::getCurrentViewPort() const
const basegfx::B2DRange SvgSvgNode::getCurrentViewPort() const
{
if(getViewBox())
{
return getViewBox();
return *(getViewBox());
}
else // viewport should be given by x, y, width, and height
{
......@@ -633,7 +633,7 @@ namespace svgio
if (bXIsAbsolute && bYIsAbsolute && bWidthIsAbsolute && bHeightIsAbsolute)
{
return &basegfx::B2DRange(fX, fY, fX+fW, fY+fH);
return basegfx::B2DRange(fX, fY, fX+fW, fY+fH);
}
else // try to resolve relative values
{
......@@ -676,7 +676,7 @@ namespace svgio
if (bXIsAbsolute && bYIsAbsolute && bWidthIsAbsolute && bHeightIsAbsolute)
{
return &basegfx::B2DRange(fX, fY, fX+fW, fY+fH);
return basegfx::B2DRange(fX, fY, fX+fW, fY+fH);
}
else // relative values could not be resolved, there exists no fallback
{
......@@ -695,7 +695,7 @@ namespace svgio
double fH( bHeightIsAbsolute ? getHeight().solveNonPercentage(*this) : 0.0);
if (bWidthIsAbsolute && bHeightIsAbsolute)
{
return &basegfx::B2DRange(0.0, 0.0, fW, fH);
return basegfx::B2DRange(0.0, 0.0, fW, fH);
}
else // no fallback exists
{
......
......@@ -237,40 +237,39 @@ namespace svgio
case Unit_percent:
{
double fRetval(mfNumber * 0.01);
const basegfx::B2DRange* pViewPort = rInfoProvider.getCurrentViewPort();
basegfx::B2DRange aViewPort = rInfoProvider.getCurrentViewPort();
if(!pViewPort)
if ( aViewPort.isEmpty() )
{
#ifdef DBG_UTIL
myAssert(rtl::OUString::createFromAscii("Design error, this case should have been handled in the caller"));
#endif
// no viewPort, assume a normal page size (A4)
static basegfx::B2DRange aDinA4Range(
aViewPort = basegfx::B2DRange(
0.0,
0.0,
210.0 * F_SVG_PIXEL_PER_INCH / 2.54,
297.0 * F_SVG_PIXEL_PER_INCH / 2.54);
pViewPort = &aDinA4Range;
}
if(pViewPort)
if ( !aViewPort.isEmpty() )
{
if(xcoordinate == aNumberType)
{
// it's a x-coordinate, relative to current width (w)
fRetval *= pViewPort->getWidth();
fRetval *= aViewPort.getWidth();
}
else if(ycoordinate == aNumberType)
{
// it's a y-coordinate, relative to current height (h)
fRetval *= pViewPort->getHeight();
fRetval *= aViewPort.getHeight();
}
else // length
{
// it's a length, relative to sqrt(w*w + h*h)/sqrt(2)
const double fCurrentWidth(pViewPort->getWidth());
const double fCurrentHeight(pViewPort->getHeight());
const double fCurrentWidth(aViewPort.getWidth());
const double fCurrentHeight(aViewPort.getHeight());
const double fCurrentLength(
sqrt(fCurrentWidth * fCurrentWidth + fCurrentHeight * fCurrentHeight)/sqrt(2.0));
......
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