Changeset 126943 in webkit
- Timestamp:
- Aug 28, 2012, 5:38:45 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 3 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/css/sticky/sticky-overflowing-expected.html (added)
-
LayoutTests/fast/css/sticky/sticky-overflowing.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/rendering/RenderBoxModelObject.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r126942 r126943 1 2012-08-28 Simon Fraser <simon.fraser@apple.com> 2 3 Handle sticky that overflows its container 4 https://bugs.webkit.org/show_bug.cgi?id=95260 5 6 Reviewed by Ojan Vafai. 7 8 Testcase with sticky elements that overflow their containers. 9 10 * fast/css/sticky/sticky-overflowing-expected.html: Added. 11 * fast/css/sticky/sticky-overflowing.html: Added. 12 1 13 2012-08-28 Xianzhu Wang <wangxianzhu@chromium.org> 2 14 -
trunk/Source/WebCore/ChangeLog
r126939 r126943 1 2012-08-28 Simon Fraser <simon.fraser@apple.com> 2 3 Handle sticky that overflows its container 4 https://bugs.webkit.org/show_bug.cgi?id=95260 5 6 Reviewed by Ojan Vafai. 7 8 When an element with position:sticky overflows its container, 9 don't have the sticky code push it back inside that container. 10 It will just never get offset in the sticky direction. 11 12 Test: fast/css/sticky/sticky-overflowing.html 13 14 * rendering/RenderBoxModelObject.cpp: 15 (WebCore::RenderBoxModelObject::stickyPositionOffset): 16 1 17 2012-08-28 Mark Pilgrim <pilgrim@chromium.org> 2 18 -
trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp
r126926 r126943 586 586 if (!style()->right().isAuto()) { 587 587 LayoutUnit rightLimit = viewportRect.maxX() - valueForLength(style()->right(), viewportRect.width(), view()); 588 if (absoluteStickyBoxRect.maxX() > rightLimit) 589 absoluteStickyBoxRect.setX(rightLimit - absoluteStickyBoxRect.width()); 590 591 if (absoluteStickyBoxRect.x() < absContainerContentRect.x()) 592 absoluteStickyBoxRect.setX(absContainerContentRect.x()); 588 LayoutUnit rightDelta = min<float>(0, rightLimit.toFloat() - absoluteStickyBoxRect.maxX()); 589 LayoutUnit availableSpace = min<float>(0, absContainerContentRect.x() - absoluteStickyBoxRect.x()); 590 if (rightDelta < availableSpace) 591 rightDelta = availableSpace; 592 593 absoluteStickyBoxRect.move(rightDelta, 0); 593 594 } 594 595 595 596 if (!style()->left().isAuto()) { 596 597 LayoutUnit leftLimit = viewportRect.x() + valueForLength(style()->left(), viewportRect.width(), view()); 597 if (absoluteStickyBoxRect.x() < leftLimit) 598 absoluteStickyBoxRect.setX(leftLimit); 599 600 if (absoluteStickyBoxRect.maxX() > absContainerContentRect.maxX()) 601 absoluteStickyBoxRect.setX(absContainerContentRect.maxX() - absoluteStickyBoxRect.width()); 598 LayoutUnit leftDelta = max<float>(0, leftLimit.toFloat() - absoluteStickyBoxRect.x()); 599 LayoutUnit availableSpace = max<float>(0, absContainerContentRect.maxX() - absoluteStickyBoxRect.maxX()); 600 if (leftDelta > availableSpace) 601 leftDelta = availableSpace; 602 603 absoluteStickyBoxRect.move(leftDelta, 0); 602 604 } 603 605 … … 605 607 if (!style()->bottom().isAuto()) { 606 608 LayoutUnit bottomLimit = viewportRect.maxY() - valueForLength(style()->bottom(), viewportRect.height(), view()); 607 if (absoluteStickyBoxRect.maxY() > bottomLimit) 608 absoluteStickyBoxRect.setY(bottomLimit - absoluteStickyBoxRect.height()); 609 610 if (absoluteStickyBoxRect.y() < absContainerContentRect.y()) 611 absoluteStickyBoxRect.setY(absContainerContentRect.y()); 609 LayoutUnit bottomDelta = min<float>(0, bottomLimit.toFloat() - absoluteStickyBoxRect.maxY()); 610 LayoutUnit availableSpace = min<float>(0, absContainerContentRect.y() - absoluteStickyBoxRect.y()); 611 if (bottomDelta < availableSpace) 612 bottomDelta = availableSpace; 613 614 absoluteStickyBoxRect.move(0, bottomDelta); 612 615 } 613 616 614 617 if (!style()->top().isAuto()) { 615 618 LayoutUnit topLimit = viewportRect.y() + valueForLength(style()->top(), viewportRect.height(), view()); 616 if (absoluteStickyBoxRect.y() < topLimit) 617 absoluteStickyBoxRect.setY(topLimit); 618 619 if (absoluteStickyBoxRect.maxY() > absContainerContentRect.maxY()) 620 absoluteStickyBoxRect.setY(absContainerContentRect.maxY() - absoluteStickyBoxRect.height()); 619 LayoutUnit topDelta = max<float>(0, topLimit.toFloat() - absoluteStickyBoxRect.y()); 620 LayoutUnit availableSpace = max<float>(0, absContainerContentRect.maxY() - absoluteStickyBoxRect.maxY()); 621 if (topDelta > availableSpace) 622 topDelta = availableSpace; 623 624 absoluteStickyBoxRect.move(0, topDelta); 621 625 } 622 626
Note:
See TracChangeset
for help on using the changeset viewer.