summaryrefslogtreecommitdiffstats
path: root/webkit/renderer
diff options
context:
space:
mode:
authorwjmaclean@chromium.org <wjmaclean@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-24 07:43:49 +0000
committerwjmaclean@chromium.org <wjmaclean@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-24 07:43:49 +0000
commit0f4e80949fcbac5145e68f81b8ddb63d76788d90 (patch)
tree45dd6348873d719e0b9b3fb563004760579667bf /webkit/renderer
parenta5320b4678073d0f86d62566d782c79d759640a5 (diff)
downloadchromium_src-0f4e80949fcbac5145e68f81b8ddb63d76788d90.zip
chromium_src-0f4e80949fcbac5145e68f81b8ddb63d76788d90.tar.gz
chromium_src-0f4e80949fcbac5145e68f81b8ddb63d76788d90.tar.bz2
Pinch/Zoom Infrastructure & Plumbing CL
This CL supplies the necessary changes to CC to support the inner/outer viewport model for pinch-zoom and fixed-position elements. The specification for these changes is contained in the document "Layer-based Solution for Pinch Zoom / Fixed Position". It incorporates a change to how scrollbar parameters are computed (removes the notion of max_scroll_offset as a quantity set be the embedder, and instead inferred from the relative sizes of a clip layer w.r.t. the scroll layer). Scrollbars are generalized so that a layer may have more than two scrollbars, and the parameters of the scrollbar are set w.r.t. the sizes and positions of a clip and a scroll layer. Further, changes to the scrip/scroll layer automatically notify any attached scrollbars. The CL also removes existing references to root_scroll_layer from LTH, LTI and LTHI and replaces them with either Inner/OuterViewportScrollLayer (dual-layer operation only exists at present if the --enable-pinch-virtual-viewport flag is specified, otherwise behavior is unchanged). Logic is added to (i) combine scroll offsets for the two viewports before passing it to the embedder, and (ii) splitting any offsets received from the embedder appropriately between the two viewports. This CL relies on https://codereview.chromium.org/138453004/ for changes in Blink to support it. BUG=148816 Review URL: https://codereview.chromium.org/23983047 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@246812 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/renderer')
-rw-r--r--webkit/renderer/compositor_bindings/web_layer_impl.cc13
-rw-r--r--webkit/renderer/compositor_bindings/web_layer_impl.h3
-rw-r--r--webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.cc13
-rw-r--r--webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.h1
4 files changed, 19 insertions, 11 deletions
diff --git a/webkit/renderer/compositor_bindings/web_layer_impl.cc b/webkit/renderer/compositor_bindings/web_layer_impl.cc
index 7c12480..8dd66e2 100644
--- a/webkit/renderer/compositor_bindings/web_layer_impl.cc
+++ b/webkit/renderer/compositor_bindings/web_layer_impl.cc
@@ -14,6 +14,7 @@
#include "cc/base/switches.h"
#include "cc/layers/layer.h"
#include "cc/layers/layer_position_constraint.h"
+#include "cc/trees/layer_tree_host.h"
#include "third_party/WebKit/public/platform/WebFloatPoint.h"
#include "third_party/WebKit/public/platform/WebFloatRect.h"
#include "third_party/WebKit/public/platform/WebGraphicsLayerDebugInfo.h"
@@ -260,16 +261,14 @@ blink::WebPoint WebLayerImpl::scrollPosition() const {
return gfx::PointAtOffsetFromOrigin(layer_->scroll_offset());
}
-void WebLayerImpl::setMaxScrollPosition(WebSize max_scroll_position) {
- layer_->SetMaxScrollOffset(max_scroll_position);
-}
-
WebSize WebLayerImpl::maxScrollPosition() const {
- return layer_->max_scroll_offset();
+ return layer_->MaxScrollOffset();
}
-void WebLayerImpl::setScrollable(bool scrollable) {
- layer_->SetScrollable(scrollable);
+void WebLayerImpl::setScrollClipLayer(WebLayer* clip_layer) {
+ cc::Layer* cc_clip_layer =
+ clip_layer ? static_cast<WebLayerImpl*>(clip_layer)->layer() : 0;
+ layer_->SetScrollClipLayer(cc_clip_layer);
}
bool WebLayerImpl::scrollable() const { return layer_->scrollable(); }
diff --git a/webkit/renderer/compositor_bindings/web_layer_impl.h b/webkit/renderer/compositor_bindings/web_layer_impl.h
index e21c2f8..c4c34ef 100644
--- a/webkit/renderer/compositor_bindings/web_layer_impl.h
+++ b/webkit/renderer/compositor_bindings/web_layer_impl.h
@@ -107,9 +107,8 @@ class WebLayerImpl : public blink::WebLayer, public cc::LayerClient {
virtual void setForceRenderSurface(bool force);
virtual void setScrollPosition(blink::WebPoint position);
virtual blink::WebPoint scrollPosition() const;
- virtual void setMaxScrollPosition(blink::WebSize max_position);
virtual blink::WebSize maxScrollPosition() const;
- virtual void setScrollable(bool scrollable);
+ virtual void setScrollClipLayer(blink::WebLayer* clip_layer);
virtual bool scrollable() const;
virtual void setUserScrollable(bool horizontal, bool vertical);
virtual bool userScrollableHorizontal() const;
diff --git a/webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.cc b/webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.cc
index 265a97d..484c946 100644
--- a/webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.cc
+++ b/webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.cc
@@ -4,6 +4,7 @@
#include "webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.h"
+#include "cc/layers/layer.h"
#include "cc/layers/painted_scrollbar_layer.h"
#include "cc/layers/scrollbar_layer_interface.h"
#include "cc/layers/solid_color_scrollbar_layer.h"
@@ -51,8 +52,16 @@ WebScrollbarLayerImpl::~WebScrollbarLayerImpl() {}
blink::WebLayer* WebScrollbarLayerImpl::layer() { return layer_.get(); }
void WebScrollbarLayerImpl::setScrollLayer(blink::WebLayer* layer) {
- int id = layer ? static_cast<WebLayerImpl*>(layer)->layer()->id() : 0;
- static_cast<PaintedScrollbarLayer*>(layer_->layer())->SetScrollLayerId(id);
+ cc::Layer* scroll_layer =
+ layer ? static_cast<WebLayerImpl*>(layer)->layer() : 0;
+ layer_->layer()->ToScrollbarLayer()->SetScrollLayer(scroll_layer);
+}
+
+void WebScrollbarLayerImpl::setClipLayer(blink::WebLayer* layer) {
+ cc::Layer* clip_layer =
+ layer ? static_cast<WebLayerImpl*>(layer)->layer() : 0;
+ layer_->layer()->ToScrollbarLayer()
+ ->SetClipLayer(clip_layer);
}
} // namespace webkit
diff --git a/webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.h b/webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.h
index 85d9794..a0e8d0a 100644
--- a/webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.h
+++ b/webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.h
@@ -34,6 +34,7 @@ class WebScrollbarLayerImpl : public blink::WebScrollbarLayer {
// blink::WebScrollbarLayer implementation.
virtual blink::WebLayer* layer();
virtual void setScrollLayer(blink::WebLayer* layer);
+ virtual void setClipLayer(blink::WebLayer* layer);
private:
scoped_ptr<WebLayerImpl> layer_;