Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. 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 are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 56 } | 56 } |
| 57 | 57 |
| 58 PinchViewports::PinchViewports(WebViewImpl* owner) | 58 PinchViewports::PinchViewports(WebViewImpl* owner) |
| 59 : m_owner(owner) | 59 : m_owner(owner) |
| 60 , m_innerViewportContainerLayer(GraphicsLayer::create(m_owner->graphicsLayer Factory(), this)) | 60 , m_innerViewportContainerLayer(GraphicsLayer::create(m_owner->graphicsLayer Factory(), this)) |
| 61 , m_pageScaleLayer(GraphicsLayer::create(m_owner->graphicsLayerFactory(), th is)) | 61 , m_pageScaleLayer(GraphicsLayer::create(m_owner->graphicsLayerFactory(), th is)) |
| 62 , m_innerViewportScrollLayer(GraphicsLayer::create(m_owner->graphicsLayerFac tory(), this)) | 62 , m_innerViewportScrollLayer(GraphicsLayer::create(m_owner->graphicsLayerFac tory(), this)) |
| 63 , m_overlayScrollbarHorizontal(GraphicsLayer::create(m_owner->graphicsLayerF actory(), this)) | 63 , m_overlayScrollbarHorizontal(GraphicsLayer::create(m_owner->graphicsLayerF actory(), this)) |
| 64 , m_overlayScrollbarVertical(GraphicsLayer::create(m_owner->graphicsLayerFac tory(), this)) | 64 , m_overlayScrollbarVertical(GraphicsLayer::create(m_owner->graphicsLayerFac tory(), this)) |
| 65 { | 65 { |
| 66 m_innerViewportContainerLayer->platformLayer()->setIsContainerForFixedPositi onLayers(true); | 66 ASSERT(m_owner); |
| 67 WebCore::ScrollingCoordinator* coordinator = m_owner->page()->scrollingCoord inator(); | |
| 68 ASSERT(coordinator); | |
| 69 coordinator->setLayerIsContainerForFixedPositionLayers(m_innerViewportScroll Layer.get(), true); | |
| 70 | |
| 67 // No need for the inner viewport to clip, since the compositing | 71 // No need for the inner viewport to clip, since the compositing |
| 68 // surface takes care of it -- and clipping here would interfere with | 72 // surface takes care of it -- and clipping here would interfere with |
| 69 // dynamically-sized viewports on Android. | 73 // dynamically-sized viewports on Android. |
| 70 m_innerViewportContainerLayer->setMasksToBounds(false); | 74 m_innerViewportContainerLayer->setMasksToBounds(false); |
| 71 | 75 |
| 76 // TODO(wjmaclean) Remove next line once https://codereview.chromium.org/239 83047 lands. | |
| 72 m_innerViewportScrollLayer->platformLayer()->setScrollable(true); | 77 m_innerViewportScrollLayer->platformLayer()->setScrollable(true); |
| 78 m_innerViewportScrollLayer->platformLayer()->setScrollClipLayer( | |
| 79 m_innerViewportContainerLayer->platformLayer()); | |
| 73 m_innerViewportScrollLayer->platformLayer()->setUserScrollable(true, true); | 80 m_innerViewportScrollLayer->platformLayer()->setUserScrollable(true, true); |
| 74 | 81 |
| 75 m_innerViewportContainerLayer->addChild(m_pageScaleLayer.get()); | 82 m_innerViewportContainerLayer->addChild(m_pageScaleLayer.get()); |
| 76 m_pageScaleLayer->addChild(m_innerViewportScrollLayer.get()); | 83 m_pageScaleLayer->addChild(m_innerViewportScrollLayer.get()); |
| 77 m_innerViewportContainerLayer->addChild(m_overlayScrollbarHorizontal.get()); | 84 m_innerViewportContainerLayer->addChild(m_overlayScrollbarHorizontal.get()); |
| 78 m_innerViewportContainerLayer->addChild(m_overlayScrollbarVertical.get()); | 85 m_innerViewportContainerLayer->addChild(m_overlayScrollbarVertical.get()); |
| 79 | 86 |
| 80 // Setup the inner viewport overlay scrollbars. | 87 // Setup the inner viewport overlay scrollbars. |
| 81 setupScrollbar(WebScrollbar::Horizontal); | 88 setupScrollbar(WebScrollbar::Horizontal); |
| 82 setupScrollbar(WebScrollbar::Vertical); | 89 setupScrollbar(WebScrollbar::Vertical); |
| 83 } | 90 } |
| 84 | 91 |
| 85 PinchViewports::~PinchViewports() { } | 92 PinchViewports::~PinchViewports() { } |
| 86 | 93 |
| 87 void PinchViewports::setViewportSize(const WebCore::IntSize& newSize) | 94 void PinchViewports::setViewportSize(const WebCore::IntSize& newSize) |
| 88 { | 95 { |
| 89 m_innerViewportContainerLayer->setSize(newSize); | 96 m_innerViewportContainerLayer->setSize(newSize); |
| 97 // The innerviewport scroll layer always has the same size as its clip layer , but | |
| 98 // the page scale layer lives between them, allowing for non-zero max scroll | |
| 99 // offset when page scale > 1. | |
| 100 m_innerViewportScrollLayer->setSize(newSize); | |
| 90 | 101 |
| 91 // Need to re-compute sizes for the overlay scrollbars. | 102 // Need to re-compute sizes for the overlay scrollbars. |
| 92 setupScrollbar(WebScrollbar::Horizontal); | 103 setupScrollbar(WebScrollbar::Horizontal); |
| 93 setupScrollbar(WebScrollbar::Vertical); | 104 setupScrollbar(WebScrollbar::Vertical); |
| 94 } | 105 } |
| 95 | 106 |
| 96 // Modifies the top of the graphics layer tree to add layers needed to support | 107 // Modifies the top of the graphics layer tree to add layers needed to support |
| 97 // the inner/outer viewport fixed-position model for pinch zoom. When finished, | 108 // the inner/outer viewport fixed-position model for pinch zoom. When finished, |
| 98 // the tree will look like this (with * denoting added layers): | 109 // the tree will look like this (with * denoting added layers): |
| 99 // | 110 // |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 143 m_webOverlayScrollbarHorizontal : m_webOverlayScrollbarVertical; | 154 m_webOverlayScrollbarHorizontal : m_webOverlayScrollbarVertical; |
| 144 | 155 |
| 145 const int overlayScrollbarThickness = m_owner->settingsImpl()->pinchOverlayS crollbarThickness(); | 156 const int overlayScrollbarThickness = m_owner->settingsImpl()->pinchOverlayS crollbarThickness(); |
| 146 | 157 |
| 147 if (!webScrollbarLayer) { | 158 if (!webScrollbarLayer) { |
| 148 WebCore::ScrollingCoordinator* coordinator = m_owner->page()->scrollingC oordinator(); | 159 WebCore::ScrollingCoordinator* coordinator = m_owner->page()->scrollingC oordinator(); |
| 149 ASSERT(coordinator); | 160 ASSERT(coordinator); |
| 150 WebCore::ScrollbarOrientation webcoreOrientation = isHorizontal ? WebCor e::HorizontalScrollbar : WebCore::VerticalScrollbar; | 161 WebCore::ScrollbarOrientation webcoreOrientation = isHorizontal ? WebCor e::HorizontalScrollbar : WebCore::VerticalScrollbar; |
| 151 webScrollbarLayer = coordinator->createSolidColorScrollbarLayer(webcoreO rientation, overlayScrollbarThickness, false); | 162 webScrollbarLayer = coordinator->createSolidColorScrollbarLayer(webcoreO rientation, overlayScrollbarThickness, false); |
| 152 | 163 |
| 153 webScrollbarLayer->setScrollLayer(m_innerViewportScrollLayer->platformLa yer()); | 164 webScrollbarLayer->setClipLayer(m_innerViewportContainerLayer->platformL ayer()); |
| 154 scrollbarGraphicsLayer->setContentsToPlatformLayer(webScrollbarLayer->la yer()); | 165 scrollbarGraphicsLayer->setContentsToPlatformLayer(webScrollbarLayer->la yer()); |
| 155 scrollbarGraphicsLayer->setDrawsContent(false); | 166 scrollbarGraphicsLayer->setDrawsContent(false); |
| 156 } | 167 } |
| 157 | 168 |
| 158 int xPosition = isHorizontal ? 0 : m_innerViewportContainerLayer->size().wid th() - overlayScrollbarThickness; | 169 int xPosition = isHorizontal ? 0 : m_innerViewportContainerLayer->size().wid th() - overlayScrollbarThickness; |
| 159 int yPosition = isHorizontal ? m_innerViewportContainerLayer->size().height( ) - overlayScrollbarThickness : 0; | 170 int yPosition = isHorizontal ? m_innerViewportContainerLayer->size().height( ) - overlayScrollbarThickness : 0; |
| 160 int width = isHorizontal ? m_innerViewportContainerLayer->size().width() - o verlayScrollbarThickness : overlayScrollbarThickness; | 171 int width = isHorizontal ? m_innerViewportContainerLayer->size().width() - o verlayScrollbarThickness : overlayScrollbarThickness; |
| 161 int height = isHorizontal ? overlayScrollbarThickness : m_innerViewportConta inerLayer->size().height() - overlayScrollbarThickness; | 172 int height = isHorizontal ? overlayScrollbarThickness : m_innerViewportConta inerLayer->size().height() - overlayScrollbarThickness; |
| 162 | 173 |
| 174 // Use the GraphicsLayer to position the scrollbars. | |
| 163 scrollbarGraphicsLayer->setPosition(WebCore::IntPoint(xPosition, yPosition)) ; | 175 scrollbarGraphicsLayer->setPosition(WebCore::IntPoint(xPosition, yPosition)) ; |
| 164 scrollbarGraphicsLayer->setSize(WebCore::IntSize(width, height)); | 176 scrollbarGraphicsLayer->setSize(WebCore::IntSize(width, height)); |
| 177 scrollbarGraphicsLayer->contentsLayer()->setBounds(WebSize(width, height)); | |
|
jamesr
2014/01/14 22:48:58
don't you actually want to call GraphicsLayer::set
wjmaclean
2014/01/14 23:55:29
Hmm, yes, that seems better!
| |
| 165 } | 178 } |
| 166 | 179 |
| 167 void PinchViewports::registerViewportLayersWithTreeView(WebLayerTreeView* layerT reeView) const | 180 void PinchViewports::registerViewportLayersWithTreeView(WebLayerTreeView* layerT reeView) const |
| 168 { | 181 { |
| 169 ASSERT(layerTreeView); | 182 ASSERT(layerTreeView); |
| 170 | 183 |
| 171 WebCore::RenderLayerCompositor* compositor = m_owner->compositor(); | 184 WebCore::RenderLayerCompositor* compositor = m_owner->compositor(); |
| 172 GraphicsLayer* scrollLayer = compositor->scrollLayer(); | 185 // Get the outer viewport scroll layer. |
| 186 WebLayer* scrollLayer = compositor->scrollLayer()->platformLayer(); | |
| 187 | |
| 188 m_webOverlayScrollbarHorizontal->setScrollLayer(scrollLayer); | |
| 189 m_webOverlayScrollbarVertical->setScrollLayer(scrollLayer); | |
| 173 | 190 |
| 174 ASSERT(compositor); | 191 ASSERT(compositor); |
| 175 layerTreeView->registerViewportLayers( | 192 layerTreeView->registerViewportLayers( |
| 176 m_pageScaleLayer->platformLayer(), | 193 m_pageScaleLayer->platformLayer(), |
| 177 m_innerViewportScrollLayer->platformLayer(), | 194 m_innerViewportScrollLayer->platformLayer(), |
| 178 scrollLayer->platformLayer()); | 195 scrollLayer); |
| 179 } | 196 } |
| 180 | 197 |
| 181 void PinchViewports::clearViewportLayersForTreeView(WebLayerTreeView* layerTreeV iew) const | 198 void PinchViewports::clearViewportLayersForTreeView(WebLayerTreeView* layerTreeV iew) const |
| 182 { | 199 { |
| 183 ASSERT(layerTreeView); | 200 ASSERT(layerTreeView); |
| 184 | 201 |
| 185 layerTreeView->clearViewportLayers(); | 202 layerTreeView->clearViewportLayers(); |
| 186 } | 203 } |
| 187 | 204 |
| 188 void PinchViewports::notifyAnimationStarted(const GraphicsLayer*, double wallClo ckTime, double monotonicTime) | 205 void PinchViewports::notifyAnimationStarted(const GraphicsLayer*, double wallClo ckTime, double monotonicTime) |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 207 } else if (graphicsLayer == m_overlayScrollbarVertical.get()) { | 224 } else if (graphicsLayer == m_overlayScrollbarVertical.get()) { |
| 208 name = "Overlay Scrollbar Vertical Layer"; | 225 name = "Overlay Scrollbar Vertical Layer"; |
| 209 } else { | 226 } else { |
| 210 ASSERT_NOT_REACHED(); | 227 ASSERT_NOT_REACHED(); |
| 211 } | 228 } |
| 212 | 229 |
| 213 return name; | 230 return name; |
| 214 } | 231 } |
| 215 | 232 |
| 216 } // namespace blink | 233 } // namespace blink |
| OLD | NEW |