1 // Copyright 2014 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.
5 #include "ash/wm/drag_details.h"
7 #include "ash/wm/window_resizer.h"
8 #include "ui/aura/window.h"
9 #include "ui/base/hit_test.h"
15 int GetSizeChangeDirectionForWindowComponent(int window_component) {
16 int size_change_direction = WindowResizer::kBoundsChangeDirection_None;
17 switch (window_component) {
24 size_change_direction |=
25 WindowResizer::kBoundsChangeDirection_Horizontal |
26 WindowResizer::kBoundsChangeDirection_Vertical;
30 size_change_direction |= WindowResizer::kBoundsChangeDirection_Vertical;
34 size_change_direction |= WindowResizer::kBoundsChangeDirection_Horizontal;
39 return size_change_direction;
44 DragDetails::DragDetails(aura::Window* window,
45 const gfx::Point& location,
47 aura::client::WindowMoveSource source)
48 : initial_show_type(wm::GetWindowState(window)->window_show_type()),
49 initial_bounds_in_parent(window->bounds()),
50 initial_location_in_parent(location),
51 initial_opacity(window->layer()->opacity()),
52 window_component(window_component),
54 WindowResizer::GetBoundsChangeForWindowComponent(window_component)),
55 position_change_direction(
56 WindowResizer::GetPositionChangeDirectionForWindowComponent(
58 size_change_direction(
59 GetSizeChangeDirectionForWindowComponent(window_component)),
60 is_resizable(bounds_change != WindowResizer::kBoundsChangeDirection_None),
62 should_attach_to_shelf(window->type() == ui::wm::WINDOW_TYPE_PANEL &&
63 wm::GetWindowState(window)->panel_attached()) {
64 wm::WindowState* window_state = wm::GetWindowState(window);
65 if (window_state->IsNormalShowState() &&
66 window_state->HasRestoreBounds() &&
67 window_component == HTCAPTION)
68 restore_bounds = window_state->GetRestoreBoundsInScreen();
71 DragDetails::~DragDetails() {