nine_patch_layer.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
1// Copyright 2012 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_NINE_PATCH_LAYER_H_
6#define CC_LAYERS_NINE_PATCH_LAYER_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "cc/base/cc_export.h"
10#include "cc/layers/layer.h"
11#include "cc/resources/image_layer_updater.h"
12#include "third_party/skia/include/core/SkBitmap.h"
13#include "ui/gfx/rect.h"
14
15namespace cc {
16
17class ResourceUpdateQueue;
18
19class CC_EXPORT NinePatchLayer : public Layer {
20 public:
21  static scoped_refptr<NinePatchLayer> Create();
22
23  virtual bool DrawsContent() const OVERRIDE;
24  virtual void SetTexturePriorities(const PriorityCalculator& priority_calc)
25      OVERRIDE;
26  virtual void Update(ResourceUpdateQueue* queue,
27                      const OcclusionTracker* occlusion,
28                      RenderingStats* stats) OVERRIDE;
29  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
30
31  // aperture is in the pixel space of the bitmap resource and refers to
32  // the center patch of the ninepatch (which is unused in this
33  // implementation). We split off eight rects surrounding it and stick them
34  // on the edges of the layer. The corners are unscaled, the top and bottom
35  // rects are x-stretched to fit, and the left and right rects are
36  // y-stretched to fit.
37  void SetBitmap(const SkBitmap& bitmap, gfx::Rect aperture);
38
39 private:
40  NinePatchLayer();
41  virtual ~NinePatchLayer();
42  virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
43      OVERRIDE;
44
45  void CreateUpdaterIfNeeded();
46  void CreateResource();
47
48  scoped_refptr<ImageLayerUpdater> updater_;
49  scoped_ptr<LayerUpdater::Resource> resource_;
50
51  SkBitmap bitmap_;
52  bool bitmap_dirty_;
53
54  // The transparent center region that shows the parent layer's contents in
55  // image space.
56  gfx::Rect image_aperture_;
57};
58
59}  // namespace cc
60
61#endif  // CC_LAYERS_NINE_PATCH_LAYER_H_
62