default_window_resizer.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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#include "ash/wm/default_window_resizer.h" 6 7#include "ash/shell.h" 8#include "ash/wm/cursor_manager.h" 9#include "ash/wm/property_util.h" 10#include "ui/aura/client/aura_constants.h" 11#include "ui/aura/env.h" 12#include "ui/aura/window.h" 13#include "ui/aura/window_delegate.h" 14#include "ui/base/hit_test.h" 15#include "ui/base/ui_base_types.h" 16#include "ui/gfx/screen.h" 17 18namespace ash { 19 20DefaultWindowResizer::~DefaultWindowResizer() { 21 ash::Shell::GetInstance()->cursor_manager()->UnlockCursor(); 22} 23 24// static 25DefaultWindowResizer* 26DefaultWindowResizer::Create(aura::Window* window, 27 const gfx::Point& location, 28 int window_component) { 29 Details details(window, location, window_component); 30 return details.is_resizable ? new DefaultWindowResizer(details) : NULL; 31} 32 33void DefaultWindowResizer::Drag(const gfx::Point& location, int event_flags) { 34 gfx::Rect bounds(CalculateBoundsForDrag(details_, location)); 35 if (bounds != details_.window->bounds()) { 36 if (!did_move_or_resize_ && !details_.restore_bounds.IsEmpty()) 37 ClearRestoreBounds(details_.window); 38 did_move_or_resize_ = true; 39 details_.window->SetBounds(bounds); 40 } 41} 42 43void DefaultWindowResizer::CompleteDrag(int event_flags) { 44} 45 46void DefaultWindowResizer::RevertDrag() { 47 if (!did_move_or_resize_) 48 return; 49 50 details_.window->SetBounds(details_.initial_bounds_in_parent); 51 52 if (!details_.restore_bounds.IsEmpty()) 53 SetRestoreBoundsInScreen(details_.window, details_.restore_bounds); 54} 55 56aura::Window* DefaultWindowResizer::GetTarget() { 57 return details_.window; 58} 59 60DefaultWindowResizer::DefaultWindowResizer(const Details& details) 61 : details_(details), 62 did_move_or_resize_(false) { 63 DCHECK(details_.is_resizable); 64 ash::Shell::GetInstance()->cursor_manager()->LockCursor(); 65} 66 67} // namespace aura 68