diff options
author | Jocelyn Turcotte <jocelyn.turcotte@digia.com> | 2013-07-31 18:32:00 +0200 |
---|---|---|
committer | Jocelyn Turcotte <jocelyn.turcotte@digia.com> | 2013-08-01 12:21:06 +0200 |
commit | 0161c0aca53be2c73e983c12995104308823e41b (patch) | |
tree | ceed216e5d915ba91ec946f7c149c6ff9685cf86 /lib | |
parent | 2934694fec0acb21f759e288e6943bbf206edecf (diff) |
Handle basic cursor changes.
Change-Id: Ic08f83db03454542554fac9e590d79a4440a4b28
Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
Diffstat (limited to 'lib')
6 files changed, 110 insertions, 2 deletions
diff --git a/lib/quick/render_widget_host_view_qt_delegate_quick.cpp b/lib/quick/render_widget_host_view_qt_delegate_quick.cpp index 2c3f09647..5b1269c30 100644 --- a/lib/quick/render_widget_host_view_qt_delegate_quick.cpp +++ b/lib/quick/render_widget_host_view_qt_delegate_quick.cpp @@ -96,6 +96,11 @@ void RenderWidgetHostViewQtDelegateQuick::update(const QRect& rect) QQuickPaintedItem::update(rect); } +void RenderWidgetHostViewQtDelegateQuick::updateCursor(const QCursor &cursor) +{ + QQuickPaintedItem::setCursor(cursor); +} + void RenderWidgetHostViewQtDelegateQuick::paint(QPainter *painter) { RenderWidgetHostViewQtDelegate::paint(painter, boundingRect()); diff --git a/lib/quick/render_widget_host_view_qt_delegate_quick.h b/lib/quick/render_widget_host_view_qt_delegate_quick.h index fca595376..c46634556 100644 --- a/lib/quick/render_widget_host_view_qt_delegate_quick.h +++ b/lib/quick/render_widget_host_view_qt_delegate_quick.h @@ -77,6 +77,7 @@ public: virtual bool isVisible() const; virtual QWindow* window() const; virtual void update(const QRect& rect = QRect()); + virtual void updateCursor(const QCursor &); void paint(QPainter *painter); diff --git a/lib/render_widget_host_view_qt.cpp b/lib/render_widget_host_view_qt.cpp index 41b8fe1a8..2d8276cc0 100644 --- a/lib/render_widget_host_view_qt.cpp +++ b/lib/render_widget_host_view_qt.cpp @@ -50,8 +50,10 @@ #include "content/browser/renderer_host/render_view_host_impl.h" #include "content/browser/renderer_host/ui_events_helper.h" #include "content/common/gpu/gpu_messages.h" +#include "third_party/WebKit/public/web/WebCursorInfo.h" #include "ui/base/events/event.h" #include "ui/gfx/size_conversions.h" +#include "webkit/common/cursors/webcursor.h" #include <QEvent> #include <QFocusEvent> @@ -328,9 +330,101 @@ void RenderWidgetHostViewQt::Blur() m_host->Blur(); } -void RenderWidgetHostViewQt::UpdateCursor(const WebCursor&) +void RenderWidgetHostViewQt::UpdateCursor(const WebCursor &webCursor) { - QT_NOT_YET_IMPLEMENTED + WebCursor::CursorInfo cursorInfo; + webCursor.GetCursorInfo(&cursorInfo); + Qt::CursorShape shape; + switch (cursorInfo.type) { + case WebKit::WebCursorInfo::TypePointer: + shape = Qt::ArrowCursor; + break; + case WebKit::WebCursorInfo::TypeCross: + shape = Qt::CrossCursor; + break; + case WebKit::WebCursorInfo::TypeHand: + shape = Qt::PointingHandCursor; + break; + case WebKit::WebCursorInfo::TypeIBeam: + shape = Qt::IBeamCursor; + break; + case WebKit::WebCursorInfo::TypeWait: + shape = Qt::WaitCursor; + break; + case WebKit::WebCursorInfo::TypeHelp: + shape = Qt::WhatsThisCursor; + break; + case WebKit::WebCursorInfo::TypeEastResize: + case WebKit::WebCursorInfo::TypeWestResize: + case WebKit::WebCursorInfo::TypeEastWestResize: + case WebKit::WebCursorInfo::TypeEastPanning: + case WebKit::WebCursorInfo::TypeWestPanning: + shape = Qt::SizeHorCursor; + break; + case WebKit::WebCursorInfo::TypeNorthResize: + case WebKit::WebCursorInfo::TypeSouthResize: + case WebKit::WebCursorInfo::TypeNorthSouthResize: + case WebKit::WebCursorInfo::TypeNorthPanning: + case WebKit::WebCursorInfo::TypeSouthPanning: + shape = Qt::SizeVerCursor; + break; + case WebKit::WebCursorInfo::TypeNorthEastResize: + case WebKit::WebCursorInfo::TypeSouthWestResize: + case WebKit::WebCursorInfo::TypeNorthEastSouthWestResize: + case WebKit::WebCursorInfo::TypeNorthEastPanning: + case WebKit::WebCursorInfo::TypeSouthWestPanning: + shape = Qt::SizeBDiagCursor; + break; + case WebKit::WebCursorInfo::TypeNorthWestResize: + case WebKit::WebCursorInfo::TypeSouthEastResize: + case WebKit::WebCursorInfo::TypeNorthWestSouthEastResize: + case WebKit::WebCursorInfo::TypeNorthWestPanning: + case WebKit::WebCursorInfo::TypeSouthEastPanning: + shape = Qt::SizeFDiagCursor; + break; + case WebKit::WebCursorInfo::TypeColumnResize: + shape = Qt::SplitHCursor; + break; + case WebKit::WebCursorInfo::TypeRowResize: + shape = Qt::SplitVCursor; + break; + case WebKit::WebCursorInfo::TypeMiddlePanning: + case WebKit::WebCursorInfo::TypeMove: + shape = Qt::SizeAllCursor; + break; + case WebKit::WebCursorInfo::TypeVerticalText: + case WebKit::WebCursorInfo::TypeCell: + case WebKit::WebCursorInfo::TypeContextMenu: + case WebKit::WebCursorInfo::TypeAlias: + case WebKit::WebCursorInfo::TypeProgress: + case WebKit::WebCursorInfo::TypeCopy: + case WebKit::WebCursorInfo::TypeZoomIn: + case WebKit::WebCursorInfo::TypeZoomOut: + // FIXME: Load from the resource bundle. + shape = Qt::ArrowCursor; + break; + case WebKit::WebCursorInfo::TypeNoDrop: + case WebKit::WebCursorInfo::TypeNotAllowed: + shape = Qt::ForbiddenCursor; + break; + case WebKit::WebCursorInfo::TypeNone: + shape = Qt::BlankCursor; + break; + case WebKit::WebCursorInfo::TypeGrab: + shape = Qt::OpenHandCursor; + break; + case WebKit::WebCursorInfo::TypeGrabbing: + shape = Qt::ClosedHandCursor; + break; + case WebKit::WebCursorInfo::TypeCustom: + // FIXME: Extract from the CursorInfo. + shape = Qt::ArrowCursor; + break; + default: + Q_UNREACHABLE(); + shape = Qt::ArrowCursor; + } + m_delegate->updateCursor(QCursor(shape)); } void RenderWidgetHostViewQt::SetIsLoading(bool) diff --git a/lib/render_widget_host_view_qt_delegate.h b/lib/render_widget_host_view_qt_delegate.h index f23bad376..ebf1e0767 100644 --- a/lib/render_widget_host_view_qt_delegate.h +++ b/lib/render_widget_host_view_qt_delegate.h @@ -48,6 +48,7 @@ #include <QScopedPointer> class BackingStoreQt; +class QCursor; class QEvent; class QPainter; class QWindow; @@ -65,6 +66,7 @@ public: virtual bool isVisible() const = 0; virtual QWindow* window() const = 0; virtual void update(const QRect& rect = QRect()) = 0; + virtual void updateCursor(const QCursor &) = 0; void resetView(RenderWidgetHostViewQt*); protected: diff --git a/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp b/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp index c084a35dd..4164ce242 100644 --- a/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp +++ b/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp @@ -110,6 +110,11 @@ void RenderWidgetHostViewQtDelegateWidget::update(const QRect& rect) QWidget::update(rect); } +void RenderWidgetHostViewQtDelegateWidget::updateCursor(const QCursor &cursor) +{ + QWidget::setCursor(cursor); +} + void RenderWidgetHostViewQtDelegateWidget::paintEvent(QPaintEvent * event) { QPainter painter(this); diff --git a/lib/widgets/render_widget_host_view_qt_delegate_widget.h b/lib/widgets/render_widget_host_view_qt_delegate_widget.h index fbde05ce4..514c276df 100644 --- a/lib/widgets/render_widget_host_view_qt_delegate_widget.h +++ b/lib/widgets/render_widget_host_view_qt_delegate_widget.h @@ -62,6 +62,7 @@ public: virtual bool isVisible() const; virtual QWindow* window() const; virtual void update(const QRect& rect = QRect()); + virtual void updateCursor(const QCursor &); protected: void paintEvent(QPaintEvent * event); |