Chromium Code Reviews| Index: athena/screen/screen_manager_impl.cc |
| diff --git a/athena/screen/screen_manager_impl.cc b/athena/screen/screen_manager_impl.cc |
| index 8522acfc7acd30404c8b2ce8aa0d88fad5963769..a0e58c033424567a8855568a51aa82cb2acacbc1 100644 |
| --- a/athena/screen/screen_manager_impl.cc |
| +++ b/athena/screen/screen_manager_impl.cc |
| @@ -36,6 +36,11 @@ bool GrabsInput(aura::Window* container) { |
| return params && params->grab_inputs; |
| } |
| +bool IsRotationPortrait(gfx::Display::Rotation rotation) { |
| + return rotation == gfx::Display::ROTATE_90 || |
| + rotation == gfx::Display::ROTATE_270; |
| +} |
| + |
| // Returns the container which contains |window|. |
| aura::Window* GetContainer(aura::Window* window) { |
| // No containers for NULL or the root window itself. |
| @@ -199,9 +204,12 @@ class ScreenManagerImpl : public ScreenManager { |
| virtual aura::Window* CreateContainer(const ContainerParams& params) OVERRIDE; |
| virtual aura::Window* GetContext() OVERRIDE { return root_window_; } |
| virtual void SetBackgroundImage(const gfx::ImageSkia& image) OVERRIDE; |
| + virtual gfx::Display::Rotation GetRotation() OVERRIDE; |
| + virtual void SetRotation(gfx::Display::Rotation rotation) OVERRIDE; |
| aura::Window* root_window_; |
| aura::Window* background_window_; |
| + gfx::Display::Rotation rotation_; |
| scoped_ptr<BackgroundController> background_controller_; |
| scoped_ptr<aura::client::WindowTreeClient> window_tree_client_; |
| @@ -213,7 +221,8 @@ class ScreenManagerImpl : public ScreenManager { |
| }; |
| ScreenManagerImpl::ScreenManagerImpl(aura::Window* root_window) |
| - : root_window_(root_window) { |
| + : root_window_(root_window), |
| + rotation_(gfx::Display::ROTATE_0) { |
| DCHECK(root_window_); |
| DCHECK(!instance); |
| instance = this; |
| @@ -322,6 +331,42 @@ void ScreenManagerImpl::SetBackgroundImage(const gfx::ImageSkia& image) { |
| background_controller_->SetImage(image); |
| } |
| +gfx::Display::Rotation ScreenManagerImpl::GetRotation() { |
| + return rotation_; |
| +} |
| + |
| +void ScreenManagerImpl::SetRotation(gfx::Display::Rotation rotation) { |
| + if (rotation == rotation_) |
| + return; |
| + |
| + gfx::Rect bounds(root_window_->bounds()); |
| + if (IsRotationPortrait(rotation) != IsRotationPortrait(rotation_)) { |
| + bounds.set_size(gfx::Size(bounds.height(), bounds.width())); |
| + } |
| + |
| + rotation_ = rotation; |
| + root_window_->SetBounds(bounds); |
| + gfx::Transform transform; |
| + switch (rotation) { |
| + case gfx::Display::ROTATE_90: |
| + transform.Translate(bounds.height(), 0); |
| + transform.RotateAboutZAxis(90); |
| + break; |
| + case gfx::Display::ROTATE_180: |
| + transform.Translate(bounds.width(), bounds.height()); |
| + transform.RotateAboutZAxis(180); |
| + break; |
| + case gfx::Display::ROTATE_270: |
| + transform.Translate(0, bounds.width()); |
| + transform.RotateAboutZAxis(270); |
| + break; |
| + case gfx::Display::ROTATE_0: |
| + default: |
| + break; |
| + } |
| + root_window_->layer()->SetTransform(transform); |
|
oshima
2014/08/01 17:15:11
Note: this won't update gfx::Display objects. A co
flackr
2014/08/06 14:13:51
Noted.
|
| +} |
| + |
| } // namespace |
| ScreenManager::ContainerParams::ContainerParams(const std::string& n, |