From 4ffa4cbdad93a31ef7d9712d3d91777510a1a17d Mon Sep 17 00:00:00 2001 From: Szabolcs David Date: Mon, 9 Nov 2015 06:25:56 -0800 Subject: Support custom mouse cursors Task-number: QTBUG-43009 Change-Id: Ic36554c5137a55d9d4b9143c204d9d4400e23ff8 Reviewed-by: Joerg Bornemann --- src/core/render_widget_host_view_qt.cpp | 8 +++++++- src/core/type_conversion.h | 11 ++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index 330173880..2e67b0e89 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -75,6 +75,7 @@ #include #include #include +#include #include #include #include @@ -535,7 +536,12 @@ void RenderWidgetHostViewQt::UpdateCursor(const content::WebCursor &webCursor) shape = Qt::ClosedHandCursor; break; case blink::WebCursorInfo::TypeCustom: - // FIXME: Extract from the CursorInfo. + if (cursorInfo.custom_image.colorType() == SkColorType::kN32_SkColorType) { + QImage cursor = toQImage(cursorInfo.custom_image, QImage::Format_ARGB32); + m_delegate->updateCursor(QCursor(QPixmap::fromImage(cursor))); + return; + } + // Use arrow cursor as fallback in case the Chromium implementation changes. shape = Qt::ArrowCursor; break; default: diff --git a/src/core/type_conversion.h b/src/core/type_conversion.h index 9e5461888..eb874a26d 100644 --- a/src/core/type_conversion.h +++ b/src/core/type_conversion.h @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -49,8 +50,10 @@ #include "base/time/time.h" #include "content/public/common/file_chooser_file_info.h" #include "net/cookies/canonical_cookie.h" -#include "third_party/skia/include/utils/SkMatrix44.h" +#include "third_party/skia/include/core/SkBitmap.h" #include "third_party/skia/include/core/SkColor.h" +#include "third_party/skia/include/core/SkPixelRef.h" +#include "third_party/skia/include/utils/SkMatrix44.h" #include "ui/gfx/geometry/rect.h" #include "url/gurl.h" @@ -134,6 +137,12 @@ inline SkColor toSk(const QColor &c) return c.rgba(); } +inline QImage toQImage(const SkBitmap &bitmap, QImage::Format format) +{ + SkPixelRef *pixelRef = bitmap.pixelRef(); + return QImage((uchar *)pixelRef->pixels(), bitmap.width(), bitmap.height(), format); +} + inline QMatrix4x4 toQt(const SkMatrix44 &m) { QMatrix4x4 qtMatrix( -- cgit v1.2.3