summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSzabolcs David <davidsz@inf.u-szeged.hu>2015-11-09 06:25:56 -0800
committerJoerg Bornemann <joerg.bornemann@theqtcompany.com>2015-12-01 22:08:39 +0000
commit4ffa4cbdad93a31ef7d9712d3d91777510a1a17d (patch)
tree6466d31476873a332ab292706e590bb4b2b78102
parent8eab04b55e6d01ca2ab473d325eb4337c5f40725 (diff)
Support custom mouse cursors
Task-number: QTBUG-43009 Change-Id: Ic36554c5137a55d9d4b9143c204d9d4400e23ff8 Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
-rw-r--r--src/core/render_widget_host_view_qt.cpp8
-rw-r--r--src/core/type_conversion.h11
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 <QTextFormat>
#include <QKeyEvent>
#include <QMouseEvent>
+#include <QPixmap>
#include <QScreen>
#include <QStyleHints>
#include <QVariant>
@@ -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 <QColor>
#include <QDateTime>
#include <QDir>
+#include <QImage>
#include <QMatrix4x4>
#include <QNetworkCookie>
#include <QRect>
@@ -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(