diff options
71 files changed, 12302 insertions, 225 deletions
@@ -235,3 +235,5 @@ qtc-debugging-helper src/corelib/lib src/network/lib src/xml/lib/ + +.pc/ @@ -4520,7 +4520,7 @@ if [ -n "$EVALKEY" ]; then rm -f "$outpath/src/corelib/global/qconfig_eval.cpp" cat > "$outpath/src/corelib/global/qconfig_eval.cpp" <<EOF /* Evaluation license key */ -static const char qt_eval_key_data [512 + 12] = "$EVALKEY"; +static const volatile char qt_eval_key_data [512 + 12] = "$EVALKEY"; EOF chmod -w "$outpath/src/corelib/global/qconfig_eval.cpp" fi diff --git a/doc/src/declarative/basictypes.qdoc b/doc/src/declarative/basictypes.qdoc index 8ab06ab..71192bf 100644 --- a/doc/src/declarative/basictypes.qdoc +++ b/doc/src/declarative/basictypes.qdoc @@ -166,7 +166,7 @@ \l{QML:Qt::lighter()}{Qt.lighter()} or \l{QML:Qt::tint()}{Qt.tint()} functions: \qml - Rectangle { color: Qt.rgba(255, 0, 0, 1) } + Rectangle { color: Qt.rgba(0.5, 0.5, 0, 1) } \endqml \sa {QML Basic Types} diff --git a/doc/src/snippets/code/doc_src_properties.qdoc b/doc/src/snippets/code/doc_src_properties.qdoc index 7704160..a4ed409 100644 --- a/doc/src/snippets/code/doc_src_properties.qdoc +++ b/doc/src/snippets/code/doc_src_properties.qdoc @@ -91,7 +91,7 @@ for (int i=0; i<count; ++i) { class MyClass : public QObject { Q_OBJECT - Q_PROPERTY(Priority priority READ priority WRITE setPriority) + Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged) Q_ENUMS(Priority) public: @@ -100,8 +100,19 @@ public: enum Priority { High, Low, VeryHigh, VeryLow }; - void setPriority(Priority priority); - Priority priority() const; + void setPriority(Priority priority) + { + m_priority = priority; + emit priorityChanged(priority); + } + Priority priority() const + { return m_priority; } + +signals: + void priorityChanged(Priority); + +private: + Priority m_priority; }; //! [5] diff --git a/doc/src/snippets/moc/myclass2.h b/doc/src/snippets/moc/myclass2.h index ca79515..daea23c 100644 --- a/doc/src/snippets/moc/myclass2.h +++ b/doc/src/snippets/moc/myclass2.h @@ -58,8 +58,11 @@ public: MyClass(QObject *parent = 0); ~MyClass(); - void setPriority(Priority priority); - Priority priority() const; + void setPriority(Priority priority) { m_priority = priority; } + Priority priority() const { return m_priority; } + +private: + Priority m_priority; }; //! [0] diff --git a/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp b/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp index e4f70de..7a8aae7 100644 --- a/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp +++ b/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp @@ -141,6 +141,16 @@ void GraphicsWebView::mouseMoveEvent(QGraphicsSceneMouseEvent* event) QGraphicsWebView::mouseMoveEvent(event); } +bool GraphicsWebView::sceneEvent(QEvent *event) +{ + bool rv = QGraphicsWebView::sceneEvent(event); + if (event->type() == QEvent::UngrabMouse) { + pressTimer.stop(); + parent->setKeepMouseGrab(false); + } + return rv; +} + /*! \qmlclass WebView QDeclarativeWebView \ingroup qml-view-elements diff --git a/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview_p.h b/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview_p.h index b2055bf..ca15a1e 100644 --- a/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview_p.h +++ b/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview_p.h @@ -70,6 +70,8 @@ protected: void mouseMoveEvent(QGraphicsSceneMouseEvent* event); void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); void timerEvent(QTimerEvent* event); + bool sceneEvent(QEvent *event); + Q_SIGNALS: void doubleClick(int clickX, int clickY); private: diff --git a/src/corelib/kernel/qtcore_eval.cpp b/src/corelib/kernel/qtcore_eval.cpp index 78556c3..da76b74 100644 --- a/src/corelib/kernel/qtcore_eval.cpp +++ b/src/corelib/kernel/qtcore_eval.cpp @@ -90,14 +90,14 @@ static const char will_shutdown_now[] = static int qt_eval_is_supported() { - const char *const license_key = qt_eval_key_data + 12; + const volatile char *const license_key = qt_eval_key_data + 12; // fast fail if (!qt_eval_key_data[0] || !*license_key) return -1; // is this an unsupported evaluation? - const char* typecode = license_key; + const volatile char *typecode = license_key; int field = 2; for ( ; field && *typecode; ++typecode) if (*typecode == '-') diff --git a/src/corelib/thread/qthread.cpp b/src/corelib/thread/qthread.cpp index 69b70cb..6fb182b 100644 --- a/src/corelib/thread/qthread.cpp +++ b/src/corelib/thread/qthread.cpp @@ -482,8 +482,10 @@ int QThread::exec() Q_D(QThread); QMutexLocker locker(&d->mutex); d->data->quitNow = false; - if (d->exited) + if (d->exited) { + d->exited = false; return d->returnCode; + } locker.unlock(); QEventLoop eventLoop; diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp index a44a0e8..e3b587d 100644 --- a/src/corelib/thread/qthread_unix.cpp +++ b/src/corelib/thread/qthread_unix.cpp @@ -97,6 +97,11 @@ # define SCHED_IDLE 5 #endif +#if defined(Q_OS_DARWIN) || !defined(Q_OS_OPENBSD) && defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING-0 >= 0) +#define QT_HAS_THREAD_PRIORITY_SCHEDULING +#endif + + QT_BEGIN_NAMESPACE #ifndef QT_NO_THREAD @@ -503,6 +508,7 @@ void QThread::usleep(unsigned long usecs) thread_sleep(&ti); } +#ifdef QT_HAS_THREAD_PRIORITY_SCHEDULING // Does some magic and calculate the Unix scheduler priorities // sched_policy is IN/OUT: it must be set to a valid policy before calling this function // sched_priority is OUT only @@ -533,6 +539,7 @@ static bool calculateUnixPriority(int priority, int *sched_policy, int *sched_pr *sched_priority = prio; return true; } +#endif void QThread::start(Priority priority) { @@ -553,7 +560,7 @@ void QThread::start(Priority priority) d->priority = priority; -#if defined(Q_OS_DARWIN) || !defined(Q_OS_OPENBSD) && !defined(Q_OS_SYMBIAN) && defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING-0 >= 0) +#if defined(QT_HAS_THREAD_PRIORITY_SCHEDULING) && !defined(Q_OS_SYMBIAN) // ### Need to implement thread sheduling and priorities for symbian os. Implementation removed for now switch (priority) { case InheritPriority: @@ -594,7 +601,7 @@ void QThread::start(Priority priority) break; } } -#endif // _POSIX_THREAD_PRIORITY_SCHEDULING +#endif // QT_HAS_THREAD_PRIORITY_SCHEDULING #ifdef Q_OS_SYMBIAN if (d->stackSize == 0) @@ -757,7 +764,7 @@ void QThread::setPriority(Priority priority) // copied from start() with a few modifications: -#if defined(Q_OS_DARWIN) || !defined(Q_OS_OPENBSD) && defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING-0 >= 0) +#ifdef QT_HAS_THREAD_PRIORITY_SCHEDULING int sched_policy; sched_param param; diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index be1dc08..b817eb2 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -7306,6 +7306,7 @@ Q_CORE_EXPORT char *qdtoa( double d, int mode, int ndigits, int *decpt, int *sig Q_CORE_EXPORT double qstrtod(const char *s00, const char **se, bool *ok) { + errno = 0; double ret = strtod((char*)s00, (char**)se); if (ok) { if((ret == 0.0l && errno == ERANGE) diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index 1870647..377f3b5 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -281,7 +281,6 @@ void QDeclarativeFlickablePrivate::fixupY() void QDeclarativeFlickablePrivate::fixup(AxisData &data, qreal minExtent, qreal maxExtent) { - Q_Q(QDeclarativeFlickable); if (data.move.value() > minExtent || maxExtent > minExtent) { timeline.reset(data.move); if (data.move.value() != minExtent) { @@ -290,8 +289,7 @@ void QDeclarativeFlickablePrivate::fixup(AxisData &data, qreal minExtent, qreal timeline.move(data.move, minExtent - dist/2, QEasingCurve(QEasingCurve::InQuad), fixupDuration/4); timeline.move(data.move, minExtent, QEasingCurve(QEasingCurve::OutExpo), 3*fixupDuration/4); } else { - data.move.setValue(minExtent); - q->viewportMoved(); + timeline.set(data.move, minExtent); } } } else if (data.move.value() < maxExtent) { @@ -301,8 +299,7 @@ void QDeclarativeFlickablePrivate::fixup(AxisData &data, qreal minExtent, qreal timeline.move(data.move, maxExtent - dist/2, QEasingCurve(QEasingCurve::InQuad), fixupDuration/4); timeline.move(data.move, maxExtent, QEasingCurve(QEasingCurve::OutExpo), 3*fixupDuration/4); } else { - data.move.setValue(maxExtent); - q->viewportMoved(); + timeline.set(data.move, minExtent); } } vTime = timeline.time(); @@ -703,6 +700,9 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent bool rejectY = false; bool rejectX = false; + bool stealY = false; + bool stealX = false; + if (q->yflick()) { int dy = int(event->pos().y() - pressPos.y()); if (qAbs(dy) > QApplication::startDragDistance() || QDeclarativeItemPrivate::elapsed(pressTime) > 200) { @@ -731,7 +731,7 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent vMoved = true; } if (qAbs(dy) > QApplication::startDragDistance()) - stealMouse = true; + stealY = true; } } @@ -764,10 +764,12 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent } if (qAbs(dx) > QApplication::startDragDistance()) - stealMouse = true; + stealX = true; } } + stealMouse = stealX || stealY; + if (!lastPos.isNull()) { qreal elapsed = qreal(QDeclarativeItemPrivate::restart(lastPosTime)) / 1000.; if (elapsed <= 0) diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 6be49ba..450b6af 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -183,6 +183,7 @@ public: , ownModel(false), wrap(false), autoHighlight(true), haveHighlightRange(false) , correctFlick(false), inFlickCorrection(false), lazyRelease(false) , deferredRelease(false), layoutScheduled(false), currentIndexCleared(false) + , inViewportMoved(false) , minExtentDirty(true), maxExtentDirty(true) {} @@ -503,6 +504,7 @@ public: bool deferredRelease : 1; bool layoutScheduled : 1; bool currentIndexCleared : 1; + bool inViewportMoved : 1; mutable bool minExtentDirty : 1; mutable bool maxExtentDirty : 1; }; @@ -2281,6 +2283,10 @@ void QDeclarativeListView::viewportMoved() QDeclarativeFlickable::viewportMoved(); if (!d->itemCount) return; + // Recursion can occur due to refill changing the content size. + if (d->inViewportMoved) + return; + d->inViewportMoved = true; d->lazyRelease = true; refill(); if (d->flickingHorizontally || d->flickingVertically || d->movingHorizontally || d->movingVertically) @@ -2294,6 +2300,7 @@ void QDeclarativeListView::viewportMoved() pos = viewPos + d->highlightRangeEnd - d->highlight->size(); if (pos < viewPos + d->highlightRangeStart) pos = viewPos + d->highlightRangeStart; + d->highlightPosAnimator->stop(); d->highlight->setPosition(qRound(pos)); // update current index @@ -2341,6 +2348,7 @@ void QDeclarativeListView::viewportMoved() } d->inFlickCorrection = false; } + d->inViewportMoved = false; } qreal QDeclarativeListView::minYExtent() const diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp index d9edd11..0a043a7 100644 --- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp +++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp @@ -500,17 +500,9 @@ void QDeclarativeMouseArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event) const int dragThreshold = QApplication::startDragDistance(); qreal dx = qAbs(curLocalPos.x() - startLocalPos.x()); qreal dy = qAbs(curLocalPos.y() - startLocalPos.y()); - if ((d->dragX && !(dx < dragThreshold)) || (d->dragY && !(dy < dragThreshold))) { + + if (keepMouseGrab() && d->stealMouse) d->drag->setActive(true); - d->stealMouse = true; - } - if (!keepMouseGrab()) { - if ((!d->dragY && dy < dragThreshold && d->dragX && dx > dragThreshold) - || (!d->dragX && dx < dragThreshold && d->dragY && dy > dragThreshold) - || (d->dragX && d->dragY)) { - setKeepMouseGrab(true); - } - } if (d->dragX && d->drag->active()) { qreal x = (curLocalPos.x() - startLocalPos.x()) + d->startX; @@ -528,6 +520,16 @@ void QDeclarativeMouseArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event) y = drag()->ymax(); drag()->target()->setY(y); } + + if (!keepMouseGrab()) { + if ((!d->dragY && dy < dragThreshold && d->dragX && dx > dragThreshold) + || (!d->dragX && dx < dragThreshold && d->dragY && dy > dragThreshold) + || (d->dragX && d->dragY && (dx > dragThreshold || dy > dragThreshold))) { + setKeepMouseGrab(true); + d->stealMouse = true; + } + } + d->moved = true; } QDeclarativeMouseEvent me(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, false, d->longPress); @@ -618,6 +620,7 @@ bool QDeclarativeMouseArea::sceneEvent(QEvent *event) // if our mouse grab has been removed (probably by Flickable), fix our // state d->pressed = false; + d->stealMouse = false; setKeepMouseGrab(false); emit canceled(); emit pressedChanged(); @@ -672,8 +675,18 @@ bool QDeclarativeMouseArea::sendMouseEvent(QGraphicsSceneMouseEvent *event) return stealThisEvent; } if (mouseEvent.type() == QEvent::GraphicsSceneMouseRelease) { - d->stealMouse = false; - ungrabMouse(); + if (d->pressed) { + d->pressed = false; + d->stealMouse = false; + if (s && s->mouseGrabberItem() == this) + ungrabMouse(); + emit canceled(); + emit pressedChanged(); + if (d->hovered) { + d->hovered = false; + emit hoveredChanged(); + } + } } return false; } diff --git a/src/declarative/qml/qdeclarativeworkerscript.cpp b/src/declarative/qml/qdeclarativeworkerscript.cpp index be7ea0e..4b78020 100644 --- a/src/declarative/qml/qdeclarativeworkerscript.cpp +++ b/src/declarative/qml/qdeclarativeworkerscript.cpp @@ -52,6 +52,7 @@ #include <QtCore/qwaitcondition.h> #include <QtScript/qscriptvalueiterator.h> #include <QtCore/qfile.h> +#include <QtCore/qdatetime.h> #include <QtNetwork/qnetworkaccessmanager.h> #include <QtDeclarative/qdeclarativeinfo.h> #include "qdeclarativenetworkaccessmanagerfactory.h" @@ -314,6 +315,12 @@ QVariant QDeclarativeWorkerScriptEnginePrivate::scriptValueToVariant(const QScri return QVariant(value.toString()); } else if (value.isNumber()) { return QVariant((qreal)value.toNumber()); + } else if (value.isDate()) { + return QVariant(value.toDateTime()); +#ifndef QT_NO_REGEXP + } else if (value.isRegExp()) { + return QVariant(value.toRegExp()); +#endif } else if (value.isArray()) { QVariantList list; @@ -364,6 +371,12 @@ QScriptValue QDeclarativeWorkerScriptEnginePrivate::variantToScriptValue(const Q return QScriptValue(value.toString()); } else if (value.userType() == QMetaType::QReal) { return QScriptValue(value.toReal()); + } else if (value.userType() == QVariant::DateTime) { + return engine->newDate(value.toDateTime()); +#ifndef QT_NO_REGEXP + } else if (value.userType() == QVariant::RegExp) { + return engine->newRegExp(value.toRegExp()); +#endif } else if (value.userType() == qMetaTypeId<QDeclarativeListModelWorkerAgent::VariantRef>()) { QDeclarativeListModelWorkerAgent::VariantRef vr = qvariant_cast<QDeclarativeListModelWorkerAgent::VariantRef>(value); if (vr.a->scriptEngine() == 0) diff --git a/src/gui/dialogs/qmessagebox.cpp b/src/gui/dialogs/qmessagebox.cpp index fe25b0f..2f8b9e2 100644 --- a/src/gui/dialogs/qmessagebox.cpp +++ b/src/gui/dialogs/qmessagebox.cpp @@ -776,10 +776,8 @@ QMessageBox::QMessageBox(QWidget *parent) added at any time using addButton(). The \a parent and \a f arguments are passed to the QDialog constructor. - If \a parent is 0, the message box is an \l{Qt::ApplicationModal} - {application modal} dialog box. If \a parent is a widget, the - message box is \l{Qt::WindowModal} {window modal} relative to \a - parent. + The message box is an \l{Qt::ApplicationModal} {application modal} + dialog box. On Mac OS X, if \a parent is not 0 and you want your message box to appear as a Qt::Sheet of that parent, set the message box's @@ -1549,10 +1547,8 @@ static QMessageBox::StandardButton showNewMessageBox(QWidget *parent, \key Esc was pressed instead, the \l{Default and Escape Keys} {escape button} is returned. - If \a parent is 0, the message box is an \l{Qt::ApplicationModal} - {application modal} dialog box. If \a parent is a widget, the - message box is \l{Qt::WindowModal} {window modal} relative to \a - parent. + The message box is an \l{Qt::ApplicationModal} {application modal} + dialog box. \sa question(), warning(), critical() */ @@ -1579,10 +1575,8 @@ QMessageBox::StandardButton QMessageBox::information(QWidget *parent, const QStr \key Esc was pressed instead, the \l{Default and Escape Keys} {escape button} is returned. - If \a parent is 0, the message box is an \l{Qt::ApplicationModal} - {application modal} dialog box. If \a parent is a widget, the - message box is \l{Qt::WindowModal} {window modal} relative to \a - parent. + The message box is an \l{Qt::ApplicationModal} {application modal} + dialog box. \sa information(), warning(), critical() */ @@ -1607,10 +1601,8 @@ QMessageBox::StandardButton QMessageBox::question(QWidget *parent, const QString \key Esc was pressed instead, the \l{Default and Escape Keys} {escape button} is returned. - If \a parent is 0, the message box is an \l{Qt::ApplicationModal} - {application modal} dialog box. If \a parent is a widget, the - message box is \l{Qt::WindowModal} {window modal} relative to \a - parent. + The message box is an \l{Qt::ApplicationModal} {application modal} + dialog box. \sa question(), information(), critical() */ @@ -1635,10 +1627,8 @@ QMessageBox::StandardButton QMessageBox::warning(QWidget *parent, const QString \key Esc was pressed instead, the \l{Default and Escape Keys} {escape button} is returned. - If \a parent is 0, the message box is an \l{Qt::ApplicationModal} - {application modal} dialog box. If \a parent is a widget, the - message box is \l{Qt::WindowModal} {window modal} relative to \a - parent. + The message box is an \l{Qt::ApplicationModal} {application modal} + dialog box. \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog @@ -1670,7 +1660,7 @@ QMessageBox::StandardButton QMessageBox::critical(QWidget *parent, const QString The about box has a single button labelled "OK". On Mac OS X, the about box is popped up as a modeless window; on other platforms, - it is currently a window modal. + it is currently application modal. \sa QWidget::windowIcon(), QApplication::activeWindow() */ @@ -1723,7 +1713,7 @@ void QMessageBox::about(QWidget *parent, const QString &title, const QString &te QApplication provides this functionality as a slot. On Mac OS X, the about box is popped up as a modeless window; on - other platforms, it is currently window modal. + other platforms, it is currently application modal. \sa QApplication::aboutQt() */ @@ -1983,10 +1973,8 @@ void QMessageBoxPrivate::retranslateStrings() \snippet doc/src/snippets/dialogs/dialogs.cpp 2 - If \a parent is 0, the message box is an \l{Qt::ApplicationModal} - {application modal} dialog box. If \a parent is a widget, the - message box is \l{Qt::WindowModal} {window modal} relative to \a - parent. + The message box is an \l{Qt::ApplicationModal} {application modal} + dialog box. The \a parent and \a f arguments are passed to the QDialog constructor. @@ -2035,10 +2023,8 @@ QMessageBox::QMessageBox(const QString &title, const QString &text, Icon icon, Returns the identity (QMessageBox::Ok, or QMessageBox::No, etc.) of the button that was clicked. - If \a parent is 0, the message box is an \l{Qt::ApplicationModal} - {application modal} dialog box. If \a parent is a widget, the - message box is \l{Qt::WindowModal} {window modal} relative to \a - parent. + The message box is an \l{Qt::ApplicationModal} {application modal} + dialog box. \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog @@ -2073,10 +2059,8 @@ int QMessageBox::information(QWidget *parent, const QString &title, const QStrin supply 0, 1 or 2 to make pressing \key Esc equivalent to clicking the relevant button. - If \a parent is 0, the message box is an \l{Qt::ApplicationModal} - {application modal} dialog box. If \a parent is a widget, the - message box is \l{Qt::WindowModal} {window modal} relative to \a - parent. + The message box is an \l{Qt::ApplicationModal} {application modal} + dialog box. \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog @@ -2125,10 +2109,8 @@ int QMessageBox::information(QWidget *parent, const QString &title, const QStrin Returns the identity (QMessageBox::Yes, or QMessageBox::No, etc.) of the button that was clicked. - If \a parent is 0, the message box is an \l{Qt::ApplicationModal} - {application modal} dialog box. If \a parent is a widget, the - message box is \l{Qt::WindowModal} {window modal} relative to \a - parent. + The message box is an \l{Qt::ApplicationModal} {application modal} + dialog box. \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog @@ -2163,10 +2145,8 @@ int QMessageBox::question(QWidget *parent, const QString &title, const QString& supply 0, 1 or 2 to make pressing Escape equivalent to clicking the relevant button. - If \a parent is 0, the message box is an \l{Qt::ApplicationModal} - {application modal} dialog box. If \a parent is a widget, the - message box is \l{Qt::WindowModal} {window modal} relative to \a - parent. + The message box is an \l{Qt::ApplicationModal} {application modal} + dialog box. \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog @@ -2215,10 +2195,8 @@ int QMessageBox::question(QWidget *parent, const QString &title, const QString& Returns the identity (QMessageBox::Ok or QMessageBox::No or ...) of the button that was clicked. - If \a parent is 0, the message box is an \l{Qt::ApplicationModal} - {application modal} dialog box. If \a parent is a widget, the - message box is \l{Qt::WindowModal} {window modal} relative to \a - parent. + The message box is an \l{Qt::ApplicationModal} {application modal} + dialog box. \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog @@ -2253,10 +2231,8 @@ int QMessageBox::warning(QWidget *parent, const QString &title, const QString& t supply 0, 1, or 2 to make pressing Escape equivalent to clicking the relevant button. - If \a parent is 0, the message box is an \l{Qt::ApplicationModal} - {application modal} dialog box. If \a parent is a widget, the - message box is \l{Qt::WindowModal} {window modal} relative to \a - parent. + The message box is an \l{Qt::ApplicationModal} {application modal} + dialog box. \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog @@ -2304,10 +2280,8 @@ int QMessageBox::warning(QWidget *parent, const QString &title, const QString& t Returns the identity (QMessageBox::Ok, or QMessageBox::No, etc.) of the button that was clicked. - If \a parent is 0, the message box is an \l{Qt::ApplicationModal} - {application modal} dialog box. If \a parent is a widget, the - message box is \l{Qt::WindowModal} {window modal} relative to \a - parent. + The message box is an \l{Qt::ApplicationModal} {application modal} + dialog box. \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog @@ -2343,10 +2317,8 @@ int QMessageBox::critical(QWidget *parent, const QString &title, const QString& supply 0, 1, or 2 to make pressing Escape equivalent to clicking the relevant button. - If \a parent is 0, the message box is an \l{Qt::ApplicationModal} - {application modal} dialog box. If \a parent is a widget, the - message box is \l{Qt::WindowModal} {window modal} relative to \a - parent. + The message box is an \l{Qt::ApplicationModal} {application modal} + dialog box. \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog diff --git a/src/gui/graphicsview/qgraphicsgridlayout.cpp b/src/gui/graphicsview/qgraphicsgridlayout.cpp index 3fc7f10..20ebab6 100644 --- a/src/gui/graphicsview/qgraphicsgridlayout.cpp +++ b/src/gui/graphicsview/qgraphicsgridlayout.cpp @@ -64,6 +64,17 @@ removeAt() will remove an item from the layout, without destroying it. + \section1 Size Hints and Size Policies in QGraphicsGridLayout + + QGraphicsGridLayout respects each item's size hints and size policies, + and when a cell in the grid has more space than the items can fill, each item + is arranged according to the layout's alignment for that item. You can set + an alignment for each item by calling setAlignment(), and check the + alignment for any item by calling alignment(). You can also set the alignment + for an entire row or column by calling setRowAlignment() and setColumnAlignment() + respectively. By default, items are aligned to the top left. + + \sa QGraphicsLinearLayout, QGraphicsWidget */ diff --git a/src/gui/graphicsview/qgraphicslayoutitem.cpp b/src/gui/graphicsview/qgraphicslayoutitem.cpp index e43f7fa..016cfbf 100644 --- a/src/gui/graphicsview/qgraphicslayoutitem.cpp +++ b/src/gui/graphicsview/qgraphicslayoutitem.cpp @@ -137,19 +137,28 @@ void QGraphicsLayoutItemPrivate::init() QSizeF *QGraphicsLayoutItemPrivate::effectiveSizeHints(const QSizeF &constraint) const { Q_Q(const QGraphicsLayoutItem); - if (!sizeHintCacheDirty && cachedConstraint == constraint) - return cachedSizeHints; + QSizeF *sizeHintCache; + const bool hasConstraint = constraint.width() >= 0 || constraint.height() >= 0; + if (hasConstraint) { + if (!sizeHintWithConstraintCacheDirty && constraint == cachedConstraint) + return cachedSizeHintsWithConstraints; + sizeHintCache = cachedSizeHintsWithConstraints; + } else { + if (!sizeHintCacheDirty) + return cachedSizeHints; + sizeHintCache = cachedSizeHints; + } for (int i = 0; i < Qt::NSizeHints; ++i) { - cachedSizeHints[i] = constraint; + sizeHintCache[i] = constraint; if (userSizeHints) - combineSize(cachedSizeHints[i], userSizeHints[i]); + combineSize(sizeHintCache[i], userSizeHints[i]); } - QSizeF &minS = cachedSizeHints[Qt::MinimumSize]; - QSizeF &prefS = cachedSizeHints[Qt::PreferredSize]; - QSizeF &maxS = cachedSizeHints[Qt::MaximumSize]; - QSizeF &descentS = cachedSizeHints[Qt::MinimumDescent]; + QSizeF &minS = sizeHintCache[Qt::MinimumSize]; + QSizeF &prefS = sizeHintCache[Qt::PreferredSize]; + QSizeF &maxS = sizeHintCache[Qt::MaximumSize]; + QSizeF &descentS = sizeHintCache[Qt::MinimumDescent]; normalizeHints(minS.rwidth(), prefS.rwidth(), maxS.rwidth(), descentS.rwidth()); normalizeHints(minS.rheight(), prefS.rheight(), maxS.rheight(), descentS.rheight()); @@ -175,9 +184,13 @@ QSizeF *QGraphicsLayoutItemPrivate::effectiveSizeHints(const QSizeF &constraint) // Not supported yet // COMBINE_SIZE(descentS, q->sizeHint(Qt::MinimumDescent, constraint)); - cachedConstraint = constraint; - sizeHintCacheDirty = false; - return cachedSizeHints; + if (hasConstraint) { + cachedConstraint = constraint; + sizeHintWithConstraintCacheDirty = false; + } else { + sizeHintCacheDirty = false; + } + return sizeHintCache; } diff --git a/src/gui/graphicsview/qgraphicslayoutitem_p.h b/src/gui/graphicsview/qgraphicslayoutitem_p.h index b752e03..d72ee9f 100644 --- a/src/gui/graphicsview/qgraphicslayoutitem_p.h +++ b/src/gui/graphicsview/qgraphicslayoutitem_p.h @@ -85,8 +85,10 @@ public: QSizeF *userSizeHints; mutable QSizeF cachedSizeHints[Qt::NSizeHints]; mutable QSizeF cachedConstraint; + mutable QSizeF cachedSizeHintsWithConstraints[Qt::NSizeHints]; mutable quint32 sizeHintCacheDirty : 1; + mutable quint32 sizeHintWithConstraintCacheDirty : 1; quint32 isLayout : 1; quint32 ownedByLayout : 1; diff --git a/src/gui/graphicsview/qgraphicslinearlayout.cpp b/src/gui/graphicsview/qgraphicslinearlayout.cpp index 7e8d19f..244a728 100644 --- a/src/gui/graphicsview/qgraphicslinearlayout.cpp +++ b/src/gui/graphicsview/qgraphicslinearlayout.cpp @@ -75,7 +75,7 @@ is arranged according to the layout's alignment for that item. You can set an alignment for each item by calling setAlignment(), and check the alignment for any item by calling alignment(). By default, items are - centered both vertically and horizontally. + aligned to the top left. \section1 Spacing within QGraphicsLinearLayout @@ -446,7 +446,7 @@ void QGraphicsLinearLayout::setAlignment(QGraphicsLayoutItem *item, Qt::Alignmen /*! Returns the alignment for \a item. The default alignment is - Qt::AlignCenter. + Qt::AlignTop | Qt::AlignLeft. The alignment decides how the item is positioned within its assigned space in the case where there's more space available in the layout than the diff --git a/src/gui/graphicsview/qgridlayoutengine.cpp b/src/gui/graphicsview/qgridlayoutengine.cpp index e486b4d..f1055ba 100644 --- a/src/gui/graphicsview/qgridlayoutengine.cpp +++ b/src/gui/graphicsview/qgridlayoutengine.cpp @@ -166,7 +166,7 @@ void QGridLayoutRowData::reset(int count) hasIgnoreFlag = false; } -void QGridLayoutRowData::distributeMultiCells() +void QGridLayoutRowData::distributeMultiCells(const QGridLayoutRowInfo &rowInfo) { MultiCellMap::const_iterator i = multiCellMap.constBegin(); for (; i != multiCellMap.constEnd(); ++i) { @@ -185,7 +185,7 @@ void QGridLayoutRowData::distributeMultiCells() qreal extra = compare(box, totalBox, j); if (extra > 0.0) { calculateGeometries(start, end, box.q_sizes(j), dummy.data(), newSizes.data(), - 0, totalBox); + 0, totalBox, rowInfo); for (int k = 0; k < span; ++k) extras[k].q_sizes(j) = newSizes[k]; @@ -202,11 +202,12 @@ void QGridLayoutRowData::distributeMultiCells() void QGridLayoutRowData::calculateGeometries(int start, int end, qreal targetSize, qreal *positions, qreal *sizes, qreal *descents, - const QGridLayoutBox &totalBox) + const QGridLayoutBox &totalBox, + const QGridLayoutRowInfo &rowInfo) { Q_ASSERT(end > start); - targetSize = qBound(totalBox.q_minimumSize, targetSize, totalBox.q_maximumSize); + targetSize = qMax(totalBox.q_minimumSize, targetSize); int n = end - start; QVarLengthArray<qreal> newSizes(n); @@ -246,16 +247,22 @@ void QGridLayoutRowData::calculateGeometries(int start, int end, qreal targetSiz } } } else { - stealBox(start, end, PreferredSize, positions, sizes); + bool isLargerThanMaximum = (targetSize > totalBox.q_maximumSize); + if (isLargerThanMaximum) { + stealBox(start, end, MaximumSize, positions, sizes); + sumAvailable = targetSize - totalBox.q_maximumSize; + } else { + stealBox(start, end, PreferredSize, positions, sizes); + sumAvailable = targetSize - totalBox.q_preferredSize; + } - sumAvailable = targetSize - totalBox.q_preferredSize; if (sumAvailable > 0.0) { qreal sumCurrentAvailable = sumAvailable; bool somethingHasAMaximumSize = false; - qreal sumPreferredSizes = 0.0; + qreal sumSizes = 0.0; for (int i = 0; i < n; ++i) - sumPreferredSizes += sizes[i]; + sumSizes += sizes[i]; for (int i = 0; i < n; ++i) { if (ignore.testBit(start + i)) { @@ -265,7 +272,16 @@ void QGridLayoutRowData::calculateGeometries(int start, int end, qreal targetSiz } const QGridLayoutBox &box = boxes.at(start + i); - qreal desired = box.q_maximumSize - box.q_preferredSize; + qreal boxSize; + + qreal desired; + if (isLargerThanMaximum) { + boxSize = box.q_maximumSize; + desired = rowInfo.boxes.value(start + i).q_maximumSize - boxSize; + } else { + boxSize = box.q_preferredSize; + desired = box.q_maximumSize - boxSize; + } if (desired == 0.0) { newSizes[i] = sizes[i]; factors[i] = 0.0; @@ -284,17 +300,17 @@ void QGridLayoutRowData::calculateGeometries(int start, int end, qreal targetSiz } else if (stretch <= 0) { factors[i] = 0.0; } else { - qreal ultimatePreferredSize; - qreal ultimateSumPreferredSizes; - qreal x = ((stretch * sumPreferredSizes) - - (sumStretches * box.q_preferredSize)) + qreal ultimateSize; + qreal ultimateSumSizes; + qreal x = ((stretch * sumSizes) + - (sumStretches * boxSize)) / (sumStretches - stretch); if (x >= 0.0) { - ultimatePreferredSize = box.q_preferredSize + x; - ultimateSumPreferredSizes = sumPreferredSizes + x; + ultimateSize = boxSize + x; + ultimateSumSizes = sumSizes + x; } else { - ultimatePreferredSize = box.q_preferredSize; - ultimateSumPreferredSizes = (sumStretches * box.q_preferredSize) + ultimateSize = boxSize; + ultimateSumSizes = (sumStretches * boxSize) / stretch; } @@ -303,17 +319,17 @@ void QGridLayoutRowData::calculateGeometries(int start, int end, qreal targetSiz (at the expense of the stretch factors, which are not fully respected during the transition). */ - ultimatePreferredSize = ultimatePreferredSize * 3 / 2; - ultimateSumPreferredSizes = ultimateSumPreferredSizes * 3 / 2; + ultimateSize = ultimateSize * 3 / 2; + ultimateSumSizes = ultimateSumSizes * 3 / 2; - qreal beta = ultimateSumPreferredSizes - sumPreferredSizes; + qreal beta = ultimateSumSizes - sumSizes; if (!beta) { factors[i] = 1; } else { qreal alpha = qMin(sumCurrentAvailable, beta); - qreal ultimateFactor = (stretch * ultimateSumPreferredSizes / sumStretches) - - (box.q_preferredSize); - qreal transitionalFactor = sumCurrentAvailable * (ultimatePreferredSize - box.q_preferredSize) / beta; + qreal ultimateFactor = (stretch * ultimateSumSizes / sumStretches) + - (boxSize); + qreal transitionalFactor = sumCurrentAvailable * (ultimateSize - boxSize) / beta; factors[i] = ((alpha * ultimateFactor) + ((beta - alpha) * transitionalFactor)) / beta; @@ -336,11 +352,16 @@ void QGridLayoutRowData::calculateGeometries(int start, int end, qreal targetSiz if (newSizes[i] >= 0.0) continue; - const QGridLayoutBox &box = boxes.at(start + i); + qreal maxBoxSize; + if (isLargerThanMaximum) + maxBoxSize = rowInfo.boxes.value(start + i).q_maximumSize; + else + maxBoxSize = boxes.at(start + i).q_maximumSize; + qreal avail = sumCurrentAvailable * factors[i] / sumFactors; - if (sizes[i] + avail >= box.q_maximumSize) { - newSizes[i] = box.q_maximumSize; - sumCurrentAvailable -= box.q_maximumSize - sizes[i]; + if (sizes[i] + avail >= maxBoxSize) { + newSizes[i] = maxBoxSize; + sumCurrentAvailable -= maxBoxSize - sizes[i]; sumFactors -= factors[i]; keepGoing = (sumCurrentAvailable > 0.0); if (!keepGoing) @@ -637,7 +658,7 @@ QRectF QGridLayoutItem::geometryWithin(qreal x, qreal y, qreal width, qreal heig if (dynamicConstraintOrientation() == Qt::Vertical) { if (size.width() > cellWidth) size = effectiveMaxSize(QSizeF(cellWidth, -1)); - } else if(size.height() > cellHeight) { + } else if (size.height() > cellHeight) { size = effectiveMaxSize(QSizeF(-1, cellHeight)); } } @@ -1107,63 +1128,58 @@ QSizeF QGridLayoutEngine::sizeHint(const QLayoutStyleInfo &styleInfo, Qt::SizeHi { QGridLayoutBox sizehint_totalBoxes[NOrientations]; - if(rowCount() < 1 || columnCount() < 1 || !hasDynamicConstraint()) { + bool sizeHintCalculated = false; + + if (hasDynamicConstraint() && rowCount() > 0 && columnCount() > 0) { + if (constraintOrientation() == Qt::Vertical) { + //We have items whose height depends on their width + if (constraint.width() >= 0) { + if (q_cachedDataForStyleInfo != styleInfo) + ensureColumnAndRowData(&q_columnData, &sizehint_totalBoxes[Hor], styleInfo, NULL, NULL, Qt::Horizontal); + else + sizehint_totalBoxes[Hor] = q_totalBoxes[Hor]; + QVector<qreal> sizehint_xx; + QVector<qreal> sizehint_widths; + + sizehint_xx.resize(columnCount()); + sizehint_widths.resize(columnCount()); + qreal width = constraint.width(); + //Calculate column widths and positions, and put results in q_xx.data() and q_widths.data() so that we can use this information as + //constraints to find the row heights + q_columnData.calculateGeometries(0, columnCount(), width, sizehint_xx.data(), sizehint_widths.data(), + 0, sizehint_totalBoxes[Hor], q_infos[Hor]); + ensureColumnAndRowData(&q_rowData, &sizehint_totalBoxes[Ver], styleInfo, sizehint_xx.data(), sizehint_widths.data(), Qt::Vertical); + sizeHintCalculated = true; + } + } else { + if (constraint.height() >= 0) { + //We have items whose width depends on their height + ensureColumnAndRowData(&q_rowData, &sizehint_totalBoxes[Ver], styleInfo, NULL, NULL, Qt::Vertical); + QVector<qreal> sizehint_yy; + QVector<qreal> sizehint_heights; + + sizehint_yy.resize(rowCount()); + sizehint_heights.resize(rowCount()); + qreal height = constraint.height(); + //Calculate row heights and positions, and put results in q_yy.data() and q_heights.data() so that we can use this information as + //constraints to find the column widths + q_rowData.calculateGeometries(0, rowCount(), height, sizehint_yy.data(), sizehint_heights.data(), + 0, sizehint_totalBoxes[Ver], q_infos[Ver]); + ensureColumnAndRowData(&q_columnData, &sizehint_totalBoxes[Hor], styleInfo, sizehint_yy.data(), sizehint_heights.data(), Qt::Vertical); + sizeHintCalculated = true; + } + } + } + + if (!sizeHintCalculated) { //No items with height for width, so it doesn't matter which order we do these in - if(q_cachedDataForStyleInfo != styleInfo) { + if (q_cachedDataForStyleInfo != styleInfo) { ensureColumnAndRowData(&q_columnData, &sizehint_totalBoxes[Hor], styleInfo, NULL, NULL, Qt::Horizontal); ensureColumnAndRowData(&q_rowData, &sizehint_totalBoxes[Ver], styleInfo, NULL, NULL, Qt::Vertical); } else { sizehint_totalBoxes[Hor] = q_totalBoxes[Hor]; sizehint_totalBoxes[Ver] = q_totalBoxes[Ver]; } - } else if(constraintOrientation() == Qt::Vertical) { - //We have items whose width depends on their height - if(q_cachedDataForStyleInfo != styleInfo) - ensureColumnAndRowData(&q_columnData, &sizehint_totalBoxes[Hor], styleInfo, NULL, NULL, Qt::Horizontal); - else - sizehint_totalBoxes[Hor] = q_totalBoxes[Hor]; - QVector<qreal> sizehint_xx; - QVector<qreal> sizehint_widths; - - sizehint_xx.resize(columnCount()); - sizehint_widths.resize(columnCount()); - qreal width = constraint.width(); - if(width < 0) { - /* It's not obvious what the behaviour should be. */ -/* if(which == Qt::MaximumSize) - width = sizehint_totalBoxes[Hor].q_maximumSize; - else if(which == Qt::MinimumSize) - width = sizehint_totalBoxes[Hor].q_minimumSize; - else*/ - width = sizehint_totalBoxes[Hor].q_preferredSize; - } - //Calculate column widths and positions, and put results in q_xx.data() and q_widths.data() so that we can use this information as - //constraints to find the row heights - q_columnData.calculateGeometries(0, columnCount(), width, sizehint_xx.data(), sizehint_widths.data(), - 0, sizehint_totalBoxes[Hor]); - ensureColumnAndRowData(&q_rowData, &sizehint_totalBoxes[Ver], styleInfo, sizehint_xx.data(), sizehint_widths.data(), Qt::Vertical); - } else { - //We have items whose height depends on their width - ensureColumnAndRowData(&q_rowData, &sizehint_totalBoxes[Ver], styleInfo, NULL, NULL, Qt::Vertical); - QVector<qreal> sizehint_yy; - QVector<qreal> sizehint_heights; - - sizehint_yy.resize(rowCount()); - sizehint_heights.resize(rowCount()); - qreal height = constraint.height(); - if(height < 0) { -/* if(which == Qt::MaximumSize) - height = sizehint_totalBoxes[Ver].q_maximumSize; - else if(which == Qt::MinimumSize) - height = sizehint_totalBoxes[Ver].q_minimumSize; - else*/ - height = sizehint_totalBoxes[Ver].q_preferredSize; - } - //Calculate row heights and positions, and put results in q_yy.data() and q_heights.data() so that we can use this information as - //constraints to find the column widths - q_rowData.calculateGeometries(0, rowCount(), height, sizehint_yy.data(), sizehint_heights.data(), - 0, sizehint_totalBoxes[Ver]); - ensureColumnAndRowData(&q_columnData, &sizehint_totalBoxes[Hor], styleInfo, sizehint_yy.data(), sizehint_heights.data(), Qt::Vertical); } switch (which) { @@ -1622,7 +1638,8 @@ void QGridLayoutEngine::ensureColumnAndRowData(QGridLayoutRowData *rowData, QGri { rowData->reset(rowCount(orientation)); fillRowData(rowData, styleInfo, colPositions, colSizes, orientation); - rowData->distributeMultiCells(); + const QGridLayoutRowInfo &rowInfo = q_infos[orientation == Qt::Vertical]; + rowData->distributeMultiCells(rowInfo); *totalBox = rowData->totalBox(0, rowCount(orientation)); //We have items whose width depends on their height } @@ -1685,28 +1702,28 @@ void QGridLayoutEngine::ensureGeometries(const QLayoutStyleInfo &styleInfo, q_heights.resize(rowCount()); q_descents.resize(rowCount()); - if(constraintOrientation() != Qt::Horizontal) { + if (constraintOrientation() != Qt::Horizontal) { //We might have items whose width depends on their height ensureColumnAndRowData(&q_columnData, &q_totalBoxes[Hor], styleInfo, NULL, NULL, Qt::Horizontal); //Calculate column widths and positions, and put results in q_xx.data() and q_widths.data() so that we can use this information as //constraints to find the row heights q_columnData.calculateGeometries(0, columnCount(), size.width(), q_xx.data(), q_widths.data(), - 0, q_totalBoxes[Hor]); + 0, q_totalBoxes[Hor], q_infos[Hor] ); ensureColumnAndRowData(&q_rowData, &q_totalBoxes[Ver], styleInfo, q_xx.data(), q_widths.data(), Qt::Vertical); //Calculate row heights and positions, and put results in q_yy.data() and q_heights.data() q_rowData.calculateGeometries(0, rowCount(), size.height(), q_yy.data(), q_heights.data(), - q_descents.data(), q_totalBoxes[Ver]); + q_descents.data(), q_totalBoxes[Ver], q_infos[Ver]); } else { //We have items whose height depends on their width ensureColumnAndRowData(&q_rowData, &q_totalBoxes[Ver], styleInfo, NULL, NULL, Qt::Vertical); //Calculate row heights and positions, and put results in q_yy.data() and q_heights.data() so that we can use this information as //constraints to find the column widths q_rowData.calculateGeometries(0, rowCount(), size.height(), q_yy.data(), q_heights.data(), - q_descents.data(), q_totalBoxes[Ver]); + q_descents.data(), q_totalBoxes[Ver], q_infos[Ver]); ensureColumnAndRowData(&q_columnData, &q_totalBoxes[Hor], styleInfo, q_yy.data(), q_heights.data(), Qt::Horizontal); //Calculate row heights and positions, and put results in q_yy.data() and q_heights.data() q_columnData.calculateGeometries(0, columnCount(), size.width(), q_xx.data(), q_widths.data(), - 0, q_totalBoxes[Hor]); + 0, q_totalBoxes[Hor], q_infos[Hor]); } } diff --git a/src/gui/graphicsview/qgridlayoutengine_p.h b/src/gui/graphicsview/qgridlayoutengine_p.h index 02c74b0..44efbba 100644 --- a/src/gui/graphicsview/qgridlayoutengine_p.h +++ b/src/gui/graphicsview/qgridlayoutengine_p.h @@ -224,13 +224,16 @@ public: typedef QMap<QPair<int, int>, QGridLayoutMultiCellData> MultiCellMap; +class QGridLayoutRowInfo; + class QGridLayoutRowData { public: void reset(int count); - void distributeMultiCells(); + void distributeMultiCells(const QGridLayoutRowInfo &rowInfo); void calculateGeometries(int start, int end, qreal targetSize, qreal *positions, qreal *sizes, - qreal *descents, const QGridLayoutBox &totalBox); + qreal *descents, const QGridLayoutBox &totalBox, + const QGridLayoutRowInfo &rowInfo); QGridLayoutBox totalBox(int start, int end) const; void stealBox(int start, int end, int which, qreal *positions, qreal *sizes); diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 5fe9050..2f09529 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -1438,10 +1438,11 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, const QRect iconRect = subElementRect(SE_ItemViewItemDecoration, &voptAdj, widget); QRect textRect = subElementRect(SE_ItemViewItemText, &voptAdj, widget); const QAbstractItemView *itemView = qobject_cast<const QAbstractItemView *>(widget); - const bool singleSelection = - (itemView->selectionMode() == QAbstractItemView::SingleSelection || - itemView->selectionMode() == QAbstractItemView::NoSelection); - const bool selectItems = (itemView->selectionBehavior() == QAbstractItemView::SelectItems); + + const bool singleSelection = itemView && + ((itemView->selectionMode() == QAbstractItemView::SingleSelection || + itemView->selectionMode() == QAbstractItemView::NoSelection)); + const bool selectItems = itemView && (itemView->selectionBehavior() == QAbstractItemView::SelectItems); // draw themed background for itemview unless background brush has been defined. if (vopt->backgroundBrush == Qt::NoBrush) { @@ -2536,6 +2537,56 @@ QSize QS60Style::sizeFromContents(ContentsType ct, const QStyleOption *opt, if (const QStyleOptionToolButton *toolBtn = qstyleoption_cast<const QStyleOptionToolButton *>(opt)) if (toolBtn->subControls & SC_ToolButtonMenu) sz += QSize(pixelMetric(PM_MenuButtonIndicator), 0); + + //Make toolbuttons in toolbar stretch the whole screen area + if (widget && qobject_cast<const QToolBar *>(widget->parentWidget())) { + const QToolBar *tb = qobject_cast<const QToolBar *>(widget->parentWidget()); + const bool parentCanGrowHorizontally = !(tb->sizePolicy().horizontalPolicy() == QSizePolicy::Fixed || + tb->sizePolicy().horizontalPolicy() == QSizePolicy::Maximum) && tb->orientation() == Qt::Horizontal; + + if (parentCanGrowHorizontally) { + int visibleButtons = 0; + //Make the auto-stretch to happen only for horizontal orientation + if (tb && tb->orientation() == Qt::Horizontal) { + QList<QAction*> actionList = tb->actions(); + for (int i = 0; i < actionList.count(); i++) { + if (actionList.at(i)->isVisible()) + visibleButtons++; + } + } + + if (widget->parentWidget() && visibleButtons > 0) { + QWidget *w = const_cast<QWidget *>(widget); + int toolBarMaxWidth = 0; + int totalMargin = 0; + while (w) { + //honor fixed width parents + if (w->maximumWidth() == w->minimumWidth()) + toolBarMaxWidth = qMax(toolBarMaxWidth, w->maximumWidth()); + if (w->layout() && w->windowType() == Qt::Widget) { + totalMargin += w->layout()->contentsMargins().left() + + w->layout()->contentsMargins().right(); + } + w = w->parentWidget(); + } + totalMargin += 2 * pixelMetric(QStyle::PM_ToolBarFrameWidth); + + if (toolBarMaxWidth == 0) + toolBarMaxWidth = + QApplication::desktop()->availableGeometry(widget->parentWidget()).width(); + //Reduce the margins, toolbar frame, item spacing and internal margin from available area + toolBarMaxWidth -= totalMargin; + + //ensure that buttons are side-by-side and not on top of each other + const int toolButtonWidth = (toolBarMaxWidth / visibleButtons) + - pixelMetric(QStyle::PM_ToolBarItemSpacing) + - pixelMetric(QStyle::PM_ToolBarItemMargin) + //toolbar frame needs to be reduced again, since QToolBarLayout adds it for each toolbar action + - 2 * pixelMetric(QStyle::PM_ToolBarFrameWidth) - 1; + sz.setWidth(qMax(toolButtonWidth, sz.width())); + } + } + } break; case CT_PushButton: sz = QCommonStyle::sizeFromContents( ct, opt, csz, widget); diff --git a/src/gui/text/qfontengine_x11.cpp b/src/gui/text/qfontengine_x11.cpp index b7e4be2..c06be3b 100644 --- a/src/gui/text/qfontengine_x11.cpp +++ b/src/gui/text/qfontengine_x11.cpp @@ -429,7 +429,7 @@ void QFontEngineXLFD::recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFl { int i = glyphs->numGlyphs; XCharStruct *xcs; - // inlined for better perfomance + // inlined for better performance if (!_fs->per_char) { xcs = &_fs->min_bounds; while (i != 0) { diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp index aea203f..430575b 100644 --- a/src/openvg/qpaintengine_vg.cpp +++ b/src/openvg/qpaintengine_vg.cpp @@ -3543,8 +3543,8 @@ void QVGPaintEngine::drawStaticTextItem(QStaticTextItem *textItem) // Set the glyph drawing origin. VGfloat origin[2]; - origin[0] = positions[0].x.toReal(); - origin[1] = positions[0].y.toReal(); + origin[0] = positions[0].x.round().toReal(); + origin[1] = positions[0].y.round().toReal(); vgSetfv(VG_GLYPH_ORIGIN, 2, origin); // Fast anti-aliasing for paths, better for images. diff --git a/src/plugins/s60/feedback/feedback.pro b/src/plugins/s60/feedback/feedback.pro index 1069220..5e577ec 100644 --- a/src/plugins/s60/feedback/feedback.pro +++ b/src/plugins/s60/feedback/feedback.pro @@ -6,7 +6,7 @@ QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/s60/feedback INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE -contains(S60_VERSION, 5.0)|contains(S60_VERSION, symbian3) { +!contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { HEADERS += qtactileFeedback.h SOURCES += qtactileFeedback_s60.cpp diff --git a/src/plugins/s60/s60.pro b/src/plugins/s60/s60.pro index ffcd170..1ddf326 100644 --- a/src/plugins/s60/s60.pro +++ b/src/plugins/s60/s60.pro @@ -6,7 +6,7 @@ symbian { SUBDIRS += 3_1 3_2 } - contains(S60_VERSION, 5.0)|contains(S60_VERSION, symbian3) { + !contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { SUBDIRS += feedback } diff --git a/src/qbase.pri b/src/qbase.pri index 4217618..8460b9c 100644 --- a/src/qbase.pri +++ b/src/qbase.pri @@ -36,7 +36,7 @@ CONFIG += qt warn_on depend_includepath CONFIG += qmake_cache target_qt CONFIG -= fix_output_dirs win32|mac:!macx-xcode:CONFIG += debug_and_release -linux*-g++*:QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF +linux*:QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols unix:contains(QT_CONFIG, reduce_relocations):CONFIG += bsymbolic_functions diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index dc8a865..6a33fc3 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -12852,7 +12852,7 @@ EXPORTS ?drawStaticText@QPainter@@QAEXABVQPointF@@ABVQStaticText@@@Z @ 12851 NONAME ; void QPainter::drawStaticText(class QPointF const &, class QStaticText const &) ?updateAll@QGraphicsViewPrivate@@QAEXXZ @ 12852 NONAME ; void QGraphicsViewPrivate::updateAll(void) ?updateMicroFocus@QGraphicsItem@@IAEXXZ @ 12853 NONAME ; void QGraphicsItem::updateMicroFocus(void) - ?populate@QTextureGlyphCache@@QAEXPAVQFontEngine@@HPBIPBUQFixedPoint@@@Z @ 12854 NONAME ; void QTextureGlyphCache::populate(class QFontEngine *, int, unsigned int const *, struct QFixedPoint const *) + ?populate@QTextureGlyphCache@@QAEXPAVQFontEngine@@HPBIPBUQFixedPoint@@@Z @ 12854 NONAME ABSENT ; void QTextureGlyphCache::populate(class QFontEngine *, int, unsigned int const *, struct QFixedPoint const *) ?hasPartialUpdateSupport@QWindowSurface@@QBE_NXZ @ 12855 NONAME ; bool QWindowSurface::hasPartialUpdateSupport(void) const ?scroll@QRuntimePixmapData@@UAE_NHHABVQRect@@@Z @ 12856 NONAME ; bool QRuntimePixmapData::scroll(int, int, class QRect const &) ?qt_draw_glyphs@@YAXPAVQPainter@@PBIPBVQPointF@@H@Z @ 12857 NONAME ; void qt_draw_glyphs(class QPainter *, unsigned int const *, class QPointF const *, int) @@ -12904,4 +12904,5 @@ EXPORTS ?fontEngine@QStaticTextItem@@QBEPAVQFontEngine@@XZ @ 12903 NONAME ; class QFontEngine * QStaticTextItem::fontEngine(void) const ?reactivateDeferredActiveObjects@QEventDispatcherS60@@UAEXXZ @ 12904 NONAME ; void QEventDispatcherS60::reactivateDeferredActiveObjects(void) ?userData@QStaticTextItem@@QBEPAVQStaticTextUserData@@XZ @ 12905 NONAME ; class QStaticTextUserData * QStaticTextItem::userData(void) const + ?populate@QTextureGlyphCache@@QAE_NPAVQFontEngine@@HPBIPBUQFixedPoint@@@Z @ 12906 NONAME ; bool QTextureGlyphCache::populate(class QFontEngine *, int, unsigned int const *, struct QFixedPoint const *) diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index 65b8781..7827fb6 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -87,7 +87,7 @@ symbian: { DEPLOYMENT += bearer_plugin } - contains(S60_VERSION, 5.0)|contains(S60_VERSION, symbian3) { + !contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { feedback_plugin.sources = $$QT_BUILD_TREE/plugins/s60/feedback/qtactilefeedback$${QT_LIBINFIX}.dll feedback_plugin.path = c:$$QT_PLUGINS_BASE_DIR/feedback DEPLOYMENT += feedback_plugin diff --git a/tests/auto/declarative/qdeclarativelistview/data/qtbug14821.qml b/tests/auto/declarative/qdeclarativelistview/data/qtbug14821.qml new file mode 100644 index 0000000..e0303ec --- /dev/null +++ b/tests/auto/declarative/qdeclarativelistview/data/qtbug14821.qml @@ -0,0 +1,31 @@ +import QtQuick 1.0 + +ListView { + id: view + width: 300; height: 200 + focus: true + keyNavigationWraps: true + + model: 100 + + preferredHighlightBegin: 90 + preferredHighlightEnd: 110 + + highlightRangeMode: ListView.StrictlyEnforceRange + highlight: Component { + Rectangle { + border.color: "blue" + border.width: 3 + color: "transparent" + width: 300; height: 15 + } + } + + delegate: Component { + Item { + height: 15 + (view.currentIndex == index ? 20 : 0) + width: 200 + Text { text: 'Index: ' + index; anchors.verticalCenter: parent.verticalCenter } + } + } +} diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index a4b4f21..37d836d 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -101,6 +101,7 @@ private slots: void footer(); void resizeView(); void sizeLessThan1(); + void QTBUG_14821(); private: template <class T> void items(); @@ -1768,6 +1769,26 @@ void tst_QDeclarativeListView::sizeLessThan1() delete canvas; } +void tst_QDeclarativeListView::QTBUG_14821() +{ + QDeclarativeView *canvas = createView(); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/qtbug14821.qml")); + qApp->processEvents(); + + QDeclarativeListView *listview = qobject_cast<QDeclarativeListView*>(canvas->rootObject()); + QVERIFY(listview != 0); + + QDeclarativeItem *contentItem = listview->contentItem(); + QVERIFY(contentItem != 0); + + listview->decrementCurrentIndex(); + QCOMPARE(listview->currentIndex(), 99); + + listview->incrementCurrentIndex(); + QCOMPARE(listview->currentIndex(), 0); +} + void tst_QDeclarativeListView::qListModelInterface_items() { items<TestModel>(); diff --git a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp index 57a58e9..9d7cc05 100644 --- a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp +++ b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp @@ -216,7 +216,14 @@ void tst_QDeclarativeMouseArea::dragging() QCOMPARE(blackRect->x(), 50.0); QCOMPARE(blackRect->y(), 50.0); + // First move event triggers drag, second is acted upon. + // This is due to possibility of higher stacked area taking precedence. QGraphicsSceneMouseEvent moveEvent(QEvent::GraphicsSceneMouseMove); + moveEvent.setScenePos(QPointF(106, 106)); + moveEvent.setButton(Qt::LeftButton); + moveEvent.setButtons(Qt::LeftButton); + QApplication::sendEvent(scene, &moveEvent); + moveEvent.setScenePos(QPointF(110, 110)); moveEvent.setButton(Qt::LeftButton); moveEvent.setButtons(Qt::LeftButton); diff --git a/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp b/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp index 1c1c04b..21c7197 100644 --- a/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp +++ b/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp @@ -45,6 +45,7 @@ #include <QtDeclarative/qdeclarativeitem.h> #include <QtDeclarative/qdeclarativecontext.h> #include <QtGui/qmenubar.h> +#include <QSignalSpy> #include "../../../shared/util.h" #include "qmlruntime.h" #include "deviceorientation.h" @@ -194,7 +195,9 @@ void tst_QDeclarativeViewer::loading() QCOMPARE(viewer->size(), QSize(250, 350)); QCOMPARE(viewer->size(), viewer->sizeHint()); + QSignalSpy statusSpy(viewer->view(), SIGNAL(statusChanged(QDeclarativeView::Status))); viewer->reload(); + QTRY_VERIFY(statusSpy.count() == 1); rootItem = qobject_cast<QDeclarativeItem*>(viewer->view()->rootObject()); QVERIFY(rootItem); diff --git a/tests/auto/declarative/qdeclarativeworkerscript/tst_qdeclarativeworkerscript.cpp b/tests/auto/declarative/qdeclarativeworkerscript/tst_qdeclarativeworkerscript.cpp index 3140265..5a6cf3c 100644 --- a/tests/auto/declarative/qdeclarativeworkerscript/tst_qdeclarativeworkerscript.cpp +++ b/tests/auto/declarative/qdeclarativeworkerscript/tst_qdeclarativeworkerscript.cpp @@ -137,6 +137,11 @@ void tst_QDeclarativeWorkerScript::messaging_data() QTest::newRow("real") << qVariantFromValue(10334.375); QTest::newRow("string") << qVariantFromValue(QString("More cheeeese, Gromit!")); QTest::newRow("variant list") << qVariantFromValue((QVariantList() << "a" << "b" << "c")); + QTest::newRow("date time") << qVariantFromValue(QDateTime::currentDateTime()); +#ifndef QT_NO_REGEXP + // QtScript's QScriptValue -> QRegExp uses RegExp2 pattern syntax + QTest::newRow("regexp") << qVariantFromValue(QRegExp("^\\d\\d?$", Qt::CaseInsensitive, QRegExp::RegExp2)); +#endif } void tst_QDeclarativeWorkerScript::messaging_sendQObjectList() diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.0.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.0.png Binary files differnew file mode 100644 index 0000000..793fb0f --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.0.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.1.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.1.png Binary files differnew file mode 100644 index 0000000..5935b45 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.1.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.2.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.2.png Binary files differnew file mode 100644 index 0000000..a205266 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.2.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.3.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.3.png Binary files differnew file mode 100644 index 0000000..3d81ff2 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.3.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.4.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.4.png Binary files differnew file mode 100644 index 0000000..ee2076e --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.4.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.5.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.5.png Binary files differnew file mode 100644 index 0000000..9017124 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.5.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.6.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.6.png Binary files differnew file mode 100644 index 0000000..216dd7e --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.6.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.7.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.7.png Binary files differnew file mode 100644 index 0000000..27e8480 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.7.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.8.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.8.png Binary files differnew file mode 100644 index 0000000..6b911c5 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.8.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.9.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.9.png Binary files differnew file mode 100644 index 0000000..01858a5 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.9.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.qml b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.qml new file mode 100644 index 0000000..cec1558 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.qml @@ -0,0 +1,5039 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + image: "nested.0.png" + } + Frame { + msec: 32 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 48 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 64 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 80 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 96 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 112 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 128 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 144 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 160 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 176 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 192 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 208 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 224 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 240 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 256 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 272 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 288 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 304 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 320 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 336 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 352 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 368 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 384 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 400 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 416 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 432 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 448 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 464 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 480 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 496 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 512 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 528 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 544 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 560 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 576 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 592 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 608 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 624 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 640 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 656 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 672 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 688 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 704 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 720 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 736 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 752 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 768 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 784 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 800 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 816 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 832 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 848 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Frame { + msec: 864 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 25; y: 62 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 880 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 26; y: 62 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 896 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 27; y: 62 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 912 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 28; y: 62 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 29; y: 62 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 928 + hash: "2400cadaaa467cbfb0c7d2ace8137179" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 30; y: 62 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 33; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 944 + hash: "f5aa6257fd80c1e383bc2db84e41c354" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 35; y: 63 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 40; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 960 + hash: "e96076794d3efc62a8fe2d2e543e97c7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 42; y: 63 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 976 + image: "nested.1.png" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: 63 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 58; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 992 + hash: "ab955f6c6b210b66b27e244dc2150860" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 66; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1008 + hash: "b655247e73b0b8357dc9d355ba6f49a0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 79; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 83; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1024 + hash: "08b67b7e28990cac8c9bd354b7d87698" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 91; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 95; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1040 + hash: "69cecfb41899e13c0bc5acb6f9bc666d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 104; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 107; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1056 + hash: "8d1f0cd85fd3f2654f7c30a6d9ec2b99" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 115; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 122; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1072 + hash: "f8ddda87cfcf5dc9d8c6e940fbd295f3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 126; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 133; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1088 + hash: "ab9d942c47a2cca5531f7b67df034161" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 136; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 143; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1104 + hash: "7ca5a03fdfac44c389315c3928631a2a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 146; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 151; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1120 + hash: "ade955ed9d85fbbe72cf18bbc541c8bf" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 153; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1136 + hash: "6ad4afa3e3fcb578946fccbf4896761c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 162; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 163; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1152 + hash: "3ebe78e37c1c66d0b8fc86c8191e39de" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 165; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1168 + hash: "6450917cc89a553cf509265eaf318efb" + } + Frame { + msec: 1184 + hash: "6450917cc89a553cf509265eaf318efb" + } + Frame { + msec: 1200 + hash: "6450917cc89a553cf509265eaf318efb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1216 + hash: "6450917cc89a553cf509265eaf318efb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 164; y: 63 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 161; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1232 + hash: "adfe54d5d28f7caf9ace117fd3573444" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 159; y: 63 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 156; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1248 + hash: "f4963636cc4fbd8bfe6baf10540ed7e7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 154; y: 63 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 149; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1264 + hash: "1c2d2edb9214cc3857aa221330ee28ba" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 143; y: 63 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 139; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1280 + hash: "750226c90e6c6cd0b3bdd3c3dc8da18f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 131; y: 63 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 126; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1296 + hash: "b6b5d177ab531460dc125afa82489a1d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 115; y: 63 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 111; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1312 + hash: "62d411a7b6c404393e4bfafab9c638a3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 100; y: 63 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 91; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1328 + hash: "e355997b3decd4deb686fece59c33c7c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 86; y: 63 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 76; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1344 + hash: "2ab73c8aac6a0e321686e97c9bb28f28" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 71; y: 63 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 61; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1360 + hash: "55a887f9f45f71beb6b723191eb60a2f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 56; y: 63 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1376 + hash: "b2d49e34362994739d14fb8231ff82d6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: 63 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1392 + hash: "3964796876870035794b41501991b527" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 41; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 40; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1408 + hash: "e96076794d3efc62a8fe2d2e543e97c7" + } + Frame { + msec: 1424 + hash: "e96076794d3efc62a8fe2d2e543e97c7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 41; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1440 + hash: "7e524b3c43a987503ef102bdb9f11701" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 42; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1456 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1472 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1488 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1504 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1520 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1536 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1552 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 42; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1568 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1584 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1600 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1616 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1632 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1648 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1664 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1680 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1696 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1712 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1728 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1744 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1760 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1776 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1792 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1808 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1824 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1840 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1856 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1872 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1888 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1904 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1920 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Frame { + msec: 1936 + image: "nested.2.png" + } + Frame { + msec: 1952 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 38; y: 56 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1968 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 39; y: 57 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1984 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 39; y: 59 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 39; y: 60 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2000 + hash: "2a7c13e97c21e298541bb5ab8169ff13" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 40; y: 63 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 40; y: 65 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2016 + hash: "9178754b825d60b2174ed9431ea80586" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 41; y: 68 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 41; y: 70 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: 79 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2032 + hash: "89eff8fa9f8710d7cbc50b8d4b751148" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: 84 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 86 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2048 + hash: "cdae8b46ecfc2b0c90264c120156cc46" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: 91 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: 93 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2064 + hash: "cf35919630eab647a28eb91d8a441704" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 99 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 102 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2080 + hash: "283256d50da8c855c50d5f8813d37afd" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 107 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 109 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2096 + hash: "2560cd67d507bc24c1000187f645531c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 113 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2112 + hash: "6f6f7c299c4516c5231f5bfcd39b6db3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 119 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 122 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2128 + hash: "e7989524238996cf59f420f4edf8f982" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 124 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 126 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2144 + hash: "34d8d456848807e854bcb25ffbde37d4" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 127 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 130 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2160 + hash: "433bd3983804b07484d38af2723f519e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 132 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 134 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2176 + hash: "510e534a8a7b88041f7544e7e4992b8f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 137 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 139 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2192 + hash: "25f43c457a5bf2b70a66ce91685ad4dc" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: 141 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: 142 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2208 + hash: "4119ab90627359420e25220618b76a69" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: 145 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: 146 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2224 + hash: "8a3cc888e96cf3e26e369723b442baf1" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 147 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 150 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2240 + hash: "980552e8ff9d87ccb40127b06b0f846f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 151 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 153 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2256 + hash: "9ee23fc7cbca4467f984073d2af7cdf6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 154 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 155 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2272 + hash: "032d65792ac867c9b9acef05bd993c54" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 156 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2288 + hash: "be2f8d5a64034e75e23527c486e33029" + } + Frame { + msec: 2304 + hash: "be2f8d5a64034e75e23527c486e33029" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 155 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2320 + hash: "3f65505e4d1f8534c9123b3dea15d43e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 154 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 152 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2336 + hash: "e8b1799cf1926cb3b6cbf3adee80cffe" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 149 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 147 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2352 + hash: "31155b14cc0d3d47bbef4e199fdfcb46" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: 140 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 132 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2368 + hash: "b89745a9a60a7ebeb1de0a7f96ad2ac3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 128 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 57; y: 118 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2384 + hash: "7e99fa1eba369d45f10778fe02356f09" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 59; y: 114 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 64; y: 103 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2400 + hash: "cd123f6b332f38f43abbf01469a41301" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 67; y: 98 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 71; y: 90 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2416 + hash: "353c0602dd2b670e19988117172855fc" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 76; y: 81 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 78; y: 78 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2432 + hash: "20df9d19fd2113fa8f8023d5b4328dc5" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 81; y: 70 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 82; y: 67 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2448 + hash: "10b34a758d5b3790dd36c9d95c47b157" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 84; y: 62 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 85; y: 60 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2464 + hash: "98a483e1eaa9145fd277fd85a9b0cf03" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 87; y: 57 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 88; y: 55 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2480 + hash: "e92edd52ff1ee78456fa1947a46e6570" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 89; y: 53 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 91; y: 52 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2496 + hash: "877384496d967f5f0ab1c817a2b316d6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 92; y: 51 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 93; y: 51 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2512 + hash: "15673570ffe9a391f9214601ac9dc86c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 94; y: 50 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 95; y: 50 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2528 + hash: "4b7f0094b19a4495bf913d2994889497" + } + Frame { + msec: 2544 + hash: "4b7f0094b19a4495bf913d2994889497" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 95; y: 49 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2560 + hash: "4b7f0094b19a4495bf913d2994889497" + } + Frame { + msec: 2576 + hash: "4b7f0094b19a4495bf913d2994889497" + } + Frame { + msec: 2592 + hash: "4b7f0094b19a4495bf913d2994889497" + } + Frame { + msec: 2608 + hash: "4b7f0094b19a4495bf913d2994889497" + } + Frame { + msec: 2624 + hash: "4b7f0094b19a4495bf913d2994889497" + } + Frame { + msec: 2640 + hash: "4b7f0094b19a4495bf913d2994889497" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 95; y: 49 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2656 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2672 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2688 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2704 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2720 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2736 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2752 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2768 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2784 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2800 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2816 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2832 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2848 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2864 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2880 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2896 + image: "nested.3.png" + } + Frame { + msec: 2912 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2928 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2944 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2960 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2976 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 2992 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 3008 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 3024 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 3040 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 3056 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 3072 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 3088 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 3104 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 3120 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 3136 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 3152 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 3168 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 3184 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 3200 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 3216 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 3232 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 156; y: 74 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3248 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Frame { + msec: 3264 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 156; y: 73 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 157; y: 73 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3280 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 73 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 160; y: 73 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3296 + hash: "2994e98b8ea9a6883a7324e7e848345c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 161; y: 73 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 163; y: 73 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3312 + hash: "df6cf21e99177a436e356f818996070c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 73 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 171; y: 74 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3328 + hash: "86f5e3fee147f47edd4a6d042aff0301" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 178; y: 75 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 181; y: 75 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3344 + hash: "589c1418a9179c868d904b1a5169a11b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 189; y: 75 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 193; y: 75 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3360 + hash: "3141ad77d193e145b749759070e1e6ef" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 200; y: 75 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 75 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3376 + hash: "5e34d4deeb6d80b336cacea39797e0ca" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 211; y: 75 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 217; y: 75 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3392 + hash: "b8795d844982bcf60a6713f91717648f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 220; y: 75 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 224; y: 75 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3408 + hash: "857c63b24057ee0186c5136eddb71cb1" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 226; y: 75 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 227; y: 76 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3424 + hash: "49222ed0d1ebc8759d0a1dc65c3beec6" + } + Frame { + msec: 3440 + hash: "49222ed0d1ebc8759d0a1dc65c3beec6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 227; y: 77 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 226; y: 77 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3456 + hash: "751847708a468f4f3e64e7cb5ebd1351" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 225; y: 78 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 224; y: 78 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3472 + hash: "4016f80a5219fcba6480645f71998d71" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 221; y: 80 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 220; y: 80 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3488 + hash: "beef05cd2a3d20bc66978fa4f0ac1d12" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 216; y: 82 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 214; y: 84 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3504 + hash: "e50a2661e93d34b55c8d2d39abc77e5a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 86 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 86 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3520 + hash: "7beccbc2f091350bb5d9de1e2443021d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 200; y: 88 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 89 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3536 + hash: "1d39570bf07392f56b6dd24b0bf9e7bc" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 188; y: 90 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 180; y: 91 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3552 + hash: "62565b3e5aad3979b408207bbf36e615" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 176; y: 92 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 167; y: 92 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3568 + hash: "d9c6004921847fef16bb8c2f5d6b3b7d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 162; y: 92 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 152; y: 92 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3584 + hash: "53da27301ad97ae52c65928615ec0cd7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 142; y: 92 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 137; y: 90 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3600 + hash: "9772a776e84515984b4eec70dbd1c5a7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 125; y: 88 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 119; y: 88 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3616 + hash: "9caa6583a716443c13e8fef3f2923d6e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 109; y: 86 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 104; y: 85 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3632 + hash: "f162a18b2d3f0d5f6f01fc373c016f68" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 98; y: 84 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 96; y: 84 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3648 + hash: "58976e8e31beddf881c7cfa3ede54c09" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 94; y: 84 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 92; y: 83 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3664 + hash: "6625f7adb097bc170024083c42d74b4b" + } + Frame { + msec: 3680 + hash: "6625f7adb097bc170024083c42d74b4b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 92; y: 82 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3696 + hash: "1d63f09ca27e9d70c3c0ea923a6cfba4" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 93; y: 82 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3712 + hash: "1d63f09ca27e9d70c3c0ea923a6cfba4" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 94; y: 81 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 96; y: 81 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3728 + hash: "a23c75fcaa0a28adb944bf192af65bff" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 98; y: 81 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 100; y: 81 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3744 + hash: "2b90fe8937dcc39d1d6add305cf36043" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 107; y: 81 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 111; y: 81 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3760 + hash: "7da82cfaf0f826ca9a41128278b6b09c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 118; y: 81 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 122; y: 81 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3776 + hash: "a3f69d13d38b336fda33a86899564996" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 129; y: 80 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 135; y: 79 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3792 + hash: "dc562319e1d332ba34ac94bfc0c39c5e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 138; y: 79 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 140; y: 78 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3808 + hash: "756482bee292668f56d813847b0ccd53" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 141; y: 77 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 142; y: 76 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3824 + hash: "06d250c4d18a70f8f7b1c10e22a1bc4c" + } + Frame { + msec: 3840 + hash: "06d250c4d18a70f8f7b1c10e22a1bc4c" + } + Frame { + msec: 3856 + image: "nested.4.png" + } + Frame { + msec: 3872 + hash: "06d250c4d18a70f8f7b1c10e22a1bc4c" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 142; y: 76 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3888 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 3904 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 3920 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 3936 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 3952 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 3968 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 3984 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4000 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4016 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4032 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4048 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4064 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4080 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4096 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4112 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4128 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4144 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4160 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4176 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4192 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4208 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4224 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4240 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4256 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4272 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4288 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4304 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4320 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4336 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4352 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4368 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4384 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4400 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4416 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4432 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4448 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4464 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4480 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4496 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4512 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4528 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4544 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 16; y: 46 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4560 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 4576 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 16; y: 47 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 16; y: 48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4592 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 16; y: 49 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 17; y: 50 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4608 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 17; y: 55 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 18; y: 56 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4624 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 20; y: 61 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 20; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4640 + hash: "ff1f86b47e0d1db5db7d939df8349931" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 22; y: 70 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 23; y: 73 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4656 + hash: "f13393a4556e9e73c33f2bb74d8f7794" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 26; y: 80 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 28; y: 84 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4672 + hash: "8c9aa01516437184eb17d89348cca004" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 33; y: 91 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 40; y: 99 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4688 + hash: "8b6848cb722ff5ec02d957da1ee687e5" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 44; y: 102 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 109 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4704 + hash: "552fde584d128f511788670031d79dd2" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 58; y: 112 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 64; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4720 + hash: "55dc3a4242b46e602f823c0305e67ad2" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 118 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 71; y: 120 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4736 + hash: "603b9b2ed6ff4273c3ab1cbe32afb19e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 73; y: 120 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 73; y: 120 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4752 + hash: "157eda24ea8452a208aa7a6a22639c73" + } + Frame { + msec: 4768 + hash: "157eda24ea8452a208aa7a6a22639c73" + } + Frame { + msec: 4784 + hash: "c5005b83816c18b67448dfbccd0ab0b2" + } + Frame { + msec: 4800 + hash: "878512df863e5d60437b85fbd2a32eb1" + } + Frame { + msec: 4816 + image: "nested.5.png" + } + Frame { + msec: 4832 + hash: "02ab69b67b746ec0021295992a03ada1" + } + Frame { + msec: 4848 + hash: "c621382766d7bacab87055a73623a8ce" + } + Frame { + msec: 4864 + hash: "a8d1be78741d9afd88363bd19f1cbc6b" + } + Frame { + msec: 4880 + hash: "5a70275ff656766d73638d4dd4db4492" + } + Frame { + msec: 4896 + hash: "892ea0a00553524b79889d437eac9b6f" + } + Frame { + msec: 4912 + hash: "d818258bffc065430902ffa8f5668f86" + } + Frame { + msec: 4928 + hash: "6b844523522ace7545705ffb8ffe1da3" + } + Frame { + msec: 4944 + hash: "3906097bc49bad199b52c99dbf87f98f" + } + Frame { + msec: 4960 + hash: "a2bd859b5ca7f4fac8d62b1c9ab76aad" + } + Frame { + msec: 4976 + hash: "f374673e3511b1df8b50ff7ef6002b3a" + } + Frame { + msec: 4992 + hash: "c2eecfadd19418f469b1ab53a3ecae70" + } + Frame { + msec: 5008 + hash: "2b481965ece0f2e1795ef56aa5d6a752" + } + Frame { + msec: 5024 + hash: "c294f28000348365a2c37265132efdb5" + } + Frame { + msec: 5040 + hash: "c294f28000348365a2c37265132efdb5" + } + Frame { + msec: 5056 + hash: "4e9c18eab469b2da0cb92526d3d54501" + } + Frame { + msec: 5072 + hash: "4e9c18eab469b2da0cb92526d3d54501" + } + Frame { + msec: 5088 + hash: "4e9c18eab469b2da0cb92526d3d54501" + } + Frame { + msec: 5104 + hash: "4e9c18eab469b2da0cb92526d3d54501" + } + Frame { + msec: 5120 + hash: "3836449b99d88e2dea9a0eb9417faca5" + } + Frame { + msec: 5136 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5152 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5168 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5184 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5200 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5216 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5232 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5248 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5264 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5280 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5296 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5312 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5328 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5344 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5360 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5376 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5392 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5408 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5424 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5440 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5456 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5472 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5488 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5504 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5520 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5536 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5552 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5568 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5584 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5600 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5616 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Frame { + msec: 5632 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 20; y: 238 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 21; y: 238 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5648 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 22; y: 239 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 23; y: 239 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5664 + hash: "42dc501eb5a34843ef0a8977ff029054" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 27; y: 240 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 29; y: 240 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5680 + hash: "b56d132ac881e27d308009fb9a9d2d50" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 33; y: 241 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 36; y: 241 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5696 + hash: "6c65fca03ea127d554f15c80da76f21f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 42; y: 242 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: 243 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5712 + hash: "e5d8939135d0e964609a09a437af58bc" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 243 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 61; y: 243 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5728 + hash: "ab60a45ac475ef8d1177d831a6572d1f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 66; y: 243 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 75; y: 243 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5744 + hash: "78b2e0c7dd8b8bcbd573dac79ff815e4" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 79; y: 243 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 89; y: 243 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5760 + hash: "ef9e89650d8e3d572285e2a2e2b09166" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 95; y: 243 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 106; y: 243 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5776 + image: "nested.6.png" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 118; y: 243 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 126; y: 243 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5792 + hash: "b83136fa3769e30ea47097b489e8f1dc" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 137; y: 241 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 143; y: 240 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5808 + hash: "fb892905b790a061ce5985c927db3cf5" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 154; y: 238 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 159; y: 237 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5824 + hash: "bc4358e21d2d31942e776adfd32ef1c6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 170; y: 235 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 184; y: 234 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5840 + hash: "b42380a7fcf5e2fbfe4dddbe86ad7287" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 191; y: 232 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 201; y: 231 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5856 + hash: "4b3c12beb43a77ebaf458804b03c7b52" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 231 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 208; y: 230 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5872 + hash: "a18be4d4ab28c0fd0c16696c4ecc03ef" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 230 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 229 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5888 + hash: "c5f100bc4b14e958c7d9bbff84e0a934" + } + Frame { + msec: 5904 + hash: "c5f100bc4b14e958c7d9bbff84e0a934" + } + Frame { + msec: 5920 + hash: "c5f100bc4b14e958c7d9bbff84e0a934" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 208; y: 229 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5936 + hash: "a18be4d4ab28c0fd0c16696c4ecc03ef" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 207; y: 229 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 207; y: 230 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5952 + hash: "a8b23e7dad1bdbaa3452335be0f07658" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 230 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 231 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5968 + hash: "4c1feb559a11912b06ed521bebba43d0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 200; y: 232 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 194; y: 232 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5984 + hash: "ffb97bcedf72e02616272c1cad5c38d7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 190; y: 232 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 181; y: 231 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6000 + hash: "99498ed9b4d519a2f842d407abdef90a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 175; y: 230 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 163; y: 229 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6016 + hash: "1ca3f012adab899eba1dcb63d048345f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 228 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 145; y: 227 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6032 + hash: "8a81d49de887f314f67976a65f469169" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 132; y: 227 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 126; y: 227 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6048 + hash: "b83136fa3769e30ea47097b489e8f1dc" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 116; y: 227 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 112; y: 227 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6064 + hash: "12cdd297407257ae4bb13c87e24537fb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 103; y: 227 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 99; y: 227 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6080 + hash: "a51ac0a1e9432671c88f7649c38d265d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 90; y: 227 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 86; y: 227 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6096 + hash: "4ba4f854659161c765395cdee35594f2" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 77; y: 226 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 225 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6112 + hash: "9907add9e28b4a8976f3727f99a4b6d4" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 66; y: 224 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 60; y: 223 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6128 + hash: "c2cb865c4a766b9c08328b374e940f29" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 59; y: 223 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 56; y: 223 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6144 + hash: "c97981263572ded23b328da45cf88012" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 223 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 223 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6160 + hash: "f4bae51c866ba1158f44529208514d6f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 222 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: 222 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6176 + hash: "35b4f1f9bb343f2b22bd7cdad6f28249" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 223 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 223 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6192 + hash: "84eba4cb400e5622463f5a1fa79be72b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: 223 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 223 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6208 + hash: "d38e882728c7efc906befe69b416082a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: 223 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6224 + hash: "e5d8939135d0e964609a09a437af58bc" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 44; y: 223 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: 223 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6240 + hash: "6b6e06e8473d5703e217accd824b08d5" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 42; y: 223 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 40; y: 223 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6256 + hash: "8e38bc5b00e33e24f931b181dc77d3c1" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 39; y: 223 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 38; y: 223 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6272 + hash: "a173708b5380f42a2bdbf6ae69cdca20" + } + Frame { + msec: 6288 + hash: "a173708b5380f42a2bdbf6ae69cdca20" + } + Frame { + msec: 6304 + hash: "a173708b5380f42a2bdbf6ae69cdca20" + } + Frame { + msec: 6320 + hash: "a173708b5380f42a2bdbf6ae69cdca20" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 38; y: 223 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6336 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6352 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6368 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6384 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6400 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6416 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6432 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6448 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6464 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6480 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6496 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6512 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6528 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6544 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6560 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6576 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6592 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6608 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6624 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6640 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6656 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6672 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6688 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6704 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6720 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6736 + image: "nested.7.png" + } + Frame { + msec: 6752 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6768 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6784 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6800 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6816 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6832 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6848 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6864 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6880 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6896 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6912 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6928 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6944 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6960 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6976 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 6992 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 7008 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 7024 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 7040 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 7056 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 7072 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 46; y: 225 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7088 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 7104 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 226 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 227 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7120 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 228 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 231 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7136 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 233 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 238 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7152 + hash: "35dd0f784c356be0050936ff75b0cdf7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: 240 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 245 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7168 + hash: "9ac066a700eae45edf9b2f1ba12f0324" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 248 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 255 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7184 + hash: "22a2a8bf257918820b0ab55ecb14b479" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: 259 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: 266 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7200 + hash: "eb98237e06cde8ed2f18040ce9197d16" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 272 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 276 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7216 + hash: "f0c7afe1bd25b9b573cbc69154c25862" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 282 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 285 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7232 + hash: "d6a681b6de867db47f889e6f1ec03dcf" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 291 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 293 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7248 + hash: "0ee281281c7654567a1debae7a13abe0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 299 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 304 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7264 + hash: "9d5f1c8cb0953c14bdd49aa88d2b225f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 306 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 310 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7280 + hash: "ae1c2a3ed67c5c10fc9d19de4de7b7eb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 312 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 315 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7296 + hash: "8505f9d060fc17fef2e91eb2add206bb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 316 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 318 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7312 + hash: "c32a6d546a3e4f2ee5349a7dad4b30af" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 319 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 320 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7328 + hash: "222f6e8e8deab567f1e7d0aaf7035b60" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: 321 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: 322 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7344 + hash: "f7011629f44015187849daad6a53cebf" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: 323 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: 324 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7360 + hash: "56b00d9116a51c041483dd00db0aca90" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: 325 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: 326 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7376 + hash: "93232fbcafe8e279b37781f51dfb923a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 328 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 329 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7392 + hash: "9fcf62eaacfc3477a4550c31f03c4782" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 330 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 331 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7408 + hash: "dd669865fd36e42eec1d69860b29e7ce" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: 331 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7424 + hash: "9247af334483b219ca9bbe98d8fc362e" + } + Frame { + msec: 7440 + hash: "9247af334483b219ca9bbe98d8fc362e" + } + Frame { + msec: 7456 + hash: "9247af334483b219ca9bbe98d8fc362e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: 330 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7472 + hash: "9247af334483b219ca9bbe98d8fc362e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: 329 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: 328 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7488 + hash: "69ef9255a29d65f26e5441594ea1bad9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 325 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 323 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7504 + hash: "055f73dd085d2f65a055ba4d9a8a7539" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 318 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 316 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7520 + hash: "384da5b6a948a52d0519935a8e33f014" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: 309 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 303 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7536 + hash: "1caa0049be4033db45f0d2debb25268f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 299 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 55; y: 299 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7552 + hash: "76b8d00b3a2a68fec277050a442c18ca" + } + Frame { + msec: 7568 + hash: "0ee281281c7654567a1debae7a13abe0" + } + Frame { + msec: 7584 + hash: "df1dbb027a8542aa6120cce7b69724a7" + } + Frame { + msec: 7600 + hash: "06a4d9b1d73362b3e29c6cf52fdb515c" + } + Frame { + msec: 7616 + hash: "876c0dc8a68a4c1253b7aed6316cb892" + } + Frame { + msec: 7632 + hash: "b46c74b1a2535099f0cdb8093bd49a4e" + } + Frame { + msec: 7648 + hash: "0ad09a7638aa6f2affe47db2a810196f" + } + Frame { + msec: 7664 + hash: "3710dde54d7e4a10a2c3ca2f891da7f5" + } + Frame { + msec: 7680 + hash: "8426a607c92fbfa508e81c620d90e919" + } + Frame { + msec: 7696 + image: "nested.8.png" + } + Frame { + msec: 7712 + hash: "1f38e34787c909d93d567f983a425257" + } + Frame { + msec: 7728 + hash: "7b09913793d4c79d948fdff1b72c7124" + } + Frame { + msec: 7744 + hash: "8a0d1484c073d8107b4bf9949edcdb18" + } + Frame { + msec: 7760 + hash: "4bad25465dfdcc41995216b0f6a5191b" + } + Frame { + msec: 7776 + hash: "6d39bbeb5f74273c1ed0231ac34fe094" + } + Frame { + msec: 7792 + hash: "8ccc2e33b8d6c67162326d229e9c17ab" + } + Frame { + msec: 7808 + hash: "3561eaa9124b96b2a0afa022bc0fe581" + } + Frame { + msec: 7824 + hash: "b87d739e49f0427d9da577ac5147fd21" + } + Frame { + msec: 7840 + hash: "7d0efbfceec35e591f9fae650288809b" + } + Frame { + msec: 7856 + hash: "7d0efbfceec35e591f9fae650288809b" + } + Frame { + msec: 7872 + hash: "ff5d2037d3cc7bb6930cabc3d53f0196" + } + Frame { + msec: 7888 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 7904 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 7920 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 7936 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 7952 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 7968 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 7984 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8000 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8016 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8032 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8048 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8064 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8080 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8096 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8112 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8128 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8144 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8160 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8176 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8192 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8208 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8224 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8240 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8256 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8272 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8288 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8304 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8320 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8336 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8352 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8368 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8384 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8400 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8416 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8432 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8448 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8464 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8480 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8496 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8512 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8528 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8544 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8560 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8576 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8592 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8608 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8624 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8640 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8656 + image: "nested.9.png" + } + Frame { + msec: 8672 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8688 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8704 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8720 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8736 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8752 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8768 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8784 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8800 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8816 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8832 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8848 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8864 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8880 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8896 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8912 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8928 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8944 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8960 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8976 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 8992 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 9008 + hash: "76624c57195c25b8abd4297e11c55980" + } + Frame { + msec: 9024 + hash: "76624c57195c25b8abd4297e11c55980" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/nested.qml b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/nested.qml new file mode 100644 index 0000000..b2d88d2 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/nested.qml @@ -0,0 +1,62 @@ +import QtQuick 1.0 + +/* + Test nested MouseArea with different drag axes. +*/ + +Rectangle{ + width:400 + height:360 + color: "white" + Flickable { + anchors.fill: parent + contentWidth: 600 + contentHeight: 600 + Rectangle{ + id: draggable + width:200; height:200; color: "lightsteelblue" + opacity: ma1.drag.active ? 0.5 : 1.0 + y:20 + MouseArea{ + id: ma1 + objectName: "one" + anchors.fill: parent + drag.target: draggable + drag.axis: "XandYAxis" + drag.filterChildren: true + drag.minimumX: 0 + drag.maximumX: 200 + drag.minimumY: 20 + drag.maximumY: 220 + Rectangle{ + id: draggable_inner + width:40; height:40; color: "red" + y:20 + MouseArea{ + objectName: "two" + anchors.fill: parent + drag.target: draggable_inner + drag.axis: "XAxis" + drag.minimumX: 0 + drag.maximumX: 360 + } + } + } + } + Rectangle{ + id: draggable3 + width:40; height:40; color: "green" + opacity: ma3.drag.active ? 0.5 : 1.0 + y:210 + MouseArea{ + id: ma3 + objectName: "three" + anchors.fill: parent + drag.target: draggable3 + drag.axis: "XAxis" + drag.minimumX: 0 + drag.maximumX: 360 + } + } + } +} diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.0.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.0.png Binary files differnew file mode 100644 index 0000000..513aab6 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.0.png diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.1.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.1.png Binary files differnew file mode 100644 index 0000000..513aab6 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.1.png diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.10.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.10.png Binary files differnew file mode 100644 index 0000000..bb22d01 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.10.png diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.2.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.2.png Binary files differnew file mode 100644 index 0000000..1357551 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.2.png diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.3.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.3.png Binary files differnew file mode 100644 index 0000000..513aab6 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.3.png diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.4.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.4.png Binary files differnew file mode 100644 index 0000000..bb22d01 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.4.png diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.5.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.5.png Binary files differnew file mode 100644 index 0000000..bb22d01 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.5.png diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.6.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.6.png Binary files differnew file mode 100644 index 0000000..c61ae3f --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.6.png diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.7.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.7.png Binary files differnew file mode 100644 index 0000000..bb22d01 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.7.png diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.8.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.8.png Binary files differnew file mode 100644 index 0000000..bb22d01 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.8.png diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.9.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.9.png Binary files differnew file mode 100644 index 0000000..bb22d01 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.9.png diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.qml b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.qml new file mode 100644 index 0000000..c248167 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.qml @@ -0,0 +1,6083 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + image: "flickweb.0.png" + } + Frame { + msec: 32 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 48 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 64 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 80 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 96 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 112 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 128 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 144 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 160 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 176 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 192 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 208 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 224 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 240 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 256 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 272 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 288 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 304 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 320 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 336 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 352 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 368 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 384 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 400 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 416 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 432 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 448 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 464 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 480 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 496 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 512 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 528 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 544 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 0; y: 7 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 0; y: 7 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 560 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 12; y: 10 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 576 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 15; y: 11 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 592 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 608 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 624 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 640 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 12; y: 10 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 11; y: 10 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 656 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 9; y: 10 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 672 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 688 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 9; y: 11 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 704 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 9; y: 12 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 9; y: 15 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 720 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 9; y: 18 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 12; y: 24 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 736 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 14; y: 28 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 18; y: 35 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 752 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 19; y: 39 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 22; y: 43 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 768 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 22; y: 44 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 23; y: 44 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 784 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 800 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 23; y: 43 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 816 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 24; y: 45 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 832 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 26; y: 47 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 28; y: 49 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 848 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 29; y: 51 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 32; y: 55 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 864 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 34; y: 57 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 36; y: 61 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 880 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 38; y: 62 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 41; y: 66 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 896 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 43; y: 68 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 48; y: 73 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 912 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 50; y: 76 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 57; y: 80 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 928 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 85 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 66; y: 87 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 944 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 72; y: 91 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 93 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 960 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 80; y: 97 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 99 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 976 + image: "flickweb.1.png" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 86; y: 102 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 88; y: 103 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 992 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 103 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 104 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1008 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 1024 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 1040 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 105 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1056 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 106 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1072 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 107 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 108 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1088 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 109 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1104 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 110 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 111 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1120 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 112 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1136 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 113 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 114 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1152 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 115 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 116 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1168 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1184 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 1200 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 92; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1216 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 92; y: 116 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 92; y: 115 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1232 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 91; y: 112 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 91; y: 111 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1248 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 90; y: 107 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 90; y: 104 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1264 + hash: "e891b00cd44578b4a8e635ffe4c6d3fd" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 90; y: 101 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 89; y: 96 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1280 + hash: "61a543282ffb5e751ea1d97f0c95b208" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 89; y: 93 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 89; y: 85 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1296 + hash: "102e4b664bade46ab3bbb611acee22c9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 89; y: 81 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 87; y: 70 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1312 + hash: "6bf42ac28a14db681442aeb7ed0c7610" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 85; y: 60 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 85; y: 60 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 56 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1328 + hash: "ef531060d6b75cec8a6e3c01b3f69cc0" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 51 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 49 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1344 + hash: "e839af9d67f6214f0901977b3aa96d1a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 46 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 43 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1360 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 41 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 39 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1376 + hash: "e4a562aa35aa532d15c9b129e22797bb" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 38 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1392 + hash: "029d347e9c99dd4a9cec5120ac7fc25e" + } + Frame { + msec: 1408 + hash: "3c16a74e18a59630f35511ab5514c769" + } + Frame { + msec: 1424 + hash: "5dc472d6c5198d5a628510bd45a61a11" + } + Frame { + msec: 1440 + hash: "430d60127ed59dbc5904647424ead40d" + } + Frame { + msec: 1456 + hash: "cb27cfcfbbb77b55c2a8bf7e51c0af07" + } + Frame { + msec: 1472 + hash: "46f2eb33b0e8316c4123ddbee2f60ae2" + } + Frame { + msec: 1488 + hash: "1df306111ca012c9f405018778c0a12b" + } + Frame { + msec: 1504 + hash: "1eafab8fd457ad9acda068344178b4a8" + } + Frame { + msec: 1520 + hash: "286656898100e53d6d7728b51ce93df5" + } + Frame { + msec: 1536 + hash: "e2a88f0ba3030a430028147930989bbb" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 38 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1552 + hash: "fb23cf265c4d253470c2515043bc5dd8" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 38 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1568 + hash: "1dba4f0e5e5948b7133725ea8bbef3e7" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 37 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 38 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1584 + hash: "8578965c5ad012284e4e0a14a42da25e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 34 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1600 + hash: "3ef187decae08baa2ec92998c2cbb7f7" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 31 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1616 + hash: "4e0491128eac0bbfa7a131b1f18f243c" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 26 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1632 + hash: "c2d0799526e908204efbd3aa980e086c" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 23 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1648 + hash: "cc87e09a6784d61680f8c6ab0d6a38fa" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 22 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 16 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1664 + hash: "13dec7e835b4f26970f98b66533f84f1" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 14 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1680 + hash: "e5d2862bee024b64326b7d85e5e45399" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 12 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1696 + hash: "0b1401ce4a91811ac9c3eec5f94b380d" + } + Frame { + msec: 1712 + hash: "0de290542c9d3e03ed78f51423011c16" + } + Frame { + msec: 1728 + hash: "4c9aa06ad1e246b4b026742fc8cf37bc" + } + Frame { + msec: 1744 + hash: "c33003a8262c2ba25510ece181e61bc9" + } + Frame { + msec: 1760 + hash: "c33003a8262c2ba25510ece181e61bc9" + } + Frame { + msec: 1776 + hash: "ad184fa88c4299b8911c9b7ada5b3736" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 85; y: 12 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 85; y: 13 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 85; y: 15 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1792 + hash: "ad184fa88c4299b8911c9b7ada5b3736" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 85; y: 17 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 85; y: 23 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1808 + hash: "c2d0799526e908204efbd3aa980e086c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 85; y: 30 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 85; y: 34 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1824 + hash: "b343a9ed7e9740ec1725837fad766745" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 85; y: 41 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 85; y: 44 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1840 + hash: "b33260ad955474452f204ed5d468ef78" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 85; y: 51 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 86; y: 55 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1856 + hash: "9a647c54e378bd0ee35ef4164892722c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 87; y: 61 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 88; y: 67 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 88; y: 67 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 73 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1872 + hash: "dc553d1a7b678dffea41147fc6b841f6" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 74 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 78 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1888 + hash: "2d61b4fb1e5a8beb6e3c3cb53c21db42" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 79 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 82 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1904 + hash: "209faf0b20fd53d9a1c261c8cae9666f" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 90; y: 82 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 83 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1920 + hash: "3497258aa07c76f0e31b5a492ee7e7cb" + } + Frame { + msec: 1936 + image: "flickweb.2.png" + } + Frame { + msec: 1952 + hash: "64c677ac4fea0e525279e86bf831d5d3" + } + Frame { + msec: 1968 + hash: "76c6c887fea94288e9fd975655e5181c" + } + Frame { + msec: 1984 + hash: "71b85e596c88b84a851a52aa3389e63a" + } + Frame { + msec: 2000 + hash: "e4a562aa35aa532d15c9b129e22797bb" + } + Frame { + msec: 2016 + hash: "148484dd95c88720cc5ef196334cb9a8" + } + Frame { + msec: 2032 + hash: "924c6254ffa1707b69174f49e4e95213" + } + Frame { + msec: 2048 + hash: "9e61907acedb27941d8be2befa364cfb" + } + Frame { + msec: 2064 + hash: "9e61907acedb27941d8be2befa364cfb" + } + Frame { + msec: 2080 + hash: "f2c4e99db1bb087a40b277ce8ce628f6" + } + Frame { + msec: 2096 + hash: "f2c4e99db1bb087a40b277ce8ce628f6" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 82 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2112 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 90; y: 82 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2128 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 81 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 88; y: 80 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2144 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 87; y: 79 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 86; y: 77 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2160 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 86; y: 76 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 86; y: 75 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2176 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 73 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 71 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2192 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 68 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 81; y: 67 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2208 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 76; y: 61 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 75; y: 59 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2224 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 71; y: 54 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 51 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2240 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 50 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 49 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2256 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 47 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 69; y: 46 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2272 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 68; y: 45 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 67; y: 43 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2288 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 66; y: 43 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 65; y: 41 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2304 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 64; y: 40 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 64; y: 39 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2320 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 38 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 37 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2336 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 35 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 34 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2352 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 33 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2368 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 64; y: 32 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2384 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 65; y: 32 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 65; y: 31 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2400 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 66; y: 31 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 68; y: 31 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2416 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 69; y: 30 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 71; y: 29 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2432 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 73; y: 27 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 73; y: 26 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2448 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 24 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 22 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2464 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 21 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 20 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2480 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 18 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 17 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2496 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 16 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 73; y: 15 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2512 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 73; y: 14 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2528 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Frame { + msec: 2544 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Frame { + msec: 2560 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 73; y: 14 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2576 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 73; y: 15 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 72; y: 17 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2592 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 72; y: 24 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 72; y: 29 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2608 + hash: "b2d6b68f1f7229e8e65bb37e4c418a1b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 72; y: 40 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 71; y: 47 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2624 + hash: "c4dd48fca556c2760c8f81db7fea6938" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 60 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 78 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2640 + hash: "9dbad8cb2692807d67f74e7ac4a4a70e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 88 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 96 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 70; y: 96 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2656 + hash: "152648affe4045a81f0d6ff9150889f1" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 99 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 102 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2672 + hash: "152648affe4045a81f0d6ff9150889f1" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 73; y: 103 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 103 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2688 + hash: "152648affe4045a81f0d6ff9150889f1" + } + Frame { + msec: 2704 + hash: "152648affe4045a81f0d6ff9150889f1" + } + Frame { + msec: 2720 + hash: "152648affe4045a81f0d6ff9150889f1" + } + Frame { + msec: 2736 + hash: "152648affe4045a81f0d6ff9150889f1" + } + Frame { + msec: 2752 + hash: "152648affe4045a81f0d6ff9150889f1" + } + Frame { + msec: 2768 + hash: "c9eee2b7529b07a17151e7140444c099" + } + Frame { + msec: 2784 + hash: "c9eee2b7529b07a17151e7140444c099" + } + Frame { + msec: 2800 + hash: "c9eee2b7529b07a17151e7140444c099" + } + Frame { + msec: 2816 + hash: "c9eee2b7529b07a17151e7140444c099" + } + Frame { + msec: 2832 + hash: "c9eee2b7529b07a17151e7140444c099" + } + Frame { + msec: 2848 + hash: "c9eee2b7529b07a17151e7140444c099" + } + Frame { + msec: 2864 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 2880 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 2896 + image: "flickweb.3.png" + } + Frame { + msec: 2912 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 2928 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 102 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2944 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 101 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 73; y: 98 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2960 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 69; y: 93 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 67; y: 91 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2976 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 62; y: 85 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 60; y: 83 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2992 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 56; y: 77 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 55; y: 75 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3008 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 52; y: 70 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 49; y: 67 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3024 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 49; y: 65 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 48; y: 61 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3040 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 48; y: 60 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 46; y: 56 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3056 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 45; y: 54 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 42; y: 50 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3072 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 39; y: 47 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 38; y: 45 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3088 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 37; y: 44 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 36; y: 43 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3104 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 35; y: 41 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 35; y: 40 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3120 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 33; y: 39 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 33; y: 38 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3136 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 32; y: 37 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3152 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 32; y: 36 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 31; y: 36 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3168 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 31; y: 35 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3184 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 30; y: 35 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 30; y: 33 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3200 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 28; y: 32 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 28; y: 31 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3216 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 26; y: 29 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 26; y: 28 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3232 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 25; y: 27 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3248 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 25; y: 26 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3264 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 3280 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 3296 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 3312 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 25; y: 26 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3328 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 3344 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 3360 + hash: "d045839439e4091210c745f0ea173e52" + } + Frame { + msec: 3376 + hash: "d045839439e4091210c745f0ea173e52" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 25; y: 26 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3392 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 25; y: 27 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3408 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 26; y: 27 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 26; y: 28 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3424 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 27; y: 28 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 27; y: 29 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3440 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3456 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3472 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3488 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3504 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 27; y: 30 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3520 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 28; y: 31 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 29; y: 34 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3536 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 31; y: 36 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 37; y: 43 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3552 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 40; y: 48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 50; y: 59 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3568 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 55; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 65; y: 73 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3584 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 69; y: 77 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 75; y: 83 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3600 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 78; y: 85 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 80; y: 86 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3616 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 88 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 89 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3632 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 90 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3648 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3664 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3680 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3696 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3712 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3728 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3744 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3760 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 89 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3776 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3792 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 88 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 87 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3808 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 85 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 83 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3824 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3840 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3856 + image: "flickweb.4.png" + } + Frame { + msec: 3872 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3888 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3904 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3920 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3936 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3952 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3968 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 3984 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4000 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4016 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 84 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4032 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 87 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4048 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 88 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4064 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4080 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4096 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4112 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4128 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 89 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4144 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 90 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4160 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 91 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 92 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4176 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 93 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 95 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4192 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 97 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 100 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4208 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 101 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 105 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4224 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 107 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 110 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4240 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 113 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 114 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4256 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 115 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 116 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4272 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4288 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4304 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4320 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4336 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4352 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4368 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4384 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4400 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4416 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4432 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4448 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4464 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4480 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 116 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4496 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4512 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4528 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4544 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4560 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4576 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4592 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4608 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 116 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4624 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4640 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4656 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4672 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4688 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 118 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4704 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4720 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4736 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4752 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4768 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4784 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 119 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4800 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4816 + image: "flickweb.5.png" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 83; y: 119 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4832 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 4848 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 84; y: 119 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4864 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 85; y: 118 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 85; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4880 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 86; y: 113 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 87; y: 111 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4896 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 89; y: 107 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 90; y: 104 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4912 + hash: "f10fa114e248809ed280788d03a3e234" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 92; y: 99 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 93; y: 95 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4928 + hash: "442357340d9690811d582f548f933d92" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 95; y: 88 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 98; y: 81 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 98; y: 81 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4944 + hash: "188b8f78b2a2180a8e96a8a05bb20fe2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 77 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 99; y: 69 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4960 + hash: "2b8ee42c5660f4f938cf10507690abbe" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 100; y: 66 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 101; y: 60 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4976 + hash: "3d4aab388f62e64c5f72c631fb8584aa" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 103; y: 59 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 104; y: 56 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4992 + hash: "439364cea3330411f526093d58ece463" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 104; y: 55 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 104; y: 53 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5008 + hash: "27653ec59651e6b3cb2ebf2bc81a975a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 104; y: 52 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 104; y: 51 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5024 + hash: "d9c0fb2cbf968e0524291ae2570ca585" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 50 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 49 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5040 + hash: "ef75df694a972985f410e21182dbb12b" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5056 + hash: "adda6aa851c1587c1bb2605809348725" + } + Frame { + msec: 5072 + hash: "196c12052069f0f8c775aa38d3291bef" + } + Frame { + msec: 5088 + hash: "eaa025b6aee87edf95643cc46880d0db" + } + Frame { + msec: 5104 + hash: "edeab897b82df47ae6deb858eca3087e" + } + Frame { + msec: 5120 + hash: "46e3b5da149cfc40036a860e74e0cd78" + } + Frame { + msec: 5136 + hash: "46e3b5da149cfc40036a860e74e0cd78" + } + Frame { + msec: 5152 + hash: "0fe9b13b9b0752ab4ad74f4e43f94d86" + } + Frame { + msec: 5168 + hash: "0fe9b13b9b0752ab4ad74f4e43f94d86" + } + Frame { + msec: 5184 + hash: "695e9c7292475cad011ca76799452042" + } + Frame { + msec: 5200 + hash: "695e9c7292475cad011ca76799452042" + } + Frame { + msec: 5216 + hash: "695e9c7292475cad011ca76799452042" + } + Frame { + msec: 5232 + hash: "695e9c7292475cad011ca76799452042" + } + Frame { + msec: 5248 + hash: "695e9c7292475cad011ca76799452042" + } + Frame { + msec: 5264 + hash: "695e9c7292475cad011ca76799452042" + } + Frame { + msec: 5280 + hash: "695e9c7292475cad011ca76799452042" + } + Frame { + msec: 5296 + hash: "695e9c7292475cad011ca76799452042" + } + Frame { + msec: 5312 + hash: "695e9c7292475cad011ca76799452042" + } + Frame { + msec: 5328 + hash: "695e9c7292475cad011ca76799452042" + } + Frame { + msec: 5344 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 47 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 104; y: 46 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5360 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 103; y: 45 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 102; y: 45 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5376 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 102; y: 44 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5392 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 101; y: 43 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5408 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 101; y: 42 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 100; y: 42 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5424 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 99; y: 41 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 40 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5440 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 39 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5456 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 38 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 37 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5472 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 36 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 35 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5488 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 33 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 30 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5504 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 29 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 28 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5520 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 26 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 25 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5536 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 24 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 23 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5552 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 97; y: 23 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 97; y: 22 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5568 + hash: "695e9c7292475cad011ca76799452042" + } + Frame { + msec: 5584 + hash: "695e9c7292475cad011ca76799452042" + } + Frame { + msec: 5600 + hash: "695e9c7292475cad011ca76799452042" + } + Frame { + msec: 5616 + hash: "695e9c7292475cad011ca76799452042" + } + Frame { + msec: 5632 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 97; y: 22 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5648 + hash: "695e9c7292475cad011ca76799452042" + } + Frame { + msec: 5664 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 97; y: 24 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 97; y: 26 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5680 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 97; y: 28 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 97; y: 31 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5696 + hash: "695e9c7292475cad011ca76799452042" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 97; y: 37 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 97; y: 42 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5712 + hash: "27653ec59651e6b3cb2ebf2bc81a975a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 97; y: 50 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 97; y: 58 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5728 + hash: "f2a68c3a60002a796b0cd595ae89e477" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 97; y: 63 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 97; y: 71 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5744 + hash: "2628ffe66f06c997d9c9b66febc04ce8" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 97; y: 75 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 98; y: 83 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5760 + hash: "9b68c76d622f7b883a13927a112179f0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 99; y: 86 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 101; y: 91 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 101; y: 91 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5776 + image: "flickweb.6.png" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 103; y: 95 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 104; y: 95 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5792 + hash: "6d6d87355037ec4a15b2a81c8d48b74d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 107; y: 95 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 107; y: 94 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5808 + hash: "6d6d87355037ec4a15b2a81c8d48b74d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 107; y: 93 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5824 + hash: "6d6d87355037ec4a15b2a81c8d48b74d" + } + Frame { + msec: 5840 + hash: "6d6d87355037ec4a15b2a81c8d48b74d" + } + Frame { + msec: 5856 + hash: "34c3edc4500a268a326b5c2156c12f09" + } + Frame { + msec: 5872 + hash: "34c3edc4500a268a326b5c2156c12f09" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 106; y: 92 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 91 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5888 + hash: "34c3edc4500a268a326b5c2156c12f09" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 104; y: 91 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 103; y: 90 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5904 + hash: "ac600900160ab37ec8a3e67eb82d0259" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 101; y: 89 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 100; y: 88 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5920 + hash: "ac600900160ab37ec8a3e67eb82d0259" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 99; y: 86 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 86 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5936 + hash: "dc3cef419e3b7d59f450d3307aeebefa" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 97; y: 85 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 85 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5952 + hash: "dc3cef419e3b7d59f450d3307aeebefa" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 94; y: 84 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 93; y: 83 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5968 + hash: "9b68c76d622f7b883a13927a112179f0" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 90; y: 82 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 86; y: 81 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5984 + hash: "9b68c76d622f7b883a13927a112179f0" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 80 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 81; y: 79 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6000 + hash: "9b68c76d622f7b883a13927a112179f0" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 79; y: 78 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 76; y: 76 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6016 + hash: "9b68c76d622f7b883a13927a112179f0" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 75; y: 76 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 72; y: 73 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6032 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 68; y: 70 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 66; y: 68 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6048 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 65 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 61; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6064 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 58; y: 60 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 57; y: 59 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6080 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 54; y: 56 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 53; y: 54 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6096 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 51; y: 50 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 48; y: 46 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6112 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 48; y: 45 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 46; y: 41 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6128 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 45; y: 39 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 43; y: 36 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6144 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 43; y: 35 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 41; y: 32 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6160 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 40; y: 30 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 38; y: 28 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6176 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 36; y: 26 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 35; y: 24 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6192 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 33; y: 22 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 32; y: 21 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6208 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 31; y: 20 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 30; y: 19 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6224 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 29; y: 19 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 28; y: 18 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6240 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 27; y: 18 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 26; y: 17 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6256 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 25; y: 17 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6272 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 24; y: 17 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6288 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 6304 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 6320 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 6336 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 6352 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 24; y: 17 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6368 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 6384 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 6400 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 6416 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 24; y: 17 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6432 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 24; y: 18 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6448 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 25; y: 18 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 25; y: 19 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6464 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 26; y: 19 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 27; y: 20 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6480 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 28; y: 21 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6496 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 6512 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 6528 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 29; y: 22 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6544 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 30; y: 23 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 31; y: 24 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6560 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 32; y: 25 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 33; y: 25 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6576 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 34; y: 26 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 34; y: 27 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6592 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 37; y: 30 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 38; y: 31 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6608 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 41; y: 35 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 42; y: 37 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6624 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 45; y: 42 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 50; y: 46 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6640 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 52; y: 49 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 57; y: 53 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6656 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 60; y: 55 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 65; y: 58 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6672 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 66; y: 59 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 71; y: 61 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6688 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 75; y: 62 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 77; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6704 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 80; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 81; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6720 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6736 + image: "flickweb.7.png" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 86; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6752 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 87; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 88; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6768 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 90; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 93; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6784 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 94; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 99; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6800 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 102; y: 63 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 106; y: 62 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6816 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 110; y: 62 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 116; y: 62 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6832 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 122; y: 62 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 124; y: 62 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6848 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 125; y: 62 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6864 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 6880 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 6896 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 6912 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 6928 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 6944 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 6960 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 6976 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 6992 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7008 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7024 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7040 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7056 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7072 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7088 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 126; y: 62 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7104 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 127; y: 62 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 129; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7120 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 132; y: 65 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 134; y: 66 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7136 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 139; y: 68 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 144; y: 69 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7152 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 148; y: 69 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 154; y: 69 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7168 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 158; y: 68 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 162; y: 66 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7184 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 164; y: 65 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 165; y: 62 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7200 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 165; y: 60 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 165; y: 54 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7216 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 162; y: 45 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 159; y: 39 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7232 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 151; y: 27 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 146; y: 22 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7248 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 129; y: 3 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7264 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7280 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7296 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7312 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7328 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7344 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7360 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7376 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7392 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7408 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7424 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7440 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7456 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7472 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7488 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7504 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7520 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7536 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7552 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7568 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7584 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7600 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7616 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7632 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7648 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7664 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7680 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7696 + image: "flickweb.8.png" + } + Frame { + msec: 7712 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7728 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7744 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7760 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7776 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7792 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7808 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7824 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7840 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7856 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7872 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7888 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7904 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7920 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7936 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7952 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7968 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 7984 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8000 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8016 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8032 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8048 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8064 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8080 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8096 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8112 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8128 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8144 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8160 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8176 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8192 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8208 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8224 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8240 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8256 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8272 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8288 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8304 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8320 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8336 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8352 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8368 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8384 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8400 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8416 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8432 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8448 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8464 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8480 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8496 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8512 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8528 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8544 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8560 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8576 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8592 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8608 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8624 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8640 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8656 + image: "flickweb.9.png" + } + Frame { + msec: 8672 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8688 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8704 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8720 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8736 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8752 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8768 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8784 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8800 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8816 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8832 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8848 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8864 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8880 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8896 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8912 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8928 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8944 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8960 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8976 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 8992 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9008 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9024 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9040 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9056 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9072 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9088 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9104 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9120 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9136 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9152 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9168 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9184 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9200 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9216 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9232 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9248 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9264 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9280 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9296 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9312 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9328 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9344 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9360 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9376 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9392 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9408 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9424 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9440 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9456 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9472 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9488 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9504 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9520 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9536 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9552 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9568 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9584 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9600 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9616 + image: "flickweb.10.png" + } + Frame { + msec: 9632 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9648 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9664 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9680 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9696 + hash: "98990f624351f88347b2eb010bb5cd13" + } + Frame { + msec: 9712 + hash: "98990f624351f88347b2eb010bb5cd13" + } +} diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/flickweb.qml b/tests/auto/declarative/qmlvisual/webview/flickable/flickweb.qml new file mode 100644 index 0000000..6063226 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/flickable/flickweb.qml @@ -0,0 +1,35 @@ +import QtQuick 1.0
+import QtWebKit 1.0
+
+Flickable {
+ id: flickable
+ width: 320
+ height: 200
+ contentWidth: Math.max(flickable.width,webView.width)
+ contentHeight: Math.max(flickable.height,webView.height)
+ pressDelay: 100
+
+ WebView {
+ id: webView
+ transformOrigin: Item.TopLeft
+ smooth: false // We don't want smooth scaling, since we only scale during (fast) transitions
+ url: "test.html"
+ preferredWidth: flickable.width
+ preferredHeight: flickable.height
+ contentsScale: 1
+ onContentsSizeChanged: {
+ // zoom out
+ contentsScale = Math.min(1,flickable.width / contentsSize.width)
+ }
+ }
+
+ Rectangle {
+ id: button
+ width: 50; height: 50; color: "red"
+ MouseArea {
+ anchors.fill: parent
+ onPressed: button.color = "blue"
+ onReleased: button.color = "green"
+ }
+ }
+}
diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/qtlogo.png b/tests/auto/declarative/qmlvisual/webview/flickable/qtlogo.png Binary files differnew file mode 100644 index 0000000..399bd0b --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/flickable/qtlogo.png diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/test.html b/tests/auto/declarative/qmlvisual/webview/flickable/test.html new file mode 100644 index 0000000..35eb718 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/flickable/test.html @@ -0,0 +1,3 @@ +<html> + <img width="400" height="400" src="qtlogo.png"> +</html> diff --git a/tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp b/tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp index 174e4aa..35ea059 100644 --- a/tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp +++ b/tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp @@ -122,6 +122,8 @@ private slots: void task236367_maxSizeHint(); void heightForWidth(); void heightForWidthWithSpanning(); + void stretchAndHeightForWidth(); + void testDefaultAlignment(); }; class RectWidget : public QGraphicsWidget @@ -699,6 +701,10 @@ void tst_QGraphicsGridLayout::columnMaximumWidth() layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); + QCOMPARE(layout->minimumSize(), QSizeF(10+10+10, 10+10)); + QCOMPARE(layout->preferredSize(), QSizeF(25+25+25, 25+25)); + QCOMPARE(layout->maximumSize(), QSizeF(50+50+50, 50+50)); + // should at least be a very large number QVERIFY(layout->columnMaximumWidth(0) >= 10000); QCOMPARE(layout->columnMaximumWidth(0), layout->columnMaximumWidth(1)); @@ -706,17 +712,65 @@ void tst_QGraphicsGridLayout::columnMaximumWidth() layout->setColumnMaximumWidth(0, 20); layout->setColumnMaximumWidth(2, 60); - view.show(); - widget->show(); + QCOMPARE(layout->minimumSize(), QSizeF(10+10+10, 10+10)); + QCOMPARE(layout->preferredSize(), QSizeF(20+25+25, 25+25)); + QCOMPARE(layout->maximumSize(), QSizeF(20+50+60, 50+50)); + QCOMPARE(layout->maximumSize(), widget->maximumSize()); + widget->resize(widget->effectiveSizeHint(Qt::PreferredSize)); - QApplication::processEvents(); + layout->activate(); - QCOMPARE(layout->itemAt(0,0)->geometry().width(), 20.0); - QCOMPARE(layout->itemAt(1,0)->geometry().width(), 20.0); - QCOMPARE(layout->itemAt(0,1)->geometry().width(), 25.0); - QCOMPARE(layout->itemAt(1,1)->geometry().width(), 25.0); - QCOMPARE(layout->itemAt(0,2)->geometry().width(), 25.0); - QCOMPARE(layout->itemAt(1,2)->geometry().width(), 25.0); + QCOMPARE(layout->itemAt(0,0)->geometry(), QRectF(0, 0, 20, 25)); + QCOMPARE(layout->itemAt(1,0)->geometry(), QRectF(0, 25, 20, 25)); + QCOMPARE(layout->itemAt(0,1)->geometry(), QRectF(20, 0, 25, 25)); + QCOMPARE(layout->itemAt(1,1)->geometry(), QRectF(20, 25, 25, 25)); + QCOMPARE(layout->itemAt(0,2)->geometry(), QRectF(45, 0, 25, 25)); + QCOMPARE(layout->itemAt(1,2)->geometry(), QRectF(45, 25, 25, 25)); + + layout->setColumnAlignment(2, Qt::AlignCenter); + widget->resize(widget->effectiveSizeHint(Qt::MaximumSize)); + layout->activate(); + QCOMPARE(layout->geometry(), QRectF(0,0,20+50+60, 50+50)); + QCOMPARE(layout->itemAt(0,0)->geometry(), QRectF(0, 0, 20, 50)); + QCOMPARE(layout->itemAt(1,0)->geometry(), QRectF(0, 50, 20, 50)); + QCOMPARE(layout->itemAt(0,1)->geometry(), QRectF(20, 0, 50, 50)); + QCOMPARE(layout->itemAt(1,1)->geometry(), QRectF(20, 50, 50, 50)); + QCOMPARE(layout->itemAt(0,2)->geometry(), QRectF(75, 0, 50, 50)); + QCOMPARE(layout->itemAt(1,2)->geometry(), QRectF(75, 50, 50, 50)); + + for (int i = 0; i < layout->count(); i++) + layout->setAlignment(layout->itemAt(i), Qt::AlignRight | Qt::AlignBottom); + layout->activate(); + QCOMPARE(layout->itemAt(0,0)->geometry(), QRectF(0, 0, 20, 50)); + QCOMPARE(layout->itemAt(1,0)->geometry(), QRectF(0, 50, 20, 50)); + QCOMPARE(layout->itemAt(0,1)->geometry(), QRectF(20, 0, 50, 50)); + QCOMPARE(layout->itemAt(1,1)->geometry(), QRectF(20, 50, 50, 50)); + QCOMPARE(layout->itemAt(0,2)->geometry(), QRectF(80, 0, 50, 50)); + QCOMPARE(layout->itemAt(1,2)->geometry(), QRectF(80, 50, 50, 50)); + for (int i = 0; i < layout->count(); i++) + layout->setAlignment(layout->itemAt(i), Qt::AlignCenter); + + layout->setMaximumSize(layout->maximumSize() + QSizeF(60,60)); + widget->resize(widget->effectiveSizeHint(Qt::MaximumSize)); + layout->activate(); + + QCOMPARE(layout->itemAt(0,0)->geometry(), QRectF(0, 15, 20, 50)); + QCOMPARE(layout->itemAt(1,0)->geometry(), QRectF(0, 95, 20, 50)); + QCOMPARE(layout->itemAt(0,1)->geometry(), QRectF(20+30, 15, 50, 50)); + QCOMPARE(layout->itemAt(1,1)->geometry(), QRectF(20+30, 95, 50, 50)); + QCOMPARE(layout->itemAt(0,2)->geometry(), QRectF(20+60+50+5, 15, 50, 50)); + QCOMPARE(layout->itemAt(1,2)->geometry(), QRectF(20+60+50+5, 95, 50, 50)); + + layout->setMaximumSize(layout->preferredSize() + QSizeF(20,20)); + widget->resize(widget->effectiveSizeHint(Qt::MaximumSize)); + layout->activate(); + + QCOMPARE(layout->itemAt(0,0)->geometry(), QRectF(0, 0, 20, 35)); + QCOMPARE(layout->itemAt(1,0)->geometry(), QRectF(0, 35, 20, 35)); + QCOMPARE(layout->itemAt(0,1)->geometry(), QRectF(20, 0, 35, 35)); + QCOMPARE(layout->itemAt(1,1)->geometry(), QRectF(20, 35, 35, 35)); + QCOMPARE(layout->itemAt(0,2)->geometry(), QRectF(55, 0, 35, 35)); + QCOMPARE(layout->itemAt(1,2)->geometry(), QRectF(55, 35, 35, 35)); delete widget; } @@ -2306,6 +2360,11 @@ static QSizeF hfw1(Qt::SizeHint, const QSizeF &constraint) return result; } +static QSizeF hfw2(Qt::SizeHint /*which*/, const QSizeF &constraint) +{ + return QSizeF(constraint.width(), constraint.width()); +} + void tst_QGraphicsGridLayout::geometries_data() { @@ -2361,6 +2420,31 @@ void tst_QGraphicsGridLayout::geometries_data() << QRectF(0, 1, 50,100) << QRectF(50, 1, 50,400) ); + + QTest::newRow("hfw-h408") << (ItemList() + << ItemDesc(0,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(0,1) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,1) + .sizeHint(Qt::MinimumSize, QSizeF(40,40)) + .sizeHint(Qt::PreferredSize, QSizeF(50,400)) + .sizeHint(Qt::MaximumSize, QSizeF(500, 500)) + .heightForWidth(hfw1) + ) + << QSizeF(100, 408) + << (RectList() + << QRectF(0, 0, 50, 8) << QRectF(50, 0, 50, 8) + << QRectF(0, 8, 50,100) << QRectF(50, 8, 50,400) + ); QTest::newRow("hfw-h410") << (ItemList() << ItemDesc(0,0) .minSize(QSizeF(1,1)) @@ -2386,6 +2470,150 @@ void tst_QGraphicsGridLayout::geometries_data() << QRectF(0, 10, 50,100) << QRectF(50, 10, 50,400) ); + QTest::newRow("hfw-h470") << (ItemList() + << ItemDesc(0,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(0,1) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,1) + .sizeHint(Qt::MinimumSize, QSizeF(40,40)) + .sizeHint(Qt::PreferredSize, QSizeF(50,400)) + .sizeHint(Qt::MaximumSize, QSizeF(500,500)) + .heightForWidth(hfw1) + ) + << QSizeF(100, 470) + << (RectList() + << QRectF(0, 0, 50,70) << QRectF(50, 0, 50,70) + << QRectF(0, 70, 50,100) << QRectF(50, 70, 50,400) + ); + + + // change layout width and verify + QTest::newRow("hfw-w100") << (ItemList() + << ItemDesc(0,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(0,1) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,1) + .sizeHint(Qt::MinimumSize, QSizeF(40,40)) + .sizeHint(Qt::PreferredSize, QSizeF(50,400)) + .sizeHint(Qt::MaximumSize, QSizeF(5000,5000)) + .heightForWidth(hfw1) + ) + << QSizeF(100, 401) + << (RectList() + << QRectF( 0, 0, 50, 1) << QRectF( 50, 0, 50, 1) + << QRectF( 0, 1, 50, 100) << QRectF( 50, 1, 50, 400) + ); + + QTest::newRow("hfw-w160") << (ItemList() + << ItemDesc(0,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(0,1) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,1) + .sizeHint(Qt::MinimumSize, QSizeF(40,40)) + .sizeHint(Qt::PreferredSize, QSizeF(50,400)) + .sizeHint(Qt::MaximumSize, QSizeF(5000,5000)) + .heightForWidth(hfw1) + ) + << QSizeF(160, 350) + << (RectList() + << QRectF( 0, 0, 80, 100) << QRectF( 80, 0, 80, 100) + << QRectF( 0, 100, 80, 100) << QRectF( 80, 100, 80, 250) + ); + + QTest::newRow("hfw-w500") << (ItemList() + << ItemDesc(0,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(0,1) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,0) + .minSize(QSizeF(1,1)) + .preferredSize(QSizeF(50,10)) + .maxSize(QSizeF(100, 100)) + << ItemDesc(1,1) + .sizeHint(Qt::MinimumSize, QSizeF(40,40)) + .sizeHint(Qt::PreferredSize, QSizeF(50,400)) + .sizeHint(Qt::MaximumSize, QSizeF(5000,5000)) + .heightForWidth(hfw1) + ) + << QSizeF(500, 200) + << (RectList() + << QRectF( 0, 0, 100, 100) << QRectF(100, 0, 100, 100) + << QRectF( 0, 100, 100, 100) << QRectF(100, 100, 400, 50) + ); + + QTest::newRow("hfw-alignment-defaults") << (ItemList() + << ItemDesc(0,0) + .minSize(QSizeF(100, 100)) + .maxSize(QSizeF(100, 100)) + .heightForWidth(hfw2) + << ItemDesc(1,0) + .minSize(QSizeF(200, 200)) + .maxSize(QSizeF(200, 200)) + .heightForWidth(hfw2) + << ItemDesc(2,0) + .minSize(QSizeF(300, 300)) + .maxSize(QSizeF(300, 300)) + ) + << QSizeF(300, 600) + << (RectList() + << QRectF(0, 0, 100, 100) + << QRectF(0, 100, 200, 200) + << QRectF(0, 300, 300, 300) + ); + + QTest::newRow("hfw-alignment2") << (ItemList() + << ItemDesc(0,0) + .minSize(QSizeF(100, 100)) + .maxSize(QSizeF(100, 100)) + .heightForWidth(hfw2) + .alignment(Qt::AlignRight) + << ItemDesc(1,0) + .minSize(QSizeF(200, 200)) + .maxSize(QSizeF(200, 200)) + .heightForWidth(hfw2) + .alignment(Qt::AlignHCenter) + << ItemDesc(2,0) + .minSize(QSizeF(300, 300)) + .maxSize(QSizeF(300, 300)) + ) + << QSizeF(300, 600) + << (RectList() + << QRectF(200, 0, 100, 100) + << QRectF( 50, 100, 200, 200) + << QRectF( 0, 300, 300, 300) + ); + } void tst_QGraphicsGridLayout::geometries() @@ -2556,8 +2784,9 @@ void tst_QGraphicsGridLayout::heightForWidth() w11->setSizePolicy(sp); layout->addItem(w11, 1, 1); - QSizeF prefSize = layout->effectiveSizeHint(Qt::PreferredSize, QSizeF(-1, -1)); - QCOMPARE(prefSize, QSizeF(10+200, 10+100)); + QCOMPARE(layout->effectiveSizeHint(Qt::MinimumSize, QSizeF(-1, -1)), QSizeF(2, 2)); + QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize, QSizeF(-1, -1)), QSizeF(210, 110)); + QCOMPARE(layout->effectiveSizeHint(Qt::MaximumSize, QSizeF(-1, -1)), QSizeF(30100, 30100)); QCOMPARE(layout->effectiveSizeHint(Qt::MinimumSize, QSizeF(2, -1)), QSizeF(2, 20001)); QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize, QSizeF(2, -1)), QSizeF(2, 20010)); @@ -2610,23 +2839,128 @@ void tst_QGraphicsGridLayout::heightForWidthWithSpanning() w->setSizePolicy(sp); layout->addItem(w, 0,0,2,2); - QCOMPARE(layout->effectiveSizeHint(Qt::MinimumSize, QSizeF(-1, -1)), QSizeF(1, 100)); + QCOMPARE(layout->effectiveSizeHint(Qt::MinimumSize, QSizeF(-1, -1)), QSizeF(1, 1)); QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize, QSizeF(-1, -1)), QSizeF(200, 100)); - QCOMPARE(layout->effectiveSizeHint(Qt::MaximumSize, QSizeF(-1, -1)), QSizeF(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)); + QEXPECT_FAIL("", "Due to an old bug this wrongly returns QWIDGETSIZE_MAX", Continue); + QCOMPARE(layout->effectiveSizeHint(Qt::MaximumSize, QSizeF(-1, -1)), QSizeF(30000, 30000)); QCOMPARE(layout->effectiveSizeHint(Qt::MinimumSize, QSizeF(200, -1)), QSizeF(200, 100)); QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize, QSizeF(200, -1)), QSizeF(200, 100)); - QCOMPARE(layout->effectiveSizeHint(Qt::MaximumSize, QSizeF(200, -1)), QSizeF(200, QWIDGETSIZE_MAX)); + QEXPECT_FAIL("", "Due to an old bug this wrongly returns QWIDGETSIZE_MAX", Continue); + QCOMPARE(layout->effectiveSizeHint(Qt::MaximumSize, QSizeF(200, -1)), QSizeF(200, 100)); QCOMPARE(layout->effectiveSizeHint(Qt::MinimumSize, QSizeF(2, -1)), QSizeF(2, 10000)); QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize, QSizeF(2, -1)), QSizeF(2, 10000)); - QCOMPARE(layout->effectiveSizeHint(Qt::MaximumSize, QSizeF(2, -1)), QSizeF(2, QWIDGETSIZE_MAX)); + QEXPECT_FAIL("", "Due to an old bug this wrongly returns QWIDGETSIZE_MAX", Continue); + QCOMPARE(layout->effectiveSizeHint(Qt::MaximumSize, QSizeF(2, -1)), QSizeF(2, 10000)); QCOMPARE(layout->effectiveSizeHint(Qt::MinimumSize, QSizeF(200, -1)), QSizeF(200, 100)); QCOMPARE(layout->effectiveSizeHint(Qt::PreferredSize, QSizeF(200, -1)), QSizeF(200, 100)); - QCOMPARE(layout->effectiveSizeHint(Qt::MaximumSize, QSizeF(200, -1)), QSizeF(200, QWIDGETSIZE_MAX)); + QEXPECT_FAIL("", "Due to an old bug this wrongly returns QWIDGETSIZE_MAX", Continue); + QCOMPARE(layout->effectiveSizeHint(Qt::MaximumSize, QSizeF(200, -1)), QSizeF(200, 10000)); +} + +void tst_QGraphicsGridLayout::stretchAndHeightForWidth() +{ + QGraphicsWidget *widget = new QGraphicsWidget(0, Qt::Window); + QGraphicsGridLayout *layout = new QGraphicsGridLayout; + widget->setLayout(layout); + layout->setContentsMargins(0, 0, 0, 0); + layout->setSpacing(0); + + RectWidget *w1 = new RectWidget; + w1->setSizeHint(Qt::MinimumSize, QSizeF(10, 10)); + w1->setSizeHint(Qt::PreferredSize, QSizeF(100, 100)); + w1->setSizeHint(Qt::MaximumSize, QSizeF(500, 500)); + layout->addItem(w1, 0,0,1,1); + + RectWidget *w2 = new RectWidget; + w2->setSizeHint(Qt::MinimumSize, QSizeF(10, 10)); + w2->setSizeHint(Qt::PreferredSize, QSizeF(100, 100)); + w2->setSizeHint(Qt::MaximumSize, QSizeF(500, 500)); + layout->addItem(w2, 0,1,1,1); + layout->setColumnStretchFactor(1, 2); + + QApplication::sendPostedEvents(); + QGraphicsScene scene; + QGraphicsView *view = new QGraphicsView(&scene); + + scene.addItem(widget); + + view->show(); + + widget->resize(500, 100); + // w1 should stay at its preferred size + QCOMPARE(w1->geometry(), QRectF(0, 0, 100, 100)); + QCOMPARE(w2->geometry(), QRectF(100, 0, 400, 100)); + + + // only w1 has hfw + w1->setConstraintFunction(hfw); + QSizePolicy sp(QSizePolicy::Preferred, QSizePolicy::Preferred); + sp.setHeightForWidth(true); + w1->setSizePolicy(sp); + QApplication::sendPostedEvents(); + + QCOMPARE(w1->geometry(), QRectF(0, 0, 100, 200)); + QCOMPARE(w2->geometry(), QRectF(100, 0, 400, 200)); + + // only w2 has hfw + w2->setConstraintFunction(hfw); + w2->setSizePolicy(sp); + + w1->setConstraintFunction(0); + sp.setHeightForWidth(false); + w1->setSizePolicy(sp); + QApplication::sendPostedEvents(); + + QCOMPARE(w1->geometry(), QRectF(0, 0, 100, 100)); + QCOMPARE(w2->geometry(), QRectF(100, 0, 400, 50)); + } +void tst_QGraphicsGridLayout::testDefaultAlignment() +{ + QGraphicsWidget *widget = new QGraphicsWidget; + QGraphicsGridLayout *layout = new QGraphicsGridLayout(widget); + layout->setContentsMargins(0, 0, 0, 0); + layout->setSpacing(0); + + QGraphicsWidget *w = new QGraphicsWidget; + w->setMinimumSize(50,50); + w->setMaximumSize(50,50); + layout->addItem(w,0,0); + + //Default alignment should be to the top-left + + //First, check by forcing the layout to be bigger + layout->setMinimumSize(100,100); + layout->activate(); + QCOMPARE(layout->geometry(), QRectF(0,0,100,100)); + QCOMPARE(w->geometry(), QRectF(0,0,50,50)); + layout->setMinimumSize(-1,-1); + + //Second, check by forcing the column and row to be bigger instead + layout->setColumnMinimumWidth(0, 100); + layout->setRowMinimumHeight(0, 100); + layout->activate(); + QCOMPARE(layout->geometry(), QRectF(0,0,100,100)); + QCOMPARE(w->geometry(), QRectF(0,0,50,50)); + layout->setMinimumSize(-1,-1); + layout->setColumnMinimumWidth(0, 0); + layout->setRowMinimumHeight(0, 0); + + + //Third, check by adding a larger item in the column + QGraphicsWidget *w2 = new QGraphicsWidget; + w2->setMinimumSize(100,100); + w2->setMaximumSize(100,100); + layout->addItem(w2,1,0); + layout->activate(); + QCOMPARE(layout->geometry(), QRectF(0,0,100,150)); + QCOMPARE(w->geometry(), QRectF(0,0,50,50)); + QCOMPARE(w2->geometry(), QRectF(0,50,100,100)); +} QTEST_MAIN(tst_QGraphicsGridLayout) #include "tst_qgraphicsgridlayout.moc" diff --git a/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp b/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp index 6107fa1..965e340 100644 --- a/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp +++ b/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp @@ -103,6 +103,9 @@ private slots: void removeLayout(); void avoidRecursionInInsertItem(); void styleInfoLeak(); + void testAlignmentInLargerLayout(); + void testOffByOneInLargerLayout(); + void testDefaultAlignment(); // Task specific tests void task218400_insertStretchCrash(); @@ -1465,6 +1468,121 @@ void tst_QGraphicsLinearLayout::task218400_insertStretchCrash() form->setLayout(layout); // crash } +void tst_QGraphicsLinearLayout::testAlignmentInLargerLayout() +{ + QGraphicsScene *scene = new QGraphicsScene; + QGraphicsWidget *form = new QGraphicsWidget; + scene->addItem(form); + QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical, form); + layout->setSpacing(0); + layout->setContentsMargins(0,0,0,0); + + QGraphicsWidget *a = new QGraphicsWidget; + a->setMaximumSize(100,100); + layout->addItem(a); + + QCOMPARE(form->maximumSize(), QSizeF(100,100)); + QCOMPARE(layout->maximumSize(), QSizeF(100,100)); + layout->setMinimumSize(QSizeF(200,200)); + layout->setMaximumSize(QSizeF(200,200)); + + layout->setAlignment(a, Qt::AlignCenter); + layout->activate(); + QCOMPARE(a->geometry(), QRectF(50,50,100,100)); + + layout->setAlignment(a, Qt::AlignRight | Qt::AlignBottom); + layout->activate(); + QCOMPARE(a->geometry(), QRectF(100,100,100,100)); + + layout->setAlignment(a, Qt::AlignHCenter | Qt::AlignTop); + layout->activate(); + QCOMPARE(a->geometry(), QRectF(50,0,100,100)); + + QGraphicsWidget *b = new QGraphicsWidget; + b->setMaximumSize(100,100); + layout->addItem(b); + + layout->setAlignment(a, Qt::AlignCenter); + layout->setAlignment(b, Qt::AlignCenter); + layout->activate(); + QCOMPARE(a->geometry(), QRectF(50,0,100,100)); + QCOMPARE(b->geometry(), QRectF(50,100,100,100)); + + layout->setAlignment(a, Qt::AlignRight | Qt::AlignBottom); + layout->setAlignment(b, Qt::AlignLeft | Qt::AlignTop); + layout->activate(); + QCOMPARE(a->geometry(), QRectF(100,0,100,100)); + QCOMPARE(b->geometry(), QRectF(0,100,100,100)); +} + +void tst_QGraphicsLinearLayout::testOffByOneInLargerLayout() { + QGraphicsScene *scene = new QGraphicsScene; + QGraphicsWidget *form = new QGraphicsWidget; + scene->addItem(form); + QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical, form); + layout->setSpacing(0); + layout->setContentsMargins(0,0,0,0); + + QGraphicsWidget *a = new QGraphicsWidget; + QGraphicsWidget *b = new QGraphicsWidget; + a->setMaximumSize(100,100); + b->setMaximumSize(100,100); + layout->addItem(a); + layout->addItem(b); + + layout->setAlignment(a, Qt::AlignRight | Qt::AlignBottom); + layout->setAlignment(b, Qt::AlignLeft | Qt::AlignTop); + layout->setMinimumSize(QSizeF(101,201)); + layout->setMaximumSize(QSizeF(101,201)); + layout->activate(); + QCOMPARE(a->geometry(), QRectF(1,0.5,100,100)); + QCOMPARE(b->geometry(), QRectF(0,100.5,100,100)); + + layout->setMinimumSize(QSizeF(100,200)); + layout->setMaximumSize(QSizeF(100,200)); + layout->activate(); + QCOMPARE(a->geometry(), QRectF(0,0,100,100)); + QCOMPARE(b->geometry(), QRectF(0,100,100,100)); + + layout->setMinimumSize(QSizeF(99,199)); + layout->setMaximumSize(QSizeF(99,199)); + layout->activate(); + QCOMPARE(a->geometry(), QRectF(0,0,99,99.5)); + QCOMPARE(b->geometry(), QRectF(0,99.5,99,99.5)); +} +void tst_QGraphicsLinearLayout::testDefaultAlignment() +{ + QGraphicsWidget *widget = new QGraphicsWidget; + QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical, widget); + layout->setContentsMargins(0, 0, 0, 0); + layout->setSpacing(0); + + QGraphicsWidget *w = new QGraphicsWidget; + w->setMinimumSize(50,50); + w->setMaximumSize(50,50); + layout->addItem(w); + + //Default alignment should be to the top-left + QCOMPARE(layout->alignment(w), 0); + + //First, check by forcing the layout to be bigger + layout->setMinimumSize(100,100); + layout->activate(); + QCOMPARE(layout->geometry(), QRectF(0,0,100,100)); + QCOMPARE(w->geometry(), QRectF(0,0,50,50)); + layout->setMinimumSize(-1,-1); + + //Second, check by adding a larger item in the column + QGraphicsWidget *w2 = new QGraphicsWidget; + w2->setMinimumSize(100,100); + w2->setMaximumSize(100,100); + layout->addItem(w2); + layout->activate(); + QCOMPARE(layout->geometry(), QRectF(0,0,100,150)); + QCOMPARE(w->geometry(), QRectF(0,0,50,50)); + QCOMPARE(w2->geometry(), QRectF(0,50,100,100)); +} + QTEST_MAIN(tst_QGraphicsLinearLayout) #include "tst_qgraphicslinearlayout.moc" diff --git a/tests/auto/qthread/tst_qthread.cpp b/tests/auto/qthread/tst_qthread.cpp index 843749a..b0efb5a 100644 --- a/tests/auto/qthread/tst_qthread.cpp +++ b/tests/auto/qthread/tst_qthread.cpp @@ -106,6 +106,7 @@ private slots: void adoptMultipleThreads(); void QTBUG13810_exitAndStart(); + void QTBUG15378_exitAndExec(); void stressTest(); }; @@ -976,5 +977,45 @@ void tst_QThread::QTBUG13810_exitAndStart() } +void tst_QThread::QTBUG15378_exitAndExec() +{ + class Thread : public QThread { + public: + QSemaphore sem1; + QSemaphore sem2; + volatile int value; + void run() { + sem1.acquire(); + value = exec(); //First entrence + sem2.release(); + value = exec(); // Second loop + } + }; + Thread thread; + thread.value = 0; + thread.start(); + thread.exit(556); + thread.sem1.release(); //should exit the first loop + thread.sem2.acquire(); + int v = thread.value; + QCOMPARE(v, 556); + + //test that the thread is running by executing queued connected signal there + Syncronizer sync1; + sync1.moveToThread(&thread); + Syncronizer sync2; + sync2.moveToThread(&thread); + connect(&sync2, SIGNAL(propChanged(int)), &sync1, SLOT(setProp(int)), Qt::QueuedConnection); + connect(&sync1, SIGNAL(propChanged(int)), &thread, SLOT(quit()), Qt::QueuedConnection); + QMetaObject::invokeMethod(&sync2, "setProp", Qt::QueuedConnection , Q_ARG(int, 89)); + QTest::qWait(50); + while(!thread.wait(10)) + QTest::qWait(10); + QCOMPARE(sync2.m_prop, 89); + QCOMPARE(sync1.m_prop, 89); +} + + + QTEST_MAIN(tst_QThread) #include "tst_qthread.moc" diff --git a/tests/benchmarks/gui/graphicsview/qgraphicslinearlayout/qgraphicslinearlayout.pro b/tests/benchmarks/gui/graphicsview/qgraphicslinearlayout/qgraphicslinearlayout.pro new file mode 100644 index 0000000..ff85fe8 --- /dev/null +++ b/tests/benchmarks/gui/graphicsview/qgraphicslinearlayout/qgraphicslinearlayout.pro @@ -0,0 +1,6 @@ +load(qttest_p4) +TEMPLATE = app +TARGET = tst_bench_qgraphicslinearlayout + +SOURCES += tst_qgraphicslinearlayout.cpp + diff --git a/tests/benchmarks/gui/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp b/tests/benchmarks/gui/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp new file mode 100644 index 0000000..dc415fb --- /dev/null +++ b/tests/benchmarks/gui/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp @@ -0,0 +1,133 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtTest/QtTest> +#include <QtGui/qgraphicslinearlayout.h> +#include <QtGui/qgraphicswidget.h> +#include <QtGui/qgraphicsview.h> + +class tst_QGraphicsLinearLayout : public QObject +{ + Q_OBJECT +public: + tst_QGraphicsLinearLayout() {} + ~tst_QGraphicsLinearLayout() {} + +private slots: + void heightForWidth_data(); + void heightForWidth(); +}; + + +struct MySquareWidget : public QGraphicsWidget +{ + MySquareWidget() {} + virtual QSizeF sizeHint ( Qt::SizeHint which, const QSizeF & constraint = QSizeF() ) const + { + if (which != Qt::PreferredSize) + return QGraphicsWidget::sizeHint(which, constraint); + if (constraint.width() < 0) + return QGraphicsWidget::sizeHint(which, constraint); + return QSizeF(constraint.width(), constraint.width()); + } +}; + +void tst_QGraphicsLinearLayout::heightForWidth_data() +{ + QTest::addColumn<bool>("hfw"); + QTest::addColumn<bool>("nested"); + + QTest::newRow("hfw") << true << false; + QTest::newRow("hfw, nested") << true << true; + QTest::newRow("not hfw") << false << false; + QTest::newRow("not hfw, nested") << false << true; +} + +void tst_QGraphicsLinearLayout::heightForWidth() +{ + QFETCH(bool, hfw); + QFETCH(bool, nested); + + QGraphicsScene scene; + QGraphicsWidget *form = new QGraphicsWidget; + scene.addItem(form); + + QGraphicsLinearLayout *outerlayout = 0; + if (nested) { + outerlayout = new QGraphicsLinearLayout(form); + for (int i = 0; i < 8; i++) { + QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical); + outerlayout->addItem(layout); + outerlayout = layout; + } + } + + QGraphicsLinearLayout *qlayout = 0; + qlayout = new QGraphicsLinearLayout(Qt::Vertical); + if (nested) + outerlayout->addItem(qlayout); + else + form->setLayout(qlayout); + + MySquareWidget *widget = new MySquareWidget; + for (int i = 0; i < 1; i++) { + widget = new MySquareWidget; + QSizePolicy sizepolicy = widget->sizePolicy(); + sizepolicy.setHeightForWidth(hfw); + widget->setSizePolicy(sizepolicy); + qlayout->addItem(widget); + } + // make sure only one iteration is done. + // run with tst_QGraphicsLinearLayout.exe "heightForWidth" -tickcounter -iterations 6 + // this will iterate 6 times the whole test, (not only the benchmark) + // which should reduce warmup time and give a realistic picture of the performance of + // effectiveSizeHint() + QSizeF constraint(hfw ? 100 : -1, -1); + QBENCHMARK { + (void)form->effectiveSizeHint(Qt::PreferredSize, constraint); + } + +} + + +QTEST_MAIN(tst_QGraphicsLinearLayout) + +#include "tst_qgraphicslinearlayout.moc" diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 3808c4e..5966fd2 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -3331,7 +3331,7 @@ void Configure::generateConfigfiles() if (tmpFile3.open()) { tmpStream.setDevice(&tmpFile3); tmpStream << "/* Evaluation license key */" << endl - << "static const char qt_eval_key_data [512 + 12] = \"qt_qevalkey=" << licenseInfo["LICENSEKEYEXT"] << "\";" << endl; + << "static const volatile char qt_eval_key_data [512 + 12] = \"qt_qevalkey=" << licenseInfo["LICENSEKEYEXT"] << "\";" << endl; tmpStream.flush(); tmpFile3.flush(); diff --git a/tools/qmeegographicssystemhelper/qmeegoswitchevent.cpp b/tools/qmeegographicssystemhelper/qmeegoswitchevent.cpp index b136ce8..22ea0fe 100644 --- a/tools/qmeegographicssystemhelper/qmeegoswitchevent.cpp +++ b/tools/qmeegographicssystemhelper/qmeegoswitchevent.cpp @@ -41,7 +41,9 @@ #include "qmeegoswitchevent.h" -QMeeGoSwitchEvent::QMeeGoSwitchEvent(const QString &graphicsSystemName, QMeeGoSwitchEvent::State s) : QEvent((QEvent::Type) QMeeGoSwitchEvent::SwitchEvent) +static int switchEventNumber = -1; + +QMeeGoSwitchEvent::QMeeGoSwitchEvent(const QString &graphicsSystemName, QMeeGoSwitchEvent::State s) : QEvent(QMeeGoSwitchEvent::eventNumber()) { name = graphicsSystemName; switchState = s; @@ -55,4 +57,12 @@ QString QMeeGoSwitchEvent::graphicsSystemName() const QMeeGoSwitchEvent::State QMeeGoSwitchEvent::state() const { return switchState; +} + +QEvent::Type QMeeGoSwitchEvent::eventNumber() +{ + if (switchEventNumber < 0) + switchEventNumber = QEvent::registerEventType(); + + return (QEvent::Type) switchEventNumber; }
\ No newline at end of file diff --git a/tools/qmeegographicssystemhelper/qmeegoswitchevent.h b/tools/qmeegographicssystemhelper/qmeegoswitchevent.h index 2d8371e..0ddbd3d 100644 --- a/tools/qmeegographicssystemhelper/qmeegoswitchevent.h +++ b/tools/qmeegographicssystemhelper/qmeegoswitchevent.h @@ -62,11 +62,6 @@ public: DidSwitch }; - //! The event type id to use to detect this event. - enum Type { - SwitchEvent = QEvent::User + 1024 - }; - //! Constructor for the event. /*! Creates a new event with the given name and the given state. @@ -83,6 +78,13 @@ public: //! Returns the state represented by this event. State state() const; + //! Returns the event type/number for QMeeGoSwitchEvent. + /*! + The type is registered on first access. Use this to detect incoming + QMeeGoSwitchEvents. + */ + QEvent::Type eventNumber(); + private: QString name; State switchState; diff --git a/tools/qml/qmlruntime.cpp b/tools/qml/qmlruntime.cpp index 78bc409..7ea77d1 100644 --- a/tools/qml/qmlruntime.cpp +++ b/tools/qml/qmlruntime.cpp @@ -1012,7 +1012,7 @@ void QDeclarativeViewer::addPluginPath(const QString& plugin) void QDeclarativeViewer::reload() { - open(currentFileOrUrl); + launch(currentFileOrUrl); } void QDeclarativeViewer::openFile() |