diff options
Diffstat (limited to 'cc/render_surface.h')
-rw-r--r-- | cc/render_surface.h | 106 |
1 files changed, 105 insertions, 1 deletions
diff --git a/cc/render_surface.h b/cc/render_surface.h index 638cbb2..67ed626 100644 --- a/cc/render_surface.h +++ b/cc/render_surface.h @@ -1,3 +1,107 @@ -// Copyright 2012 The Chromium Authors. All rights reserved. +// Copyright 2010 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 RenderSurfaceChromium_h +#define RenderSurfaceChromium_h + +#if USE(ACCELERATED_COMPOSITING) + +#include "base/basictypes.h" +#include "base/memory/ref_counted.h" +#include "FloatRect.h" +#include "IntRect.h" +#include <public/WebTransformationMatrix.h> +#include <vector> + +namespace cc { + +class LayerChromium; + +class RenderSurfaceChromium { +public: + explicit RenderSurfaceChromium(LayerChromium*); + ~RenderSurfaceChromium(); + + // Returns the rect that encloses the RenderSurface including any reflection. + FloatRect drawableContentRect() const; + + const IntRect& contentRect() const { return m_contentRect; } + void setContentRect(const IntRect& contentRect) { m_contentRect = contentRect; } + + float drawOpacity() const { return m_drawOpacity; } + void setDrawOpacity(float drawOpacity) { m_drawOpacity = drawOpacity; } + + bool drawOpacityIsAnimating() const { return m_drawOpacityIsAnimating; } + void setDrawOpacityIsAnimating(bool drawOpacityIsAnimating) { m_drawOpacityIsAnimating = drawOpacityIsAnimating; } + + // This goes from content space with the origin in the center of the rect being transformed to the target space with the origin in the top left of the + // rect being transformed. Position the rect so that the origin is in the center of it before applying this transform. + const WebKit::WebTransformationMatrix& drawTransform() const { return m_drawTransform; } + void setDrawTransform(const WebKit::WebTransformationMatrix& drawTransform) { m_drawTransform = drawTransform; } + + const WebKit::WebTransformationMatrix& screenSpaceTransform() const { return m_screenSpaceTransform; } + void setScreenSpaceTransform(const WebKit::WebTransformationMatrix& screenSpaceTransform) { m_screenSpaceTransform = screenSpaceTransform; } + + const WebKit::WebTransformationMatrix& replicaDrawTransform() const { return m_replicaDrawTransform; } + void setReplicaDrawTransform(const WebKit::WebTransformationMatrix& replicaDrawTransform) { m_replicaDrawTransform = replicaDrawTransform; } + + const WebKit::WebTransformationMatrix& replicaScreenSpaceTransform() const { return m_replicaScreenSpaceTransform; } + void setReplicaScreenSpaceTransform(const WebKit::WebTransformationMatrix& replicaScreenSpaceTransform) { m_replicaScreenSpaceTransform = replicaScreenSpaceTransform; } + + bool targetSurfaceTransformsAreAnimating() const { return m_targetSurfaceTransformsAreAnimating; } + void setTargetSurfaceTransformsAreAnimating(bool animating) { m_targetSurfaceTransformsAreAnimating = animating; } + bool screenSpaceTransformsAreAnimating() const { return m_screenSpaceTransformsAreAnimating; } + void setScreenSpaceTransformsAreAnimating(bool animating) { m_screenSpaceTransformsAreAnimating = animating; } + + const IntRect& clipRect() const { return m_clipRect; } + void setClipRect(const IntRect& clipRect) { m_clipRect = clipRect; } + + typedef std::vector<scoped_refptr<LayerChromium> > LayerList; + LayerList& layerList() { return m_layerList; } + // A no-op since DelegatedRendererLayers on the main thread don't have any + // RenderPasses so they can't contribute to a surface. + void addContributingDelegatedRenderPassLayer(LayerChromium*) { } + void clearLayerLists() { m_layerList.clear(); } + + void setNearestAncestorThatMovesPixels(RenderSurfaceChromium* surface) { m_nearestAncestorThatMovesPixels = surface; } + const RenderSurfaceChromium* nearestAncestorThatMovesPixels() const { return m_nearestAncestorThatMovesPixels; } + +private: + friend struct CCLayerIteratorActions; + + LayerChromium* m_owningLayer; + + // Uses this surface's space. + IntRect m_contentRect; + + float m_drawOpacity; + bool m_drawOpacityIsAnimating; + WebKit::WebTransformationMatrix m_drawTransform; + WebKit::WebTransformationMatrix m_screenSpaceTransform; + WebKit::WebTransformationMatrix m_replicaDrawTransform; + WebKit::WebTransformationMatrix m_replicaScreenSpaceTransform; + bool m_targetSurfaceTransformsAreAnimating; + bool m_screenSpaceTransformsAreAnimating; + + // Uses the space of the surface's target surface. + IntRect m_clipRect; + + LayerList m_layerList; + + // The nearest ancestor target surface that will contain the contents of this surface, and that is going + // to move pixels within the surface (such as with a blur). This can point to itself. + RenderSurfaceChromium* m_nearestAncestorThatMovesPixels; + + // For CCLayerIteratorActions + int m_targetRenderSurfaceLayerIndexHistory; + int m_currentLayerIndexHistory; + + DISALLOW_COPY_AND_ASSIGN(RenderSurfaceChromium); +}; + +} +#endif // USE(ACCELERATED_COMPOSITING) + +#endif |