- add sources.
[platform/framework/web/crosswalk.git] / src / cc / layers / nine_patch_layer_impl.h
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_IMPL_H_
6 #define CC_LAYERS_NINE_PATCH_LAYER_IMPL_H_
7
8 #include <string>
9
10 #include "cc/base/cc_export.h"
11 #include "cc/layers/layer_impl.h"
12 #include "cc/layers/ui_resource_layer_impl.h"
13 #include "cc/resources/resource_provider.h"
14 #include "cc/resources/ui_resource_client.h"
15 #include "ui/gfx/rect.h"
16 #include "ui/gfx/size.h"
17
18 namespace base {
19 class DictionaryValue;
20 }
21
22 namespace cc {
23
24 class CC_EXPORT NinePatchLayerImpl : public UIResourceLayerImpl {
25  public:
26   static scoped_ptr<NinePatchLayerImpl> Create(LayerTreeImpl* tree_impl,
27                                                int id) {
28     return make_scoped_ptr(new NinePatchLayerImpl(tree_impl, id));
29   }
30   virtual ~NinePatchLayerImpl();
31
32   // The bitmap stretches out the bounds of the layer.  The following picture
33   // illustrates the parameters associated with the dimensions.
34   //
35   // Layer space layout              Bitmap space layout
36   //
37   // ------------------------       ~~~~~~~~~~ W ~~~~~~~~~~
38   // |          :           |       :     :                |
39   // |          C           |       :     Y                |
40   // |          :           |       :     :                |
41   // |     ------------     |       :~~X~~------------     |
42   // |     |          |     |       :     |          :     |
43   // |     |          |     |       :     |          :     |
44   // |~~A~~|          |~~B~~|       H     |          Q     |
45   // |     |          |     |       :     |          :     |
46   // |     ------------     |       :     ~~~~~P~~~~~      |
47   // |          :           |       :                      |
48   // |          D           |       :                      |
49   // |          :           |       :                      |
50   // ------------------------       ------------------------
51   //
52   // |image_bounds| = (W, H)
53   // |image_aperture| = (X, Y, P, Q)
54   // |border| = (A, C, A + B, C + D)
55   // |fill_center| indicates whether to draw the center quad or not.
56   void SetLayout(gfx::Rect image_aperture,
57                  gfx::Rect border,
58                  bool fill_center);
59
60   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
61       OVERRIDE;
62   virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
63
64   virtual void AppendQuads(QuadSink* quad_sink,
65                            AppendQuadsData* append_quads_data) OVERRIDE;
66
67   virtual base::DictionaryValue* LayerTreeAsJson() const OVERRIDE;
68
69  protected:
70   NinePatchLayerImpl(LayerTreeImpl* tree_impl, int id);
71
72  private:
73   virtual const char* LayerTypeAsString() const OVERRIDE;
74
75   void CheckGeometryLimitations();
76
77   // The transparent center region that shows the parent layer's contents in
78   // image space.
79   gfx::Rect image_aperture_;
80
81   // An inset border that the patches will be mapped to.
82   gfx::Rect border_;
83
84   bool fill_center_;
85
86   DISALLOW_COPY_AND_ASSIGN(NinePatchLayerImpl);
87 };
88
89 }  // namespace cc
90
91 #endif  // CC_LAYERS_NINE_PATCH_LAYER_IMPL_H_