15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/wm/default_window_resizer.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h"
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ash/wm/window_state.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/client/aura_constants.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/env.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/window.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/window_delegate.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/hit_test.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/ui_base_types.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/screen.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DefaultWindowResizer::~DefaultWindowResizer() {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ash::Shell::GetInstance()->cursor_manager()->UnlockCursor();
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DefaultWindowResizer*
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)DefaultWindowResizer::Create(wm::WindowState* window_state) {
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return new DefaultWindowResizer(window_state);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DefaultWindowResizer::Drag(const gfx::Point& location, int event_flags) {
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gfx::Rect bounds(CalculateBoundsForDrag(location));
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (bounds != GetTarget()->bounds()) {
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (!did_move_or_resize_ && !details().restore_bounds.IsEmpty())
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      window_state_->ClearRestoreBounds();
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    did_move_or_resize_ = true;
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    GetTarget()->SetBounds(bounds);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DefaultWindowResizer::CompleteDrag() {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DefaultWindowResizer::RevertDrag() {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!did_move_or_resize_)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  GetTarget()->SetBounds(details().initial_bounds_in_parent);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!details().restore_bounds.IsEmpty())
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    window_state_->SetRestoreBoundsInScreen(details().restore_bounds);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)DefaultWindowResizer::DefaultWindowResizer(wm::WindowState* window_state)
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : WindowResizer(window_state),
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      did_move_or_resize_(false) {
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DCHECK(details().is_resizable);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ash::Shell::GetInstance()->cursor_manager()->LockCursor();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace aura
60