| Index: Source/core/rendering/shapes/RectangleShape.cpp
|
| diff --git a/Source/core/rendering/shapes/RectangleShape.cpp b/Source/core/rendering/shapes/RectangleShape.cpp
|
| index 329cebf76bb2f4fd26cef2abbb8acb3e909d6d21..5cf74cbc474302078607f1746082b3c063fafec1 100644
|
| --- a/Source/core/rendering/shapes/RectangleShape.cpp
|
| +++ b/Source/core/rendering/shapes/RectangleShape.cpp
|
| @@ -40,26 +40,6 @@ static inline float ellipseXIntercept(float y, float rx, float ry)
|
| return rx * sqrt(1 - (y * y) / (ry * ry));
|
| }
|
|
|
| -static inline float ellipseYIntercept(float x, float rx, float ry)
|
| -{
|
| - ASSERT(rx > 0);
|
| - return ry * sqrt(1 - (x * x) / (rx * rx));
|
| -}
|
| -
|
| -FloatRect RectangleShape::shapePaddingBounds() const
|
| -{
|
| - ASSERT(shapePadding() >= 0);
|
| - if (!shapePadding() || isEmpty())
|
| - return m_bounds;
|
| -
|
| - float boundsX = x() + std::min(width() / 2, shapePadding());
|
| - float boundsY = y() + std::min(height() / 2, shapePadding());
|
| - float boundsWidth = std::max(0.0f, width() - shapePadding() * 2);
|
| - float boundsHeight = std::max(0.0f, height() - shapePadding() * 2);
|
| -
|
| - return FloatRect(boundsX, boundsY, boundsWidth, boundsHeight);
|
| -}
|
| -
|
| FloatRect RectangleShape::shapeMarginBounds() const
|
| {
|
| ASSERT(shapeMargin() >= 0);
|
| @@ -108,113 +88,4 @@ void RectangleShape::getExcludedIntervals(LayoutUnit logicalTop, LayoutUnit logi
|
| result.append(LineSegment(x1, x2));
|
| }
|
|
|
| -void RectangleShape::getIncludedIntervals(LayoutUnit logicalTop, LayoutUnit logicalHeight, SegmentList& result) const
|
| -{
|
| - const FloatRect& bounds = shapePaddingBounds();
|
| - if (bounds.isEmpty())
|
| - return;
|
| -
|
| - float y1 = logicalTop.toFloat();
|
| - float y2 = (logicalTop + logicalHeight).toFloat();
|
| -
|
| - if (y1 < bounds.y() || y2 > bounds.maxY())
|
| - return;
|
| -
|
| - float x1 = bounds.x();
|
| - float x2 = bounds.maxX();
|
| -
|
| - float paddingRadiusX = std::max(0.0f, rx() - shapePadding());
|
| - float paddingRadiusY = std::max(0.0f, ry() - shapePadding());
|
| -
|
| - if (paddingRadiusX > 0) {
|
| - bool y1InterceptsCorner = y1 < bounds.y() + paddingRadiusY;
|
| - bool y2InterceptsCorner = y2 > bounds.maxY() - paddingRadiusY;
|
| - float xi = 0;
|
| -
|
| - if (y1InterceptsCorner && y2InterceptsCorner) {
|
| - if (y1 < bounds.height() + 2 * bounds.y() - y2) {
|
| - float yi = y1 - bounds.y() - paddingRadiusY;
|
| - xi = ellipseXIntercept(yi, paddingRadiusX, paddingRadiusY);
|
| - } else {
|
| - float yi = y2 - (bounds.maxY() - paddingRadiusY);
|
| - xi = ellipseXIntercept(yi, paddingRadiusX, paddingRadiusY);
|
| - }
|
| - } else if (y1InterceptsCorner) {
|
| - float yi = y1 - bounds.y() - paddingRadiusY;
|
| - xi = ellipseXIntercept(yi, paddingRadiusX, paddingRadiusY);
|
| - } else if (y2InterceptsCorner) {
|
| - float yi = y2 - (bounds.maxY() - paddingRadiusY);
|
| - xi = ellipseXIntercept(yi, paddingRadiusX, paddingRadiusY);
|
| - }
|
| -
|
| - if (y1InterceptsCorner || y2InterceptsCorner) {
|
| - x1 = bounds.x() + paddingRadiusX - xi;
|
| - x2 = bounds.maxX() - paddingRadiusX + xi;
|
| - }
|
| - }
|
| -
|
| - result.append(LineSegment(x1, x2));
|
| -}
|
| -
|
| -static FloatPoint cornerInterceptForWidth(float width, float widthAtIntercept, float rx, float ry)
|
| -{
|
| - float xi = (width - widthAtIntercept) / 2;
|
| - float yi = ry - ellipseYIntercept(rx - xi, rx, ry);
|
| - return FloatPoint(xi, yi);
|
| -}
|
| -
|
| -bool RectangleShape::firstIncludedIntervalLogicalTop(LayoutUnit minLogicalIntervalTop, const FloatSize& minLogicalIntervalSize, LayoutUnit& result) const
|
| -{
|
| - float minIntervalTop = minLogicalIntervalTop.toFloat();
|
| - float minIntervalHeight = minLogicalIntervalSize.height();
|
| - float minIntervalWidth = minLogicalIntervalSize.width();
|
| -
|
| - const FloatRect& bounds = shapePaddingBounds();
|
| - if (bounds.isEmpty() || minIntervalWidth > bounds.width())
|
| - return false;
|
| -
|
| - // FIXME: Shapes should be made to use LayoutUnits to avoid broken constructs like this.
|
| - float minY = LayoutUnit::fromFloatCeil(std::max(bounds.y(), minIntervalTop)).toFloat();
|
| - float maxY = minY + minIntervalHeight;
|
| -
|
| - if (maxY > bounds.maxY())
|
| - return false;
|
| -
|
| - float paddingRadiusX = std::max(0.0f, rx() - shapePadding());
|
| - float paddingRadiusY = std::max(0.0f, ry() - shapePadding());
|
| -
|
| - bool intervalOverlapsMinCorner = minY < bounds.y() + paddingRadiusY;
|
| - bool intervalOverlapsMaxCorner = maxY > bounds.maxY() - paddingRadiusY;
|
| -
|
| - if (!intervalOverlapsMinCorner && !intervalOverlapsMaxCorner) {
|
| - result = minY;
|
| - return true;
|
| - }
|
| -
|
| - float centerY = bounds.y() + bounds.height() / 2;
|
| - bool minCornerDefinesX = fabs(centerY - minY) > fabs(centerY - maxY);
|
| - bool intervalFitsWithinCorners = minIntervalWidth + 2 * paddingRadiusX <= bounds.width();
|
| - FloatPoint cornerIntercept = cornerInterceptForWidth(bounds.width(), minIntervalWidth, paddingRadiusX, paddingRadiusY);
|
| -
|
| - if (intervalOverlapsMinCorner && (!intervalOverlapsMaxCorner || minCornerDefinesX)) {
|
| - if (intervalFitsWithinCorners || bounds.y() + cornerIntercept.y() < minY) {
|
| - result = minY;
|
| - return true;
|
| - }
|
| - if (minIntervalHeight < bounds.height() - (2 * cornerIntercept.y())) {
|
| - result = LayoutUnit::fromFloatCeil(bounds.y() + cornerIntercept.y());
|
| - return true;
|
| - }
|
| - }
|
| -
|
| - if (intervalOverlapsMaxCorner && (!intervalOverlapsMinCorner || !minCornerDefinesX)) {
|
| - if (intervalFitsWithinCorners || minY <= bounds.maxY() - cornerIntercept.y() - minIntervalHeight) {
|
| - result = minY;
|
| - return true;
|
| - }
|
| - }
|
| -
|
| - return false;
|
| -}
|
| -
|
| } // namespace WebCore
|
|
|