screen_rotation.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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
14namespace ui {
15class InterpolatedTransform;
16class Layer;
17}
18
19namespace aura {
20class RootWindow;
21}
22
23namespace 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.
29class 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