| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. |    2  * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. | 
|    3  * |    3  * | 
|    4  * Redistribution and use in source and binary forms, with or without |    4  * Redistribution and use in source and binary forms, with or without | 
|    5  * modification, are permitted provided that the following conditions |    5  * modification, are permitted provided that the following conditions | 
|    6  * are met: |    6  * are met: | 
|    7  * |    7  * | 
|    8  * 1. Redistributions of source code must retain the above |    8  * 1. Redistributions of source code must retain the above | 
|    9  *    copyright notice, this list of conditions and the following |    9  *    copyright notice, this list of conditions and the following | 
|   10  *    disclaimer. |   10  *    disclaimer. | 
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   94  |   94  | 
|   95 FloatRoundedRect ExclusionRectangle::shapeMarginBounds() const |   95 FloatRoundedRect ExclusionRectangle::shapeMarginBounds() const | 
|   96 { |   96 { | 
|   97     if (!m_haveInitializedMarginBounds) { |   97     if (!m_haveInitializedMarginBounds) { | 
|   98         m_haveInitializedMarginBounds = true; |   98         m_haveInitializedMarginBounds = true; | 
|   99         m_marginBounds = m_bounds.marginBounds(shapeMargin()); |   99         m_marginBounds = m_bounds.marginBounds(shapeMargin()); | 
|  100     } |  100     } | 
|  101     return m_marginBounds; |  101     return m_marginBounds; | 
|  102 } |  102 } | 
|  103  |  103  | 
|  104 void ExclusionRectangle::getExcludedIntervals(float logicalTop, float logicalHei
     ght, SegmentList& result) const |  104 void ExclusionRectangle::getExcludedIntervals(LayoutUnit logicalTop, LayoutUnit 
     logicalHeight, SegmentList& result) const | 
|  105 { |  105 { | 
|  106     const FloatRoundedRect& bounds = shapeMarginBounds(); |  106     const FloatRoundedRect& bounds = shapeMarginBounds(); | 
|  107     if (bounds.isEmpty()) |  107     if (bounds.isEmpty()) | 
|  108         return; |  108         return; | 
|  109  |  109  | 
|  110     float y1 = logicalTop; |  110     float y1 = logicalTop; | 
|  111     float y2 = y1 + logicalHeight; |  111     float y2 = logicalTop + logicalHeight; | 
|  112  |  112  | 
|  113     if (y2 < bounds.y() || y1 >= bounds.maxY()) |  113     if (y2 < bounds.y() || y1 >= bounds.maxY()) | 
|  114         return; |  114         return; | 
|  115  |  115  | 
|  116     float x1 = bounds.x(); |  116     float x1 = bounds.x(); | 
|  117     float x2 = bounds.maxX(); |  117     float x2 = bounds.maxX(); | 
|  118  |  118  | 
|  119     if (bounds.ry() > 0) { |  119     if (bounds.ry() > 0) { | 
|  120         if (y2 < bounds.y() + bounds.ry()) { |  120         if (y2 < bounds.y() + bounds.ry()) { | 
|  121             float yi = y2 - bounds.y() - bounds.ry(); |  121             float yi = y2 - bounds.y() - bounds.ry(); | 
|  122             float xi = ellipseXIntercept(yi, bounds.rx(), bounds.ry()); |  122             float xi = ellipseXIntercept(yi, bounds.rx(), bounds.ry()); | 
|  123             x1 = bounds.x() + bounds.rx() - xi; |  123             x1 = bounds.x() + bounds.rx() - xi; | 
|  124             x2 = bounds.maxX() - bounds.rx() + xi; |  124             x2 = bounds.maxX() - bounds.rx() + xi; | 
|  125         } else if (y1 > bounds.maxY() - bounds.ry()) { |  125         } else if (y1 > bounds.maxY() - bounds.ry()) { | 
|  126             float yi =  y1 - (bounds.maxY() - bounds.ry()); |  126             float yi =  y1 - (bounds.maxY() - bounds.ry()); | 
|  127             float xi = ellipseXIntercept(yi, bounds.rx(), bounds.ry()); |  127             float xi = ellipseXIntercept(yi, bounds.rx(), bounds.ry()); | 
|  128             x1 = bounds.x() + bounds.rx() - xi; |  128             x1 = bounds.x() + bounds.rx() - xi; | 
|  129             x2 = bounds.maxX() - bounds.rx() + xi; |  129             x2 = bounds.maxX() - bounds.rx() + xi; | 
|  130         } |  130         } | 
|  131     } |  131     } | 
|  132  |  132  | 
|  133     result.append(LineSegment(x1, x2)); |  133     result.append(LineSegment(x1, x2)); | 
|  134 } |  134 } | 
|  135  |  135  | 
|  136 void ExclusionRectangle::getIncludedIntervals(float logicalTop, float logicalHei
     ght, SegmentList& result) const |  136 void ExclusionRectangle::getIncludedIntervals(LayoutUnit logicalTop, LayoutUnit 
     logicalHeight, SegmentList& result) const | 
