| Index: Source/core/rendering/svg/RenderSVGRect.cpp
|
| diff --git a/Source/core/rendering/svg/RenderSVGRect.cpp b/Source/core/rendering/svg/RenderSVGRect.cpp
|
| deleted file mode 100644
|
| index 1536bd9c2617ad52c5a016a46a32b74f9592ded2..0000000000000000000000000000000000000000
|
| --- a/Source/core/rendering/svg/RenderSVGRect.cpp
|
| +++ /dev/null
|
| @@ -1,139 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2011 University of Szeged
|
| - * Copyright (C) 2011 Renata Hodovan <reni@webkit.org>
|
| - * All rights reserved.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions
|
| - * are met:
|
| - * 1. Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * 2. Redistributions in binary form must reproduce the above copyright
|
| - * notice, this list of conditions and the following disclaimer in the
|
| - * documentation and/or other materials provided with the distribution.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS'' AND ANY
|
| - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
| - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
| - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
|
| - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
| - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
| - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
| - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
| - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -
|
| -#include "config.h"
|
| -
|
| -#include "core/rendering/svg/RenderSVGRect.h"
|
| -#include "core/svg/SVGRectElement.h"
|
| -
|
| -namespace blink {
|
| -
|
| -RenderSVGRect::RenderSVGRect(SVGRectElement* node)
|
| - : RenderSVGShape(node)
|
| - , m_usePathFallback(false)
|
| -{
|
| -}
|
| -
|
| -RenderSVGRect::~RenderSVGRect()
|
| -{
|
| -}
|
| -
|
| -void RenderSVGRect::updateShapeFromElement()
|
| -{
|
| - // Before creating a new object we need to clear the cached bounding box
|
| - // to avoid using garbage.
|
| - m_fillBoundingBox = FloatRect();
|
| - m_innerStrokeRect = FloatRect();
|
| - m_outerStrokeRect = FloatRect();
|
| - m_usePathFallback = false;
|
| - SVGRectElement* rect = toSVGRectElement(element());
|
| - ASSERT(rect);
|
| -
|
| - SVGLengthContext lengthContext(rect);
|
| - FloatSize boundingBoxSize(rect->width()->currentValue()->value(lengthContext), rect->height()->currentValue()->value(lengthContext));
|
| -
|
| - // Spec: "A negative value is an error."
|
| - if (boundingBoxSize.width() < 0 || boundingBoxSize.height() < 0)
|
| - return;
|
| -
|
| - // Spec: "A value of zero disables rendering of the element."
|
| - if (!boundingBoxSize.isEmpty()) {
|
| - // Fallback to RenderSVGShape and path-based hit detection if the rect
|
| - // has rounded corners or a non-scaling or non-simple stroke.
|
| - if (rect->rx()->currentValue()->value(lengthContext) > 0
|
| - || rect->ry()->currentValue()->value(lengthContext) > 0
|
| - || hasNonScalingStroke()
|
| - || !definitelyHasSimpleStroke()) {
|
| - RenderSVGShape::updateShapeFromElement();
|
| - m_usePathFallback = true;
|
| - return;
|
| - }
|
| - }
|
| -
|
| - m_fillBoundingBox = FloatRect(FloatPoint(rect->x()->currentValue()->value(lengthContext), rect->y()->currentValue()->value(lengthContext)), boundingBoxSize);
|
| -
|
| - // To decide if the stroke contains a point we create two rects which represent the inner and
|
| - // the outer stroke borders. A stroke contains the point, if the point is between them.
|
| - m_innerStrokeRect = m_fillBoundingBox;
|
| - m_outerStrokeRect = m_fillBoundingBox;
|
| -
|
| - if (style()->svgStyle().hasStroke()) {
|
| - float strokeWidth = this->strokeWidth();
|
| - m_innerStrokeRect.inflate(-strokeWidth / 2);
|
| - m_outerStrokeRect.inflate(strokeWidth / 2);
|
| - }
|
| -
|
| - m_strokeBoundingBox = m_outerStrokeRect;
|
| -}
|
| -
|
| -bool RenderSVGRect::shapeDependentStrokeContains(const FloatPoint& point)
|
| -{
|
| - // The optimized code below does not support non-simple strokes so we need
|
| - // to fall back to RenderSVGShape::shapeDependentStrokeContains in these cases.
|
| - if (m_usePathFallback || !definitelyHasSimpleStroke()) {
|
| - if (!hasPath())
|
| - RenderSVGShape::updateShapeFromElement();
|
| - return RenderSVGShape::shapeDependentStrokeContains(point);
|
| - }
|
| -
|
| - return m_outerStrokeRect.contains(point, FloatRect::InsideOrOnStroke) && !m_innerStrokeRect.contains(point, FloatRect::InsideButNotOnStroke);
|
| -}
|
| -
|
| -bool RenderSVGRect::shapeDependentFillContains(const FloatPoint& point, const WindRule fillRule) const
|
| -{
|
| - if (m_usePathFallback)
|
| - return RenderSVGShape::shapeDependentFillContains(point, fillRule);
|
| - return m_fillBoundingBox.contains(point.x(), point.y());
|
| -}
|
| -
|
| -// Returns true if the stroke is continuous and definitely uses miter joins.
|
| -bool RenderSVGRect::definitelyHasSimpleStroke() const
|
| -{
|
| - const SVGLayoutStyle& svgStyle = style()->svgStyle();
|
| -
|
| - // The four angles of a rect are 90 degrees. Using the formula at:
|
| - // http://www.w3.org/TR/SVG/painting.html#StrokeMiterlimitProperty
|
| - // when the join style of the rect is "miter", the ratio of the miterLength
|
| - // to the stroke-width is found to be
|
| - // miterLength / stroke-width = 1 / sin(45 degrees)
|
| - // = 1 / (1 / sqrt(2))
|
| - // = sqrt(2)
|
| - // = 1.414213562373095...
|
| - // When sqrt(2) exceeds the miterlimit, then the join style switches to
|
| - // "bevel". When the miterlimit is greater than or equal to sqrt(2) then
|
| - // the join style remains "miter".
|
| - //
|
| - // An approximation of sqrt(2) is used here because at certain precise
|
| - // miterlimits, the join style used might not be correct (e.g. a miterlimit
|
| - // of 1.4142135 should result in bevel joins, but may be drawn using miter
|
| - // joins).
|
| - return svgStyle.strokeDashArray()->isEmpty()
|
| - && svgStyle.joinStyle() == MiterJoin
|
| - && svgStyle.strokeMiterLimit() >= 1.5;
|
| -}
|
| -
|
| -}
|
|
|