summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorA-Team <ateam@pad.test.qt.nokia.com>2010-11-24 23:00:17 (GMT)
committerA-Team <ateam@pad.test.qt.nokia.com>2010-11-24 23:00:17 (GMT)
commitc2e21fea3cd670127a898ac2ff5abd8135bde5f0 (patch)
treebf49e35e7dffe54301aab6cae5874977bc696496
parentbe28cdcc51a8c22151199bcf8cd171e28287e8d0 (diff)
parent422282c4f3e439990abc6c6b79699d943b9541d7 (diff)
downloadQt-c2e21fea3cd670127a898ac2ff5abd8135bde5f0.zip
Qt-c2e21fea3cd670127a898ac2ff5abd8135bde5f0.tar.gz
Qt-c2e21fea3cd670127a898ac2ff5abd8135bde5f0.tar.bz2
Merge branch '4.7-upstream' into 4.7-doc
-rw-r--r--.gitignore2
-rwxr-xr-xconfigure2
-rw-r--r--doc/src/declarative/basictypes.qdoc2
-rw-r--r--doc/src/snippets/code/doc_src_properties.qdoc17
-rw-r--r--doc/src/snippets/moc/myclass2.h7
-rw-r--r--src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp10
-rw-r--r--src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview_p.h2
-rw-r--r--src/corelib/kernel/qtcore_eval.cpp4
-rw-r--r--src/corelib/thread/qthread.cpp4
-rw-r--r--src/corelib/thread/qthread_unix.cpp13
-rw-r--r--src/corelib/tools/qlocale.cpp1
-rw-r--r--src/declarative/graphicsitems/qdeclarativeflickable.cpp16
-rw-r--r--src/declarative/graphicsitems/qdeclarativelistview.cpp8
-rw-r--r--src/declarative/graphicsitems/qdeclarativemousearea.cpp37
-rw-r--r--src/declarative/qml/qdeclarativeworkerscript.cpp13
-rw-r--r--src/gui/dialogs/qmessagebox.cpp88
-rw-r--r--src/gui/graphicsview/qgraphicsgridlayout.cpp11
-rw-r--r--src/gui/graphicsview/qgraphicslayoutitem.cpp35
-rw-r--r--src/gui/graphicsview/qgraphicslayoutitem_p.h2
-rw-r--r--src/gui/graphicsview/qgraphicslinearlayout.cpp4
-rw-r--r--src/gui/graphicsview/qgridlayoutengine.cpp185
-rw-r--r--src/gui/graphicsview/qgridlayoutengine_p.h7
-rw-r--r--src/gui/styles/qs60style.cpp59
-rw-r--r--src/gui/text/qfontengine_x11.cpp2
-rw-r--r--src/openvg/qpaintengine_vg.cpp4
-rw-r--r--src/plugins/s60/feedback/feedback.pro2
-rw-r--r--src/plugins/s60/s60.pro2
-rw-r--r--src/qbase.pri2
-rw-r--r--src/s60installs/bwins/QtGuiu.def3
-rw-r--r--src/s60installs/s60installs.pro2
-rw-r--r--tests/auto/declarative/qdeclarativelistview/data/qtbug14821.qml31
-rw-r--r--tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp21
-rw-r--r--tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp7
-rw-r--r--tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp3
-rw-r--r--tests/auto/declarative/qdeclarativeworkerscript/tst_qdeclarativeworkerscript.cpp5
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.0.pngbin0 -> 1360 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.1.pngbin0 -> 1367 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.2.pngbin0 -> 1367 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.3.pngbin0 -> 1372 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.4.pngbin0 -> 1382 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.5.pngbin0 -> 1379 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.6.pngbin0 -> 1390 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.7.pngbin0 -> 1379 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.8.pngbin0 -> 1380 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.9.pngbin0 -> 1379 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.qml5039
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/nested.qml62
-rw-r--r--tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.0.pngbin0 -> 2812 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.1.pngbin0 -> 2812 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.10.pngbin0 -> 2829 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.2.pngbin0 -> 3466 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.3.pngbin0 -> 2812 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.4.pngbin0 -> 2829 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.5.pngbin0 -> 2829 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.6.pngbin0 -> 2768 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.7.pngbin0 -> 2829 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.8.pngbin0 -> 2829 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.9.pngbin0 -> 2829 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.qml6083
-rw-r--r--tests/auto/declarative/qmlvisual/webview/flickable/flickweb.qml35
-rw-r--r--tests/auto/declarative/qmlvisual/webview/flickable/qtlogo.pngbin0 -> 2738 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/webview/flickable/test.html3
-rw-r--r--tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp366
-rw-r--r--tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp118
-rw-r--r--tests/auto/qthread/tst_qthread.cpp41
-rw-r--r--tests/benchmarks/gui/graphicsview/qgraphicslinearlayout/qgraphicslinearlayout.pro6
-rw-r--r--tests/benchmarks/gui/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp133
-rw-r--r--tools/configure/configureapp.cpp2
-rw-r--r--tools/qmeegographicssystemhelper/qmeegoswitchevent.cpp12
-rw-r--r--tools/qmeegographicssystemhelper/qmeegoswitchevent.h12
-rw-r--r--tools/qml/qmlruntime.cpp2
71 files changed, 12302 insertions, 225 deletions
diff --git a/.gitignore b/.gitignore
index af52197..f9a4454 100644
--- a/.gitignore
+++ b/.gitignore
@@ -235,3 +235,5 @@ qtc-debugging-helper
src/corelib/lib
src/network/lib
src/xml/lib/
+
+.pc/
diff --git a/configure b/configure
index 5aab180..059aa1a 100755
--- a/configure
+++ b/configure
@@ -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
new file mode 100644
index 0000000..793fb0f
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.1.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.1.png
new file mode 100644
index 0000000..5935b45
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.2.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.2.png
new file mode 100644
index 0000000..a205266
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.3.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.3.png
new file mode 100644
index 0000000..3d81ff2
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.4.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.4.png
new file mode 100644
index 0000000..ee2076e
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.5.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.5.png
new file mode 100644
index 0000000..9017124
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.6.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.6.png
new file mode 100644
index 0000000..216dd7e
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.7.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.7.png
new file mode 100644
index 0000000..27e8480
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.7.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.8.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.8.png
new file mode 100644
index 0000000..6b911c5
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.8.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.9.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.9.png
new file mode 100644
index 0000000..01858a5
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/nested.9.png
Binary files differ
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
new file mode 100644
index 0000000..513aab6
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.1.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.1.png
new file mode 100644
index 0000000..513aab6
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.10.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.10.png
new file mode 100644
index 0000000..bb22d01
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.10.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.2.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.2.png
new file mode 100644
index 0000000..1357551
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.3.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.3.png
new file mode 100644
index 0000000..513aab6
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.4.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.4.png
new file mode 100644
index 0000000..bb22d01
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.5.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.5.png
new file mode 100644
index 0000000..bb22d01
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.6.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.6.png
new file mode 100644
index 0000000..c61ae3f
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.7.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.7.png
new file mode 100644
index 0000000..bb22d01
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.7.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.8.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.8.png
new file mode 100644
index 0000000..bb22d01
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.8.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.9.png b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.9.png
new file mode 100644
index 0000000..bb22d01
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/webview/flickable/data/flickweb.9.png
Binary files differ
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
new file mode 100644
index 0000000..399bd0b
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/webview/flickable/qtlogo.png
Binary files differ
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()