drag_utils.cc revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
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