summaryrefslogtreecommitdiffstats
path: root/cc/layer_tree_host_common.h
diff options
context:
space:
mode:
Diffstat (limited to 'cc/layer_tree_host_common.h')
-rw-r--r--cc/layer_tree_host_common.h95
1 files changed, 94 insertions, 1 deletions
diff --git a/cc/layer_tree_host_common.h b/cc/layer_tree_host_common.h
index 638cbb2..01dc41e 100644
--- a/cc/layer_tree_host_common.h
+++ b/cc/layer_tree_host_common.h
@@ -1,3 +1,96 @@
-// Copyright 2012 The Chromium Authors. All rights reserved.
+// Copyright 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+
+#ifndef CCLayerTreeHostCommon_h
+#define CCLayerTreeHostCommon_h
+
+#include "base/memory/ref_counted.h"
+#include "cc/scoped_ptr_vector.h"
+#include "IntRect.h"
+#include "IntSize.h"
+#include <public/WebTransformationMatrix.h>
+#include <wtf/Vector.h>
+
+namespace cc {
+
+class CCLayerImpl;
+class CCLayerSorter;
+class LayerChromium;
+
+class CCLayerTreeHostCommon {
+public:
+ static IntRect calculateVisibleRect(const IntRect& targetSurfaceRect, const IntRect& layerBoundRect, const WebKit::WebTransformationMatrix&);
+
+ static void calculateDrawTransforms(LayerChromium* rootLayer, const IntSize& deviceViewportSize, float deviceScaleFactor, int maxTextureSize, std::vector<scoped_refptr<LayerChromium> >& renderSurfaceLayerList);
+ static void calculateDrawTransforms(CCLayerImpl* rootLayer, const IntSize& deviceViewportSize, float deviceScaleFactor, CCLayerSorter*, int maxTextureSize, std::vector<CCLayerImpl*>& renderSurfaceLayerList);
+
+ // Performs hit testing for a given renderSurfaceLayerList.
+ static CCLayerImpl* findLayerThatIsHitByPoint(const IntPoint& viewportPoint, std::vector<CCLayerImpl*>& renderSurfaceLayerList);
+
+ template<typename LayerType> static bool renderSurfaceContributesToTarget(LayerType*, int targetSurfaceLayerID);
+
+ // Returns a layer with the given id if one exists in the subtree starting
+ // from the given root layer (including mask and replica layers).
+ template<typename LayerType> static LayerType* findLayerInSubtree(LayerType* rootLayer, int layerId);
+
+ static LayerChromium* getChildAsRawPtr(const std::vector<scoped_refptr<LayerChromium> >& children, size_t index)
+ {
+ return children[index].get();
+ }
+
+ static CCLayerImpl* getChildAsRawPtr(const ScopedPtrVector<CCLayerImpl>& children, size_t index)
+ {
+ return children[index];
+ }
+
+ struct ScrollUpdateInfo {
+ int layerId;
+ IntSize scrollDelta;
+ };
+};
+
+struct CCScrollAndScaleSet {
+ CCScrollAndScaleSet();
+ ~CCScrollAndScaleSet();
+
+ Vector<CCLayerTreeHostCommon::ScrollUpdateInfo> scrolls;
+ float pageScaleDelta;
+};
+
+template<typename LayerType>
+bool CCLayerTreeHostCommon::renderSurfaceContributesToTarget(LayerType* layer, int targetSurfaceLayerID)
+{
+ // A layer will either contribute its own content, or its render surface's content, to
+ // the target surface. The layer contributes its surface's content when both the
+ // following are true:
+ // (1) The layer actually has a renderSurface, and
+ // (2) The layer's renderSurface is not the same as the targetSurface.
+ //
+ // Otherwise, the layer just contributes itself to the target surface.
+
+ return layer->renderSurface() && layer->id() != targetSurfaceLayerID;
+}
+
+template<typename LayerType>
+LayerType* CCLayerTreeHostCommon::findLayerInSubtree(LayerType* rootLayer, int layerId)
+{
+ if (rootLayer->id() == layerId)
+ return rootLayer;
+
+ if (rootLayer->maskLayer() && rootLayer->maskLayer()->id() == layerId)
+ return rootLayer->maskLayer();
+
+ if (rootLayer->replicaLayer() && rootLayer->replicaLayer()->id() == layerId)
+ return rootLayer->replicaLayer();
+
+ for (size_t i = 0; i < rootLayer->children().size(); ++i) {
+ if (LayerType* found = findLayerInSubtree(getChildAsRawPtr(rootLayer->children(), i), layerId))
+ return found;
+ }
+ return 0;
+}
+
+} // namespace cc
+
+#endif