RenderSVGViewportContainer.cpp [plain text]
#include "config.h"
#if ENABLE(SVG)
#include "RenderSVGViewportContainer.h"
#include "GraphicsContext.h"
#include "RenderView.h"
#include "SVGSVGElement.h"
namespace WebCore {
RenderSVGViewportContainer::RenderSVGViewportContainer(SVGStyledElement* node)
: RenderSVGContainer(node)
{
}
void RenderSVGViewportContainer::applyViewportClip(PaintInfo& paintInfo)
{
if (SVGRenderBase::isOverflowHidden(this))
paintInfo.context->clip(m_viewport);
}
void RenderSVGViewportContainer::calcViewport()
{
SVGElement* svgelem = static_cast<SVGElement*>(node());
if (svgelem->hasTagName(SVGNames::svgTag)) {
SVGSVGElement* svg = static_cast<SVGSVGElement*>(node());
if (!selfNeedsLayout() && !svg->hasRelativeValues())
return;
float x = svg->x().value(svg);
float y = svg->y().value(svg);
float w = svg->width().value(svg);
float h = svg->height().value(svg);
m_viewport = FloatRect(x, y, w, h);
}
}
AffineTransform RenderSVGViewportContainer::viewportTransform() const
{
if (node()->hasTagName(SVGNames::svgTag)) {
SVGSVGElement* svg = static_cast<SVGSVGElement*>(node());
return svg->viewBoxToViewTransform(m_viewport.width(), m_viewport.height());
}
return AffineTransform();
}
const AffineTransform& RenderSVGViewportContainer::localToParentTransform() const
{
AffineTransform viewportTranslation(viewportTransform());
m_localToParentTransform = viewportTranslation.translateRight(m_viewport.x(), m_viewport.y());
return m_localToParentTransform;
}
bool RenderSVGViewportContainer::pointIsInsideViewportClip(const FloatPoint& pointInParent)
{
if (!SVGRenderBase::isOverflowHidden(this))
return true;
return m_viewport.contains(pointInParent);
}
}
#endif // ENABLE(SVG)