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_state_type(wm::GetWindowState(window
)->GetStateType()),
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
->IsNormalOrSnapped() || window_state
->IsDocked()) &&
66 window_state
->HasRestoreBounds() &&
67 window_component
== HTCAPTION
) {
68 restore_bounds
= window_state
->GetRestoreBoundsInScreen();
72 DragDetails::~DragDetails() {