Index: cc/layer_tree_host.cc |
diff --git a/cc/layer_tree_host.cc b/cc/layer_tree_host.cc |
index 7f37e23cf88f20d46572ce9737202d3b2b74e544..d7624b97fb2294ec303dca101f2d320e1d340a71 100644 |
--- a/cc/layer_tree_host.cc |
+++ b/cc/layer_tree_host.cc |
@@ -23,7 +23,11 @@ |
#include "cc/math_util.h" |
#include "cc/occlusion_tracker.h" |
#include "cc/overdraw_metrics.h" |
+#include "cc/pinch_zoom_scrollbar.h" |
+#include "cc/pinch_zoom_scrollbar_geometry.h" |
+#include "cc/pinch_zoom_scrollbar_painter.h" |
#include "cc/prioritized_resource_manager.h" |
+#include "cc/scrollbar_layer.h" |
#include "cc/single_thread_proxy.h" |
#include "cc/switches.h" |
#include "cc/thread.h" |
@@ -326,6 +330,11 @@ void LayerTreeHost::finishCommitOnImplThread(LayerTreeHostImpl* hostImpl) |
syncTree->ResetContentsTexturesPurged(); |
} |
+ syncTree->SetPinchZoomHorizontalLayerId( |
+ m_pinchZoomScrollbarHorizontal ? m_pinchZoomScrollbarHorizontal->id() : -1); |
+ syncTree->SetPinchZoomVerticalLayerId( |
+ m_pinchZoomScrollbarVertical ? m_pinchZoomScrollbarVertical->id() : -1); |
+ |
if (!m_settings.implSidePainting) { |
// If we're not in impl-side painting, the tree is immediately |
// considered active. |
@@ -338,6 +347,64 @@ void LayerTreeHost::finishCommitOnImplThread(LayerTreeHostImpl* hostImpl) |
m_commitNumber++; |
} |
+void LayerTreeHost::setPinchZoomScrollbarsBoundsAndPosition() |
+{ |
+ if (!m_pinchZoomScrollbarHorizontal || !m_pinchZoomScrollbarVertical) |
+ return; |
+ |
+ gfx::Size size = layoutViewportSize(); |
+ int trackWidth = PinchZoomScrollbarGeometry::kTrackWidth; |
+ |
+ m_pinchZoomScrollbarHorizontal->setBounds(gfx::Size(size.width() - trackWidth, trackWidth)); |
+ m_pinchZoomScrollbarHorizontal->setPosition(gfx::PointF(0, size.height() - trackWidth)); |
+ m_pinchZoomScrollbarHorizontal->setNeedsDisplay(); |
enne (OOO)
2013/03/06 19:32:58
setBounds should take care of this if anything cha
wjmaclean
2013/03/06 22:36:53
Removed.
|
+ |
+ m_pinchZoomScrollbarVertical->setBounds(gfx::Size(trackWidth, size.height() - trackWidth)); |
+ m_pinchZoomScrollbarVertical->setPosition(gfx::PointF(size.width() - trackWidth, 0)); |
+ m_pinchZoomScrollbarVertical->setNeedsDisplay(); |
+} |
+ |
+static scoped_refptr<ScrollbarLayer> CreatePinchZoomScrollbar( |
+ WebKit::WebScrollbar::Orientation orientation, LayerTreeHost* owner) |
+{ |
+ scoped_refptr<ScrollbarLayer> scrollbarLayer = ScrollbarLayer::create( |
+ make_scoped_ptr( |
+ new PinchZoomScrollbar(orientation, owner)).PassAs<WebKit::WebScrollbar>(), |
+ scoped_ptr<ScrollbarThemePainter>(new PinchZoomScrollbarPainter).Pass(), |
+ scoped_ptr<WebKit::WebScrollbarThemeGeometry>( |
+ new PinchZoomScrollbarGeometry).Pass(), |
+ -1); |
+ scrollbarLayer->setIsDrawable(true); |
+ scrollbarLayer->setOpacity(0); |
+ return scrollbarLayer; |
+} |
+ |
+void LayerTreeHost::createAndAddPinchZoomScrollbars() |
+{ |
+ bool needsPropertiesUpdated = false; |
+ |
+ if (!m_pinchZoomScrollbarHorizontal) { |
enne (OOO)
2013/03/06 19:32:58
It's always the case that you have both pinch zoom
wjmaclean
2013/03/06 22:36:53
If nothing is wrong, then yes, we have both or nei
|
+ m_pinchZoomScrollbarHorizontal = CreatePinchZoomScrollbar(WebKit::WebScrollbar::Horizontal, this); |
+ needsPropertiesUpdated = true; |
+ } |
+ |
+ if (!m_pinchZoomScrollbarVertical) { |
+ m_pinchZoomScrollbarVertical = CreatePinchZoomScrollbar( WebKit::WebScrollbar::Vertical, this); |
+ needsPropertiesUpdated = true; |
+ } |
+ |
+ DCHECK(m_pinchZoomScrollbarHorizontal && m_pinchZoomScrollbarVertical); |
+ |
+ if (!m_pinchZoomScrollbarHorizontal->parent()) |
+ m_rootLayer->addChild(m_pinchZoomScrollbarHorizontal); |
+ |
+ if (!m_pinchZoomScrollbarVertical->parent()) |
+ m_rootLayer->addChild(m_pinchZoomScrollbarVertical); |
+ |
+ if (needsPropertiesUpdated) |
+ setPinchZoomScrollbarsBoundsAndPosition(); |
+} |
+ |
void LayerTreeHost::willCommit() |
{ |
m_client->willCommit(); |
@@ -355,6 +422,10 @@ void LayerTreeHost::updateHudLayer() |
m_hudLayer->removeFromParent(); |
m_hudLayer = 0; |
} |
+ |
+ // Setup pinch-zoom scrollbars if required. |
enne (OOO)
2013/03/06 19:32:58
This comment doesn't really add anything.
wjmaclean
2013/03/06 22:36:53
Done.
It used to mean more before the last re-fac
|
+ if (m_settings.usePinchZoomScrollbars) |
+ createAndAddPinchZoomScrollbars(); |
} |
void LayerTreeHost::commitComplete() |
@@ -501,6 +572,7 @@ void LayerTreeHost::setViewportSize(const gfx::Size& layoutViewportSize, const g |
m_layoutViewportSize = layoutViewportSize; |
m_deviceViewportSize = deviceViewportSize; |
+ setPinchZoomScrollbarsBoundsAndPosition(); |
setNeedsCommit(); |
} |
@@ -594,6 +666,11 @@ static Layer* findFirstScrollableLayer(Layer* layer) |
return 0; |
} |
+Layer* LayerTreeHost::rootScrollLayer() const |
+{ |
+ return findFirstScrollableLayer(m_rootLayer.get()); |
+} |
+ |
void LayerTreeHost::updateLayers(Layer* rootLayer, ResourceUpdateQueue& queue) |
{ |
TRACE_EVENT0("cc", "LayerTreeHost::updateLayers"); |
@@ -887,10 +964,21 @@ void LayerTreeHost::setAnimationEventsRecursive(const AnimationEventsVector& eve |
for (size_t eventIndex = 0; eventIndex < events.size(); ++eventIndex) { |
if (layer->id() == events[eventIndex].layerId) { |
- if (events[eventIndex].type == AnimationEvent::Started) |
+ switch (events[eventIndex].type) { |
+ case AnimationEvent::Started : |
layer->notifyAnimationStarted(events[eventIndex], wallClockTime.ToDoubleT()); |
- else |
+ break; |
+ case AnimationEvent::Finished : |
layer->notifyAnimationFinished(wallClockTime.ToDoubleT()); |
+ break; |
+ |
+ case AnimationEvent::PropertyUpdate : |
+ layer->notifyAnimationPropertyUpdate(events[eventIndex]); |
+ break; |
+ |
+ default: |
+ NOTREACHED(); |
+ } |
} |
} |