Home | History | Annotate | Download | only in blink
      1 // Copyright 2014 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_BLINK_WEB_LAYER_IMPL_FIXED_BOUNDS_H_
      6 #define CC_BLINK_WEB_LAYER_IMPL_FIXED_BOUNDS_H_
      7 
      8 #include "cc/blink/web_layer_impl.h"
      9 #include "ui/gfx/size.h"
     10 #include "ui/gfx/transform.h"
     11 
     12 namespace cc_blink {
     13 
     14 // A special implementation of WebLayerImpl for layers that its contents
     15 // need to be automatically scaled when the bounds changes. The compositor
     16 // can efficiently handle the bounds change of such layers if the bounds
     17 // is fixed to a given value and the change of bounds are converted to
     18 // transformation scales.
     19 class WebLayerImplFixedBounds : public WebLayerImpl {
     20  public:
     21   CC_BLINK_EXPORT WebLayerImplFixedBounds();
     22   CC_BLINK_EXPORT explicit WebLayerImplFixedBounds(scoped_refptr<cc::Layer>);
     23   virtual ~WebLayerImplFixedBounds();
     24 
     25   // WebLayerImpl overrides.
     26   virtual void invalidateRect(const blink::WebFloatRect& rect);
     27   virtual void setTransformOrigin(
     28       const blink::WebFloatPoint3D& transform_origin);
     29   virtual void setBounds(const blink::WebSize& bounds);
     30   virtual blink::WebSize bounds() const;
     31   virtual void setTransform(const SkMatrix44& transform);
     32   virtual SkMatrix44 transform() const;
     33 
     34   CC_BLINK_EXPORT void SetFixedBounds(gfx::Size bounds);
     35 
     36  protected:
     37   void SetTransformInternal(const gfx::Transform& transform);
     38   void UpdateLayerBoundsAndTransform();
     39 
     40   gfx::Transform original_transform_;
     41   gfx::Size original_bounds_;
     42   gfx::Size fixed_bounds_;
     43 
     44  private:
     45   DISALLOW_COPY_AND_ASSIGN(WebLayerImplFixedBounds);
     46 };
     47 
     48 }  // namespace cc_blink
     49 
     50 #endif  // CC_BLINK_WEB_LAYER_IMPL_FIXED_BOUNDS_H_
     51