diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2011-08-30 16:48:57 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@nokia.com> | 2011-09-01 13:27:55 +0200 |
commit | e4ba808305952dd313b495f20300ec6e2c3801ac (patch) | |
tree | 7b2315bc8504cfbbd81cbe69773b4b1d67507c65 /src/declarative/items/qsgtextinput.cpp | |
parent | 565a7827bb2a7c7af23eade8f3c8809c72f81251 (diff) |
Use QMouseEvent instead of QGraphicsSceneMouseEvent
QMouseEvent now supports floating point coordinates, and
the graphics scene event is not be available in QtGui
anymore.
Change-Id: I28ab428a2d00fc1deef55b05c1c545e74838e105
Reviewed-on: http://codereview.qt.nokia.com/3991
Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
Diffstat (limited to 'src/declarative/items/qsgtextinput.cpp')
-rw-r--r-- | src/declarative/items/qsgtextinput.cpp | 65 |
1 files changed, 29 insertions, 36 deletions
diff --git a/src/declarative/items/qsgtextinput.cpp b/src/declarative/items/qsgtextinput.cpp index f6b8ecd436..a7c1a122bb 100644 --- a/src/declarative/items/qsgtextinput.cpp +++ b/src/declarative/items/qsgtextinput.cpp @@ -48,13 +48,16 @@ #include <private/qsgdistancefieldglyphcache_p.h> #include <QtDeclarative/qdeclarativeinfo.h> -#include <QtWidgets/qgraphicssceneevent.h> +#include <QtGui/qevent.h> #include <QtWidgets/qinputcontext.h> #include <QTextBoundaryFinder> #include <qstyle.h> #include <qsgtextnode_p.h> #include <qsgsimplerectnode.h> +#include <QtGui/qplatforminputcontext_qpa.h> +#include <private/qguiapplication_p.h> + QT_BEGIN_NAMESPACE DEFINE_BOOL_CONFIG_OPTION(qmlDisableDistanceField, QML_DISABLE_DISTANCEFIELD) @@ -1079,13 +1082,13 @@ void QSGTextInput::inputMethodEvent(QInputMethodEvent *ev) emit inputMethodComposingChanged(); } -void QSGTextInput::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) +void QSGTextInput::mouseDoubleClickEvent(QMouseEvent *event) { Q_D(QSGTextInput); - if (d->sendMouseEventToInputContext(event, QEvent::MouseButtonDblClick)) + if (d->sendMouseEventToInputContext(event)) return; if (d->selectByMouse) { - int cursor = d->xToPos(event->pos().x()); + int cursor = d->xToPos(event->localPos().x()); d->control->selectWordAtPos(cursor); event->setAccepted(true); } else { @@ -1093,10 +1096,10 @@ void QSGTextInput::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) } } -void QSGTextInput::mousePressEvent(QGraphicsSceneMouseEvent *event) +void QSGTextInput::mousePressEvent(QMouseEvent *event) { Q_D(QSGTextInput); - if (d->sendMouseEventToInputContext(event, QEvent::MouseButtonPress)) + if (d->sendMouseEventToInputContext(event)) return; if(d->focusOnPress){ bool hadActiveFocus = hasActiveFocus(); @@ -1115,40 +1118,40 @@ void QSGTextInput::mousePressEvent(QGraphicsSceneMouseEvent *event) if (d->selectByMouse) { setKeepMouseGrab(false); d->selectPressed = true; - d->pressPos = event->pos(); + d->pressPos = event->localPos(); } bool mark = (event->modifiers() & Qt::ShiftModifier) && d->selectByMouse; - int cursor = d->xToPos(event->pos().x()); + int cursor = d->xToPos(event->localPos().x()); d->control->moveCursor(cursor, mark); event->setAccepted(true); } -void QSGTextInput::mouseMoveEvent(QGraphicsSceneMouseEvent *event) +void QSGTextInput::mouseMoveEvent(QMouseEvent *event) { Q_D(QSGTextInput); - if (d->sendMouseEventToInputContext(event, QEvent::MouseMove)) + if (d->sendMouseEventToInputContext(event)) return; if (d->selectPressed) { - if (qAbs(int(event->pos().x() - d->pressPos.x())) > QApplication::startDragDistance()) + if (qAbs(int(event->localPos().x() - d->pressPos.x())) > QApplication::startDragDistance()) setKeepMouseGrab(true); - moveCursorSelection(d->xToPos(event->pos().x()), d->mouseSelectionMode); + moveCursorSelection(d->xToPos(event->localPos().x()), d->mouseSelectionMode); event->setAccepted(true); } else { QSGImplicitSizeItem::mouseMoveEvent(event); } } -void QSGTextInput::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +void QSGTextInput::mouseReleaseEvent(QMouseEvent *event) { Q_D(QSGTextInput); - if (d->sendMouseEventToInputContext(event, QEvent::MouseButtonRelease)) + if (d->sendMouseEventToInputContext(event)) return; if (d->selectPressed) { d->selectPressed = false; setKeepMouseGrab(false); } if (!d->showInputPanelOnFocus) { // input panel on click - if (d->focusOnPress && !isReadOnly() && boundingRect().contains(event->pos())) { + if (d->focusOnPress && !isReadOnly() && boundingRect().contains(event->localPos())) { if (canvas() && canvas() == QGuiApplication::activeWindow()) { // ### refactor: implement virtual keyboard properly.. qDebug("QSGTextInput: virtual keyboard no implemented..."); @@ -1162,33 +1165,23 @@ void QSGTextInput::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) QSGImplicitSizeItem::mouseReleaseEvent(event); } -bool QSGTextInputPrivate::sendMouseEventToInputContext( - QGraphicsSceneMouseEvent *event, QEvent::Type eventType) +bool QSGTextInputPrivate::sendMouseEventToInputContext(QMouseEvent *event) { #if !defined QT_NO_IM - if (event->widget() && control->composeMode()) { - int tmp_cursor = xToPos(event->pos().x()); + if (control->composeMode()) { + int tmp_cursor = xToPos(event->localPos().x()); int mousePos = tmp_cursor - control->cursor(); if (mousePos < 0 || mousePos > control->preeditAreaText().length()) { mousePos = -1; // don't send move events outside the preedit area - if (eventType == QEvent::MouseMove) + if (event->type() == QEvent::MouseMove) return true; } - QInputContext *qic = event->widget()->inputContext(); - if (qic) { - QMouseEvent mouseEvent( - eventType, - event->widget()->mapFromGlobal(event->screenPos()), - event->screenPos(), - event->button(), - event->buttons(), - event->modifiers()); + QPlatformInputContext *ic = QGuiApplicationPrivate::platformIntegration()->inputContext(); + if (ic) // may be causing reset() in some input methods - qic->mouseHandler(mousePos, &mouseEvent); - event->setAccepted(mouseEvent.isAccepted()); - } + ic->mouseHandler(mousePos, event); if (!control->preeditAreaText().isEmpty()) return true; } @@ -1216,10 +1209,10 @@ bool QSGTextInput::event(QEvent* ev) case QEvent::KeyPress: case QEvent::KeyRelease://###Should the control be doing anything with release? case QEvent::InputMethod: - case QEvent::GraphicsSceneMousePress: - case QEvent::GraphicsSceneMouseMove: - case QEvent::GraphicsSceneMouseRelease: - case QEvent::GraphicsSceneMouseDoubleClick: + case QEvent::MouseButtonPress: + case QEvent::MouseMove: + case QEvent::MouseButtonRelease: + case QEvent::MouseButtonDblClick: break; default: handled = d->control->processEvent(ev); |