diff options
author | Patrick Scott <phanna@android.com> | 2010-08-16 09:40:57 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-08-16 09:40:57 -0700 |
commit | 96b9354838038389fdab0383662e91575e3daa6c (patch) | |
tree | 798b195792b6e077c86f0831a6d35d65355b6e0f /WebCore/rendering/RenderLayer.cpp | |
parent | 9a8d8723cd9c45c526a7c46d1e7d343e50e4e119 (diff) | |
parent | 726264480d16a18c02f405aff63a32ba06fb0476 (diff) | |
download | external_webkit-96b9354838038389fdab0383662e91575e3daa6c.zip external_webkit-96b9354838038389fdab0383662e91575e3daa6c.tar.gz external_webkit-96b9354838038389fdab0383662e91575e3daa6c.tar.bz2 |
Merge "Update navigation in scrollable layers."
Diffstat (limited to 'WebCore/rendering/RenderLayer.cpp')
-rw-r--r-- | WebCore/rendering/RenderLayer.cpp | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/WebCore/rendering/RenderLayer.cpp b/WebCore/rendering/RenderLayer.cpp index cc7eed0..ee1f1d4 100644 --- a/WebCore/rendering/RenderLayer.cpp +++ b/WebCore/rendering/RenderLayer.cpp @@ -1881,6 +1881,22 @@ bool RenderLayer::hasOverflowControls() const { return m_hBar || m_vBar || m_scrollCorner || renderer()->style()->resize() != RESIZE_NONE; } +#if ENABLE(ANDROID_OVERFLOW_SCROLL) +bool RenderLayer::hasOverflowScroll() const +{ + if (!enclosingElement()->hasTagName(HTMLNames::divTag)) + return false; + if (m_scrollDimensionsDirty) + return false; + EOverflow x = renderer()->style()->overflowX(); + if ((x == OSCROLL || x == OAUTO) && m_scrollWidth > renderBox()->clientWidth()) + return true; + EOverflow y = renderer()->style()->overflowY(); + if ((y == OSCROLL || y == OAUTO) && m_scrollHeight > renderBox()->clientHeight()) + return true; + return false; +} +#endif void RenderLayer::positionOverflowControls(int tx, int ty) { @@ -1954,6 +1970,13 @@ void RenderLayer::computeScrollDimensions(bool* needHBar, bool* needVBar) *needHBar = rightPos > clientWidth; if (needVBar) *needVBar = bottomPos > clientHeight; +#if ENABLE(ANDROID_OVERFLOW_SCROLL) + if (hasOverflowScroll()) { + compositor()->setCompositingLayersNeedRebuild(true); + compositor()->enableCompositingMode(true); + compositor()->updateCompositingLayers(CompositingUpdateAfterLayoutOrStyleChange, this); + } +#endif } void RenderLayer::updateOverflowStatus(bool horizontalOverflow, bool verticalOverflow) @@ -3219,13 +3242,11 @@ void RenderLayer::calculateRects(const RenderLayer* rootLayer, const IntRect& pa if (renderer()->hasOverflowClip() || renderer()->hasClip()) { // This layer establishes a clip of some kind. #if ENABLE(ANDROID_OVERFLOW_SCROLL) - if (renderer()->hasOverflowClip() && - !m_scrollDimensionsDirty && - (m_scrollWidth > renderBox()->clientWidth() || - m_scrollHeight > renderBox()->clientHeight())) { + if (hasOverflowScroll()) { RenderBox* box = toRenderBox(renderer()); - layerBounds = backgroundRect = foregroundRect = outlineRect = - IntRect(x, y, box->borderLeft() + box->borderRight() + m_scrollWidth, + foregroundRect = + IntRect(x, y, + box->borderLeft() + box->borderRight() + m_scrollWidth, box->borderTop() + box->borderBottom() + m_scrollHeight); } else #endif @@ -3743,7 +3764,7 @@ bool RenderLayer::shouldBeNormalFlowOnly() const bool RenderLayer::isSelfPaintingLayer() const { #if ENABLE(ANDROID_OVERFLOW_SCROLL) - if (renderer()->hasOverflowClip()) + if (hasOverflowScroll()) return true; #endif return !isNormalFlowOnly() || renderer()->hasReflection() || renderer()->hasMask() || renderer()->isTableRow() || renderer()->isVideo() || renderer()->isEmbeddedObject() || renderer()->isRenderIFrame(); |