diff options
Diffstat (limited to 'Tools/DumpRenderTree/qt/EventSenderQt.h')
| -rw-r--r-- | Tools/DumpRenderTree/qt/EventSenderQt.h | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/Tools/DumpRenderTree/qt/EventSenderQt.h b/Tools/DumpRenderTree/qt/EventSenderQt.h new file mode 100644 index 000000000..736818442 --- /dev/null +++ b/Tools/DumpRenderTree/qt/EventSenderQt.h @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) + * Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef EventSenderQt_h +#define EventSenderQt_h + + +#include "DumpRenderTreeQt.h" + +#include <QApplication> +#include <QBasicTimer> +#include <QEvent> +#include <QEventLoop> +#include <QMouseEvent> +#include <QObject> +#include <QPoint> +#include <QString> +#include <QStringList> +#include <QTouchEvent> + +#include <qwebpage.h> +#include <qwebframe.h> + + +class EventSender : public QObject { + Q_OBJECT +public: + EventSender(QWebPage* parent); + virtual bool eventFilter(QObject* watched, QEvent* event); + void resetClickCount() { m_clickCount = 0; } + +public slots: + void mouseDown(int button = 0, const QStringList& modifiers = QStringList()); + void mouseUp(int button = 0); + void mouseMoveTo(int x, int y); +#ifndef QT_NO_WHEELEVENT + void mouseScrollBy(int x, int y); + void continuousMouseScrollBy(int x, int y); +#endif + void leapForward(int ms); + void keyDown(const QString& string, const QStringList& modifiers = QStringList(), unsigned int location = 0); + void clearKillRing() {} + QStringList contextClick(); + void scheduleAsynchronousClick(); + void addTouchPoint(int x, int y); + void updateTouchPoint(int index, int x, int y); + void setTouchModifier(const QString &modifier, bool enable); + void touchStart(); + void touchMove(); + void touchEnd(); + void zoomPageIn(); + void zoomPageOut(); + void textZoomIn(); + void textZoomOut(); + void scalePageBy(float scaleFactor, float x, float y); + void clearTouchPoints(); + void releaseTouchPoint(int index); + +protected: + void timerEvent(QTimerEvent*); + +private: + bool isGraphicsBased() const { return qobject_cast<WebCore::WebViewGraphicsBased*>(m_page->view()); } + QGraphicsSceneMouseEvent* createGraphicsSceneMouseEvent(QEvent::Type, const QPoint& pos, const QPoint& screenPos, Qt::MouseButton, Qt::MouseButtons, Qt::KeyboardModifiers); + QGraphicsSceneWheelEvent* createGraphicsSceneWheelEvent(QEvent::Type, const QPoint& pos, const QPoint& screenPos, int delta, Qt::KeyboardModifiers, Qt::Orientation); + void sendEvent(QObject* receiver, QEvent* event); + void postEvent(QObject* receiver, QEvent* event); + +private: + void sendTouchEvent(QEvent::Type); + void sendOrQueueEvent(QEvent*); + void replaySavedEvents(bool flush); + QPoint m_mousePos; + QPoint m_clickPos; + Qt::MouseButtons m_mouseButtons; + QWebPage* m_page; + int m_clickCount; + int m_currentButton; + bool m_mouseButtonPressed; + bool m_drag; + QEventLoop* m_eventLoop; + QWebFrame* frameUnderMouse() const; + QBasicTimer m_clickTimer; + QList<QTouchEvent::TouchPoint> m_touchPoints; + Qt::KeyboardModifiers m_touchModifiers; + bool m_touchActive; +}; +#endif // EventSenderQt_h |
