| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "views/drag_utils.h" | 5 #include "ui/views/drag_utils.h" |
| 6 | 6 |
| 7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
| 10 #include "googleurl/src/gurl.h" | 10 #include "googleurl/src/gurl.h" |
| 11 #include "grit/ui_resources.h" | 11 #include "grit/ui_resources.h" |
| 12 #include "ui/base/dragdrop/os_exchange_data.h" | 12 #include "ui/base/dragdrop/os_exchange_data.h" |
| 13 #include "ui/base/resource/resource_bundle.h" | 13 #include "ui/base/resource/resource_bundle.h" |
| 14 #include "ui/gfx/canvas_skia.h" | 14 #include "ui/gfx/canvas_skia.h" |
| 15 #include "ui/gfx/font.h" | 15 #include "ui/gfx/font.h" |
| 16 #include "ui/views/controls/button/text_button.h" | 16 #include "ui/views/controls/button/text_button.h" |
| 17 | 17 |
| 18 using ui::OSExchangeData; | |
| 19 | |
| 20 namespace drag_utils { | 18 namespace drag_utils { |
| 21 | 19 |
| 22 // Maximum width of the link drag image in pixels. | 20 // Maximum width of the link drag image in pixels. |
| 23 static const int kLinkDragImageMaxWidth = 200; | 21 static const int kLinkDragImageMaxWidth = 200; |
| 24 static const int kLinkDragImageVPadding = 3; | 22 static const int kLinkDragImageVPadding = 3; |
| 25 | 23 |
| 26 // File dragging pixel measurements | 24 // File dragging pixel measurements |
| 27 static const int kFileDragImageMaxWidth = 200; | 25 static const int kFileDragImageMaxWidth = 200; |
| 28 static const SkColor kFileDragImageTextColor = SK_ColorBLACK; | 26 static const SkColor kFileDragImageTextColor = SK_ColorBLACK; |
| 29 | 27 |
| 30 void SetURLAndDragImage(const GURL& url, | 28 void SetURLAndDragImage(const GURL& url, |
| 31 const string16& title, | 29 const string16& title, |
| 32 const SkBitmap& icon, | 30 const SkBitmap& icon, |
| 33 OSExchangeData* data) { | 31 ui::OSExchangeData* data) { |
| 34 DCHECK(url.is_valid() && data); | 32 DCHECK(url.is_valid() && data); |
| 35 | 33 |
| 36 data->SetURL(url, title); | 34 data->SetURL(url, title); |
| 37 | 35 |
| 38 // Create a button to render the drag image for us. | 36 // Create a button to render the drag image for us. |
| 39 views::TextButton button(NULL, | 37 views::TextButton button(NULL, |
| 40 title.empty() ? UTF8ToUTF16(url.spec()) : title); | 38 title.empty() ? UTF8ToUTF16(url.spec()) : title); |
| 41 button.set_max_width(kLinkDragImageMaxWidth); | 39 button.set_max_width(kLinkDragImageMaxWidth); |
| 42 if (icon.isNull()) { | 40 if (icon.isNull()) { |
| 43 button.SetIcon(*ResourceBundle::GetSharedInstance().GetBitmapNamed( | 41 button.SetIcon(*ResourceBundle::GetSharedInstance().GetBitmapNamed( |
| 44 IDR_DEFAULT_FAVICON)); | 42 IDR_DEFAULT_FAVICON)); |
| 45 } else { | 43 } else { |
| 46 button.SetIcon(icon); | 44 button.SetIcon(icon); |
| 47 } | 45 } |
| 48 gfx::Size prefsize = button.GetPreferredSize(); | 46 gfx::Size prefsize = button.GetPreferredSize(); |
| 49 button.SetBounds(0, 0, prefsize.width(), prefsize.height()); | 47 button.SetBounds(0, 0, prefsize.width(), prefsize.height()); |
| 50 | 48 |
| 51 // Render the image. | 49 // Render the image. |
| 52 gfx::CanvasSkia canvas(prefsize.width(), prefsize.height(), false); | 50 gfx::CanvasSkia canvas(prefsize.width(), prefsize.height(), false); |
| 53 button.PaintButton(&canvas, views::TextButton::PB_FOR_DRAG); | 51 button.PaintButton(&canvas, views::TextButton::PB_FOR_DRAG); |
| 54 SetDragImageOnDataObject(canvas, prefsize, | 52 SetDragImageOnDataObject(canvas, prefsize, |
| 55 gfx::Point(prefsize.width() / 2, prefsize.height() / 2), data); | 53 gfx::Point(prefsize.width() / 2, prefsize.height() / 2), data); |
| 56 } | 54 } |
| 57 | 55 |
| 58 void CreateDragImageForFile(const FilePath& file_name, | 56 void CreateDragImageForFile(const FilePath& file_name, |
| 59 const SkBitmap* icon, | 57 const SkBitmap* icon, |
| 60 OSExchangeData* data_object) { | 58 ui::OSExchangeData* data_object) { |
| 61 DCHECK(icon); | 59 DCHECK(icon); |
| 62 DCHECK(data_object); | 60 DCHECK(data_object); |
| 63 | 61 |
| 64 // Set up our text portion | 62 // Set up our text portion |
| 65 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 63 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| 66 gfx::Font font = rb.GetFont(ResourceBundle::BaseFont); | 64 gfx::Font font = rb.GetFont(ResourceBundle::BaseFont); |
| 67 | 65 |
| 68 const int width = kFileDragImageMaxWidth; | 66 const int width = kFileDragImageMaxWidth; |
| 69 // Add +2 here to allow room for the halo. | 67 // Add +2 here to allow room for the halo. |
| 70 const int height = font.GetHeight() + icon->height() + | 68 const int height = font.GetHeight() + icon->height() + |
| (...skipping 17 matching lines...) Expand all Loading... |
| 88 #endif | 86 #endif |
| 89 | 87 |
| 90 SetDragImageOnDataObject(canvas, gfx::Size(width, height), | 88 SetDragImageOnDataObject(canvas, gfx::Size(width, height), |
| 91 gfx::Point(width / 2, kLinkDragImageVPadding), | 89 gfx::Point(width / 2, kLinkDragImageVPadding), |
| 92 data_object); | 90 data_object); |
| 93 } | 91 } |
| 94 | 92 |
| 95 void SetDragImageOnDataObject(const gfx::Canvas& canvas, | 93 void SetDragImageOnDataObject(const gfx::Canvas& canvas, |
| 96 const gfx::Size& size, | 94 const gfx::Size& size, |
| 97 const gfx::Point& cursor_offset, | 95 const gfx::Point& cursor_offset, |
| 98 OSExchangeData* data_object) { | 96 ui::OSExchangeData* data_object) { |
| 99 SetDragImageOnDataObject( | 97 SetDragImageOnDataObject( |
| 100 canvas.AsCanvasSkia()->ExtractBitmap(), size, cursor_offset, data_object); | 98 canvas.AsCanvasSkia()->ExtractBitmap(), size, cursor_offset, data_object); |
| 101 } | 99 } |
| 102 | 100 |
| 103 } // namespace drag_utils | 101 } // namespace drag_utils |
| OLD | NEW |