Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(370)

Unified Diff: ui/base/dragdrop/drag_utils.cc

Issue 10702136: Support high dpi in menu scroll arrow, submenu arrow and drag_utils. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/base/dragdrop/drag_utils.cc
diff --git a/ui/base/dragdrop/drag_utils.cc b/ui/base/dragdrop/drag_utils.cc
index 41f422e8a3c9951b9352a19c860f3cd4c282db54..f411809995dc3253275b4d7941a5e6f53c7dd654 100644
--- a/ui/base/dragdrop/drag_utils.cc
+++ b/ui/base/dragdrop/drag_utils.cc
@@ -12,54 +12,87 @@
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/font.h"
+#include "ui/gfx/image/canvas_image_source.h"
#include "ui/gfx/point.h"
#include "ui/gfx/size.h"
namespace drag_utils {
-
+namespace {
// Maximum width of the link drag image in pixels.
-static const int kLinkDragImageVPadding = 3;
+const int kLinkDragImageVPadding = 3;
// File dragging pixel measurements
-static const int kFileDragImageMaxWidth = 200;
-static const SkColor kFileDragImageTextColor = SK_ColorBLACK;
+const int kFileDragImageMaxWidth = 200;
+const SkColor kFileDragImageTextColor = SK_ColorBLACK;
-void CreateDragImageForFile(const FilePath& file_name,
- const gfx::ImageSkia* icon,
- ui::OSExchangeData* data_object) {
- DCHECK(icon);
- DCHECK(data_object);
-
- // Set up our text portion
+gfx::Size GetImageSize(const gfx::ImageSkia& icon) {
ResourceBundle& rb = ResourceBundle::GetSharedInstance();
gfx::Font font = rb.GetFont(ResourceBundle::BaseFont);
const int width = kFileDragImageMaxWidth;
// Add +2 here to allow room for the halo.
- const int height = font.GetHeight() + icon->height() +
- kLinkDragImageVPadding + 2;
- gfx::Canvas canvas(gfx::Size(width, height), false /* translucent */);
+ const int height = font.GetHeight() + icon.height() +
+ kLinkDragImageVPadding + 2;
+ return gfx::Size(width, height);
+}
- // Paint the icon.
- canvas.DrawImageInt(*icon, (width - icon->width()) / 2, 0);
+class DragImageSource : public gfx::CanvasImageSource {
+ public:
+ DragImageSource(const gfx::ImageSkia& icon, const string16& name)
+ : CanvasImageSource(GetImageSize(icon), false /* translucent */),
+ icon_(icon),
+ name_(name) {
+ }
+ virtual ~DragImageSource() {}
- string16 name = file_name.BaseName().LossyDisplayName();
- const int flags = gfx::Canvas::TEXT_ALIGN_CENTER;
+ // gfx::CanvasImageSource overrides:
+ virtual void Draw(gfx::Canvas* canvas) OVERRIDE {
+ // Set up our text portion
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ gfx::Font font = rb.GetFont(ResourceBundle::BaseFont);
+
+ int width = size().width();
+ // Paint the icon.
+ canvas->DrawImageInt(icon_, (width - icon_.width()) / 2, 0);
+
+ const int flags = gfx::Canvas::TEXT_ALIGN_CENTER;
#if defined(OS_WIN)
- // Paint the file name. We inset it one pixel to allow room for the halo.
- canvas.DrawStringWithHalo(name, font, kFileDragImageTextColor, SK_ColorWHITE,
- 1, icon->height() + kLinkDragImageVPadding + 1,
- width - 2, font.GetHeight(), flags);
+ // Paint the file name. We inset it one pixel to allow room for the halo.
+ canvas->DrawStringWithHalo(name_, font,
+ kFileDragImageTextColor, SK_ColorWHITE,
+ 1, icon_.height() + kLinkDragImageVPadding + 1,
+ width - 2, font.GetHeight(), flags);
#else
- // NO_SUBPIXEL_RENDERING is required when drawing to a non-opaque canvas.
- canvas.DrawStringInt(name, font, kFileDragImageTextColor,
- 0, icon->height() + kLinkDragImageVPadding,
- width, font.GetHeight(),
- flags | gfx::Canvas::NO_SUBPIXEL_RENDERING);
+ // NO_SUBPIXEL_RENDERING is required when drawing to a non-opaque canvas.
+ canvas->DrawStringInt(name_, font,
+ kFileDragImageTextColor,
+ 0, icon_.height() + kLinkDragImageVPadding,
+ width, font.GetHeight(),
+ flags | gfx::Canvas::NO_SUBPIXEL_RENDERING);
#endif
+ }
+
+ private:
+ const gfx::ImageSkia icon_;
+ const string16 name_;
+
+ DISALLOW_COPY_AND_ASSIGN(DragImageSource);
+};
+
+} // namespace
+
+void CreateDragImageForFile(const FilePath& file_name,
+ const gfx::ImageSkia* icon,
+ ui::OSExchangeData* data_object) {
+ DCHECK(icon);
+ DCHECK(data_object);
+
+ string16 name = file_name.BaseName().LossyDisplayName();
+ DragImageSource* source = new DragImageSource(*icon, name);
+ gfx::Size size = source->size();
- SetDragImageOnDataObject(canvas, gfx::Size(width, height),
- gfx::Point(width / 2, kLinkDragImageVPadding),
+ SetDragImageOnDataObject(gfx::ImageSkia(source, size), size,
+ gfx::Point(size.width() / 2, kLinkDragImageVPadding),
data_object);
}
« no previous file with comments | « no previous file | ui/gfx/image/canvas_image_source.h » ('j') | ui/views/controls/menu/menu_scroll_view_container.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698