Home | History | Annotate | Download | only in rotator
      1 // Copyright (c) 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 ASH_SCREEN_ROTATION_H_
      6 #define ASH_SCREEN_ROTATION_H_
      7 
      8 #include "ash/ash_export.h"
      9 #include "base/basictypes.h"
     10 #include "base/memory/scoped_ptr.h"
     11 #include "ui/compositor/layer_animation_element.h"
     12 #include "ui/gfx/point.h"
     13 
     14 namespace ui {
     15 class InterpolatedTransform;
     16 class Layer;
     17 }
     18 
     19 namespace aura {
     20 class RootWindow;
     21 }
     22 
     23 namespace ash {
     24 
     25 // A screen rotation represents a single transition from one screen orientation
     26 // to another. The  intended usage is that a new instance of the class is
     27 // created for every transition. It is possible to update the target orientation
     28 // in the middle of a transition.
     29 class ASH_EXPORT ScreenRotation : public ui::LayerAnimationElement {
     30  public:
     31   // |degrees| are clockwise. |layer| is the target of the animation. Does not
     32   // take ownership of |layer|.
     33   ScreenRotation(int degrees, ui::Layer* layer);
     34   virtual ~ScreenRotation();
     35 
     36  private:
     37   // Generates the intermediate transformation matrices used during the
     38   // animation.
     39   void InitTransform(ui::Layer* layer);
     40 
     41   // Implementation of ui::LayerAnimationDelegate
     42   virtual void OnStart(ui::LayerAnimationDelegate* delegate) OVERRIDE;
     43   virtual bool OnProgress(double t,
     44                           ui::LayerAnimationDelegate* delegate) OVERRIDE;
     45   virtual void OnGetTarget(TargetValue* target) const OVERRIDE;
     46   virtual void OnAbort(ui::LayerAnimationDelegate* delegate) OVERRIDE;
     47 
     48   scoped_ptr<ui::InterpolatedTransform> interpolated_transform_;
     49 
     50   // The number of degrees to rotate.
     51   int degrees_;
     52 
     53   // The target origin.
     54   gfx::Point new_origin_;
     55 
     56   DISALLOW_COPY_AND_ASSIGN(ScreenRotation);
     57 };
     58 
     59 }  // namespace ash
     60 
     61 #endif  // ASH_SCREEN_ROTATION_H_
     62