diff options
author | Denis Dzyubenko <denis.dzyubenko@nokia.com> | 2009-06-15 14:00:46 (GMT) |
---|---|---|
committer | Denis Dzyubenko <denis.dzyubenko@nokia.com> | 2009-07-02 15:16:07 (GMT) |
commit | 60e965fd35037f4a27816d2aeccafdff0d6ae9d6 (patch) | |
tree | 8a968022a03057cc29aa3f7cc246ee708d869b8a /src/gui/widgets/qplaintextedit.cpp | |
parent | 099a32d121cbc80a1a234c3146f4be9b5237e7e8 (diff) | |
download | Qt-60e965fd35037f4a27816d2aeccafdff0d6ae9d6.zip Qt-60e965fd35037f4a27816d2aeccafdff0d6ae9d6.tar.gz Qt-60e965fd35037f4a27816d2aeccafdff0d6ae9d6.tar.bz2 |
Refactored gesture api
Rewritten the api almost from scratch, making it simplier and more
flexible at the same time.
The current implementation will not have complex gseturemanager class
inside Qt, but the QGesture base class, which represents both a
gesture recognizer and a gesture itself with a set of properties. A
set of common gestures that can use used in third-party applications
(and in Qt itself internally) is supposed to be found in
qstandardgestures.h, and a base class for user-defined gestures is in
qgesture.h
Gesture implementation for Pan on Windows7 has also been added as a
reference implementation for platform gestures.
Diffstat (limited to 'src/gui/widgets/qplaintextedit.cpp')
-rw-r--r-- | src/gui/widgets/qplaintextedit.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/gui/widgets/qplaintextedit.cpp b/src/gui/widgets/qplaintextedit.cpp index bab6b89..c9d1d6e 100644 --- a/src/gui/widgets/qplaintextedit.cpp +++ b/src/gui/widgets/qplaintextedit.cpp @@ -66,6 +66,8 @@ #include <qtexttable.h> #include <qvariant.h> +#include <qstandardgestures.h> + #include <qinputcontext.h> #ifndef QT_NO_TEXTEDIT @@ -726,6 +728,9 @@ QPlainTextEditPrivate::QPlainTextEditPrivate() backgroundVisible = false; centerOnScroll = false; inDrag = false; +#ifdef Q_WS_WIN + singleFingerPanEnabled = true; +#endif } @@ -781,6 +786,9 @@ void QPlainTextEditPrivate::init(const QString &txt) #ifndef QT_NO_CURSOR viewport->setCursor(Qt::IBeamCursor); #endif + originalOffsetY = 0; + panGesture = new QPanGesture(q); + QObject::connect(panGesture, SIGNAL(triggered()), q, SLOT(_q_gestureTriggered())); } void QPlainTextEditPrivate::_q_repaintContents(const QRectF &contentsRect) @@ -2899,6 +2907,30 @@ QAbstractTextDocumentLayout::PaintContext QPlainTextEdit::getPaintContext() cons (\a available is true) or unavailable (\a available is false). */ +void QPlainTextEditPrivate::_q_gestureTriggered() +{ + Q_Q(QPlainTextEdit); + QPanGesture *g = qobject_cast<QPanGesture*>(q->sender()); + if (!g) + return; + QScrollBar *hBar = q->horizontalScrollBar(); + QScrollBar *vBar = q->verticalScrollBar(); + if (g->state() == Qt::GestureStarted) + originalOffsetY = vBar->value(); + QSize totalOffset = g->totalOffset(); + if (!totalOffset.isNull()) { + if (QApplication::isRightToLeft()) + totalOffset.rwidth() *= -1; + // QPlainTextEdit scrolls by lines only in vertical direction + QFontMetrics fm(q->document()->defaultFont()); + int lineHeight = fm.height(); + int newX = hBar->value() - g->lastOffset().width(); + int newY = originalOffsetY - totalOffset.height()/lineHeight; + hbar->setValue(newX); + vbar->setValue(newY); + } +} + QT_END_NAMESPACE #include "moc_qplaintextedit.cpp" |