// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "views/view.h" #include "app/drag_drop_types.h" #include "app/gfx/canvas.h" #include "app/gfx/path.h" #include "app/os_exchange_data.h" #include "app/os_exchange_data_provider_win.h" #include "base/scoped_handle.h" #include "base/string_util.h" #include "views/accessibility/view_accessibility_wrapper.h" #include "views/border.h" #include "views/widget/root_view.h" #include "views/widget/widget.h" namespace views { void View::DoDrag(const MouseEvent& e, int press_x, int press_y) { int drag_operations = GetDragOperations(press_x, press_y); if (drag_operations == DragDropTypes::DRAG_NONE) return; OSExchangeData data; WriteDragData(press_x, press_y, &data); // Message the RootView to do the drag and drop. That way if we're removed // the RootView can detect it and avoid calling us back. RootView* root_view = GetRootView(); root_view->StartDragForViewFromMouseEvent( this, OSExchangeDataProviderWin::GetIDataObject(data), drag_operations); } ViewAccessibilityWrapper* View::GetViewAccessibilityWrapper() { if (accessibility_.get() == NULL) { accessibility_.reset(new ViewAccessibilityWrapper(this)); } return accessibility_.get(); } void View::Focus() { // Set the native focus to the root view window so it receives the keyboard // messages. FocusManager* focus_manager = GetFocusManager(); if (focus_manager) focus_manager->FocusNativeView(GetRootView()->GetWidget()->GetNativeView()); } int View::GetHorizontalDragThreshold() { static int threshold = -1; if (threshold == -1) threshold = GetSystemMetrics(SM_CXDRAG) / 2; return threshold; } int View::GetVerticalDragThreshold() { static int threshold = -1; if (threshold == -1) threshold = GetSystemMetrics(SM_CYDRAG) / 2; return threshold; } } // namespace views