Home | History | Annotate | Download | only in layers
      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_
     92