| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ash/wm/default_window_resizer.h" |
| |
| #include "ash/shell.h" |
| #include "ash/wm/property_util.h" |
| #include "ui/aura/client/aura_constants.h" |
| #include "ui/aura/env.h" |
| #include "ui/aura/window.h" |
| #include "ui/aura/window_delegate.h" |
| #include "ui/base/hit_test.h" |
| #include "ui/base/ui_base_types.h" |
| #include "ui/gfx/screen.h" |
| |
| namespace ash { |
| |
| DefaultWindowResizer::~DefaultWindowResizer() { |
| ash::Shell::GetInstance()->cursor_manager()->UnlockCursor(); |
| } |
| |
| // static |
| DefaultWindowResizer* |
| DefaultWindowResizer::Create(aura::Window* window, |
| const gfx::Point& location, |
| int window_component, |
| aura::client::WindowMoveSource source) { |
| Details details(window, location, window_component, source); |
| return details.is_resizable ? new DefaultWindowResizer(details) : NULL; |
| } |
| |
| void DefaultWindowResizer::Drag(const gfx::Point& location, int event_flags) { |
| gfx::Rect bounds(CalculateBoundsForDrag(details_, location)); |
| if (bounds != details_.window->bounds()) { |
| if (!did_move_or_resize_ && !details_.restore_bounds.IsEmpty()) |
| ClearRestoreBounds(details_.window); |
| did_move_or_resize_ = true; |
| details_.window->SetBounds(bounds); |
| } |
| } |
| |
| void DefaultWindowResizer::CompleteDrag(int event_flags) { |
| } |
| |
| void DefaultWindowResizer::RevertDrag() { |
| if (!did_move_or_resize_) |
| return; |
| |
| details_.window->SetBounds(details_.initial_bounds_in_parent); |
| |
| if (!details_.restore_bounds.IsEmpty()) |
| SetRestoreBoundsInScreen(details_.window, details_.restore_bounds); |
| } |
| |
| aura::Window* DefaultWindowResizer::GetTarget() { |
| return details_.window; |
| } |
| |
| const gfx::Point& DefaultWindowResizer::GetInitialLocation() const { |
| return details_.initial_location_in_parent; |
| } |
| |
| DefaultWindowResizer::DefaultWindowResizer(const Details& details) |
| : details_(details), |
| did_move_or_resize_(false) { |
| DCHECK(details_.is_resizable); |
| ash::Shell::GetInstance()->cursor_manager()->LockCursor(); |
| } |
| |
| } // namespace aura |