|  137 { |  137 { | 
|  138     const FloatRoundedRect& bounds = shapePaddingBounds(); |  138     const FloatRoundedRect& bounds = shapePaddingBounds(); | 
|  139     if (bounds.isEmpty()) |  139     if (bounds.isEmpty()) | 
|  140         return; |  140         return; | 
|  141  |  141  | 
|  142     float y1 = logicalTop; |  142     float y1 = logicalTop; | 
|  143     float y2 = y1 + logicalHeight; |  143     float y2 = logicalTop + logicalHeight; | 
|  144  |  144  | 
|  145     if (y1 < bounds.y() || y2 > bounds.maxY()) |  145     if (y1 < bounds.y() || y2 > bounds.maxY()) | 
|  146         return; |  146         return; | 
|  147  |  147  | 
|  148     float x1 = bounds.x(); |  148     float x1 = bounds.x(); | 
|  149     float x2 = bounds.maxX(); |  149     float x2 = bounds.maxX(); | 
|  150  |  150  | 
|  151     if (bounds.ry() > 0) { |  151     if (bounds.ry() > 0) { | 
|  152         bool y1InterceptsCorner = y1 < bounds.y() + bounds.ry(); |  152         bool y1InterceptsCorner = y1 < bounds.y() + bounds.ry(); | 
|  153         bool y2InterceptsCorner = y2 > bounds.maxY() - bounds.ry(); |  153         bool y2InterceptsCorner = y2 > bounds.maxY() - bounds.ry(); | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
|  171  |  171  | 
|  172         if (y1InterceptsCorner || y2InterceptsCorner) { |  172         if (y1InterceptsCorner || y2InterceptsCorner) { | 
|  173             x1 = bounds.x() + bounds.rx() - xi; |  173             x1 = bounds.x() + bounds.rx() - xi; | 
|  174             x2 = bounds.maxX() - bounds.rx() + xi; |  174             x2 = bounds.maxX() - bounds.rx() + xi; | 
|  175         } |  175         } | 
|  176     } |  176     } | 
|  177  |  177  | 
|  178     result.append(LineSegment(x1, x2)); |  178     result.append(LineSegment(x1, x2)); | 
|  179 } |  179 } | 
|  180  |  180  | 
|  181 bool ExclusionRectangle::firstIncludedIntervalLogicalTop(float minLogicalInterva
     lTop, const FloatSize& minLogicalIntervalSize, float& result) const |  181 bool ExclusionRectangle::firstIncludedIntervalLogicalTop(LayoutUnit minLogicalIn
     tervalTop, const LayoutSize& minLogicalIntervalSize, LayoutUnit& result) const | 
