15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/drag_utils.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/gfx/canvas.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/display.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/screen.h" 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/gfx/size.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)float GetDeviceScaleForNativeView(views::Widget* widget) { 1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) float device_scale = 1.0f; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The following code should work on other platforms as well. But we do not 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // yet care about device scale factor on other platforms. So to keep drag and 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // drop behavior on other platforms un-touched, we wrap this in the #if guard. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (widget && widget->GetNativeView()) { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::NativeView view = widget->GetNativeView(); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Display display = gfx::Screen::GetScreenFor(view)-> 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetDisplayNearestWindow(view); 2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) device_scale = display.device_scale_factor(); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return device_scale; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace views { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Canvas* GetCanvasForDragImage(views::Widget* widget, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Size& canvas_size) { 3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) float device_scale = GetDeviceScaleForNativeView(widget); 3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return new gfx::Canvas(canvas_size, device_scale, false); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 40