Index: ui/base/x/x11_util.cc |
diff --git a/ui/base/x/x11_util.cc b/ui/base/x/x11_util.cc |
index 5df42c04eb09c35354edd93887f881021781dbd3..a7b1bc3ad03f90df43e283ef900142c6d04f0512 100644 |
--- a/ui/base/x/x11_util.cc |
+++ b/ui/base/x/x11_util.cc |
@@ -37,6 +37,8 @@ |
#if defined(USE_AURA) |
#include <X11/Xcursor/Xcursor.h> |
+#include "third_party/skia/include/core/SkBitmap.h" |
+#include "ui/gfx/skia_util.h" |
#endif |
#if defined(TOOLKIT_GTK) |
@@ -411,6 +413,25 @@ void RefCustomXCursor(::Cursor cursor) { |
void UnrefCustomXCursor(::Cursor cursor) { |
XCustomCursorCache::GetInstance()->Unref(cursor); |
} |
+ |
+XcursorImage* SkBitmapToXcursorImage(const SkBitmap* bitmap, |
+ const gfx::Point& hotspot) { |
+ DCHECK(bitmap->config() == SkBitmap::kARGB_8888_Config); |
+ XcursorImage* image = XcursorImageCreate(bitmap->width(), bitmap->height()); |
+ image->xhot = hotspot.x(); |
+ image->yhot = hotspot.y(); |
+ |
+ if (bitmap->width() && bitmap->height()) { |
+ bitmap->lockPixels(); |
+ gfx::ConvertSkiaToRGBA( |
+ static_cast<const unsigned char*>(bitmap->getPixels()), |
+ bitmap->width() * bitmap->height(), |
+ reinterpret_cast<unsigned char*>(image->pixels)); |
+ bitmap->unlockPixels(); |
+ } |
+ |
+ return image; |
+} |
#endif |
XID GetX11RootWindow() { |