|  182 { |  182 { | 
 |  183     float minIntervalTop = minLogicalIntervalTop; | 
 |  184     float minIntervalHeight = minLogicalIntervalSize.height(); | 
 |  185     float minIntervalWidth = minLogicalIntervalSize.width(); | 
 |  186  | 
|  183     const FloatRoundedRect& bounds = shapePaddingBounds(); |  187     const FloatRoundedRect& bounds = shapePaddingBounds(); | 
|  184     if (bounds.isEmpty() || minLogicalIntervalSize.width() > bounds.width()) |  188     if (bounds.isEmpty() || minIntervalWidth > bounds.width()) | 
|  185         return false; |  189         return false; | 
|  186  |  190  | 
|  187     float minY = std::max(bounds.y(), minLogicalIntervalTop); |  191     float minY = std::max(bounds.y(), minIntervalTop); | 
|  188     float maxY = minY + minLogicalIntervalSize.height(); |  192     float maxY = minY + minIntervalHeight; | 
|  189  |  193  | 
|  190     if (maxY > bounds.maxY()) |  194     if (maxY > bounds.maxY()) | 
|  191         return false; |  195         return false; | 
|  192  |  196  | 
|  193     bool intervalOverlapsMinCorner = minY < bounds.y() + bounds.ry(); |  197     bool intervalOverlapsMinCorner = minY < bounds.y() + bounds.ry(); | 
|  194     bool intervalOverlapsMaxCorner = maxY > bounds.maxY() - bounds.ry(); |  198     bool intervalOverlapsMaxCorner = maxY > bounds.maxY() - bounds.ry(); | 
|  195  |  199  | 
|  196     if (!intervalOverlapsMinCorner && !intervalOverlapsMaxCorner) { |  200     if (!intervalOverlapsMinCorner && !intervalOverlapsMaxCorner) { | 
|  197         result = minY; |  201         result = minY; | 
|  198         return true; |  202         return true; | 
|  199     } |  203     } | 
|  200  |  204  | 
|  201     float centerY = bounds.y() + bounds.height() / 2; |  205     float centerY = bounds.y() + bounds.height() / 2; | 
|  202     bool minCornerDefinesX = fabs(centerY - minY) > fabs(centerY - maxY); |  206     bool minCornerDefinesX = fabs(centerY - minY) > fabs(centerY - maxY); | 
|  203     bool intervalFitsWithinCorners = minLogicalIntervalSize.width() + 2 * bounds
     .rx() <= bounds.width(); |  207     bool intervalFitsWithinCorners = minIntervalWidth + 2 * bounds.rx() <= bound
     s.width(); | 
|  204     FloatPoint cornerIntercept = bounds.cornerInterceptForWidth(minLogicalInterv
     alSize.width()); |  208     FloatPoint cornerIntercept = bounds.cornerInterceptForWidth(minIntervalWidth
     ); | 
|  205  |  209  | 
|  206     if (intervalOverlapsMinCorner && (!intervalOverlapsMaxCorner || minCornerDef
     inesX)) { |  210     if (intervalOverlapsMinCorner && (!intervalOverlapsMaxCorner || minCornerDef
     inesX)) { | 
|  207         if (intervalFitsWithinCorners || bounds.y() + cornerIntercept.y() < minY
     ) { |  211         if (intervalFitsWithinCorners || bounds.y() + cornerIntercept.y() < minY
     ) { | 
|  208             result = minY; |  212             result = minY; | 
|  209             return true; |  213             return true; | 
|  210         } |  214         } | 
|  211         if (minLogicalIntervalSize.height() < bounds.height() - (2 * cornerInter
     cept.y())) { |  215         if (minIntervalHeight < bounds.height() - (2 * cornerIntercept.y())) { | 
|  212             result = bounds.y() + cornerIntercept.y(); |  216             result = LayoutUnit::fromFloatCeil(bounds.y() + cornerIntercept.y())
     ; | 
|  213             return true; |  217             return true; | 
|  214         } |  218         } | 
|  215     } |  219     } | 
|  216  |  220  | 
|  217     if (intervalOverlapsMaxCorner && (!intervalOverlapsMinCorner || !minCornerDe
     finesX)) { |  221     if (intervalOverlapsMaxCorner && (!intervalOverlapsMinCorner || !minCornerDe
     finesX)) { | 
|  218         if (intervalFitsWithinCorners || minY <=  bounds.maxY() - cornerIntercep
     t.y() - minLogicalIntervalSize.height()) { |  222         if (intervalFitsWithinCorners || minY <=  bounds.maxY() - cornerIntercep
     t.y() - minIntervalHeight) { | 
|  219             result = minY; |  223             result = minY; | 
|  220             return true; |  224             return true; | 
|  221         } |  225         } | 
|  222     } |  226     } | 
|  223  |  227  | 
|  224     return false; |  228     return false; | 
|  225 } |  229 } | 
|  226  |  230  | 
|  227 } // namespace WebCore |  231 } // namespace WebCore | 
| OLD | NEW |