15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/wm/drag_details.h"
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/wm/window_resizer.h"
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/aura/window.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/base/hit_test.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace ash {
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace {
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int GetSizeChangeDirectionForWindowComponent(int window_component) {
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  int size_change_direction = WindowResizer::kBoundsChangeDirection_None;
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  switch (window_component) {
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case HTTOPLEFT:
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case HTTOPRIGHT:
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case HTBOTTOMLEFT:
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case HTBOTTOMRIGHT:
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case HTGROWBOX:
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case HTCAPTION:
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      size_change_direction |=
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          WindowResizer::kBoundsChangeDirection_Horizontal |
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          WindowResizer::kBoundsChangeDirection_Vertical;
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      break;
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case HTTOP:
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case HTBOTTOM:
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      size_change_direction |= WindowResizer::kBoundsChangeDirection_Vertical;
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      break;
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case HTRIGHT:
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case HTLEFT:
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      size_change_direction |= WindowResizer::kBoundsChangeDirection_Horizontal;
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      break;
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    default:
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      break;
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return size_change_direction;
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)DragDetails::DragDetails(aura::Window* window,
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                         const gfx::Point& location,
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                         int window_component,
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                         aura::client::WindowMoveSource source)
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    : initial_state_type(wm::GetWindowState(window)->GetStateType()),
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      initial_bounds_in_parent(window->bounds()),
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      initial_location_in_parent(location),
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      initial_opacity(window->layer()->opacity()),
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      window_component(window_component),
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      bounds_change(
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          WindowResizer::GetBoundsChangeForWindowComponent(window_component)),
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      position_change_direction(
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          WindowResizer::GetPositionChangeDirectionForWindowComponent(
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)              window_component)),
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      size_change_direction(
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          GetSizeChangeDirectionForWindowComponent(window_component)),
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      is_resizable(bounds_change != WindowResizer::kBoundsChangeDirection_None),
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      source(source),
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      should_attach_to_shelf(window->type() == ui::wm::WINDOW_TYPE_PANEL &&
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                             wm::GetWindowState(window)->panel_attached()) {
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  wm::WindowState* window_state = wm::GetWindowState(window);
65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (window_state->IsNormalOrSnapped() &&
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      window_state->HasRestoreBounds() &&
67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      window_component == HTCAPTION) {
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    restore_bounds = window_state->GetRestoreBoundsInScreen();
69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)DragDetails::~DragDetails() {
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace ash
76