// Copyright 2012 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 CC_PICTURE_LAYER_IMPL_H_ #define CC_PICTURE_LAYER_IMPL_H_ #include "cc/layer_impl.h" #include "cc/picture_layer_tiling.h" #include "cc/picture_layer_tiling_set.h" #include "cc/picture_pile_impl.h" #include "cc/scoped_ptr_vector.h" #include "skia/ext/refptr.h" #include "third_party/skia/include/core/SkPicture.h" namespace cc { struct AppendQuadsData; class QuadSink; class CC_EXPORT PictureLayerImpl : public LayerImpl, public PictureLayerTilingClient { public: static scoped_ptr create(LayerTreeImpl* treeImpl, int id) { return make_scoped_ptr(new PictureLayerImpl(treeImpl, id)); } virtual ~PictureLayerImpl(); // LayerImpl overrides. virtual const char* layerTypeAsString() const OVERRIDE; virtual scoped_ptr createLayerImpl( LayerTreeImpl* treeImpl) OVERRIDE; virtual void pushPropertiesTo(LayerImpl* layer) OVERRIDE; virtual void appendQuads(QuadSink&, AppendQuadsData&) OVERRIDE; virtual void dumpLayerProperties(std::string*, int indent) const OVERRIDE; virtual void didUpdateTransforms() OVERRIDE; virtual void didBecomeActive() OVERRIDE; virtual void didLoseOutputSurface() OVERRIDE; virtual void calculateContentsScale( float ideal_contents_scale, float* contents_scale_x, float* contents_scale_y, gfx::Size* content_bounds) OVERRIDE; virtual skia::RefPtr getPicture() OVERRIDE; // PictureLayerTilingClient overrides. virtual scoped_refptr CreateTile(PictureLayerTiling*, gfx::Rect) OVERRIDE; virtual void UpdatePile(Tile* tile) OVERRIDE; // PushPropertiesTo active tree => pending tree void SyncFromActiveLayer(); void SyncTiling(const PictureLayerTiling* tiling); void CreateTilingSet(); void TransferTilingSet(scoped_ptr tilings); // Mask-related functions void SetIsMask(bool is_mask); virtual ResourceProvider::ResourceId contentsResourceId() const OVERRIDE; virtual bool areVisibleResourcesReady() const OVERRIDE; protected: PictureLayerImpl(LayerTreeImpl* treeImpl, int id); PictureLayerTiling* AddTiling(float contents_scale); void SyncFromActiveLayer(const PictureLayerImpl* other); gfx::Size TileSize() const; void ManageTilings(float ideal_contents_scale); void CleanUpUnusedTilings(std::vector used_tilings); scoped_ptr tilings_; scoped_refptr pile_; Region invalidation_; gfx::Transform last_screen_space_transform_; double last_update_time_; gfx::Size last_bounds_; gfx::Size last_content_bounds_; float last_content_scale_; float ideal_contents_scale_; bool is_mask_; friend class PictureLayer; DISALLOW_COPY_AND_ASSIGN(PictureLayerImpl); }; } #endif // CC_PICTURE_LAYER_IMPL_H_