drag_details.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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)
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : initial_show_type(wm::GetWindowState(window)->window_show_type()),
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);
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (window_state->IsNormalShowState() &&
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      window_state->HasRestoreBounds() &&
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      window_component == HTCAPTION)
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    restore_bounds = window_state->GetRestoreBoundsInScreen();
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)DragDetails::~DragDetails() {
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace ash
75