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. 4 5#include "ash/wm/drag_details.h" 6 7#include "ash/wm/window_resizer.h" 8#include "ui/aura/window.h" 9#include "ui/base/hit_test.h" 10 11namespace ash { 12 13namespace { 14 15int GetSizeChangeDirectionForWindowComponent(int window_component) { 16 int size_change_direction = WindowResizer::kBoundsChangeDirection_None; 17 switch (window_component) { 18 case HTTOPLEFT: 19 case HTTOPRIGHT: 20 case HTBOTTOMLEFT: 21 case HTBOTTOMRIGHT: 22 case HTGROWBOX: 23 case HTCAPTION: 24 size_change_direction |= 25 WindowResizer::kBoundsChangeDirection_Horizontal | 26 WindowResizer::kBoundsChangeDirection_Vertical; 27 break; 28 case HTTOP: 29 case HTBOTTOM: 30 size_change_direction |= WindowResizer::kBoundsChangeDirection_Vertical; 31 break; 32 case HTRIGHT: 33 case HTLEFT: 34 size_change_direction |= WindowResizer::kBoundsChangeDirection_Horizontal; 35 break; 36 default: 37 break; 38 } 39 return size_change_direction; 40} 41 42} // namespace 43 44DragDetails::DragDetails(aura::Window* window, 45 const gfx::Point& location, 46 int window_component, 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), 53 bounds_change( 54 WindowResizer::GetBoundsChangeForWindowComponent(window_component)), 55 position_change_direction( 56 WindowResizer::GetPositionChangeDirectionForWindowComponent( 57 window_component)), 58 size_change_direction( 59 GetSizeChangeDirectionForWindowComponent(window_component)), 60 is_resizable(bounds_change != WindowResizer::kBoundsChangeDirection_None), 61 source(source), 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() && 66 window_state->HasRestoreBounds() && 67 window_component == HTCAPTION) { 68 restore_bounds = window_state->GetRestoreBoundsInScreen(); 69 } 70} 71 72DragDetails::~DragDetails() { 73} 74 75} // namespace ash 76