Chromium Code Reviews| Index: Source/core/frame/PinchViewport.cpp |
| diff --git a/Source/core/frame/PinchViewport.cpp b/Source/core/frame/PinchViewport.cpp |
| index 3c877332714d5e26b104395b96ea3ed1bfde8e5f..4129038aaab26cd72ad21f27d1e5d0a8168bcee9 100644 |
| --- a/Source/core/frame/PinchViewport.cpp |
| +++ b/Source/core/frame/PinchViewport.cpp |
| @@ -67,6 +67,8 @@ namespace blink { |
| PinchViewport::PinchViewport(FrameHost& owner) |
| : m_frameHost(owner) |
| , m_scale(1) |
| + , m_hasHorizontalScrollbar(false) |
| + , m_hasVerticalScrollbar(false) |
| { |
| reset(); |
| } |
| @@ -159,6 +161,7 @@ void PinchViewport::move(const FloatPoint& delta) |
| void PinchViewport::setScale(float scale) |
| { |
| setScaleAndLocation(scale, m_offset); |
| + adjustScrollbarExistence(); |
|
bokan
2014/10/09 15:22:14
Should we also call this in setSize?
|
| } |
| void PinchViewport::setScaleAndLocation(float scale, const FloatPoint& location) |
| @@ -314,6 +317,32 @@ void PinchViewport::setupScrollbar(WebScrollbar::Orientation orientation) |
| scrollbarGraphicsLayer->setContentsRect(IntRect(0, 0, width, height)); |
| } |
| +void PinchViewport::adjustScrollbarExistence() |
| +{ |
| + IntSize visibleSize = enclosingIntRect(visibleRect()).size(); |
| + |
| + ASSERT(mainFrame()); |
| + ASSERT(mainFrame()->contentRenderer()); |
| + IntSize documentSize = mainFrame()->contentRenderer()->documentRect().size(); |
| + |
| + bool oldHasHorizontal = m_hasHorizontalScrollbar; |
| + bool oldHasVertical = m_hasVerticalScrollbar; |
| + m_hasHorizontalScrollbar = visibleSize.width() < documentSize.width(); |
| + m_hasVerticalScrollbar = visibleSize.height() < documentSize.height(); |
|
bokan
2014/10/09 15:22:14
Rather than comparing the sizes yourself here, jus
|
| + |
| + if (oldHasHorizontal != m_hasHorizontalScrollbar || oldHasVertical != m_hasVerticalScrollbar) { |
| + GraphicsLayerVector children; |
| + children.append(m_pageScaleLayer.get()); |
| + |
| + if (m_hasHorizontalScrollbar) |
| + children.append(m_overlayScrollbarHorizontal.get()); |
| + if (m_hasVerticalScrollbar) |
| + children.append(m_overlayScrollbarVertical.get()); |
| + |
| + m_innerViewportContainerLayer->setChildren(children); |
|
bokan
2014/10/09 15:22:14
Hmm...I'm not sure what the implications of freque
|
| + } |
| +} |
| + |
| void PinchViewport::registerLayersWithTreeView(WebLayerTreeView* layerTreeView) const |
| { |
| TRACE_EVENT0("blink", "PinchViewport::registerLayersWithTreeView"); |
| @@ -427,12 +456,12 @@ GraphicsLayer* PinchViewport::layerForScrolling() const |
| GraphicsLayer* PinchViewport::layerForHorizontalScrollbar() const |
| { |
| - return m_overlayScrollbarHorizontal.get(); |
| + return m_hasHorizontalScrollbar ? m_overlayScrollbarHorizontal.get() : nullptr; |
| } |
| GraphicsLayer* PinchViewport::layerForVerticalScrollbar() const |
| { |
| - return m_overlayScrollbarVertical.get(); |
| + return m_hasVerticalScrollbar ? m_overlayScrollbarVertical.get() : nullptr; |
| } |
| void PinchViewport::notifyAnimationStarted(const GraphicsLayer*, double monotonicTime) |