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(const gfx::Rect& image_aperture,
     57                  const 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(RenderPass* render_pass,
     65                            const OcclusionTracker<LayerImpl>& occlusion_tracker,
     66                            AppendQuadsData* append_quads_data) OVERRIDE;
     67 
     68   virtual base::DictionaryValue* LayerTreeAsJson() const OVERRIDE;
     69 
     70  protected:
     71   NinePatchLayerImpl(LayerTreeImpl* tree_impl, int id);
     72 
     73  private:
     74   virtual const char* LayerTypeAsString() const OVERRIDE;
     75 
     76   void CheckGeometryLimitations();
     77 
     78   // The transparent center region that shows the parent layer's contents in
     79   // image space.
     80   gfx::Rect image_aperture_;
     81 
     82   // An inset border that the patches will be mapped to.
     83   gfx::Rect border_;
     84 
     85   bool fill_center_;
     86 
     87   DISALLOW_COPY_AND_ASSIGN(NinePatchLayerImpl);
     88 };
     89 
     90 }  // namespace cc
     91 
     92 #endif  // CC_LAYERS_NINE_PATCH_LAYER_IMPL_H_
     93