| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights
reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights
reserved. |
| 3 * | 3 * |
| 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. | 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. |
| 5 * | 5 * |
| 6 * Other contributors: | 6 * Other contributors: |
| 7 * Robert O'Callahan <roc+@cs.cmu.edu> | 7 * Robert O'Callahan <roc+@cs.cmu.edu> |
| 8 * David Baron <dbaron@fas.harvard.edu> | 8 * David Baron <dbaron@fas.harvard.edu> |
| 9 * Christian Biesinger <cbiesinger@web.de> | 9 * Christian Biesinger <cbiesinger@web.de> |
| 10 * Randall Jesup <rjesup@wgate.com> | 10 * Randall Jesup <rjesup@wgate.com> |
| (...skipping 2077 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2088 if (renderer()->parent()) { | 2088 if (renderer()->parent()) { |
| 2089 parentLayer = renderer()->parent()->enclosingLayer(); | 2089 parentLayer = renderer()->parent()->enclosingLayer(); |
| 2090 restrictedByLineClamp = !renderer()->parent()->style()->lineClamp().isNo
ne(); | 2090 restrictedByLineClamp = !renderer()->parent()->style()->lineClamp().isNo
ne(); |
| 2091 } | 2091 } |
| 2092 | 2092 |
| 2093 if (renderer()->hasOverflowClip() && !restrictedByLineClamp) { | 2093 if (renderer()->hasOverflowClip() && !restrictedByLineClamp) { |
| 2094 // Don't scroll to reveal an overflow layer that is restricted by the -w
ebkit-line-clamp property. | 2094 // Don't scroll to reveal an overflow layer that is restricted by the -w
ebkit-line-clamp property. |
| 2095 // This will prevent us from revealing text hidden by the slider in Safa
ri RSS. | 2095 // This will prevent us from revealing text hidden by the slider in Safa
ri RSS. |
| 2096 RenderBox* box = renderBox(); | 2096 RenderBox* box = renderBox(); |
| 2097 ASSERT(box); | 2097 ASSERT(box); |
| 2098 LayoutRect localExposeRect(box->absoluteToLocalQuad(FloatQuad(FloatRect(
rect)), UseTransforms).boundingBox()); | 2098 FloatPoint absPos = box->localToAbsolute(); |
| 2099 LayoutRect layerBounds(0, 0, box->clientWidth(), box->clientHeight()); | 2099 absPos.move(box->borderLeft(), box->borderTop()); |
| 2100 LayoutRect r = getRectToExpose(layerBounds, localExposeRect, alignX, ali
gnY); | |
| 2101 | 2100 |
| 2102 IntSize clampedScrollOffset = clampScrollOffset(scrollOffset() + toIntSi
ze(roundedIntRect(r).location())); | 2101 LayoutRect layerBounds = LayoutRect(absPos.x() + scrollXOffset(), absPos
.y() + scrollYOffset(), box->clientWidth(), box->clientHeight()); |
| 2102 LayoutRect exposeRect = LayoutRect(rect.x() + scrollXOffset(), rect.y()
+ scrollYOffset(), rect.width(), rect.height()); |
| 2103 LayoutRect r = getRectToExpose(layerBounds, exposeRect, alignX, alignY); |
| 2104 |
| 2105 int roundedAdjustedX = roundToInt(r.x() - absPos.x()); |
| 2106 int roundedAdjustedY = roundToInt(r.y() - absPos.y()); |
| 2107 IntSize clampedScrollOffset = clampScrollOffset(IntSize(roundedAdjustedX
, roundedAdjustedY)); |
| 2103 if (clampedScrollOffset != scrollOffset()) { | 2108 if (clampedScrollOffset != scrollOffset()) { |
| 2104 IntSize oldScrollOffset = scrollOffset(); | 2109 IntSize oldScrollOffset = scrollOffset(); |
| 2105 scrollToOffset(clampedScrollOffset); | 2110 scrollToOffset(clampedScrollOffset); |
| 2106 IntSize scrollOffsetDifference = scrollOffset() - oldScrollOffset; | 2111 IntSize scrollOffsetDifference = scrollOffset() - oldScrollOffset; |
| 2107 localExposeRect.move(-scrollOffsetDifference); | 2112 newRect.move(-scrollOffsetDifference); |
| 2108 newRect = LayoutRect(box->localToAbsoluteQuad(FloatQuad(FloatRect(lo
calExposeRect)), UseTransforms).boundingBox()); | |
| 2109 } | 2113 } |
| 2110 } else if (!parentLayer && renderer()->isBox() && renderBox()->canBePrograma
ticallyScrolled()) { | 2114 } else if (!parentLayer && renderer()->isBox() && renderBox()->canBePrograma
ticallyScrolled()) { |
| 2111 if (frameView) { | 2115 if (frameView) { |
| 2112 Element* ownerElement = 0; | 2116 Element* ownerElement = 0; |
| 2113 if (renderer()->document()) | 2117 if (renderer()->document()) |
| 2114 ownerElement = renderer()->document()->ownerElement(); | 2118 ownerElement = renderer()->document()->ownerElement(); |
| 2115 | 2119 |
| 2116 if (ownerElement && ownerElement->renderer()) { | 2120 if (ownerElement && ownerElement->renderer()) { |
| 2117 HTMLFrameElement* frameElement = 0; | 2121 HTMLFrameElement* frameElement = 0; |
| 2118 | 2122 |
| 2119 if (ownerElement->hasTagName(frameTag) || ownerElement->hasTagNa
me(iframeTag)) | 2123 if (ownerElement->hasTagName(frameTag) || ownerElement->hasTagNa
me(iframeTag)) |
| 2120 frameElement = static_cast<HTMLFrameElement*>(ownerElement); | 2124 frameElement = static_cast<HTMLFrameElement*>(ownerElement); |
| 2121 | 2125 |
| 2122 if (frameElementAndViewPermitScroll(frameElement, frameView)) { | 2126 if (frameElementAndViewPermitScroll(frameElement, frameView)) { |
| 2123 LayoutRect viewRect = frameView->visibleContentRect(); | 2127 LayoutRect viewRect = frameView->visibleContentRect(); |
| 2124 LayoutRect exposeRect = getRectToExpose(viewRect, rect, alig
nX, alignY); | 2128 LayoutRect exposeRect = getRectToExpose(viewRect, rect, alig
nX, alignY); |
| 2125 | 2129 |
| 2126 int xOffset = roundToInt(exposeRect.x()); | 2130 int xOffset = roundToInt(exposeRect.x()); |
| 2127 int yOffset = roundToInt(exposeRect.y()); | 2131 int yOffset = roundToInt(exposeRect.y()); |
| 2128 // Adjust offsets if they're outside of the allowable range. | 2132 // Adjust offsets if they're outside of the allowable range. |
| 2129 xOffset = max(0, min(frameView->contentsWidth(), xOffset)); | 2133 xOffset = max(0, min(frameView->contentsWidth(), xOffset)); |
| 2130 yOffset = max(0, min(frameView->contentsHeight(), yOffset)); | 2134 yOffset = max(0, min(frameView->contentsHeight(), yOffset)); |
| 2131 | 2135 |
| 2132 frameView->setScrollPosition(IntPoint(xOffset, yOffset)); | 2136 frameView->setScrollPosition(IntPoint(xOffset, yOffset)); |
| 2133 if (frameView->safeToPropagateScrollToParent()) { | 2137 if (frameView->safeToPropagateScrollToParent()) { |
| 2134 parentLayer = ownerElement->renderer()->enclosingLayer()
; | 2138 parentLayer = ownerElement->renderer()->enclosingLayer()
; |
| 2135 // FIXME: This doesn't correctly convert the rect to | |
| 2136 // absolute coordinates in the parent. | |
| 2137 newRect.setX(rect.x() - frameView->scrollX() + frameView
->x()); | 2139 newRect.setX(rect.x() - frameView->scrollX() + frameView
->x()); |
| 2138 newRect.setY(rect.y() - frameView->scrollY() + frameView
->y()); | 2140 newRect.setY(rect.y() - frameView->scrollY() + frameView
->y()); |
| 2139 } else | 2141 } else |
| 2140 parentLayer = 0; | 2142 parentLayer = 0; |
| 2141 } | 2143 } |
| 2142 } else { | 2144 } else { |
| 2143 LayoutRect viewRect = frameView->visibleContentRect(); | 2145 LayoutRect viewRect = frameView->visibleContentRect(); |
| 2144 LayoutRect r = getRectToExpose(viewRect, rect, alignX, alignY); | 2146 LayoutRect r = getRectToExpose(viewRect, rect, alignX, alignY); |
| 2145 | 2147 |
| 2146 frameView->setScrollPosition(roundedIntPoint(r.location())); | 2148 frameView->setScrollPosition(roundedIntPoint(r.location())); |
| (...skipping 3619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5766 } | 5768 } |
| 5767 } | 5769 } |
| 5768 | 5770 |
| 5769 void showLayerTree(const WebCore::RenderObject* renderer) | 5771 void showLayerTree(const WebCore::RenderObject* renderer) |
| 5770 { | 5772 { |
| 5771 if (!renderer) | 5773 if (!renderer) |
| 5772 return; | 5774 return; |
| 5773 showLayerTree(renderer->enclosingLayer()); | 5775 showLayerTree(renderer->enclosingLayer()); |
| 5774 } | 5776 } |
| 5775 #endif | 5777 #endif |
| OLD | NEW |