diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-06-26 15:28:31 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-06-26 15:30:24 +0200 |
commit | 6cdd1dc5b48dfe54de4d926fc9a64c46f3fc75f2 (patch) | |
tree | d4b626a6041cac6e17bbd825d139b201e708f43d /src/core/render_widget_host_view_qt.cpp | |
parent | 7757ec1a562ae36b65a6cae93b3cd308247755ef (diff) | |
parent | 6e019f2ad5a5d6341d14762fba5a245da46ebeb3 (diff) |
Merge remote-tracking branch 'origin/5.11' into dev
Conflicts:
.qmake.conf
configure.json
src/3rdparty
tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
Change-Id: Id79ff6cf01c2db3a2044881ddcbf044abdf84936
Diffstat (limited to 'src/core/render_widget_host_view_qt.cpp')
-rw-r--r-- | src/core/render_widget_host_view_qt.cpp | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index c2fa7d30a..695e9cc74 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -69,12 +69,14 @@ #include "third_party/blink/public/platform/web_color.h" #include "third_party/blink/public/platform/web_cursor_info.h" #include "ui/base/clipboard/scoped_clipboard_writer.h" +#include "ui/base/resource/resource_bundle.h" #include "ui/events/blink/blink_event_util.h" #include "ui/events/event.h" #include "ui/events/gesture_detection/gesture_provider_config_helper.h" #include "ui/events/gesture_detection/motion_event.h" #include "ui/events/keycodes/keyboard_codes.h" #include "ui/gfx/geometry/size_conversions.h" +#include "ui/gfx/image/image_skia.h" #if defined(USE_AURA) #include "ui/base/cursor/cursor.h" @@ -670,11 +672,30 @@ void RenderWidgetHostViewQt::UpdateCursor(const content::WebCursor &webCursor) } #if defined(USE_AURA) if (auraType != ui::CursorType::kNull) { - SkBitmap bitmap; + QWindow *window = m_delegate->window(); + qreal windowDpr = window ? window->devicePixelRatio() : 1.0f; + int resourceId; gfx::Point hotspot; - if (ui::GetCursorBitmap(auraType, &bitmap, &hotspot)) { - m_delegate->updateCursor(QCursor(QPixmap::fromImage(toQImage(bitmap)), hotspot.x(), hotspot.y())); - return; + // GetCursorDataFor only knows hotspots for 1x and 2x cursor images, in physical pixels. + qreal hotspotDpr = windowDpr <= 1.0f ? 1.0f : 2.0f; + if (ui::GetCursorDataFor(ui::CursorSize::kNormal, auraType, hotspotDpr, &resourceId, &hotspot)) { + if (const gfx::ImageSkia *imageSkia = ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(resourceId)) { + QImage imageQt = toQImage(imageSkia->GetRepresentation(windowDpr)); + + // Convert hotspot coordinates into device-independent pixels. + qreal hotX = hotspot.x() / hotspotDpr; + qreal hotY = hotspot.y() / hotspotDpr; + +#if defined(Q_OS_LINUX) + // QTBUG-68571: On Linux (xcb, wayland, eglfs), hotspot coordinates must be in physical pixels. + qreal imageDpr = imageQt.devicePixelRatio(); + hotX *= imageDpr; + hotY *= imageDpr; +#endif + + m_delegate->updateCursor(QCursor(QPixmap::fromImage(std::move(imageQt)), qRound(hotX), qRound(hotY))); + return; + } } } #endif |