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/property_util.h" 9 #include "ui/aura/client/aura_constants.h" 10 #include "ui/aura/env.h" 11 #include "ui/aura/window.h" 12 #include "ui/aura/window_delegate.h" 13 #include "ui/base/hit_test.h" 14 #include "ui/base/ui_base_types.h" 15 #include "ui/gfx/screen.h" 16 17 namespace ash { 18 19 DefaultWindowResizer::~DefaultWindowResizer() { 20 ash::Shell::GetInstance()->cursor_manager()->UnlockCursor(); 21 } 22 23 // static 24 DefaultWindowResizer* 25 DefaultWindowResizer::Create(aura::Window* window, 26 const gfx::Point& location, 27 int window_component, 28 aura::client::WindowMoveSource source) { 29 Details details(window, location, window_component, source); 30 return details.is_resizable ? new DefaultWindowResizer(details) : NULL; 31 } 32 33 void 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 43 void DefaultWindowResizer::CompleteDrag(int event_flags) { 44 } 45 46 void 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 56 aura::Window* DefaultWindowResizer::GetTarget() { 57 return details_.window; 58 } 59 60 const gfx::Point& DefaultWindowResizer::GetInitialLocation() const { 61 return details_.initial_location_in_parent; 62 } 63 64 DefaultWindowResizer::DefaultWindowResizer(const Details& details) 65 : details_(details), 66 did_move_or_resize_(false) { 67 DCHECK(details_.is_resizable); 68 ash::Shell::GetInstance()->cursor_manager()->LockCursor(); 69 } 70 71 } // namespace aura 72