1 // Copyright 2010 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CC_LAYERS_CONTENT_LAYER_H_ 6 #define CC_LAYERS_CONTENT_LAYER_H_ 7 8 #include "base/basictypes.h" 9 #include "cc/base/cc_export.h" 10 #include "cc/layers/tiled_layer.h" 11 #include "cc/resources/layer_painter.h" 12 13 class SkCanvas; 14 15 namespace cc { 16 17 class ContentLayerClient; 18 class ContentLayerUpdater; 19 20 class CC_EXPORT ContentLayerPainter : public LayerPainter { 21 public: 22 static scoped_ptr<ContentLayerPainter> Create(ContentLayerClient* client); 23 24 virtual void Paint(SkCanvas* canvas, 25 gfx::Rect content_rect, 26 gfx::RectF* opaque) OVERRIDE; 27 28 private: 29 explicit ContentLayerPainter(ContentLayerClient* client); 30 31 ContentLayerClient* client_; 32 33 DISALLOW_COPY_AND_ASSIGN(ContentLayerPainter); 34 }; 35 36 // A layer that renders its contents into an SkCanvas. 37 class CC_EXPORT ContentLayer : public TiledLayer { 38 public: 39 static scoped_refptr<ContentLayer> Create(ContentLayerClient* client); 40 ClearClient()41 void ClearClient() { client_ = NULL; } 42 43 virtual bool DrawsContent() const OVERRIDE; 44 virtual void SetLayerTreeHost(LayerTreeHost* layer_tree_host) OVERRIDE; 45 virtual void SetTexturePriorities(const PriorityCalculator& priority_calc) 46 OVERRIDE; 47 virtual bool Update(ResourceUpdateQueue* queue, 48 const OcclusionTracker* occlusion) OVERRIDE; 49 virtual bool NeedMoreUpdates() OVERRIDE; 50 51 virtual void SetContentsOpaque(bool contents_opaque) OVERRIDE; 52 53 virtual bool SupportsLCDText() const OVERRIDE; 54 55 virtual skia::RefPtr<SkPicture> GetPicture() const OVERRIDE; 56 57 virtual void OnOutputSurfaceCreated() OVERRIDE; 58 59 protected: 60 explicit ContentLayer(ContentLayerClient* client); 61 virtual ~ContentLayer(); 62 63 // TiledLayer implementation. 64 virtual LayerUpdater* Updater() const OVERRIDE; 65 66 private: 67 // TiledLayer implementation. 68 virtual void CreateUpdaterIfNeeded() OVERRIDE; 69 70 void UpdateCanUseLCDText(); 71 72 ContentLayerClient* client_; 73 scoped_refptr<ContentLayerUpdater> updater_; 74 bool can_use_lcd_text_last_frame_; 75 76 DISALLOW_COPY_AND_ASSIGN(ContentLayer); 77 }; 78 79 } // namespace cc 80 #endif // CC_LAYERS_CONTENT_LAYER_H_ 81