Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4785)

Unified Diff: cc/layer_tree_host.cc

Issue 11550035: Implement pinch-zoom scaling for main-frame scrollbars and pinch-zoom overlay scrollbars. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Revised per latest comments. Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698