default_window_resizer.cc revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
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/window_state.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 17namespace ash { 18 19DefaultWindowResizer::~DefaultWindowResizer() { 20 ash::Shell::GetInstance()->cursor_manager()->UnlockCursor(); 21} 22 23// static 24DefaultWindowResizer* 25DefaultWindowResizer::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 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 wm::GetWindowState(details_.window)->ClearRestoreBounds(); 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 wm::GetWindowState(details_.window)->SetRestoreBoundsInScreen( 54 details_.restore_bounds); 55} 56 57aura::Window* DefaultWindowResizer::GetTarget() { 58 return details_.window; 59} 60 61const gfx::Point& DefaultWindowResizer::GetInitialLocation() const { 62 return details_.initial_location_in_parent; 63} 64 65DefaultWindowResizer::DefaultWindowResizer(const Details& details) 66 : details_(details), 67 did_move_or_resize_(false) { 68 DCHECK(details_.is_resizable); 69 ash::Shell::GetInstance()->cursor_manager()->LockCursor(); 70} 71 72} // namespace aura 73