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