diff options
author | varunjain@chromium.org <varunjain@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-30 00:36:41 +0000 |
---|---|---|
committer | varunjain@chromium.org <varunjain@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-30 00:36:41 +0000 |
commit | 399882394634321111b6caf55136760b3ce3b471 (patch) | |
tree | 0ba0e48ec1291bcda680416b11fa95c1ce76264b /ash/drag_drop | |
parent | 171244986e15feace373f6ba975f77033b5a4006 (diff) | |
download | chromium_src-399882394634321111b6caf55136760b3ce3b471.zip chromium_src-399882394634321111b6caf55136760b3ce3b471.tar.gz chromium_src-399882394634321111b6caf55136760b3ce3b471.tar.bz2 |
Drag image scaling code should take device scale into account.
BUG=114755
Review URL: https://chromiumcodereview.appspot.com/11418223
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@170307 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/drag_drop')
-rw-r--r-- | ash/drag_drop/drag_image_view.cc | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/ash/drag_drop/drag_image_view.cc b/ash/drag_drop/drag_image_view.cc index fb28b9d..acb4292 100644 --- a/ash/drag_drop/drag_image_view.cc +++ b/ash/drag_drop/drag_image_view.cc @@ -6,7 +6,9 @@ #include "skia/ext/image_operations.h" #include "ui/aura/window.h" +#include "ui/compositor/dip_util.h" #include "ui/gfx/canvas.h" +#include "ui/gfx/size_conversions.h" #include "ui/views/corewm/shadow_types.h" #include "ui/views/widget/widget.h" @@ -64,14 +66,34 @@ void DragImageView::SetWidgetVisible(bool visible) { } void DragImageView::OnPaint(gfx::Canvas* canvas) { + if (GetImage().isNull()) + return; + + // |widget_size_| is in DIP. ImageSkia::size() also returns the size in DIP. if (GetImage().size() == widget_size_) { canvas->DrawImageInt(GetImage(), 0, 0); } else { - SkBitmap scaled = skia::ImageOperations::Resize( - *GetImage().bitmap(), skia::ImageOperations::RESIZE_LANCZOS3, - widget_size_.width(), widget_size_.height()); - SkPaint paint; - canvas->sk_canvas()->drawBitmap(scaled, 0, 0, &paint); + float device_scale = 1; + if (widget_->GetNativeView() && widget_->GetNativeView()->layer()) { + device_scale = ui::GetDeviceScaleFactor( + widget_->GetNativeView()->layer()); + } + ui::ScaleFactor device_scale_factor = + ui::GetScaleFactorFromScale(device_scale); + + // The drag image already has device scale factor applied. But + // |widget_size_| is in DIP units. + gfx::Size scaled_widget_size = gfx::ToRoundedSize( + gfx::ScaleSize(widget_size_, device_scale)); + gfx::ImageSkiaRep image_rep = GetImage().GetRepresentation( + device_scale_factor); + if (image_rep.is_null()) + return; + SkBitmap scaled = skia::ImageOperations::Resize( + image_rep.sk_bitmap(), skia::ImageOperations::RESIZE_LANCZOS3, + scaled_widget_size.width(), scaled_widget_size.height()); + gfx::ImageSkia image_skia(gfx::ImageSkiaRep(scaled, device_scale_factor)); + canvas->DrawImageInt(image_skia, 0, 0); } } |