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_IMAGE_LAYER_H_
6#define CC_LAYERS_IMAGE_LAYER_H_
7
8#include "cc/base/cc_export.h"
9#include "cc/layers/content_layer.h"
10#include "third_party/skia/include/core/SkBitmap.h"
11
12namespace cc {
13
14class ImageLayerUpdater;
15
16// A Layer that contains only an Image element.
17class CC_EXPORT ImageLayer : public TiledLayer {
18 public:
19  static scoped_refptr<ImageLayer> Create();
20
21  // Layer implementation.
22  virtual void SetTexturePriorities(const PriorityCalculator& priority_calc)
23      OVERRIDE;
24  virtual bool Update(ResourceUpdateQueue* queue,
25                      const OcclusionTracker<Layer>* occlusion) OVERRIDE;
26  virtual void CalculateContentsScale(float ideal_contents_scale,
27                                      float* contents_scale_x,
28                                      float* contents_scale_y,
29                                      gfx::Size* content_bounds) OVERRIDE;
30  virtual void OnOutputSurfaceCreated() OVERRIDE;
31
32  void SetBitmap(const SkBitmap& image);
33
34 protected:
35  virtual bool HasDrawableContent() const OVERRIDE;
36
37 private:
38  ImageLayer();
39  virtual ~ImageLayer();
40
41  // TiledLayer Implementation.
42  virtual LayerUpdater* Updater() const OVERRIDE;
43  virtual void CreateUpdaterIfNeeded() OVERRIDE;
44
45  float ImageContentsScaleX() const;
46  float ImageContentsScaleY() const;
47
48  SkBitmap bitmap_;
49
50  scoped_refptr<ImageLayerUpdater> updater_;
51
52  DISALLOW_COPY_AND_ASSIGN(ImageLayer);
53};
54
55}  // namespace cc
56
57#endif  // CC_LAYERS_IMAGE_LAYER_H_
58