diff options
author | Martin Jones <martin.jones@nokia.com> | 2009-11-06 03:14:57 (GMT) |
---|---|---|
committer | Martin Jones <martin.jones@nokia.com> | 2009-11-06 03:14:57 (GMT) |
commit | 09da662ff8486a5d0e990e26e8a4e499dcf6d404 (patch) | |
tree | a54775f8b549dabeb205f7c19aea8377827fd8dd | |
parent | 9cd41cbd61afd2459c0c3f053aa45a02954ef77c (diff) | |
parent | 2787177ff160e79b2274b07f688ca96b0acb4ee1 (diff) | |
download | Qt-09da662ff8486a5d0e990e26e8a4e499dcf6d404.zip Qt-09da662ff8486a5d0e990e26e8a4e499dcf6d404.tar.gz Qt-09da662ff8486a5d0e990e26e8a4e499dcf6d404.tar.bz2 |
Merge branch 'kinetic-declarativeui' of git@scm.dev.nokia.troll.no:qt/kinetic into kinetic-declarativeui
130 files changed, 7868 insertions, 499 deletions
diff --git a/examples/declarative/tutorials/samegame/samegame2/samegame.js b/examples/declarative/tutorials/samegame/samegame2/samegame.js index 2bf68b5..2c02c61 100644 --- a/examples/declarative/tutorials/samegame/samegame2/samegame.js +++ b/examples/declarative/tutorials/samegame/samegame2/samegame.js @@ -22,8 +22,8 @@ function initBoard() //Initialize Board board = new Array(maxIndex); - for(xIdx=0; xIdx<maxX; xIdx++){ - for(yIdx=0; yIdx<maxY; yIdx++){ + for(var xIdx=0; xIdx<maxX; xIdx++){ + for(var yIdx=0; yIdx<maxY; yIdx++){ board[index(xIdx,yIdx)] = null; createBlock(xIdx,yIdx); } @@ -39,7 +39,7 @@ function createBlock(xIdx,yIdx){ // not be ready immediately. There is a statusChanged signal on the // component you could use if you want to wait to load remote files. if(component.isReady){ - dynamicObject = component.createObject(); + var dynamicObject = component.createObject(); if(dynamicObject == null){ print("error creating block"); print(component.errorsString()); diff --git a/examples/declarative/tutorials/samegame/samegame3/samegame.js b/examples/declarative/tutorials/samegame/samegame3/samegame.js index 8fecfef..528a73c 100644 --- a/examples/declarative/tutorials/samegame/samegame3/samegame.js +++ b/examples/declarative/tutorials/samegame/samegame3/samegame.js @@ -14,7 +14,7 @@ function index(xIdx,yIdx) { function initBoard() { - for(i = 0; i<maxIndex; i++){ + for(var i = 0; i<maxIndex; i++){ //Delete old blocks if(board[i] != null) board[i].destroy(); @@ -31,8 +31,8 @@ function initBoard() //Initialize Board board = new Array(maxIndex); gameCanvas.score = 0; - for(xIdx=0; xIdx<maxX; xIdx++){ - for(yIdx=0; yIdx<maxY; yIdx++){ + for(var xIdx=0; xIdx<maxX; xIdx++){ + for(var yIdx=0; yIdx<maxY; yIdx++){ board[index(xIdx,yIdx)] = null; createBlock(xIdx,yIdx); } @@ -48,7 +48,7 @@ function createBlock(xIdx,yIdx){ // not be ready immediately. There is a statusChanged signal on the // component you could use if you want to wait to load remote files. if(component.isReady){ - dynamicObject = component.createObject(); + var dynamicObject = component.createObject(); if(dynamicObject == null){ print("error creating block"); print(component.errorsString()); @@ -123,7 +123,7 @@ function floodFill(xIdx,yIdx,type) function shuffleDown() { //Fall down - for(xIdx=0; xIdx<maxX; xIdx++){ + for(var xIdx=0; xIdx<maxX; xIdx++){ fallDist = 0; for(yIdx=maxY-1; yIdx>=0; yIdx--){ if(board[index(xIdx,yIdx)] == null){ diff --git a/examples/declarative/tutorials/samegame/samegame4/content/samegame.js b/examples/declarative/tutorials/samegame/samegame4/content/samegame.js index ce9c169..58de55f 100755 --- a/examples/declarative/tutorials/samegame/samegame4/content/samegame.js +++ b/examples/declarative/tutorials/samegame/samegame4/content/samegame.js @@ -1,14 +1,14 @@ /* This script file handles the game logic */ //Note that X/Y referred to here are in game coordinates -var maxX = 10;//Nums are for tileSize 40 +var maxX = 10;//Nums are for gameCanvas.tileSize 40 var maxY = 15; -var tileSize = 40; var maxIndex = maxX*maxY; var board = new Array(maxIndex); var tileSrc = "content/BoomBlock.qml"; var scoresURL = "http://qtfx-nokia.trolltech.com.au/samegame/scores.php"; +var scoresURL = ""; var timer; -var component; +var component = createComponent(tileSrc); //Index function used instead of a 2D array function index(xIdx,yIdx) { @@ -22,33 +22,41 @@ function timeStr(msecs) { return ret; } +function getTileSize() +{ + return tileSize; +} + function initBoard() { - for(i = 0; i<maxIndex; i++){ + for(var i = 0; i<maxIndex; i++){ //Delete old blocks if(board[i] != null) board[i].destroy(); } //Calculate board size - maxX = Math.floor(gameCanvas.width/tileSize); - maxY = Math.floor(gameCanvas.height/tileSize); + maxX = Math.floor(gameCanvas.width/gameCanvas.tileSize); + maxY = Math.floor(gameCanvas.height/gameCanvas.tileSize); maxIndex = maxY*maxX; //Close dialogs scoreName.forceClose(); dialog.forceClose(); + var a = new Date(); //Initialize Board board = new Array(maxIndex); gameCanvas.score = 0; - for(xIdx=0; xIdx<maxX; xIdx++){ - for(yIdx=0; yIdx<maxY; yIdx++){ + for(var xIdx=0; xIdx<maxX; xIdx++){ + for(var yIdx=0; yIdx<maxY; yIdx++){ board[index(xIdx,yIdx)] = null; createBlock(xIdx,yIdx); } } timer = new Date(); + + print(timer.valueOf() - a.valueOf()); } var fillFound;//Set after a floodFill call to the number of tiles found @@ -56,8 +64,8 @@ var floodBoard;//Set to 1 if the floodFill reaches off that node //NOTE: Be careful with vars named x,y, as the calling object's x,y are still in scope function handleClick(x,y) { - xIdx = Math.floor(x/tileSize); - yIdx = Math.floor(y/tileSize); + var xIdx = Math.floor(x/gameCanvas.tileSize); + var yIdx = Math.floor(y/gameCanvas.tileSize); if(xIdx >= maxX || xIdx < 0 || yIdx >= maxY || yIdx < 0) return; if(board[index(xIdx, yIdx)] == null) @@ -103,15 +111,15 @@ function floodFill(xIdx,yIdx,type) function shuffleDown() { //Fall down - for(xIdx=0; xIdx<maxX; xIdx++){ - fallDist = 0; - for(yIdx=maxY-1; yIdx>=0; yIdx--){ + for(var xIdx=0; xIdx<maxX; xIdx++){ + var fallDist = 0; + for(var yIdx=maxY-1; yIdx>=0; yIdx--){ if(board[index(xIdx,yIdx)] == null){ fallDist += 1; }else{ if(fallDist > 0){ - obj = board[index(xIdx,yIdx)]; - obj.targetY += fallDist * tileSize; + var obj = board[index(xIdx,yIdx)]; + obj.targetY += fallDist * gameCanvas.tileSize; board[index(xIdx,yIdx+fallDist)] = obj; board[index(xIdx,yIdx)] = null; } @@ -129,7 +137,7 @@ function shuffleDown() obj = board[index(xIdx,yIdx)]; if(obj == null) continue; - obj.targetX -= fallDist * tileSize; + obj.targetX -= fallDist * gameCanvas.tileSize; board[index(xIdx-fallDist,yIdx)] = obj; board[index(xIdx,yIdx)] = null; } @@ -141,8 +149,8 @@ function shuffleDown() function victoryCheck() { //awards bonuses for no tiles left - deservesBonus = true; - for(xIdx=maxX-1; xIdx>=0; xIdx--) + var deservesBonus = true; + for(var xIdx=maxX-1; xIdx>=0; xIdx--) if(board[index(xIdx, maxY - 1)] != null) deservesBonus = false; if(deservesBonus) @@ -150,10 +158,8 @@ function victoryCheck() //Checks for game over if(deservesBonus || !(floodMoveCheck(0,maxY-1, -1))){ timer = new Date() - timer; - if(scoresURL != "") - scoreName.show("You've won! Please enter your name: "); - else - dialog.show("Game Over. Your score is " + gameCanvas.score); + scoreName.show("You won! Please enter your name: "); + //dialog.show("Game Over. Your score is " + gameCanvas.score); } } @@ -164,7 +170,7 @@ function floodMoveCheck(xIdx, yIdx, type) return false; if(board[index(xIdx, yIdx)] == null) return false; - myType = board[index(xIdx, yIdx)].type; + var myType = board[index(xIdx, yIdx)].type; if(type == myType) return true; return floodMoveCheck(xIdx + 1, yIdx, myType) || @@ -172,15 +178,12 @@ function floodMoveCheck(xIdx, yIdx, type) } function createBlock(xIdx,yIdx){ - if(component==null) - component = createComponent(tileSrc); - // Note that we don't wait for the component to become ready. This will // only work if the block QML is a local file. Otherwise the component will // not be ready immediately. There is a statusChanged signal on the // component you could use if you want to wait to load remote files. if(component.isReady){ - dynamicObject = component.createObject(); + var dynamicObject = component.createObject(); if(dynamicObject == null){ print("error creating block"); print(component.errorsString()); @@ -188,11 +191,11 @@ function createBlock(xIdx,yIdx){ } dynamicObject.type = Math.floor(Math.random() * 3); dynamicObject.parent = gameCanvas; - dynamicObject.x = xIdx*tileSize; - dynamicObject.targetX = xIdx*tileSize; - dynamicObject.targetY = yIdx*tileSize; - dynamicObject.width = tileSize; - dynamicObject.height = tileSize; + dynamicObject.x = xIdx*gameCanvas.tileSize; + dynamicObject.targetX = xIdx*gameCanvas.tileSize; + dynamicObject.targetY = yIdx*gameCanvas.tileSize; + dynamicObject.width = gameCanvas.tileSize; + dynamicObject.height = gameCanvas.tileSize; dynamicObject.spawned = true; board[index(xIdx,yIdx)] = dynamicObject; }else{//isError or isLoading @@ -203,6 +206,42 @@ function createBlock(xIdx,yIdx){ return true; } +function saveHighScore(name) { + if(scoresURL!="") + sendHighScore(name); + //OfflineStorage + var db = openDatabase("SameGameScores", "1.0", "Local SameGame High Scores",100); + var dataStr = "INSERT INTO Scores VALUES(?, ?, ?, ?)"; + var data = [name, gameCanvas.score, maxX+"x"+maxY ,Math.floor(timer/1000)]; + db.transaction( + function(tx) { + tx.executeSql('CREATE TABLE IF NOT EXISTS Scores(name TEXT, score NUMBER, gridSize TEXT, time NUMBER)',[]); + tx.executeSql(dataStr, data); + + tx.executeSql('SELECT * FROM Scores WHERE gridSize = "12x17" ORDER BY score desc LIMIT 10',[], + function(tx, rs) { + var r = "\nHIGH SCORES for a standard sized grid\n\n" + for(var i = 0; i < rs.rows.length; i++){ + r += (i+1)+". " + rs.rows.item(i).name +' got ' + + rs.rows.item(i).score + ' points in ' + + rs.rows.item(i).time + ' seconds.\n'; + } + dialog.show(r); + }, + function(tx, error) { + print("ERROR:", error.message); + } + ); + }, + function() { + print("ERROR in transaction"); + }, + function() { + //print("Transaction successful"); + } + ); +} + //![1] function sendHighScore(name) { var postman = new XMLHttpRequest() diff --git a/examples/declarative/tutorials/samegame/samegame4/samegame.qml b/examples/declarative/tutorials/samegame/samegame4/samegame.qml index 89dc945..19b929f 100644 --- a/examples/declarative/tutorials/samegame/samegame4/samegame.qml +++ b/examples/declarative/tutorials/samegame/samegame4/samegame.qml @@ -2,15 +2,13 @@ import Qt 4.6 import "content" Rectangle { - id: Screen + id: screen width: 490; height: 720 - Script { source: "content/samegame.js" } - SystemPalette { id: activePalette } Item { - width: parent.width; anchors.top: parent.top; anchors.bottom: ToolBar.top + width: parent.width; anchors.top: parent.top; anchors.bottom: toolBar.top Image { id: background @@ -21,10 +19,13 @@ Rectangle { Item { id: gameCanvas property int score: 0 + property int tileSize: 40 + + Script { source: "content/samegame.js" } z: 20; anchors.centerIn: parent - width: parent.width - (parent.width % tileSize); - height: parent.height - (parent.height % tileSize); + width: parent.width - (parent.width % getTileSize()); + height: parent.height - (parent.height % getTileSize()); MouseRegion { id: gameMR @@ -34,26 +35,31 @@ Rectangle { } Dialog { id: dialog; anchors.centerIn: parent; z: 21 } - Dialog { - id: scoreName; anchors.centerIn: parent; z: 22; + Dialog { + id: scoreName; anchors.centerIn: parent; z: 22; + Text { + id: spacer + opacity: 0 + text: " You won! Please enter your name:" + } TextInput { - id: Editor - onAccepted: { - if(scoreName.opacity==1&&Editor.text!="") - sendHighScore(Editor.text); - scoreName.forceClose(); + id: editor + onAccepted: { + if(scoreName.opacity==1&&editor.text!="") + saveHighScore(editor.text); + scoreName.forceClose(); } anchors.verticalCenter: parent.verticalCenter width: 72; focus: true - anchors.right: scoreName.right + anchors.left: spacer.right } } Rectangle { - id: ToolBar + id: toolBar color: activePalette.window height: 32; width: parent.width - anchors.bottom: Screen.bottom + anchors.bottom: screen.bottom Button { id: btnA; text: "New Game"; onClicked: {initBoard();} @@ -62,7 +68,7 @@ Rectangle { } Text { - id: Score + id: score text: "Score: " + gameCanvas.score; font.bold: true anchors.right: parent.right; anchors.rightMargin: 3 anchors.verticalCenter: parent.verticalCenter diff --git a/src/declarative/graphicsitems/qmlgraphicsparticles.cpp b/src/declarative/graphicsitems/qmlgraphicsparticles.cpp index 92943e8..4ac02b4 100644 --- a/src/declarative/graphicsitems/qmlgraphicsparticles.cpp +++ b/src/declarative/graphicsitems/qmlgraphicsparticles.cpp @@ -302,7 +302,7 @@ void QmlGraphicsParticleMotionWander::advance(QmlGraphicsParticle &p, int interv qreal xdiff = p.x_velocity - d->x_targetV; if ((xdiff > d->x_peak && d->x_var > 0.0) || (xdiff < -d->x_peak && d->x_var < 0.0)) { d->x_var = -d->x_var; - d->x_peak = _xvariance + _xvariance * qreal(rand()) / RAND_MAX; + d->x_peak = _xvariance + _xvariance * qreal(qrand()) / RAND_MAX; } p.x_velocity += d->x_var * interval; } @@ -312,7 +312,7 @@ void QmlGraphicsParticleMotionWander::advance(QmlGraphicsParticle &p, int interv qreal ydiff = p.y_velocity - d->y_targetV; if ((ydiff > d->y_peak && d->y_var > 0.0) || (ydiff < -d->y_peak && d->y_var < 0.0)) { d->y_var = -d->y_var; - d->y_peak = _yvariance + _yvariance * qreal(rand()) / RAND_MAX; + d->y_peak = _yvariance + _yvariance * qreal(qrand()) / RAND_MAX; } p.y_velocity += d->y_var * interval; } @@ -329,8 +329,8 @@ void QmlGraphicsParticleMotionWander::created(QmlGraphicsParticle &p) d->y_targetV = p.y_velocity; d->x_peak = _xvariance; d->y_peak = _yvariance; - d->x_var = _pace * qreal(rand()) / RAND_MAX / 1000.0; - d->y_var = _pace * qreal(rand()) / RAND_MAX / 1000.0; + d->x_var = _pace * qreal(qrand()) / RAND_MAX / 1000.0; + d->y_var = _pace * qreal(qrand()) / RAND_MAX / 1000.0; } } @@ -456,7 +456,7 @@ void QmlGraphicsParticlesPrivate::tick(int time) if (emissionRate != -1){ qreal variance = 1.; if (emissionVariance > 0.){ - variance += (qreal(rand())/RAND_MAX) * emissionVariance * (rand()%2?-1.:1.); + variance += (qreal(qrand())/RAND_MAX) * emissionVariance * (qrand()%2?-1.:1.); } qreal emission = emissionRate * (qreal(interval)/1000.); emission = emission * variance + emissionCarry; @@ -478,7 +478,7 @@ void QmlGraphicsParticlesPrivate::tick(int time) }else{ qreal variance = 1.; if (emissionVariance > 0.){ - variance += (qreal(rand())/RAND_MAX) * emissionVariance * (rand()%2?-1.:1.); + variance += (qreal(qrand())/RAND_MAX) * emissionVariance * (qrand()%2?-1.:1.); } qreal workingEmission = bursts[i].second * (qreal(interval)/1000.); workingEmission *= variance; @@ -510,11 +510,11 @@ void QmlGraphicsParticlesPrivate::createParticle(int time) #endif Q_Q(QmlGraphicsParticles); QmlGraphicsParticle p(time); - p.x = q->x() + q->width() * qreal(rand()) / RAND_MAX - image.width()/2.0; - p.y = q->y() + q->height() * qreal(rand()) / RAND_MAX - image.height()/2.0; + p.x = q->x() + q->width() * qreal(qrand()) / RAND_MAX - image.width()/2.0; + p.y = q->y() + q->height() * qreal(qrand()) / RAND_MAX - image.height()/2.0; p.lifeSpan = lifeSpan; if (lifeSpanDev) - p.lifeSpan += int(lifeSpanDev/2 - lifeSpanDev * qreal(rand()) / RAND_MAX); + p.lifeSpan += int(lifeSpanDev/2 - lifeSpanDev * qreal(qrand()) / RAND_MAX); p.fadeOutAge = p.lifeSpan - fadeOutDur; if (fadeInDur == 0.) { p.state= QmlGraphicsParticle::Solid; @@ -522,12 +522,12 @@ void QmlGraphicsParticlesPrivate::createParticle(int time) } qreal a = angle; if (angleDev) - a += angleDev/2 - angleDev * qreal(rand()) / RAND_MAX; + a += angleDev/2 - angleDev * qreal(qrand()) / RAND_MAX; if (a > M_PI) a = a - 2 * M_PI; qreal v = velocity; if (velocityDev) - v += velocityDev/2 - velocityDev * qreal(rand()) / RAND_MAX; + v += velocityDev/2 - velocityDev * qreal(qrand()) / RAND_MAX; p.x_velocity = v * fastCos(a); p.y_velocity = v * fastSin(a); particles.append(p); diff --git a/src/declarative/graphicsitems/qmlgraphicswebview.cpp b/src/declarative/graphicsitems/qmlgraphicswebview.cpp index 4ac208c..5ce0ee8 100644 --- a/src/declarative/graphicsitems/qmlgraphicswebview.cpp +++ b/src/declarative/graphicsitems/qmlgraphicswebview.cpp @@ -362,7 +362,7 @@ void QmlGraphicsWebView::pageUrlChanged() expandToWebPage(); if ((d->url.isEmpty() && page()->mainFrame()->url() != QUrl(QLatin1String("about:blank"))) - || d->url != page()->mainFrame()->url()) + || d->url != page()->mainFrame()->url() && !page()->mainFrame()->url().isEmpty()) { d->url = page()->mainFrame()->url(); if (d->url == QUrl(QLatin1String("about:blank"))) diff --git a/src/declarative/qml/qmlboundsignal.cpp b/src/declarative/qml/qmlboundsignal.cpp index def11c3..deb15dc 100644 --- a/src/declarative/qml/qmlboundsignal.cpp +++ b/src/declarative/qml/qmlboundsignal.cpp @@ -177,7 +177,7 @@ int QmlBoundSignal::qt_metacall(QMetaObject::Call c, int id, void **a) if (m_params) m_params->setValues(a); if (m_expression) { QmlExpressionPrivate::get(m_expression)->value(m_params); - if (m_expression->hasError()) + if (m_expression && m_expression->hasError()) qWarning().nospace() << qPrintable(m_expression->error().toString()); } if (m_params) m_params->clearValues(); diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp index e46205d..177818f 100644 --- a/src/declarative/qml/qmlengine.cpp +++ b/src/declarative/qml/qmlengine.cpp @@ -908,7 +908,7 @@ QVariant QmlEnginePrivate::scriptValueToVariant(const QScriptValue &val) else if (dc == contextClass) return QVariant(); - QScriptClass *sc = val.scriptClass(); + QScriptDeclarativeClass *sc = QScriptDeclarativeClass::scriptClass(val); if (!sc) { return val.toVariant(); } else if (sc == valueTypeClass) { @@ -929,20 +929,7 @@ QVariant QmlScriptClass::toVariant(QmlEngine *engine, const QScriptValue &val) QmlEnginePrivate *ep = static_cast<QmlEnginePrivate *>(QObjectPrivate::get(engine)); - QScriptDeclarativeClass *dc = QScriptDeclarativeClass::scriptClass(val); - if (dc == ep->objectClass) - return QVariant::fromValue(ep->objectClass->toQObject(val)); - else if (dc == ep->contextClass) - return QVariant(); - - QScriptClass *sc = val.scriptClass(); - if (!sc) { - return val.toVariant(); - } else if (sc == ep->valueTypeClass) { - return ep->valueTypeClass->toVariant(val); - } - - return QVariant(); + return ep->scriptValueToVariant(val); } // XXX this beyonds in QUrl::toLocalFile() diff --git a/src/declarative/qml/qmlinfo.cpp b/src/declarative/qml/qmlinfo.cpp index c0d9eca..f62f5fd 100644 --- a/src/declarative/qml/qmlinfo.cpp +++ b/src/declarative/qml/qmlinfo.cpp @@ -80,18 +80,18 @@ void qmlInfo(const QString& msg, QObject* object) pos += QLatin1Char(' '); pos += QLatin1String(object->metaObject()->className()); } - QmlDeclarativeData *ddata = QmlDeclarativeData::get(object); + QmlDeclarativeData *ddata = object?QmlDeclarativeData::get(object):0; pos += QLatin1String(" ("); if (ddata) { if (ddata->outerContext) { pos += ddata->outerContext->baseUrl().toString(); + pos += QLatin1String(":"); + pos += QString::number(ddata->lineNumber); + pos += QLatin1String(":"); + pos += QString::number(ddata->columnNumber); } else { - pos += qApp->translate("QmlInfo","unknown"); + pos += qApp->translate("QmlInfo","unknown location"); } - pos += QLatin1String(":"); - pos += QString::number(ddata->lineNumber); - pos += QLatin1String(":"); - pos += QString::number(ddata->columnNumber); } else { pos += qApp->translate("QmlInfo","unknown location"); } diff --git a/src/declarative/qml/qmlintegercache.cpp b/src/declarative/qml/qmlintegercache.cpp index b20b6eb..d1927b3 100644 --- a/src/declarative/qml/qmlintegercache.cpp +++ b/src/declarative/qml/qmlintegercache.cpp @@ -82,33 +82,4 @@ int QmlIntegerCache::value(const QString &id) return d?d->value:-1; } -QmlIntegerCache *QmlIntegerCache::createForEnums(QmlType *type, QmlEngine *engine) -{ - Q_ASSERT(type); - Q_ASSERT(engine); - - QmlIntegerCache *cache = new QmlIntegerCache(engine); - - const QMetaObject *mo = type->metaObject(); - - for (int ii = mo->enumeratorCount() - 1; ii >= 0; --ii) { - QMetaEnum enumerator = mo->enumerator(ii); - - for (int jj = 0; jj < enumerator.keyCount(); ++jj) { - QString name = QString::fromUtf8(enumerator.key(jj)); - int value = enumerator.value(jj); - - if (!name.at(0).isUpper()) - continue; - - if (cache->stringCache.contains(name)) - continue; - - cache->add(name, value); - } - } - - return cache; -} - QT_END_NAMESPACE diff --git a/src/declarative/qml/qmlintegercache_p.h b/src/declarative/qml/qmlintegercache_p.h index 7816004..2b10dcc 100644 --- a/src/declarative/qml/qmlintegercache_p.h +++ b/src/declarative/qml/qmlintegercache_p.h @@ -73,8 +73,6 @@ public: int value(const QString &); inline int value(const QScriptDeclarativeClass::Identifier &id) const; - static QmlIntegerCache *createForEnums(QmlType *, QmlEngine *); - protected: virtual void clear(); diff --git a/src/declarative/qml/qmlmetatype.cpp b/src/declarative/qml/qmlmetatype.cpp index 6ecaa9f..5fb2f50 100644 --- a/src/declarative/qml/qmlmetatype.cpp +++ b/src/declarative/qml/qmlmetatype.cpp @@ -134,7 +134,6 @@ public: QmlCustomParser *m_customParser; mutable volatile bool m_isSetup:1; mutable QList<QmlProxyMetaObject::ProxyData> m_metaObjects; - mutable QByteArray m_hash; }; QmlTypePrivate::QmlTypePrivate() @@ -259,27 +258,6 @@ void QmlTypePrivate::init() const m_metaObjects.at(ii).metaObject->methodOffset(); } - // Calculate hash - QByteArray hashData; - - const QMetaObject *myMetaObject = m_metaObjects.isEmpty()?m_baseMetaObject:m_metaObjects.first().metaObject; - - for (int ii = 0; ii < myMetaObject->propertyCount(); ++ii) { - QMetaProperty prop = myMetaObject->property(ii); - hashData.append(prop.type()); - hashData.append("|"); - hashData.append(prop.name()); - hashData.append("|"); - } - - for (int ii = 0; ii < myMetaObject->methodCount(); ++ii) { - QMetaMethod method = myMetaObject->method(ii); - hashData.append(method.signature()); - hashData.append("|"); - } - - m_hash = QCryptographicHash::hash(hashData, QCryptographicHash::Md5); - m_isSetup = true; lock.unlock(); } @@ -297,13 +275,6 @@ QByteArray QmlType::qmlTypeName() const return d->m_name; } -QByteArray QmlType::hash() const -{ - d->init(); - - return d->m_hash; -} - QObject *QmlType::create() const { d->init(); @@ -804,17 +775,6 @@ const char *QmlMetaType::interfaceIId(int userType) return 0; } -bool QmlMetaType::isObject(const QMetaObject *mo) -{ - // ### Huh? - while(mo) { - if (mo == &QObject::staticMetaObject) - return true; - mo = mo->superClass(); - } - return false; -} - bool QmlMetaType::isQmlList(int userType) { QReadLocker lock(metaTypeDataLock()); @@ -851,6 +811,9 @@ int QmlMetaType::listCount(const QVariant &v) QVariant QmlMetaType::listAt(const QVariant &v, int idx) { + if (idx < 0) + return QVariant(); + int userType = v.userType(); QReadLocker lock(metaTypeDataLock()); @@ -861,7 +824,7 @@ QVariant QmlMetaType::listAt(const QVariant &v, int idx) if (type && type->qListTypeId() == userType) return type->listAt(v, idx); else - return 0; + return QVariant(); } /*! diff --git a/src/declarative/qml/qmlmetatype.h b/src/declarative/qml/qmlmetatype.h index e90c367..1f493f8 100644 --- a/src/declarative/qml/qmlmetatype.h +++ b/src/declarative/qml/qmlmetatype.h @@ -97,7 +97,6 @@ public: static bool isInterface(int); static const char *interfaceIId(int); static bool isObject(int); - static bool isObject(const QMetaObject *); static bool isList(int); static bool isList(const QVariant &); static bool isQmlList(int); @@ -121,8 +120,6 @@ public: int minorVersion() const; bool availableInVersion(int vmajor, int vminor) const; - QByteArray hash() const; - QObject *create() const; QmlCustomParser *customParser() const; diff --git a/src/declarative/qml/qmlprivate.h b/src/declarative/qml/qmlprivate.h index e5b1060..0eec43c 100644 --- a/src/declarative/qml/qmlprivate.h +++ b/src/declarative/qml/qmlprivate.h @@ -283,7 +283,8 @@ int QmlPrivate::list_op(QmlPrivate::ListOp op, int val, } break; case QmlPrivate::Value: - *((QVariant *)*out) = QVariant::fromValue(list->at(val)); + if (list->count() <= val) *((QVariant *)*out) = QVariant(); + else *((QVariant *)*out) = QVariant::fromValue(list->at(val)); break; } return 0; diff --git a/src/declarative/qml/qmlvaluetype_p.h b/src/declarative/qml/qmlvaluetype_p.h index 0af3813..e7566f9 100644 --- a/src/declarative/qml/qmlvaluetype_p.h +++ b/src/declarative/qml/qmlvaluetype_p.h @@ -62,7 +62,7 @@ QT_BEGIN_NAMESPACE -class QmlValueType : public QObject +class Q_AUTOTEST_EXPORT QmlValueType : public QObject { Q_OBJECT public: @@ -73,7 +73,7 @@ public: virtual void setValue(QVariant) = 0; }; -class QmlValueTypeFactory +class Q_AUTOTEST_EXPORT QmlValueTypeFactory { public: QmlValueTypeFactory(); @@ -84,7 +84,7 @@ public: QmlValueType *operator[](int idx) const { return valueTypes[idx]; } }; -class QmlPointFValueType : public QmlValueType +class Q_AUTOTEST_EXPORT QmlPointFValueType : public QmlValueType { Q_PROPERTY(qreal x READ x WRITE setX) Q_PROPERTY(qreal y READ y WRITE setY) @@ -106,7 +106,7 @@ private: QPointF point; }; -class QmlPointValueType : public QmlValueType +class Q_AUTOTEST_EXPORT QmlPointValueType : public QmlValueType { Q_PROPERTY(int x READ x WRITE setX) Q_PROPERTY(int y READ y WRITE setY) @@ -128,7 +128,7 @@ private: QPoint point; }; -class QmlSizeFValueType : public QmlValueType +class Q_AUTOTEST_EXPORT QmlSizeFValueType : public QmlValueType { Q_PROPERTY(qreal width READ width WRITE setWidth) Q_PROPERTY(qreal height READ height WRITE setHeight) @@ -150,7 +150,7 @@ private: QSizeF size; }; -class QmlSizeValueType : public QmlValueType +class Q_AUTOTEST_EXPORT QmlSizeValueType : public QmlValueType { Q_PROPERTY(int width READ width WRITE setWidth) Q_PROPERTY(int height READ height WRITE setHeight) @@ -172,7 +172,7 @@ private: QSize size; }; -class QmlRectFValueType : public QmlValueType +class Q_AUTOTEST_EXPORT QmlRectFValueType : public QmlValueType { Q_PROPERTY(qreal x READ x WRITE setX) Q_PROPERTY(qreal y READ y WRITE setY) @@ -201,7 +201,7 @@ private: QRectF rect; }; -class QmlRectValueType : public QmlValueType +class Q_AUTOTEST_EXPORT QmlRectValueType : public QmlValueType { Q_PROPERTY(int x READ x WRITE setX) Q_PROPERTY(int y READ y WRITE setY) @@ -230,7 +230,7 @@ private: QRect rect; }; -class QmlVector3DValueType : public QmlValueType +class Q_AUTOTEST_EXPORT QmlVector3DValueType : public QmlValueType { Q_PROPERTY(qreal x READ x WRITE setX) Q_PROPERTY(qreal y READ y WRITE setY) @@ -255,7 +255,7 @@ private: QVector3D vector; }; -class QmlFontValueType : public QmlValueType +class Q_AUTOTEST_EXPORT QmlFontValueType : public QmlValueType { Q_OBJECT Q_ENUMS(FontWeight) diff --git a/src/declarative/qml/qmlvaluetypescriptclass.cpp b/src/declarative/qml/qmlvaluetypescriptclass.cpp index 0c30992..e939e80 100644 --- a/src/declarative/qml/qmlvaluetypescriptclass.cpp +++ b/src/declarative/qml/qmlvaluetypescriptclass.cpp @@ -44,15 +44,14 @@ QT_BEGIN_NAMESPACE -struct QmlValueTypeReference { +struct QmlValueTypeReference : public QScriptDeclarativeClass::Object { QmlValueType *type; QGuard<QObject> object; int property; }; -Q_DECLARE_METATYPE(QmlValueTypeReference); QmlValueTypeScriptClass::QmlValueTypeScriptClass(QmlEngine *bindEngine) -: QScriptClass(QmlEnginePrivate::getScriptEngine(bindEngine)), engine(bindEngine) +: QScriptDeclarativeClass(QmlEnginePrivate::getScriptEngine(bindEngine)), engine(bindEngine) { } @@ -62,89 +61,83 @@ QmlValueTypeScriptClass::~QmlValueTypeScriptClass() QScriptValue QmlValueTypeScriptClass::newObject(QObject *object, int coreIndex, QmlValueType *type) { - QmlValueTypeReference ref = { type, object, coreIndex }; - QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); - return scriptEngine->newObject(this, scriptEngine->newVariant(qVariantFromValue(ref))); + QmlValueTypeReference *ref = new QmlValueTypeReference; + ref->type = type; + ref->object = object; + ref->property = coreIndex; + return QScriptDeclarativeClass::newObject(QmlEnginePrivate::getScriptEngine(engine), this, ref); } -QmlValueTypeScriptClass::QueryFlags -QmlValueTypeScriptClass::queryProperty(const QScriptValue &object, - const QScriptString &name, - QueryFlags flags, uint *id) +QScriptClass::QueryFlags +QmlValueTypeScriptClass::queryProperty(Object *obj, const Identifier &name, + QScriptClass::QueryFlags) { - Q_UNUSED(flags); - QmlValueTypeReference ref = - qvariant_cast<QmlValueTypeReference>(object.data().toVariant()); + QmlValueTypeReference *ref = static_cast<QmlValueTypeReference *>(obj); - if (!ref.object) + m_lastIndex = -1; + + if (!ref->object) return 0; - QByteArray propName = name.toString().toUtf8(); + QByteArray propName = toString(name).toUtf8(); - int idx = ref.type->metaObject()->indexOfProperty(propName.constData()); - if (idx == -1) + m_lastIndex = ref->type->metaObject()->indexOfProperty(propName.constData()); + if (m_lastIndex == -1) return 0; - *id = idx; - QMetaProperty prop = ref.object->metaObject()->property(idx); + QMetaProperty prop = ref->object->metaObject()->property(m_lastIndex); - QmlValueTypeScriptClass::QueryFlags rv = - QmlValueTypeScriptClass::HandlesReadAccess; + QScriptClass::QueryFlags rv = + QScriptClass::HandlesReadAccess; if (prop.isWritable()) - rv |= QmlValueTypeScriptClass::HandlesWriteAccess; + rv |= QScriptClass::HandlesWriteAccess; return rv; } -QScriptValue QmlValueTypeScriptClass::property(const QScriptValue &object, - const QScriptString &name, - uint id) +QScriptValue QmlValueTypeScriptClass::property(Object *obj, const Identifier &) { - Q_UNUSED(name); - QmlValueTypeReference ref = - qvariant_cast<QmlValueTypeReference>(object.data().toVariant()); - - if (!ref.object) - return QScriptValue(); + QmlValueTypeReference *ref = static_cast<QmlValueTypeReference *>(obj); - ref.type->read(ref.object, ref.property); - - QMetaProperty p = ref.type->metaObject()->property(id); - QVariant rv = p.read(ref.type); + QMetaProperty p = ref->type->metaObject()->property(m_lastIndex); + ref->type->read(ref->object, ref->property); + QVariant rv = p.read(ref->type); return static_cast<QmlEnginePrivate *>(QObjectPrivate::get(engine))->scriptValueFromVariant(rv); } -void QmlValueTypeScriptClass::setProperty(QScriptValue &object, - const QScriptString &name, - uint id, +void QmlValueTypeScriptClass::setProperty(Object *obj, const Identifier &, const QScriptValue &value) { - Q_UNUSED(name); - QmlValueTypeReference ref = - qvariant_cast<QmlValueTypeReference>(object.data().toVariant()); - - if (!ref.object) - return; + QmlValueTypeReference *ref = static_cast<QmlValueTypeReference *>(obj); QVariant v = QmlScriptClass::toVariant(engine, value); - ref.type->read(ref.object, ref.property); - QMetaProperty p = ref.type->metaObject()->property(id); - p.write(ref.type, v); - ref.type->write(ref.object, ref.property, 0); + ref->type->read(ref->object, ref->property); + QMetaProperty p = ref->type->metaObject()->property(m_lastIndex); + p.write(ref->type, v); + ref->type->write(ref->object, ref->property, 0); } -QVariant QmlValueTypeScriptClass::toVariant(const QScriptValue &val) +QVariant QmlValueTypeScriptClass::toVariant(Object *obj, bool *ok) { - QmlValueTypeReference ref = - qvariant_cast<QmlValueTypeReference>(val.data().toVariant()); + QmlValueTypeReference *ref = static_cast<QmlValueTypeReference *>(obj); - if (!ref.object) + if (ok) *ok = true; + + if (ref->object) { + ref->type->read(ref->object, ref->property); + return ref->type->value(); + } else { return QVariant(); + } +} + +QVariant QmlValueTypeScriptClass::toVariant(const QScriptValue &value) +{ + Q_ASSERT(scriptClass(value) == this); - QMetaProperty p = ref.object->metaObject()->property(ref.property); - return p.read(ref.object); + return toVariant(object(value), 0); } QT_END_NAMESPACE diff --git a/src/declarative/qml/qmlvaluetypescriptclass_p.h b/src/declarative/qml/qmlvaluetypescriptclass_p.h index bd31ec1..19020b2 100644 --- a/src/declarative/qml/qmlvaluetypescriptclass_p.h +++ b/src/declarative/qml/qmlvaluetypescriptclass_p.h @@ -59,7 +59,7 @@ QT_BEGIN_NAMESPACE class QmlEngine; class QmlValueType; -class QmlValueTypeScriptClass : public QScriptClass +class QmlValueTypeScriptClass : public QScriptDeclarativeClass { public: QmlValueTypeScriptClass(QmlEngine *); @@ -67,20 +67,16 @@ public: QScriptValue newObject(QObject *object, int coreIndex, QmlValueType *); - virtual QueryFlags queryProperty(const QScriptValue &object, - const QScriptString &name, - QueryFlags flags, uint *id); - virtual QScriptValue property(const QScriptValue &object, - const QScriptString &name, - uint id); - virtual void setProperty(QScriptValue &object, - const QScriptString &name, - uint id, - const QScriptValue &value); + virtual QScriptClass::QueryFlags queryProperty(Object *, const Identifier &, + QScriptClass::QueryFlags flags); + virtual QScriptValue property(Object *, const Identifier &); + virtual void setProperty(Object *, const Identifier &name, const QScriptValue &); + virtual QVariant toVariant(Object *, bool *ok = 0); QVariant toVariant(const QScriptValue &); private: QmlEngine *engine; + int m_lastIndex; }; QT_END_NAMESPACE diff --git a/src/declarative/util/qmlpropertychanges.cpp b/src/declarative/util/qmlpropertychanges.cpp index 3cc6ca9..3aa3678 100644 --- a/src/declarative/util/qmlpropertychanges.cpp +++ b/src/declarative/util/qmlpropertychanges.cpp @@ -232,7 +232,7 @@ void QmlPropertyChangesPrivate::decode() ds >> data; QmlMetaProperty prop = property(name); //### better way to check for signal property? - if (prop.type() == QmlMetaProperty::SignalProperty) { + if (prop.type() & QmlMetaProperty::SignalProperty) { QmlExpression *expression = new QmlExpression(qmlContext(q), data.toString(), object); expression->setTrackChange(false); QmlReplaceSignalHandler *handler = new QmlReplaceSignalHandler; @@ -307,7 +307,7 @@ QmlPropertyChangesPrivate::property(const QByteArray &property) if (!prop.isValid()) { qmlInfo(QmlPropertyChanges::tr("Cannot assign to non-existant property \"%1\"").arg(QString::fromUtf8(property)), q); return QmlMetaProperty(); - } else if (prop.type() != QmlMetaProperty::SignalProperty && !prop.isWritable()) { + } else if (!(prop.type() & QmlMetaProperty::SignalProperty) && !prop.isWritable()) { qmlInfo(QmlPropertyChanges::tr("Cannot assign to read-only property \"%1\"").arg(QString::fromUtf8(property)), q); return QmlMetaProperty(); } diff --git a/tests/auto/declarative/declarative.pro b/tests/auto/declarative/declarative.pro index 472fd93..82b135f 100644 --- a/tests/auto/declarative/declarative.pro +++ b/tests/auto/declarative/declarative.pro @@ -14,16 +14,20 @@ SUBDIRS += \ qfxloader \ # Cover qfxtextedit \ # Cover qfxtextinput \ # Cover - qfxwebview \ # Cover qmetaobjectbuilder \ # Cover + qmlbinding \ # Cover + qmlconnection \ # Cover qmlcontext \ # Cover qmldom \ # Cover qmlecmascript \ # Cover + qmlerror \ # Cover qmlfontloader \ # Cover qmlgraphicsitem \ # Cover qmlgraphicsborderimage \ # Cover qmlgraphicsparticles \ # Cover qmlgraphicstext \ # Cover + qmlgraphicswebview \ # Cover + qmlinfo \ # Cover qmllanguage \ # Cover qmllist \ # Cover qmllistaccessor \ # Cover diff --git a/tests/auto/declarative/qfxtextedit/tst_qfxtextedit.cpp b/tests/auto/declarative/qfxtextedit/tst_qfxtextedit.cpp index 7bc6121..19d5998 100644 --- a/tests/auto/declarative/qfxtextedit/tst_qfxtextedit.cpp +++ b/tests/auto/declarative/qfxtextedit/tst_qfxtextedit.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include <qtest.h> #include "../../../shared/util.h" +#include <math.h> #include <QFile> #include <QTextDocument> #include <QtDeclarative/qmlengine.h> @@ -183,8 +184,9 @@ void tst_qfxtextedit::width() for (int i = 0; i < standard.size(); i++) { QFont f; - QFontMetrics fm(f); - int metricWidth = fm.size(Qt::TextExpandTabs && Qt::TextShowMnemonic, standard.at(i)).width(); + QFontMetricsF fm(f); + qreal metricWidth = fm.size(Qt::TextExpandTabs && Qt::TextShowMnemonic, standard.at(i)).width(); + metricWidth = floor(metricWidth); QString componentStr = "import Qt 4.6\nTextEdit { text: \"" + standard.at(i) + "\" }"; QmlComponent texteditComponent(&engine, componentStr.toLatin1(), QUrl()); diff --git a/tests/auto/declarative/qfxtextinput/tst_qfxtextinput.cpp b/tests/auto/declarative/qfxtextinput/tst_qfxtextinput.cpp index 2dc096d..8eeb22d 100644 --- a/tests/auto/declarative/qfxtextinput/tst_qfxtextinput.cpp +++ b/tests/auto/declarative/qfxtextinput/tst_qfxtextinput.cpp @@ -132,8 +132,8 @@ void tst_qfxtextinput::width() for (int i = 0; i < standard.size(); i++) { QFont f; - QFontMetrics fm(f); - int metricWidth = fm.width(standard.at(i)); + QFontMetricsF fm(f); + qreal metricWidth = fm.width(standard.at(i)); QString componentStr = "import Qt 4.6\nTextInput { text: \"" + standard.at(i) + "\" }"; QmlComponent textinputComponent(&engine, componentStr.toLatin1(), QUrl()); diff --git a/tests/auto/declarative/qfxwebview/tst_qfxwebview.cpp b/tests/auto/declarative/qfxwebview/tst_qfxwebview.cpp deleted file mode 100644 index 9ca6312..0000000 --- a/tests/auto/declarative/qfxwebview/tst_qfxwebview.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 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 <qtest.h> -#include "../../../shared/util.h" -#include <QtDeclarative/qmlengine.h> -#include <QtDeclarative/qmlcomponent.h> -#include <private/qmlgraphicswebview_p.h> -#include <QtWebKit/qwebpage.h> -#include <QtWebKit/qwebframe.h> -#include <QtCore/qdir.h> -#include <QtCore/qfile.h> - -class tst_qfxwebview : public QObject -{ - Q_OBJECT -public: - tst_qfxwebview() {} - -private slots: - void testBasicProperties(); - void cleanupTestCase(); - - -private: - void checkNoErrors(const QmlComponent& component); - QmlEngine engine; - QString tmpDir() const - { - static QString tmpd = QDir::tempPath()+"/tst_qfxwebview-" - + QDateTime::currentDateTime().toString(QLatin1String("yyyyMMddhhmmss")); - return tmpd; - } -}; - -void removeRecursive(const QString& dirname) -{ - QDir dir(dirname); - QFileInfoList entries(dir.entryInfoList(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot)); - for (int i = 0; i < entries.count(); ++i) - if (entries[i].isDir()) - removeRecursive(entries[i].filePath()); - else - dir.remove(entries[i].fileName()); - QDir().rmdir(dirname); -} - -void tst_qfxwebview::cleanupTestCase() -{ - removeRecursive(tmpDir()); -} - -void tst_qfxwebview::checkNoErrors(const QmlComponent& component) -{ - if (component.isError()) { - QList<QmlError> errors = component.errors(); - for (int ii = 0; ii < errors.count(); ++ii) { - const QmlError &error = errors.at(ii); - QByteArray errorStr = QByteArray::number(error.line()) + ":" + - QByteArray::number(error.column()) + ":" + - error.description().toUtf8(); - qWarning() << errorStr; - } - } - QVERIFY(!component.isError()); -} - -void tst_qfxwebview::testBasicProperties() -{ - QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/basic.qml")); - checkNoErrors(component); - QWebSettings::enablePersistentStorage(tmpDir()); - - QmlGraphicsWebView *wv = qobject_cast<QmlGraphicsWebView*>(component.create()); - QVERIFY(wv != 0); - QTRY_COMPARE(wv->progress(), 1.0); - QCOMPARE(wv->title(),QString("Basic")); - QTRY_COMPARE(wv->icon().width(), 48); - QCOMPARE(wv->icon(),QPixmap(SRCDIR "/data/basic.png")); - QCOMPARE(wv->statusText(),QString("")); - QFile htmlfile(SRCDIR "/data/basic.html"); - QVERIFY(htmlfile.open(QIODevice::ReadOnly)); - QString actualhtml____ = wv->html(); // "____" is to make errors line up for easier reading - QString expectedhtml = htmlfile.readAll(); - actualhtml____.replace(QRegExp("\\s+"),""); - expectedhtml.replace(QRegExp("\\s+"),""); - QCOMPARE(actualhtml____,expectedhtml); // same, ignoring whitespace - QCOMPARE(wv->width(), 123.0); - QCOMPARE(wv->webPageWidth(), 0); - QCOMPARE(wv->preferredWidth(), 0); - QCOMPARE(wv->zoomFactor(), 1.0); - QCOMPARE(wv->url(), QUrl::fromLocalFile(SRCDIR "/data/basic.html")); - QCOMPARE(wv->status(), QmlGraphicsWebView::Ready); - QVERIFY(wv->reloadAction()); - QVERIFY(wv->reloadAction()->isEnabled()); - QVERIFY(wv->backAction()); - QVERIFY(!wv->backAction()->isEnabled()); - QVERIFY(wv->forwardAction()); - QVERIFY(!wv->forwardAction()->isEnabled()); - QVERIFY(wv->stopAction()); - QVERIFY(!wv->stopAction()->isEnabled()); -} - -QTEST_MAIN(tst_qfxwebview) - -#include "tst_qfxwebview.moc" diff --git a/tests/auto/declarative/qmlbinding/data/test-binding.qml b/tests/auto/declarative/qmlbinding/data/test-binding.qml new file mode 100644 index 0000000..d2a22f5 --- /dev/null +++ b/tests/auto/declarative/qmlbinding/data/test-binding.qml @@ -0,0 +1,16 @@ +import Qt 4.6 + +Rectangle { + id: screen + width: 320; height: 240 + property string text + property bool changeColor: false + + Text { id: s1; text: "Hello" } + Rectangle { id: r1; width: 1; height: 1; color: "yellow" } + Rectangle { id: r2; width: 1; height: 1; color: "red" } + + Binding { target: screen; property: "text"; value: s1.text } + Binding { target: screen; property: "color"; value: r1.color } + Binding { target: screen; property: "color"; when: screen.changeColor == true; value: r2.color } +} diff --git a/tests/auto/declarative/qmlbinding/data/test-binding2.qml b/tests/auto/declarative/qmlbinding/data/test-binding2.qml new file mode 100644 index 0000000..ea20c16 --- /dev/null +++ b/tests/auto/declarative/qmlbinding/data/test-binding2.qml @@ -0,0 +1,16 @@ +import Qt 4.6 + +Rectangle { + id: screen + width: 320; height: 240 + property string text + property bool changeColor: false + + Text { id: s1; text: "Hello" } + Rectangle { id: r1; width: 1; height: 1; color: "yellow" } + Rectangle { id: r2; width: 1; height: 1; color: "red" } + + Binding { target: screen; property: "text"; value: s1.text } + Binding { target: screen; property: "color"; value: r1.color } + Binding { target: screen; property: "color"; value: r2.color; when: screen.changeColor == true } +} diff --git a/tests/auto/declarative/qmlbinding/qmlbinding.pro b/tests/auto/declarative/qmlbinding/qmlbinding.pro new file mode 100644 index 0000000..dfaca91 --- /dev/null +++ b/tests/auto/declarative/qmlbinding/qmlbinding.pro @@ -0,0 +1,8 @@ +load(qttest_p4) +contains(QT_CONFIG,declarative): QT += declarative gui +macx:CONFIG -= app_bundle + +SOURCES += tst_qmlbinding.cpp + +# Define SRCDIR equal to test's source directory +DEFINES += SRCDIR=\\\"$$PWD\\\" diff --git a/tests/auto/declarative/qmlbinding/tst_qmlbinding.cpp b/tests/auto/declarative/qmlbinding/tst_qmlbinding.cpp new file mode 100644 index 0000000..e5aacc7 --- /dev/null +++ b/tests/auto/declarative/qmlbinding/tst_qmlbinding.cpp @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2009 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 <qtest.h> +#include <QtDeclarative/qmlengine.h> +#include <QtDeclarative/qmlcomponent.h> +#include <private/qmlbind_p.h> +#include <private/qmlgraphicsrectangle_p.h> +#include "../../../shared/util.h" + +class tst_qmlbinding : public QObject + +{ + Q_OBJECT +public: + tst_qmlbinding(); + +private slots: + void binding(); + void whenAfterValue(); + +private: + QmlEngine engine; +}; + +tst_qmlbinding::tst_qmlbinding() +{ +} + +void tst_qmlbinding::binding() +{ + QmlEngine engine; + QmlComponent c(&engine, QUrl("file://" SRCDIR "/data/test-binding.qml")); + QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create()); + + QVERIFY(rect != 0); + QCOMPARE(rect->color(), QColor("yellow")); + QCOMPARE(rect->property("text").toString(), QString("Hello")); + + rect->setProperty("changeColor", true); + QCOMPARE(rect->color(), QColor("red")); + + delete rect; +} + +void tst_qmlbinding::whenAfterValue() +{ + QmlEngine engine; + QmlComponent c(&engine, QUrl("file://" SRCDIR "/data/test-binding2.qml")); + QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create()); + + QVERIFY(rect != 0); + QCOMPARE(rect->color(), QColor("yellow")); + QCOMPARE(rect->property("text").toString(), QString("Hello")); + + rect->setProperty("changeColor", true); + QCOMPARE(rect->color(), QColor("red")); + + delete rect; +} + +QTEST_MAIN(tst_qmlbinding) + +#include "tst_qmlbinding.moc" diff --git a/tests/auto/declarative/qmlconnection/data/test-connection.qml b/tests/auto/declarative/qmlconnection/data/test-connection.qml new file mode 100644 index 0000000..9534621 --- /dev/null +++ b/tests/auto/declarative/qmlconnection/data/test-connection.qml @@ -0,0 +1,10 @@ +import Qt 4.6 + +Item { + id: screen; width: 50 + + property bool tested: false + signal testMe + + Connection { sender: screen; signal: "widthChanged()"; script: screen.tested = true } +} diff --git a/tests/auto/declarative/qmlconnection/qmlconnection.pro b/tests/auto/declarative/qmlconnection/qmlconnection.pro new file mode 100644 index 0000000..3d46fa6 --- /dev/null +++ b/tests/auto/declarative/qmlconnection/qmlconnection.pro @@ -0,0 +1,8 @@ +load(qttest_p4) +contains(QT_CONFIG,declarative): QT += declarative gui +macx:CONFIG -= app_bundle + +SOURCES += tst_qmlconnection.cpp + +# Define SRCDIR equal to test's source directory +DEFINES += SRCDIR=\\\"$$PWD\\\" diff --git a/tests/auto/declarative/qmlconnection/tst_qmlconnection.cpp b/tests/auto/declarative/qmlconnection/tst_qmlconnection.cpp new file mode 100644 index 0000000..c6d2cc4 --- /dev/null +++ b/tests/auto/declarative/qmlconnection/tst_qmlconnection.cpp @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2009 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 <qtest.h> +#include <QtDeclarative/qmlengine.h> +#include <QtDeclarative/qmlcomponent.h> +#include <private/qmlconnection_p.h> +#include <private/qmlgraphicsitem_p.h> +#include "../../../shared/util.h" + +class tst_qmlconnection : public QObject + +{ + Q_OBJECT +public: + tst_qmlconnection(); + +private slots: + void connection(); + +private: + QmlEngine engine; +}; + +tst_qmlconnection::tst_qmlconnection() +{ +} + +void tst_qmlconnection::connection() +{ + QmlEngine engine; + QmlComponent c(&engine, QUrl("file://" SRCDIR "/data/test-connection.qml")); + QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(c.create()); + + QVERIFY(item != 0); + + QCOMPARE(item->property("tested").toBool(), false); + QCOMPARE(item->width(), 50.); + emit item->setWidth(100.); + QCOMPARE(item->width(), 100.); + QCOMPARE(item->property("tested").toBool(), true); + + delete item; +} + +QTEST_MAIN(tst_qmlconnection) + +#include "tst_qmlconnection.moc" diff --git a/tests/auto/declarative/qmlerror/qmlerror.pro b/tests/auto/declarative/qmlerror/qmlerror.pro new file mode 100644 index 0000000..fa9b79e --- /dev/null +++ b/tests/auto/declarative/qmlerror/qmlerror.pro @@ -0,0 +1,6 @@ +load(qttest_p4) +contains(QT_CONFIG,declarative): QT += declarative +SOURCES += tst_qmlerror.cpp +macx:CONFIG -= app_bundle + +DEFINES += SRCDIR=\\\"$$PWD\\\" diff --git a/tests/auto/declarative/qmlerror/test.txt b/tests/auto/declarative/qmlerror/test.txt new file mode 100644 index 0000000..cdafd9e --- /dev/null +++ b/tests/auto/declarative/qmlerror/test.txt @@ -0,0 +1,3 @@ +Line Content +Line2 Content +Line3 Content diff --git a/tests/auto/declarative/qmlerror/tst_qmlerror.cpp b/tests/auto/declarative/qmlerror/tst_qmlerror.cpp new file mode 100644 index 0000000..70fef1d --- /dev/null +++ b/tests/auto/declarative/qmlerror/tst_qmlerror.cpp @@ -0,0 +1,242 @@ +/**************************************************************************** +** +** Copyright (C) 2009 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 <qtest.h> +#include <QmlError> +#include <QDebug> + +class tst_qmlerror : public QObject +{ + Q_OBJECT +private slots: + void url(); + void description(); + void line(); + void column(); + void toString(); + + void copy(); + void debug(); +}; + +void tst_qmlerror::url() +{ + QmlError error; + + QCOMPARE(error.url(), QUrl()); + + error.setUrl(QUrl("http://www.nokia.com/main.qml")); + + QCOMPARE(error.url(), QUrl("http://www.nokia.com/main.qml")); + + QmlError error2 = error; + + QCOMPARE(error2.url(), QUrl("http://www.nokia.com/main.qml")); + + error.setUrl(QUrl("http://qt.nokia.com/main.qml")); + + QCOMPARE(error.url(), QUrl("http://qt.nokia.com/main.qml")); + QCOMPARE(error2.url(), QUrl("http://www.nokia.com/main.qml")); +} + +void tst_qmlerror::description() +{ + QmlError error; + + QCOMPARE(error.description(), QString()); + + error.setDescription("An Error"); + + QCOMPARE(error.description(), QString("An Error")); + + QmlError error2 = error; + + QCOMPARE(error2.description(), QString("An Error")); + + error.setDescription("Another Error"); + + QCOMPARE(error.description(), QString("Another Error")); + QCOMPARE(error2.description(), QString("An Error")); +} + +void tst_qmlerror::line() +{ + QmlError error; + + QCOMPARE(error.line(), -1); + + error.setLine(102); + + QCOMPARE(error.line(), 102); + + QmlError error2 = error; + + QCOMPARE(error2.line(), 102); + + error.setLine(4); + + QCOMPARE(error.line(), 4); + QCOMPARE(error2.line(), 102); +} + +void tst_qmlerror::column() +{ + QmlError error; + + QCOMPARE(error.column(), -1); + + error.setColumn(16); + + QCOMPARE(error.column(), 16); + + QmlError error2 = error; + + QCOMPARE(error2.column(), 16); + + error.setColumn(3); + + QCOMPARE(error.column(), 3); + QCOMPARE(error2.column(), 16); +} + +void tst_qmlerror::toString() +{ + { + QmlError error; + error.setUrl(QUrl("http://www.nokia.com/main.qml")); + error.setDescription("An Error"); + error.setLine(92); + error.setColumn(13); + + QCOMPARE(error.toString(), QString("http://www.nokia.com/main.qml:92:13: An Error")); + } + + { + QmlError error; + error.setUrl(QUrl("http://www.nokia.com/main.qml")); + error.setDescription("An Error"); + error.setLine(92); + + QCOMPARE(error.toString(), QString("http://www.nokia.com/main.qml:92: An Error")); + } +} + +void tst_qmlerror::copy() +{ + QmlError error; + error.setUrl(QUrl("http://www.nokia.com/main.qml")); + error.setDescription("An Error"); + error.setLine(92); + error.setColumn(13); + + QmlError error2(error); + QmlError error3; + error3 = error; + + error.setUrl(QUrl("http://qt.nokia.com/main.qml")); + error.setDescription("Another Error"); + error.setLine(2); + error.setColumn(33); + + QCOMPARE(error.url(), QUrl("http://qt.nokia.com/main.qml")); + QCOMPARE(error.description(), QString("Another Error")); + QCOMPARE(error.line(), 2); + QCOMPARE(error.column(), 33); + + QCOMPARE(error2.url(), QUrl("http://www.nokia.com/main.qml")); + QCOMPARE(error2.description(), QString("An Error")); + QCOMPARE(error2.line(), 92); + QCOMPARE(error2.column(), 13); + + QCOMPARE(error3.url(), QUrl("http://www.nokia.com/main.qml")); + QCOMPARE(error3.description(), QString("An Error")); + QCOMPARE(error3.line(), 92); + QCOMPARE(error3.column(), 13); + +} + +void tst_qmlerror::debug() +{ + { + QmlError error; + error.setUrl(QUrl("http://www.nokia.com/main.qml")); + error.setDescription("An Error"); + error.setLine(92); + error.setColumn(13); + + QTest::ignoreMessage(QtWarningMsg, "http://www.nokia.com/main.qml:92:13: An Error "); + qWarning() << error; + } + + { + QUrl url(QUrl::fromLocalFile(QString(SRCDIR) + "/").resolved(QUrl("test.txt"))); + QmlError error; + error.setUrl(url); + error.setDescription("An Error"); + error.setLine(2); + error.setColumn(5); + + QString out = url.toString() + ":2:5: An Error \n Line2 Content \n ^ "; + QTest::ignoreMessage(QtWarningMsg, qPrintable(out)); + + qWarning() << error; + } + + { + QUrl url(QUrl::fromLocalFile(QString(SRCDIR) + "/").resolved(QUrl("foo.txt"))); + QmlError error; + error.setUrl(url); + error.setDescription("An Error"); + error.setLine(2); + error.setColumn(5); + + QString out = url.toString() + ":2:5: An Error "; + QTest::ignoreMessage(QtWarningMsg, qPrintable(out)); + + qWarning() << error; + } +} + + + +QTEST_MAIN(tst_qmlerror) + +#include "tst_qmlerror.moc" diff --git a/tests/auto/declarative/qmlgraphicstext/tst_qmlgraphicstext.cpp b/tests/auto/declarative/qmlgraphicstext/tst_qmlgraphicstext.cpp index ba5c835..2a3cdde 100644 --- a/tests/auto/declarative/qmlgraphicstext/tst_qmlgraphicstext.cpp +++ b/tests/auto/declarative/qmlgraphicstext/tst_qmlgraphicstext.cpp @@ -45,6 +45,7 @@ #include <private/qmlgraphicstext_p.h> #include <private/qmlvaluetype_p.h> #include <QFontMetrics> +#include <math.h> class tst_qmlgraphicstext : public QObject @@ -201,8 +202,9 @@ void tst_qmlgraphicstext::width() QVERIFY(!Qt::mightBeRichText(standard.at(i))); // self-test QFont f; - QFontMetrics fm(f); - int metricWidth = fm.size(Qt::TextExpandTabs && Qt::TextShowMnemonic, standard.at(i)).width(); + QFontMetricsF fm(f); + qreal metricWidth = fm.size(Qt::TextExpandTabs && Qt::TextShowMnemonic, standard.at(i)).width(); + metricWidth = floor(metricWidth); QString componentStr = "import Qt 4.6\nText { text: \"" + standard.at(i) + "\" }"; QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); diff --git a/tests/auto/declarative/qfxwebview/data/basic.html b/tests/auto/declarative/qmlgraphicswebview/data/basic.html index c262f12..c262f12 100644 --- a/tests/auto/declarative/qfxwebview/data/basic.html +++ b/tests/auto/declarative/qmlgraphicswebview/data/basic.html diff --git a/tests/auto/declarative/qfxwebview/data/basic.png b/tests/auto/declarative/qmlgraphicswebview/data/basic.png Binary files differindex 35717cc..35717cc 100644 --- a/tests/auto/declarative/qfxwebview/data/basic.png +++ b/tests/auto/declarative/qmlgraphicswebview/data/basic.png diff --git a/tests/auto/declarative/qfxwebview/data/basic.qml b/tests/auto/declarative/qmlgraphicswebview/data/basic.qml index 5394837..5394837 100644 --- a/tests/auto/declarative/qfxwebview/data/basic.qml +++ b/tests/auto/declarative/qmlgraphicswebview/data/basic.qml diff --git a/tests/auto/declarative/qmlgraphicswebview/data/sethtml.qml b/tests/auto/declarative/qmlgraphicswebview/data/sethtml.qml new file mode 100644 index 0000000..063b5a8 --- /dev/null +++ b/tests/auto/declarative/qmlgraphicswebview/data/sethtml.qml @@ -0,0 +1,5 @@ +import Qt 4.6 + +WebView { + html: "<p>This is a <b>string</b> set on the WebView" +} diff --git a/tests/auto/declarative/qfxwebview/qfxwebview.pro b/tests/auto/declarative/qmlgraphicswebview/qmlgraphicswebview.pro index b75e057..cce3df2 100644 --- a/tests/auto/declarative/qfxwebview/qfxwebview.pro +++ b/tests/auto/declarative/qmlgraphicswebview/qmlgraphicswebview.pro @@ -2,7 +2,7 @@ load(qttest_p4) contains(QT_CONFIG,declarative): QT += declarative macx:CONFIG -= app_bundle -SOURCES += tst_qfxwebview.cpp +SOURCES += tst_qmlgraphicswebview.cpp # Define SRCDIR equal to test's source directory DEFINES += SRCDIR=\\\"$$PWD\\\" diff --git a/tests/auto/declarative/qmlgraphicswebview/tst_qmlgraphicswebview.cpp b/tests/auto/declarative/qmlgraphicswebview/tst_qmlgraphicswebview.cpp new file mode 100644 index 0000000..864f4b5 --- /dev/null +++ b/tests/auto/declarative/qmlgraphicswebview/tst_qmlgraphicswebview.cpp @@ -0,0 +1,247 @@ +/**************************************************************************** +** +** Copyright (C) 2009 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 <qtest.h> +#include "../../../shared/util.h" +#include <QtDeclarative/qmlengine.h> +#include <QtDeclarative/qmlcomponent.h> +#include <private/qmlgraphicswebview_p.h> +#include <QtWebKit/qwebpage.h> +#include <QtWebKit/qwebframe.h> +#include <QtCore/qdir.h> +#include <QtCore/qfile.h> + +class tst_qmlgraphicswebview : public QObject +{ + Q_OBJECT +public: + tst_qmlgraphicswebview() {} + +private slots: + void basicProperties(); + void historyNav(); + void loadError(); + void setHtml(); + void cleanupTestCase(); + + +private: + void checkNoErrors(const QmlComponent& component); + QmlEngine engine; + QString tmpDir() const + { + static QString tmpd = QDir::tempPath()+"/tst_qmlgraphicswebview-" + + QDateTime::currentDateTime().toString(QLatin1String("yyyyMMddhhmmss")); + return tmpd; + } +}; + +static QString strippedHtml(QString html) +{ + html.replace(QRegExp("\\s+"),""); + return html; +} + +static QString fileContents(const QString& filename) +{ + QFile file(filename); + Q_ASSERT(file.open(QIODevice::ReadOnly)); + return file.readAll(); +} + + +static void removeRecursive(const QString& dirname) +{ + QDir dir(dirname); + QFileInfoList entries(dir.entryInfoList(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot)); + for (int i = 0; i < entries.count(); ++i) + if (entries[i].isDir()) + removeRecursive(entries[i].filePath()); + else + dir.remove(entries[i].fileName()); + QDir().rmdir(dirname); +} + +void tst_qmlgraphicswebview::cleanupTestCase() +{ + removeRecursive(tmpDir()); +} + +void tst_qmlgraphicswebview::checkNoErrors(const QmlComponent& component) +{ + if (component.isError()) { + QList<QmlError> errors = component.errors(); + for (int ii = 0; ii < errors.count(); ++ii) { + const QmlError &error = errors.at(ii); + QByteArray errorStr = QByteArray::number(error.line()) + ":" + + QByteArray::number(error.column()) + ":" + + error.description().toUtf8(); + qWarning() << errorStr; + } + } + QVERIFY(!component.isError()); +} + +void tst_qmlgraphicswebview::basicProperties() +{ + QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/basic.qml")); + checkNoErrors(component); + QWebSettings::enablePersistentStorage(tmpDir()); + + QmlGraphicsWebView *wv = qobject_cast<QmlGraphicsWebView*>(component.create()); + QVERIFY(wv != 0); + QTRY_COMPARE(wv->progress(), 1.0); + QCOMPARE(wv->title(),QString("Basic")); + QTRY_COMPARE(wv->icon().width(), 48); + QCOMPARE(wv->icon(),QPixmap(SRCDIR "/data/basic.png")); + QCOMPARE(wv->statusText(),QString("")); + QCOMPARE(strippedHtml(fileContents(SRCDIR "/data/basic.html")), strippedHtml(wv->html())); + QCOMPARE(wv->width(), 123.0); + QCOMPARE(wv->webPageWidth(), 0); + QCOMPARE(wv->preferredWidth(), 0); + QCOMPARE(wv->zoomFactor(), 1.0); + QCOMPARE(wv->url(), QUrl::fromLocalFile(SRCDIR "/data/basic.html")); + QCOMPARE(wv->status(), QmlGraphicsWebView::Ready); + QVERIFY(wv->reloadAction()); + QVERIFY(wv->reloadAction()->isEnabled()); + QVERIFY(wv->backAction()); + QVERIFY(!wv->backAction()->isEnabled()); + QVERIFY(wv->forwardAction()); + QVERIFY(!wv->forwardAction()->isEnabled()); + QVERIFY(wv->stopAction()); + QVERIFY(!wv->stopAction()->isEnabled()); +} + +void tst_qmlgraphicswebview::historyNav() +{ + QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/basic.qml")); + checkNoErrors(component); + QWebSettings::enablePersistentStorage(tmpDir()); + + QmlGraphicsWebView *wv = qobject_cast<QmlGraphicsWebView*>(component.create()); + QVERIFY(wv != 0); + for (int i=1; i<=2; ++i) { + QTRY_COMPARE(wv->progress(), 1.0); + QCOMPARE(wv->title(),QString("Basic")); + QTRY_COMPARE(wv->icon().width(), 48); + QCOMPARE(wv->icon(),QPixmap(SRCDIR "/data/basic.png")); + QCOMPARE(wv->statusText(),QString("")); + QCOMPARE(strippedHtml(fileContents(SRCDIR "/data/basic.html")), strippedHtml(wv->html())); + QCOMPARE(wv->width(), 123.0); + QCOMPARE(wv->webPageWidth(), 0); + QCOMPARE(wv->preferredWidth(), 0); + QCOMPARE(wv->zoomFactor(), 1.0); + QCOMPARE(wv->url(), QUrl::fromLocalFile(SRCDIR "/data/basic.html")); + QCOMPARE(wv->status(), QmlGraphicsWebView::Ready); + QVERIFY(wv->reloadAction()); + QVERIFY(wv->reloadAction()->isEnabled()); + QVERIFY(wv->backAction()); + QVERIFY(!wv->backAction()->isEnabled()); + QVERIFY(wv->forwardAction()); + QVERIFY(!wv->forwardAction()->isEnabled()); + QVERIFY(wv->stopAction()); + QVERIFY(!wv->stopAction()->isEnabled()); + + wv->reloadAction()->trigger(); + } + + wv->setUrl(QUrl::fromLocalFile(SRCDIR "/data/forward.html")); + QTRY_COMPARE(wv->progress(), 1.0); + QCOMPARE(wv->title(),QString("Forward")); + QCOMPARE(strippedHtml(fileContents(SRCDIR "/data/forward.html")), strippedHtml(wv->html())); + QCOMPARE(wv->url(), QUrl::fromLocalFile(SRCDIR "/data/forward.html")); + QCOMPARE(wv->status(), QmlGraphicsWebView::Ready); + QVERIFY(wv->reloadAction()); + QVERIFY(wv->reloadAction()->isEnabled()); + QVERIFY(wv->backAction()); + QVERIFY(wv->backAction()->isEnabled()); + QVERIFY(wv->forwardAction()); + QVERIFY(!wv->forwardAction()->isEnabled()); + QVERIFY(wv->stopAction()); + QVERIFY(!wv->stopAction()->isEnabled()); + + wv->backAction()->trigger(); + + QTRY_COMPARE(wv->progress(), 1.0); + QCOMPARE(wv->title(),QString("Basic")); + QCOMPARE(strippedHtml(fileContents(SRCDIR "/data/basic.html")), strippedHtml(wv->html())); + QCOMPARE(wv->url(), QUrl::fromLocalFile(SRCDIR "/data/basic.html")); + QCOMPARE(wv->status(), QmlGraphicsWebView::Ready); + QVERIFY(wv->reloadAction()); + QVERIFY(wv->reloadAction()->isEnabled()); + QVERIFY(wv->backAction()); + QVERIFY(!wv->backAction()->isEnabled()); + QVERIFY(wv->forwardAction()); + QVERIFY(wv->forwardAction()->isEnabled()); + QVERIFY(wv->stopAction()); + QVERIFY(!wv->stopAction()->isEnabled()); +} + +void tst_qmlgraphicswebview::loadError() +{ + QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/loadError.qml")); + checkNoErrors(component); + QWebSettings::enablePersistentStorage(tmpDir()); + + QmlGraphicsWebView *wv = qobject_cast<QmlGraphicsWebView*>(component.create()); + QVERIFY(wv != 0); + for (int i=1; i<=2; ++i) { + QTRY_COMPARE(wv->progress(), 1.0); + QCOMPARE(wv->title(),QString("")); + QCOMPARE(wv->statusText(),QString("")); // HTML 'status bar' text, not error message + QCOMPARE(wv->url(), QUrl::fromLocalFile(SRCDIR "/data/does-not-exist.html")); // Unlike QWebPage, which loses url + QCOMPARE(wv->status(), QmlGraphicsWebView::Error); + + wv->reloadAction()->trigger(); + } +} + +void tst_qmlgraphicswebview::setHtml() +{ + QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/sethtml.qml")); + checkNoErrors(component); + QmlGraphicsWebView *wv = qobject_cast<QmlGraphicsWebView*>(component.create()); + QVERIFY(wv != 0); + QCOMPARE(wv->html(),QString("<html><head></head><body><p>This is a <b>string</b> set on the WebView</p></body></html>")); +} + +QTEST_MAIN(tst_qmlgraphicswebview) + +#include "tst_qmlgraphicswebview.moc" diff --git a/tests/auto/declarative/qmlinfo/data/NestedObject.qml b/tests/auto/declarative/qmlinfo/data/NestedObject.qml new file mode 100644 index 0000000..ac96d20 --- /dev/null +++ b/tests/auto/declarative/qmlinfo/data/NestedObject.qml @@ -0,0 +1,8 @@ +import Qt 4.6 + +Object { + property var nested + + nested: Object {} +} + diff --git a/tests/auto/declarative/qmlinfo/data/nestedQmlObject.qml b/tests/auto/declarative/qmlinfo/data/nestedQmlObject.qml new file mode 100644 index 0000000..ee98354 --- /dev/null +++ b/tests/auto/declarative/qmlinfo/data/nestedQmlObject.qml @@ -0,0 +1,8 @@ +import Qt 4.6 + +Object { + property var nested + nested: NestedObject { } + property var nested2: nested.nested +} + diff --git a/tests/auto/declarative/qmlinfo/data/qmlObject.qml b/tests/auto/declarative/qmlinfo/data/qmlObject.qml new file mode 100644 index 0000000..b86063b --- /dev/null +++ b/tests/auto/declarative/qmlinfo/data/qmlObject.qml @@ -0,0 +1,8 @@ +import Qt 4.6 + +Object { + property var nested + + nested: Object { + } +} diff --git a/tests/auto/declarative/qmlinfo/qmlinfo.pro b/tests/auto/declarative/qmlinfo/qmlinfo.pro new file mode 100644 index 0000000..dbebf92 --- /dev/null +++ b/tests/auto/declarative/qmlinfo/qmlinfo.pro @@ -0,0 +1,7 @@ +load(qttest_p4) +contains(QT_CONFIG,declarative): QT += declarative +macx:CONFIG -= app_bundle + +SOURCES += tst_qmlinfo.cpp + +DEFINES += SRCDIR=\\\"$$PWD\\\" diff --git a/tests/auto/declarative/qmlinfo/tst_qmlinfo.cpp b/tests/auto/declarative/qmlinfo/tst_qmlinfo.cpp new file mode 100644 index 0000000..8241045 --- /dev/null +++ b/tests/auto/declarative/qmlinfo/tst_qmlinfo.cpp @@ -0,0 +1,139 @@ +/**************************************************************************** +** +** Copyright (C) 2009 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 <qtest.h> +#include <QmlEngine> +#include <QmlComponent> +#include <QPushButton> +#include <QmlContext> +#include <qmlinfo.h> + +class tst_qmlinfo : public QObject +{ + Q_OBJECT +public: + tst_qmlinfo() {} + +private slots: + void qmlObject(); + void nestedQmlObject(); + void nonQmlObject(); + void nullObject(); + void nonQmlContextedObject(); + +private: + QmlEngine engine; +}; + +inline QUrl TEST_FILE(const QString &filename) +{ + return QUrl::fromLocalFile(QLatin1String(SRCDIR) + QLatin1String("/data/") + filename); +} + +void tst_qmlinfo::qmlObject() +{ + QmlComponent component(&engine, TEST_FILE("qmlObject.qml")); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QString message = "QML " + QString(object->metaObject()->className()) + " (" + component.url().toString() + ":3:1) Test Message"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(message)); + qmlInfo("Test Message", object); + + QObject *nested = qvariant_cast<QObject *>(object->property("nested")); + QVERIFY(nested != 0); + + message = "QML " + QString(nested->metaObject()->className()) + " (" + component.url().toString() + ":6:13) Second Test Message"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(message)); + qmlInfo("Second Test Message", nested); +} + +void tst_qmlinfo::nestedQmlObject() +{ + QmlComponent component(&engine, TEST_FILE("nestedQmlObject.qml")); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QObject *nested = qvariant_cast<QObject *>(object->property("nested")); + QVERIFY(nested != 0); + QObject *nested2 = qvariant_cast<QObject *>(object->property("nested2")); + QVERIFY(nested2 != 0); + + QString message = "QML " + QString(nested->metaObject()->className()) + " (" + component.url().toString() + ":5:13) Outer Object"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(message)); + qmlInfo("Outer Object", nested); + + message = "QML " + QString(nested2->metaObject()->className()) + " (" + TEST_FILE("NestedObject.qml").toString() + ":6:14) Inner Object"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(message)); + qmlInfo("Inner Object", nested2); +} + +void tst_qmlinfo::nonQmlObject() +{ + QObject object; + QTest::ignoreMessage(QtWarningMsg, "QML QObject (unknown location) Test Message"); + qmlInfo("Test Message", &object); + + QPushButton pbObject; + QTest::ignoreMessage(QtWarningMsg, "QML QPushButton (unknown location) Test Message"); + qmlInfo("Test Message", &pbObject); +} + +void tst_qmlinfo::nullObject() +{ + QTest::ignoreMessage(QtWarningMsg, "QML (unknown location) Null Object Test Message"); + qmlInfo("Null Object Test Message", 0); +} + +void tst_qmlinfo::nonQmlContextedObject() +{ + QObject object; + QmlContext context(&engine); + QmlEngine::setContextForObject(&object, &context); + QTest::ignoreMessage(QtWarningMsg, "QML QObject (unknown location) Test Message"); + qmlInfo("Test Message", &object); +} + +QTEST_MAIN(tst_qmlinfo) + +#include "tst_qmlinfo.moc" diff --git a/tests/auto/declarative/qmllanguage/data/invalidImportID.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidImportID.errors.txt new file mode 100644 index 0000000..a65f5fd --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/invalidImportID.errors.txt @@ -0,0 +1 @@ +2:18:Invalid import qualifier ID diff --git a/tests/auto/declarative/qmllanguage/data/invalidImportID.qml b/tests/auto/declarative/qmllanguage/data/invalidImportID.qml new file mode 100644 index 0000000..75aa06d --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/invalidImportID.qml @@ -0,0 +1,4 @@ +import Qt 4.6 +import Qt 4.6 as qt + +Object {} diff --git a/tests/auto/declarative/qmllanguage/data/invalidRoot.errors.txt b/tests/auto/declarative/qmllanguage/data/invalidRoot.errors.txt new file mode 100644 index 0000000..4bcc948 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/invalidRoot.errors.txt @@ -0,0 +1 @@ +1:1:Expected type name diff --git a/tests/auto/declarative/qmllanguage/data/invalidRoot.qml b/tests/auto/declarative/qmllanguage/data/invalidRoot.qml new file mode 100644 index 0000000..427827c --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/invalidRoot.qml @@ -0,0 +1,2 @@ +foo { +} diff --git a/tests/auto/declarative/qmllanguage/data/property.1.errors.txt b/tests/auto/declarative/qmllanguage/data/property.1.errors.txt new file mode 100644 index 0000000..3ae6c46 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/property.1.errors.txt @@ -0,0 +1 @@ +4:14:Expected property type diff --git a/tests/auto/declarative/qmllanguage/data/property.1.qml b/tests/auto/declarative/qmllanguage/data/property.1.qml new file mode 100644 index 0000000..62178e5 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/property.1.qml @@ -0,0 +1,5 @@ +import Qt 4.6 + +Object { + property blah a; +} diff --git a/tests/auto/declarative/qmllanguage/data/property.2.errors.txt b/tests/auto/declarative/qmllanguage/data/property.2.errors.txt new file mode 100644 index 0000000..a18e21a --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/property.2.errors.txt @@ -0,0 +1 @@ +4:14:Unexpected property type modifier diff --git a/tests/auto/declarative/qmllanguage/data/property.2.qml b/tests/auto/declarative/qmllanguage/data/property.2.qml new file mode 100644 index 0000000..1d6d015 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/property.2.qml @@ -0,0 +1,6 @@ +import Qt 4.6 + +Object { + property invalidmodifier<int> a; +} + diff --git a/tests/auto/declarative/qmllanguage/data/property.3.errors.txt b/tests/auto/declarative/qmllanguage/data/property.3.errors.txt new file mode 100644 index 0000000..5e09a25 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/property.3.errors.txt @@ -0,0 +1 @@ +4:14:Invalid property type modifier diff --git a/tests/auto/declarative/qmllanguage/data/property.3.qml b/tests/auto/declarative/qmllanguage/data/property.3.qml new file mode 100644 index 0000000..1b14b86 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/property.3.qml @@ -0,0 +1,7 @@ +import Qt 4.6 + +Object { + property invalidmodifier<Object> a; +} + + diff --git a/tests/auto/declarative/qmllanguage/data/property.4.errors.txt b/tests/auto/declarative/qmllanguage/data/property.4.errors.txt new file mode 100644 index 0000000..b447186 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/property.4.errors.txt @@ -0,0 +1 @@ +5:1:Syntax error diff --git a/tests/auto/declarative/qmllanguage/data/property.4.qml b/tests/auto/declarative/qmllanguage/data/property.4.qml new file mode 100644 index 0000000..d256c96 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/property.4.qml @@ -0,0 +1,5 @@ +import Qt 4.6 + +Object { + readonly property int a +} diff --git a/tests/auto/declarative/qmllanguage/data/property.5.errors.txt b/tests/auto/declarative/qmllanguage/data/property.5.errors.txt new file mode 100644 index 0000000..32a8dc1 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/property.5.errors.txt @@ -0,0 +1 @@ +4:5:Readonly not yet supported diff --git a/tests/auto/declarative/qmllanguage/data/property.5.qml b/tests/auto/declarative/qmllanguage/data/property.5.qml new file mode 100644 index 0000000..c3aaf5e --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/property.5.qml @@ -0,0 +1,6 @@ +import Qt 4.6 + +Object { + readonly property int a: value +} + diff --git a/tests/auto/declarative/qmllanguage/data/script.12.errors.txt b/tests/auto/declarative/qmllanguage/data/script.12.errors.txt new file mode 100644 index 0000000..85c8396 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.12.errors.txt @@ -0,0 +1 @@ +4:5:QmlJS declaration outside Script element diff --git a/tests/auto/declarative/qmllanguage/data/script.12.qml b/tests/auto/declarative/qmllanguage/data/script.12.qml new file mode 100644 index 0000000..ea6c482 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.12.qml @@ -0,0 +1,6 @@ +import Qt 4.6 + +Object { + var a +} + diff --git a/tests/auto/declarative/qmllanguage/data/signal.1.errors.txt b/tests/auto/declarative/qmllanguage/data/signal.1.errors.txt new file mode 100644 index 0000000..78d9960 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/signal.1.errors.txt @@ -0,0 +1 @@ +4:12:Expected parameter type diff --git a/tests/auto/declarative/qmllanguage/data/signal.1.qml b/tests/auto/declarative/qmllanguage/data/signal.1.qml new file mode 100644 index 0000000..d0ad155 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/signal.1.qml @@ -0,0 +1,5 @@ +import Qt 4.6 + +Object { + signal mySignal(nontype a) +} diff --git a/tests/auto/declarative/qmllanguage/data/signal.2.errors.txt b/tests/auto/declarative/qmllanguage/data/signal.2.errors.txt new file mode 100644 index 0000000..fce8928 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/signal.2.errors.txt @@ -0,0 +1 @@ +4:21:Unexpected token `;' diff --git a/tests/auto/declarative/qmllanguage/data/signal.2.qml b/tests/auto/declarative/qmllanguage/data/signal.2.qml new file mode 100644 index 0000000..aa45ae9 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/signal.2.qml @@ -0,0 +1,6 @@ +import Qt 4.6 + +Object { + signal mySignal(,) +} + diff --git a/tests/auto/declarative/qmllanguage/data/signal.3.errors.txt b/tests/auto/declarative/qmllanguage/data/signal.3.errors.txt new file mode 100644 index 0000000..bf043ac --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/signal.3.errors.txt @@ -0,0 +1 @@ +4:22:Expected token `identifier' diff --git a/tests/auto/declarative/qmllanguage/data/signal.3.qml b/tests/auto/declarative/qmllanguage/data/signal.3.qml new file mode 100644 index 0000000..f38ccc5 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/signal.3.qml @@ -0,0 +1,6 @@ +import Qt 4.6 + +Object { + signal mySignal(a) +} + diff --git a/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp b/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp index 0fa36a1..c646583 100644 --- a/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp +++ b/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp @@ -246,6 +246,17 @@ void tst_qmllanguage::errors_data() QTest::newRow("importNamespaceConflict") << "importNamespaceConflict.qml" << "importNamespaceConflict.errors.txt" << false; QTest::newRow("importVersionMissing (builtin)") << "importVersionMissingBuiltIn.qml" << "importVersionMissingBuiltIn.errors.txt" << false; QTest::newRow("importVersionMissing (installed)") << "importVersionMissingInstalled.qml" << "importVersionMissingInstalled.errors.txt" << false; + QTest::newRow("invalidImportID") << "invalidImportID.qml" << "invalidImportID.errors.txt" << false; + + QTest::newRow("signal.1") << "signal.1.qml" << "signal.1.errors.txt" << false; + QTest::newRow("signal.2") << "signal.2.qml" << "signal.2.errors.txt" << false; + QTest::newRow("signal.3") << "signal.3.qml" << "signal.3.errors.txt" << false; + + QTest::newRow("property.1") << "property.1.qml" << "property.1.errors.txt" << false; + QTest::newRow("property.2") << "property.2.qml" << "property.2.errors.txt" << false; + QTest::newRow("property.3") << "property.3.qml" << "property.3.errors.txt" << false; + QTest::newRow("property.4") << "property.4.qml" << "property.4.errors.txt" << false; + QTest::newRow("property.5") << "property.5.qml" << "property.5.errors.txt" << false; QTest::newRow("Script.1") << "script.1.qml" << "script.1.errors.txt" << false; QTest::newRow("Script.2") << "script.2.qml" << "script.2.errors.txt" << false; @@ -258,6 +269,7 @@ void tst_qmllanguage::errors_data() QTest::newRow("Script.9") << "script.9.qml" << "script.9.errors.txt" << false; QTest::newRow("Script.10") << "script.10.qml" << "script.10.errors.txt" << false; QTest::newRow("Script.11") << "script.11.qml" << "script.11.errors.txt" << false; + QTest::newRow("Script.12") << "script.12.qml" << "script.12.errors.txt" << false; QTest::newRow("Component.1") << "component.1.qml" << "component.1.errors.txt" << false; QTest::newRow("Component.2") << "component.2.qml" << "component.2.errors.txt" << false; @@ -270,6 +282,7 @@ void tst_qmllanguage::errors_data() QTest::newRow("defaultGrouped") << "defaultGrouped.qml" << "defaultGrouped.errors.txt" << false; QTest::newRow("emptySignal") << "emptySignal.qml" << "emptySignal.errors.txt" << false; QTest::newRow("doubleSignal") << "doubleSignal.qml" << "doubleSignal.errors.txt" << false; + QTest::newRow("invalidRoot") << "invalidRoot.qml" << "invalidRoot.errors.txt" << false; } void tst_qmllanguage::errors() diff --git a/tests/auto/declarative/qmlmetatype/tst_qmlmetatype.cpp b/tests/auto/declarative/qmlmetatype/tst_qmlmetatype.cpp index ed102a5..b481ce4 100644 --- a/tests/auto/declarative/qmlmetatype/tst_qmlmetatype.cpp +++ b/tests/auto/declarative/qmlmetatype/tst_qmlmetatype.cpp @@ -51,6 +51,7 @@ #include <QVector3D> #include <QVector4D> #include <QQuaternion> +#include <qml.h> class tst_qmlmetatype : public QObject { @@ -60,8 +61,62 @@ public: private slots: void copy(); + + void qmlParserStatusCast(); + void qmlPropertyValueSourceCast(); + void qmlPropertyValueInterceptorCast(); + + void isList(); + void isQmlList(); + + void listCount(); + void listAt(); + + void defaultObject(); }; +class TestType : public QObject +{ + Q_OBJECT + Q_PROPERTY(int foo READ foo); + + Q_CLASSINFO("DefaultProperty", "foo"); +public: + int foo() { return 0; } +}; +QML_DECLARE_TYPE(TestType); +QML_DEFINE_TYPE(Test, 1, 0, TestType, TestType); + +class ParserStatusTestType : public QObject, public QmlParserStatus +{ + Q_OBJECT + Q_CLASSINFO("DefaultProperty", "foo"); // Missing default property +}; +QML_DECLARE_TYPE(ParserStatusTestType); +QML_DEFINE_TYPE(Test, 1, 0, ParserStatusTestType, ParserStatusTestType); + +class ValueSourceTestType : public QObject, public QmlPropertyValueSource +{ + Q_OBJECT + Q_INTERFACES(QmlPropertyValueSource) +public: + virtual void setTarget(const QmlMetaProperty &) {} +}; +QML_DECLARE_TYPE(ValueSourceTestType); +QML_DEFINE_TYPE(Test, 1, 0, ValueSourceTestType, ValueSourceTestType); + +class ValueInterceptorTestType : public QObject, public QmlPropertyValueInterceptor +{ + Q_OBJECT + Q_INTERFACES(QmlPropertyValueInterceptor) +public: + virtual void setTarget(const QmlMetaProperty &) {} + virtual void write(const QVariant &) {} +}; +QML_DECLARE_TYPE(ValueInterceptorTestType); +QML_DEFINE_TYPE(Test, 1, 0, ValueInterceptorTestType, ValueInterceptorTestType); + + #define COPY_TEST(cpptype, metatype, value, defaultvalue) \ { \ cpptype v = (value); cpptype v2 = (value); \ @@ -181,6 +236,7 @@ void tst_qmlmetatype::copy() QT_COPY_TEST(QKeySequence, QKeySequence("Ctrl+O")); QT_COPY_TEST(QPen, QPen(Qt::red)); QT_COPY_TEST(QTextLength, QTextLength(QTextLength::FixedLength, 10.2)); + QT_COPY_TEST(QTextFormat, QTextFormat(QTextFormat::ListFormat)); QT_COPY_TEST(QMatrix, QMatrix().translate(10, 10)); QT_COPY_TEST(QTransform, QTransform().translate(10, 10)); QT_COPY_TEST(QMatrix4x4, QMatrix4x4().translate(10, 10)); @@ -204,6 +260,175 @@ void tst_qmlmetatype::copy() COPY_TEST(QObject *, QObjectStar, &objectValue, 0); COPY_TEST(QWidget *, QWidgetStar, &widgetValue, 0); COPY_TEST(qreal, QReal, 10.2, 0); + + { + QVariant tv = QVariant::fromValue(QVariant(10)); + QVariant v(tv); QVariant v2(tv); + QVERIFY(QmlMetaType::copy(qMetaTypeId<QVariant>(), &v, 0)); + QVERIFY(v == QVariant()); + QVERIFY(QmlMetaType::copy(qMetaTypeId<QVariant>(), &v, &v2)); + QVERIFY(v == tv); + } + + { + TestType t; QVariant tv = QVariant::fromValue(&t); + + QVariant v(tv); QVariant v2(tv); + QVERIFY(QmlMetaType::copy(qMetaTypeId<TestType *>(), &v, 0)); + QVERIFY(v == QVariant::fromValue((TestType *)0)); + QVERIFY(QmlMetaType::copy(qMetaTypeId<TestType *>(), &v, &v2)); + QVERIFY(v == tv); + } +} + +void tst_qmlmetatype::qmlParserStatusCast() +{ + QCOMPARE(QmlMetaType::qmlParserStatusCast(QVariant::Int), -1); + QCOMPARE(QmlMetaType::qmlParserStatusCast(qMetaTypeId<TestType *>()), -1); + QCOMPARE(QmlMetaType::qmlParserStatusCast(qMetaTypeId<ValueSourceTestType *>()), -1); + + int cast = QmlMetaType::qmlParserStatusCast(qMetaTypeId<ParserStatusTestType *>()); + QVERIFY(cast != -1); + QVERIFY(cast != 0); + + ParserStatusTestType t; + QVERIFY(reinterpret_cast<char *>((QObject *)&t) != reinterpret_cast<char *>((QmlParserStatus *)&t)); + + QmlParserStatus *status = reinterpret_cast<QmlParserStatus *>(reinterpret_cast<char *>((QObject *)&t) + cast); + QCOMPARE(status, &t); +} + +void tst_qmlmetatype::qmlPropertyValueSourceCast() +{ + QCOMPARE(QmlMetaType::qmlPropertyValueSourceCast(QVariant::Int), -1); + QCOMPARE(QmlMetaType::qmlPropertyValueSourceCast(qMetaTypeId<TestType *>()), -1); + QCOMPARE(QmlMetaType::qmlPropertyValueSourceCast(qMetaTypeId<ParserStatusTestType *>()), -1); + + int cast = QmlMetaType::qmlPropertyValueSourceCast(qMetaTypeId<ValueSourceTestType *>()); + QVERIFY(cast != -1); + QVERIFY(cast != 0); + + ValueSourceTestType t; + QVERIFY(reinterpret_cast<char *>((QObject *)&t) != reinterpret_cast<char *>((QmlPropertyValueSource *)&t)); + + QmlPropertyValueSource *source = reinterpret_cast<QmlPropertyValueSource *>(reinterpret_cast<char *>((QObject *)&t) + cast); + QCOMPARE(source, &t); +} + +void tst_qmlmetatype::qmlPropertyValueInterceptorCast() +{ + QCOMPARE(QmlMetaType::qmlPropertyValueInterceptorCast(QVariant::Int), -1); + QCOMPARE(QmlMetaType::qmlPropertyValueInterceptorCast(qMetaTypeId<TestType *>()), -1); + QCOMPARE(QmlMetaType::qmlPropertyValueInterceptorCast(qMetaTypeId<ParserStatusTestType *>()), -1); + + int cast = QmlMetaType::qmlPropertyValueInterceptorCast(qMetaTypeId<ValueInterceptorTestType *>()); + QVERIFY(cast != -1); + QVERIFY(cast != 0); + + ValueInterceptorTestType t; + QVERIFY(reinterpret_cast<char *>((QObject *)&t) != reinterpret_cast<char *>((QmlPropertyValueInterceptor *)&t)); + + QmlPropertyValueInterceptor *interceptor = reinterpret_cast<QmlPropertyValueInterceptor *>(reinterpret_cast<char *>((QObject *)&t) + cast); + QCOMPARE(interceptor, &t); +} + +void tst_qmlmetatype::isList() +{ + QCOMPARE(QmlMetaType::isList(QVariant()), false); + QCOMPARE(QmlMetaType::isList(QVariant::Invalid), false); + QCOMPARE(QmlMetaType::isList(QVariant::Int), false); + QCOMPARE(QmlMetaType::isList(QVariant(10)), false); + + QList<TestType *> list; + QmlConcreteList<TestType *> qmllist; + + QCOMPARE(QmlMetaType::isList(qMetaTypeId<QList<TestType *>*>()), true); + QCOMPARE(QmlMetaType::isList(QVariant::fromValue(&list)), true); + QCOMPARE(QmlMetaType::isList(qMetaTypeId<QmlList<TestType *>*>()), false); + QCOMPARE(QmlMetaType::isList(QVariant::fromValue((QmlList<TestType *>*)&qmllist)), false); +} + +void tst_qmlmetatype::isQmlList() +{ + QCOMPARE(QmlMetaType::isQmlList(QVariant::Invalid), false); + QCOMPARE(QmlMetaType::isQmlList(QVariant::Int), false); + + QCOMPARE(QmlMetaType::isQmlList(qMetaTypeId<QList<TestType *>*>()), false); + QCOMPARE(QmlMetaType::isQmlList(qMetaTypeId<QmlList<TestType *>*>()), true); +} + +void tst_qmlmetatype::listCount() +{ + QCOMPARE(QmlMetaType::listCount(QVariant()), 0); + QCOMPARE(QmlMetaType::listCount(QVariant(10)), 0); + + QList<TestType *> list; + QVariant listVar = QVariant::fromValue(&list); + QmlConcreteList<TestType *> qmllist; + QVariant qmllistVar = QVariant::fromValue((QmlList<TestType *>*)&qmllist); + + QCOMPARE(QmlMetaType::listCount(listVar), 0); + QCOMPARE(QmlMetaType::listCount(qmllistVar), 0); + + list.append(0); list.append(0); list.append(0); + qmllist.append(0); qmllist.append(0); qmllist.append(0); + + QCOMPARE(QmlMetaType::listCount(listVar), 3); + QCOMPARE(QmlMetaType::listCount(qmllistVar), 0); +} + +void tst_qmlmetatype::listAt() +{ + QCOMPARE(QmlMetaType::listAt(QVariant(), 0), QVariant()); + QCOMPARE(QmlMetaType::listAt(QVariant(10), 0), QVariant()); + QCOMPARE(QmlMetaType::listAt(QVariant(), 10), QVariant()); + QCOMPARE(QmlMetaType::listAt(QVariant(10), 10), QVariant()); + QCOMPARE(QmlMetaType::listAt(QVariant(), -10), QVariant()); + QCOMPARE(QmlMetaType::listAt(QVariant(10), -10), QVariant()); + + QList<TestType *> list; + QVariant listVar = QVariant::fromValue(&list); + QmlConcreteList<TestType *> qmllist; + QVariant qmllistVar = QVariant::fromValue((QmlList<TestType *>*)&qmllist); + + QCOMPARE(QmlMetaType::listAt(listVar, 0), QVariant()); + QCOMPARE(QmlMetaType::listAt(listVar, 2), QVariant()); + QCOMPARE(QmlMetaType::listAt(listVar, -1), QVariant()); + + QCOMPARE(QmlMetaType::listAt(qmllistVar, 0), QVariant()); + QCOMPARE(QmlMetaType::listAt(qmllistVar, 2), QVariant()); + QCOMPARE(QmlMetaType::listAt(qmllistVar, -1), QVariant()); + + TestType ttype; + QVariant ttypeVar = QVariant::fromValue(&ttype); + QVariant nullttypeVar = QVariant::fromValue((TestType *)0); + + list.append(0); list.append(&ttype); list.append(0); + qmllist.append(0); qmllist.append(&ttype); qmllist.append(0); + + QCOMPARE(QmlMetaType::listAt(listVar, 0), nullttypeVar); + QCOMPARE(QmlMetaType::listAt(listVar, 1), ttypeVar); + QCOMPARE(QmlMetaType::listAt(listVar, -1), QVariant()); + + QCOMPARE(QmlMetaType::listAt(qmllistVar, 0), QVariant()); + QCOMPARE(QmlMetaType::listAt(qmllistVar, 2), QVariant()); + QCOMPARE(QmlMetaType::listAt(qmllistVar, -1), QVariant()); +} + +void tst_qmlmetatype::defaultObject() +{ + QVERIFY(QmlMetaType::defaultProperty(&QObject::staticMetaObject).name() == 0); + QVERIFY(QmlMetaType::defaultProperty(&ParserStatusTestType::staticMetaObject).name() == 0); + QCOMPARE(QString(QmlMetaType::defaultProperty(&TestType::staticMetaObject).name()), QString("foo")); + + QObject o; + TestType t; + ParserStatusTestType p; + + QVERIFY(QmlMetaType::defaultProperty((QObject *)0).name() == 0); + QVERIFY(QmlMetaType::defaultProperty(&o).name() == 0); + QVERIFY(QmlMetaType::defaultProperty(&p).name() == 0); + QCOMPARE(QString(QmlMetaType::defaultProperty(&t).name()), QString("foo")); } QTEST_MAIN(tst_qmlmetatype) diff --git a/tests/auto/declarative/qmlqt/tst_qmlqt.cpp b/tests/auto/declarative/qmlqt/tst_qmlqt.cpp index cc9b94d..e9c9052 100644 --- a/tests/auto/declarative/qmlqt/tst_qmlqt.cpp +++ b/tests/auto/declarative/qmlqt/tst_qmlqt.cpp @@ -270,11 +270,13 @@ void tst_qmlqt::closestAngle() void tst_qmlqt::playSound() { QEXPECT_FAIL("", "How do we test this?", Abort); + QVERIFY(false); } void tst_qmlqt::openUrlExternally() { QEXPECT_FAIL("", "How do we test this?", Abort); + QVERIFY(false); } QTEST_MAIN(tst_qmlqt) diff --git a/tests/auto/declarative/states/data/signalOverrideCrash.qml b/tests/auto/declarative/states/data/signalOverrideCrash.qml new file mode 100644 index 0000000..702fa86 --- /dev/null +++ b/tests/auto/declarative/states/data/signalOverrideCrash.qml @@ -0,0 +1,15 @@ +import Qt 4.6 +import Qt.test 1.0 + +MyRectangle { + id: rect + + width: 100; height: 100 + states: State { + name: "overridden" + PropertyChanges { + target: rect + onDidSomething: rect.state = "" + } + } +} diff --git a/tests/auto/declarative/states/tst_states.cpp b/tests/auto/declarative/states/tst_states.cpp index f67c737..d6df37e 100644 --- a/tests/auto/declarative/states/tst_states.cpp +++ b/tests/auto/declarative/states/tst_states.cpp @@ -54,6 +54,7 @@ private slots: void basicExtension(); void basicBinding(); void signalOverride(); + void signalOverrideCrash(); void parentChange(); void anchorChanges(); void script(); @@ -356,6 +357,23 @@ void tst_states::signalOverride() } } +void tst_states::signalOverrideCrash() +{ + QmlEngine engine; + + QmlComponent rectComponent(&engine, SRCDIR "/data/signalOverrideCrash.qml"); + MyRect *rect = qobject_cast<MyRect*>(rectComponent.create()); + QVERIFY(rect != 0); + + //QCOMPARE(rect->color(),QColor("red")); + //rect->doSomething(); + //QCOMPARE(rect->color(),QColor("blue")); + + rect->setState("overridden"); + rect->doSomething(); + //QCOMPARE(rect->color(),QColor("green")); +} + void tst_states::parentChange() { QmlEngine engine; diff --git a/tests/auto/declarative/valuetypes/data/autoBindingRemoval.2.qml b/tests/auto/declarative/valuetypes/data/autoBindingRemoval.2.qml new file mode 100644 index 0000000..ce2e82d --- /dev/null +++ b/tests/auto/declarative/valuetypes/data/autoBindingRemoval.2.qml @@ -0,0 +1,9 @@ +import Test 1.0 + +MyTypeObject { + property int value: 10 + rect.x: value + + onRunScript: { rect = Qt.rect(10, 10, 10, 10) } +} + diff --git a/tests/auto/declarative/valuetypes/data/autoBindingRemoval.3.qml b/tests/auto/declarative/valuetypes/data/autoBindingRemoval.3.qml new file mode 100644 index 0000000..c82b533 --- /dev/null +++ b/tests/auto/declarative/valuetypes/data/autoBindingRemoval.3.qml @@ -0,0 +1,10 @@ +import Test 1.0 + +MyTypeObject { + property var value + + rect: value + + onRunScript: { rect.x = 44 } +} + diff --git a/tests/auto/declarative/valuetypes/data/autoBindingRemoval.qml b/tests/auto/declarative/valuetypes/data/autoBindingRemoval.qml new file mode 100644 index 0000000..a8a72f5 --- /dev/null +++ b/tests/auto/declarative/valuetypes/data/autoBindingRemoval.qml @@ -0,0 +1,9 @@ +import Test 1.0 + +MyTypeObject { + property int value: 10 + rect.x: value + + onRunScript: { rect.x = 42; } +} + diff --git a/tests/auto/declarative/valuetypes/data/bindingAssignment.qml b/tests/auto/declarative/valuetypes/data/bindingAssignment.qml new file mode 100644 index 0000000..a652186 --- /dev/null +++ b/tests/auto/declarative/valuetypes/data/bindingAssignment.qml @@ -0,0 +1,7 @@ +import Test 1.0 + +MyTypeObject { + property int value: 10 + + rect.x: value +} diff --git a/tests/auto/declarative/valuetypes/data/bindingConflict.qml b/tests/auto/declarative/valuetypes/data/bindingConflict.qml new file mode 100644 index 0000000..fd25c9f --- /dev/null +++ b/tests/auto/declarative/valuetypes/data/bindingConflict.qml @@ -0,0 +1,8 @@ +import Test 1.0 + +MyTypeObject { + property int value: 13 + + rect.x: value + rect: "10,10,10x10" +} diff --git a/tests/auto/declarative/valuetypes/data/bindingRead.qml b/tests/auto/declarative/valuetypes/data/bindingRead.qml new file mode 100644 index 0000000..538d776 --- /dev/null +++ b/tests/auto/declarative/valuetypes/data/bindingRead.qml @@ -0,0 +1,5 @@ +import Test 1.0 + +MyTypeObject { + property int value: rect.x +} diff --git a/tests/auto/declarative/valuetypes/data/bindingVariantCopy.qml b/tests/auto/declarative/valuetypes/data/bindingVariantCopy.qml new file mode 100644 index 0000000..691a56c --- /dev/null +++ b/tests/auto/declarative/valuetypes/data/bindingVariantCopy.qml @@ -0,0 +1,13 @@ +import Test 1.0 + +MyTypeObject { + property var object + object: MyTypeObject { + rect.x: 19 + rect.y: 33 + rect.width: 5 + rect.height: 99 + } + + rect: object.rect +} diff --git a/tests/auto/declarative/valuetypes/data/deletedObject.js b/tests/auto/declarative/valuetypes/data/deletedObject.js new file mode 100644 index 0000000..f554a0f --- /dev/null +++ b/tests/auto/declarative/valuetypes/data/deletedObject.js @@ -0,0 +1,13 @@ +var savedReference; + +function startup() +{ + savedReference = object.rect; + print("Test: " + savedReference.x); +} + +function afterDelete() +{ + print("Test: " + savedReference.x); +} + diff --git a/tests/auto/declarative/valuetypes/data/deletedObject.qml b/tests/auto/declarative/valuetypes/data/deletedObject.qml new file mode 100644 index 0000000..05459f4 --- /dev/null +++ b/tests/auto/declarative/valuetypes/data/deletedObject.qml @@ -0,0 +1,12 @@ +import Test 1.0 +import Qt 4.6 + +MyTypeObject { + property var object + + Script { source: "deletedObject.js" } + + object: MyTypeObject {} + Component.onCompleted: startup() + onRunScript: afterDelete() +} diff --git a/tests/auto/declarative/valuetypes/data/scriptAccess.qml b/tests/auto/declarative/valuetypes/data/scriptAccess.qml new file mode 100644 index 0000000..96592eb --- /dev/null +++ b/tests/auto/declarative/valuetypes/data/scriptAccess.qml @@ -0,0 +1,9 @@ +import Qt 4.6 +import Test 1.0 + +MyTypeObject { + property int valuePre; + property int valuePost; + + Component.onCompleted: { valuePre = rect.x; rect.x = 19; valuePost = rect.x; } +} diff --git a/tests/auto/declarative/valuetypes/data/scriptVariantCopy.qml b/tests/auto/declarative/valuetypes/data/scriptVariantCopy.qml new file mode 100644 index 0000000..29157e8 --- /dev/null +++ b/tests/auto/declarative/valuetypes/data/scriptVariantCopy.qml @@ -0,0 +1,14 @@ +import Test 1.0 + +MyTypeObject { + property var object + object: MyTypeObject { + rect.x: 19 + rect.y: 33 + rect.width: 5 + rect.height: 99 + } + + onRunScript: rect = object.rect +} + diff --git a/tests/auto/declarative/valuetypes/data/staticAssignment.qml b/tests/auto/declarative/valuetypes/data/staticAssignment.qml new file mode 100644 index 0000000..b687f89 --- /dev/null +++ b/tests/auto/declarative/valuetypes/data/staticAssignment.qml @@ -0,0 +1,5 @@ +import Test 1.0 + +MyTypeObject { + rect.x: 9 +} diff --git a/tests/auto/declarative/valuetypes/data/valueInterceptors.qml b/tests/auto/declarative/valuetypes/data/valueInterceptors.qml new file mode 100644 index 0000000..026ae83 --- /dev/null +++ b/tests/auto/declarative/valuetypes/data/valueInterceptors.qml @@ -0,0 +1,8 @@ +import Test 1.0 + +MyTypeObject { + property int value: 13; + + rect.x: MyOffsetValueInterceptor {} + rect.x: value +} diff --git a/tests/auto/declarative/valuetypes/data/valueSources.qml b/tests/auto/declarative/valuetypes/data/valueSources.qml new file mode 100644 index 0000000..d4d4391 --- /dev/null +++ b/tests/auto/declarative/valuetypes/data/valueSources.qml @@ -0,0 +1,5 @@ +import Test 1.0 + +MyTypeObject { + rect.x: MyConstantValueSource {} +} diff --git a/tests/auto/declarative/valuetypes/testtypes.cpp b/tests/auto/declarative/valuetypes/testtypes.cpp index f0fdaf8..565eb1c 100644 --- a/tests/auto/declarative/valuetypes/testtypes.cpp +++ b/tests/auto/declarative/valuetypes/testtypes.cpp @@ -41,3 +41,5 @@ #include "testtypes.h" QML_DEFINE_TYPE(Test, 1, 0, MyTypeObject, MyTypeObject); +QML_DEFINE_TYPE(Test, 1, 0, MyConstantValueSource, MyConstantValueSource); +QML_DEFINE_TYPE(Test, 1, 0, MyOffsetValueInterceptor, MyOffsetValueInterceptor); diff --git a/tests/auto/declarative/valuetypes/testtypes.h b/tests/auto/declarative/valuetypes/testtypes.h index cc98d7c..67e32f5 100644 --- a/tests/auto/declarative/valuetypes/testtypes.h +++ b/tests/auto/declarative/valuetypes/testtypes.h @@ -51,6 +51,7 @@ #include <QVector3D> #include <QFont> #include <qml.h> +#include <QmlPropertyValueSource> class MyTypeObject : public QObject { @@ -90,39 +91,62 @@ public: QPoint m_point; QPoint point() const { return m_point; } - void setPoint(const QPoint &v) { m_point = v; } + void setPoint(const QPoint &v) { m_point = v; emit changed(); } QPointF m_pointf; QPointF pointf() const { return m_pointf; } - void setPointf(const QPointF &v) { m_pointf = v; } + void setPointf(const QPointF &v) { m_pointf = v; emit changed(); } QSize m_size; QSize size() const { return m_size; } - void setSize(const QSize &v) { m_size = v; } + void setSize(const QSize &v) { m_size = v; emit changed(); } QSizeF m_sizef; QSizeF sizef() const { return m_sizef; } - void setSizef(const QSizeF &v) { m_sizef = v; } + void setSizef(const QSizeF &v) { m_sizef = v; emit changed(); } QRect m_rect; QRect rect() const { return m_rect; } - void setRect(const QRect &v) { m_rect = v; } + void setRect(const QRect &v) { m_rect = v; emit changed(); } QRectF m_rectf; QRectF rectf() const { return m_rectf; } - void setRectf(const QRectF &v) { m_rectf = v; } + void setRectf(const QRectF &v) { m_rectf = v; emit changed(); } QVector3D m_vector; QVector3D vector() const { return m_vector; } - void setVector(const QVector3D &v) { m_vector = v; } + void setVector(const QVector3D &v) { m_vector = v; emit changed(); } QFont m_font; QFont font() const { return m_font; } - void setFont(const QFont &v) { m_font = v; } + void setFont(const QFont &v) { m_font = v; emit changed(); } + + void emitRunScript() { emit runScript(); } signals: void changed(); + void runScript(); }; QML_DECLARE_TYPE(MyTypeObject); +class MyConstantValueSource : public QObject, public QmlPropertyValueSource +{ + Q_OBJECT +public: + virtual void setTarget(const QmlMetaProperty &p) { p.write(3345); } +}; +QML_DECLARE_TYPE(MyConstantValueSource); + +class MyOffsetValueInterceptor : public QObject, public QmlPropertyValueInterceptor +{ + Q_OBJECT +public: + virtual void setTarget(const QmlMetaProperty &p) { prop = p; } + virtual void write(const QVariant &value) { prop.write(value.toInt() + 13, QmlMetaProperty::BypassInterceptor); } + +private: + QmlMetaProperty prop; +}; +QML_DECLARE_TYPE(MyOffsetValueInterceptor); + #endif // TESTTYPES_H diff --git a/tests/auto/declarative/valuetypes/tst_valuetypes.cpp b/tests/auto/declarative/valuetypes/tst_valuetypes.cpp index a338e47..d42bfc5 100644 --- a/tests/auto/declarative/valuetypes/tst_valuetypes.cpp +++ b/tests/auto/declarative/valuetypes/tst_valuetypes.cpp @@ -43,6 +43,7 @@ #include <QmlEngine> #include <QmlComponent> #include <QDebug> +#include <private/qmlvaluetype_p.h> #include "testtypes.h" class tst_valuetypes : public QObject @@ -61,14 +62,19 @@ private slots: void vector3d(); void font(); - // ### - // Test binding assignment - // Test static assignment - // Test JS assignment - // Test "font.x: blah; font: blah2;" conflict - // Test constant binding removal - // Test value sources - // Test behaviours + void bindingAssignment(); + void bindingRead(); + void staticAssignment(); + void scriptAccess(); + void autoBindingRemoval(); + void valueSources(); + void valueInterceptors(); + void bindingConflict(); + void deletedObject(); + void bindingVariantCopy(); + void scriptVariantCopy(); + void cppClasses(); + private: QmlEngine engine; }; @@ -312,6 +318,8 @@ void tst_valuetypes::font() QVERIFY(object != 0); QCOMPARE(object->font().pixelSize(), 10); + + delete object; } // Test pixelSize and pointSize @@ -322,9 +330,243 @@ void tst_valuetypes::font() QVERIFY(object != 0); QCOMPARE(object->font().pixelSize(), 10); + + delete object; + } +} + +// Test bindings can write to value types +void tst_valuetypes::bindingAssignment() +{ + QmlComponent component(&engine, TEST_FILE("bindingAssignment.qml")); + MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create()); + QVERIFY(object != 0); + + QCOMPARE(object->rect().x(), 10); + + object->setProperty("value", QVariant(92)); + + QCOMPARE(object->rect().x(), 92); + + delete object; +} + +// Test bindings can read from value types +void tst_valuetypes::bindingRead() +{ + QmlComponent component(&engine, TEST_FILE("bindingRead.qml")); + MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create()); + QVERIFY(object != 0); + + QCOMPARE(object->property("value").toInt(), 2); + + object->setRect(QRect(19, 3, 88, 2)); + + QCOMPARE(object->property("value").toInt(), 19); + + delete object; +} + +// Test static values can assign to value types +void tst_valuetypes::staticAssignment() +{ + QmlComponent component(&engine, TEST_FILE("staticAssignment.qml")); + MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create()); + QVERIFY(object != 0); + + QCOMPARE(object->rect().x(), 9); + + delete object; +} + +// Test scripts can read/write value types +void tst_valuetypes::scriptAccess() +{ + QmlComponent component(&engine, TEST_FILE("scriptAccess.qml")); + MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create()); + QVERIFY(object != 0); + + QCOMPARE(object->property("valuePre").toInt(), 2); + QCOMPARE(object->rect().x(), 19); + QCOMPARE(object->property("valuePost").toInt(), 19); + + delete object; +} + +// Test that assigning a constant from script removes any binding +void tst_valuetypes::autoBindingRemoval() +{ + { + QmlComponent component(&engine, TEST_FILE("autoBindingRemoval.qml")); + MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create()); + QVERIFY(object != 0); + + QCOMPARE(object->rect().x(), 10); + + object->setProperty("value", QVariant(13)); + + QCOMPARE(object->rect().x(), 13); + + object->emitRunScript(); + + QCOMPARE(object->rect().x(), 42); + + object->setProperty("value", QVariant(92)); + + QCOMPARE(object->rect().x(), 42); + + delete object; + } + + { + QmlComponent component(&engine, TEST_FILE("autoBindingRemoval.2.qml")); + MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create()); + QVERIFY(object != 0); + + QCOMPARE(object->rect().x(), 10); + + object->setProperty("value", QVariant(13)); + + QCOMPARE(object->rect().x(), 13); + + object->emitRunScript(); + + QCOMPARE(object->rect(), QRect(10, 10, 10, 10)); + + object->setProperty("value", QVariant(92)); + + QCOMPARE(object->rect(), QRect(10, 10, 10, 10)); + + delete object; + } + + { + QmlComponent component(&engine, TEST_FILE("autoBindingRemoval.3.qml")); + MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create()); + QVERIFY(object != 0); + + object->setProperty("value", QVariant(QRect(9, 22, 33, 44))); + + QCOMPARE(object->rect(), QRect(9, 22, 33, 44)); + + object->emitRunScript(); + + QCOMPARE(object->rect(), QRect(44, 22, 33, 44)); + + object->setProperty("value", QVariant(QRect(19, 3, 4, 8))); + + QCOMPARE(object->rect(), QRect(44, 22, 33, 44)); + + delete object; } + +} + +// Test that property value sources assign to value types +void tst_valuetypes::valueSources() +{ + QmlComponent component(&engine, TEST_FILE("valueSources.qml")); + MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create()); + QVERIFY(object != 0); + + QCOMPARE(object->rect().x(), 3345); + + delete object; +} + +// Test that property value interceptors can be applied to value types +void tst_valuetypes::valueInterceptors() +{ + QmlComponent component(&engine, TEST_FILE("valueInterceptors.qml")); + MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create()); + QVERIFY(object != 0); + + QCOMPARE(object->rect().x(), 26); + + object->setProperty("value", 99); + + QCOMPARE(object->rect().x(), 112); + + delete object; +} + +// Test that you can't assign a binding to the "root" value type, and a sub-property +void tst_valuetypes::bindingConflict() +{ + QmlComponent component(&engine, TEST_FILE("bindingConflict.qml")); + QCOMPARE(component.isError(), true); +} + +#define CPP_TEST(type, v) \ +{ \ + type *t = new type; \ + QVariant value(v); \ + t->setValue(value); \ + QCOMPARE(t->value(), value); \ + delete t; \ +} + +// Test that accessing a reference to a valuetype after the owning object is deleted +// doesn't crash +void tst_valuetypes::deletedObject() +{ + QmlComponent component(&engine, TEST_FILE("deletedObject.qml")); + QTest::ignoreMessage(QtDebugMsg, "Test: 2"); + MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create()); + QVERIFY(object != 0); + + QObject *dObject = qvariant_cast<QObject *>(object->property("object")); + QVERIFY(dObject != 0); + delete dObject; + + QTest::ignoreMessage(QtDebugMsg, "Test: undefined"); + object->emitRunScript(); + + delete object; +} + +// Test that value types can be assigned to another value type property in a binding +void tst_valuetypes::bindingVariantCopy() +{ + QmlComponent component(&engine, TEST_FILE("bindingVariantCopy.qml")); + MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create()); + QVERIFY(object != 0); + + QCOMPARE(object->rect(), QRect(19, 33, 5, 99)); + + delete object; +} + +// Test that value types can be assigned to another value type property in script +void tst_valuetypes::scriptVariantCopy() +{ + QmlComponent component(&engine, TEST_FILE("scriptVariantCopy.qml")); + MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create()); + QVERIFY(object != 0); + + QCOMPARE(object->rect(), QRect(2, 3, 109, 102)); + + object->emitRunScript(); + + QCOMPARE(object->rect(), QRect(19, 33, 5, 99)); + + delete object; } + +// Test that the value type classes can be used manually +void tst_valuetypes::cppClasses() +{ + CPP_TEST(QmlPointValueType, QPoint(19, 33)); + CPP_TEST(QmlPointFValueType, QPointF(33.6, -23)); + CPP_TEST(QmlSizeValueType, QSize(-100, 18)); + CPP_TEST(QmlSizeFValueType, QSizeF(-100.7, 18.2)); + CPP_TEST(QmlRectValueType, QRect(13, 39, 10928, 88)); + CPP_TEST(QmlRectFValueType, QRectF(88.2, -90.1, 103.2, 118)); + CPP_TEST(QmlVector3DValueType, QVector3D(18.2, 19.7, 1002)); + CPP_TEST(QmlFontValueType, QFont("Helvetica")); + +} QTEST_MAIN(tst_valuetypes) #include "tst_valuetypes.moc" diff --git a/tests/auto/declarative/visual/webview/javascript/data/windowObjects.0.png b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.0.png Binary files differnew file mode 100644 index 0000000..b5c35d2 --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.0.png diff --git a/tests/auto/declarative/visual/webview/javascript/data/windowObjects.1.png b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.1.png Binary files differnew file mode 100644 index 0000000..b5c35d2 --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.1.png diff --git a/tests/auto/declarative/visual/webview/javascript/data/windowObjects.2.png b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.2.png Binary files differnew file mode 100644 index 0000000..28403c8 --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.2.png diff --git a/tests/auto/declarative/visual/webview/javascript/data/windowObjects.3.png b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.3.png Binary files differnew file mode 100644 index 0000000..241b9f8 --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.3.png diff --git a/tests/auto/declarative/visual/webview/javascript/data/windowObjects.4.png b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.4.png Binary files differnew file mode 100644 index 0000000..1877cb2 --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.4.png diff --git a/tests/auto/declarative/visual/webview/javascript/data/windowObjects.qml b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.qml new file mode 100644 index 0000000..7fce295 --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/data/windowObjects.qml @@ -0,0 +1,2643 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 32 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 48 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 64 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 80 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 96 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 112 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 128 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 144 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 160 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 176 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 192 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 208 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 224 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 240 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 256 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 272 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 288 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 304 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 320 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 336 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 352 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 368 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 384 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 400 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 416 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 432 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 448 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 464 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 480 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 496 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 512 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 528 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 544 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 560 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 576 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 592 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 608 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 624 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 640 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 656 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 672 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 688 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 704 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 720 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 736 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 752 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 768 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 784 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 800 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 816 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 832 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 848 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 864 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 880 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 896 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 912 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 928 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 944 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 960 + image: "windowObjects.0.png" + } + Frame { + msec: 976 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 992 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1008 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1024 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1040 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 155; y: 9 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 145; y: 23 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1056 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 137; y: 37 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 127; y: 53 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1072 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 119; y: 67 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 111; y: 77 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1088 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 103; y: 87 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1104 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 97; y: 93 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 101 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 87; y: 109 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1120 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 117 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 81; y: 125 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1136 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 81; y: 133 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 79; y: 139 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1152 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 79; y: 142 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 79; y: 145 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1168 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 78; y: 146 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 78; y: 147 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1184 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1200 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1216 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1232 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1248 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 143 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1264 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1280 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 142 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 141 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 139 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1296 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 138 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1312 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1328 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1344 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 86; y: 137 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 87; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1360 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 88; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1376 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 138 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 139 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1392 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 90; y: 141 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 90; y: 142 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1408 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 144 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1424 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 146 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 148 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 149 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1440 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 151 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 153 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1456 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 90; y: 154 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 90; y: 155 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1472 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 156 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1488 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1504 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1520 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1536 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1552 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1568 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1584 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1600 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1616 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1632 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1648 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1664 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1680 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1696 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1712 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1728 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1744 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1760 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1776 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1792 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1808 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1824 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1840 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1856 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1872 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1888 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1904 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1920 + image: "windowObjects.1.png" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 89; y: 156 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1936 + hash: "fca76207a4fa6f2c4bb01d28aa018f0c" + } + Frame { + msec: 1952 + hash: "fca76207a4fa6f2c4bb01d28aa018f0c" + } + Frame { + msec: 1968 + hash: "fca76207a4fa6f2c4bb01d28aa018f0c" + } + Frame { + msec: 1984 + hash: "fca76207a4fa6f2c4bb01d28aa018f0c" + } + Frame { + msec: 2000 + hash: "fca76207a4fa6f2c4bb01d28aa018f0c" + } + Frame { + msec: 2016 + hash: "fca76207a4fa6f2c4bb01d28aa018f0c" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 89; y: 156 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2032 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2048 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2064 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2080 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2096 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2112 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2128 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2144 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2160 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2176 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2192 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2208 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2224 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2240 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2256 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2272 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2288 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 157 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 88; y: 158 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 87; y: 160 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2304 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 87; y: 161 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 167 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2320 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 169 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 80; y: 175 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2336 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 78; y: 183 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 189 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2352 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 72; y: 195 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 68; y: 201 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2368 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 64; y: 207 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 62; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2384 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 61; y: 215 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 59; y: 221 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2400 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 58; y: 222 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 57; y: 224 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2416 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2432 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2448 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2464 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2480 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2496 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2512 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2528 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2544 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2560 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2576 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2592 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2608 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2624 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2640 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2656 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2672 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2688 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2704 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2720 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2736 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 49; y: 225 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 50; y: 224 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2752 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 50; y: 223 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2768 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 51; y: 222 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2784 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 51; y: 221 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 52; y: 220 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2800 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 52; y: 218 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2816 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 53; y: 217 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2832 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2848 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2864 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 54; y: 216 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2880 + image: "windowObjects.2.png" + } + Frame { + msec: 2896 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 55; y: 215 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2912 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2928 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 56; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2944 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2960 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2976 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 57; y: 214 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 57; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2992 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3008 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3024 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3040 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3056 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3072 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3088 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3104 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 57; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3120 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3136 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3152 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3168 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3184 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3200 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3216 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3232 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 3248 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Frame { + msec: 3264 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Frame { + msec: 3280 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Frame { + msec: 3296 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 3312 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Frame { + msec: 3328 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Frame { + msec: 3344 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Frame { + msec: 3360 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 57; y: 212 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3376 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Frame { + msec: 3392 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Frame { + msec: 3408 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 57; y: 211 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3424 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 3440 + hash: "c6ac7e0be8b7b2a80966344389def97a" + } + Frame { + msec: 3456 + hash: "c6ac7e0be8b7b2a80966344389def97a" + } + Frame { + msec: 3472 + hash: "c6ac7e0be8b7b2a80966344389def97a" + } + Frame { + msec: 3488 + hash: "40f333072bb9f1d334d5ae432d9641b9" + } + Frame { + msec: 3504 + hash: "40f333072bb9f1d334d5ae432d9641b9" + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 3520 + hash: "40f333072bb9f1d334d5ae432d9641b9" + } + Frame { + msec: 3536 + hash: "40f333072bb9f1d334d5ae432d9641b9" + } + Frame { + msec: 3552 + hash: "40f333072bb9f1d334d5ae432d9641b9" + } + Frame { + msec: 3568 + hash: "40f333072bb9f1d334d5ae432d9641b9" + } + Frame { + msec: 3584 + hash: "40f333072bb9f1d334d5ae432d9641b9" + } + Frame { + msec: 3600 + hash: "40f333072bb9f1d334d5ae432d9641b9" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 58; y: 210 + modifiers: 0 + sendToViewport: true + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 3616 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 60; y: 209 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 61; y: 207 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3632 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 62; y: 205 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3648 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 62; y: 204 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 203 + modifiers: 0 + sendToViewport: true + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 3664 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 202 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 64; y: 200 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3680 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Frame { + msec: 3696 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 65; y: 198 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 66; y: 197 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 67; y: 195 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3712 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 68; y: 194 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 69; y: 192 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3728 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 190 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 188 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3744 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 186 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 185 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3760 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 71; y: 183 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 71; y: 181 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3776 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 72; y: 179 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 73; y: 178 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3792 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 73; y: 176 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 73; y: 175 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3808 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 174 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 173 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3824 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 172 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3840 + image: "windowObjects.3.png" + } + Frame { + msec: 3856 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Frame { + msec: 3872 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Frame { + msec: 3888 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Frame { + msec: 3904 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Frame { + msec: 3920 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 75; y: 171 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 76; y: 171 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3936 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Frame { + msec: 3952 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Frame { + msec: 3968 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Frame { + msec: 3984 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Frame { + msec: 4000 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Frame { + msec: 4016 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Frame { + msec: 4032 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 76; y: 170 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4048 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 77; y: 169 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 78; y: 168 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4064 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 79; y: 168 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4080 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 81; y: 167 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 81; y: 166 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4096 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 165 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4112 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 164 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4128 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Frame { + msec: 4144 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Frame { + msec: 4160 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Frame { + msec: 4176 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 83; y: 164 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4192 + hash: "5b3505be865f704640e81cea092d35ba" + } + Frame { + msec: 4208 + hash: "5b3505be865f704640e81cea092d35ba" + } + Frame { + msec: 4224 + hash: "5b3505be865f704640e81cea092d35ba" + } + Frame { + msec: 4240 + hash: "5b3505be865f704640e81cea092d35ba" + } + Frame { + msec: 4256 + hash: "5b3505be865f704640e81cea092d35ba" + } + Frame { + msec: 4272 + hash: "5b3505be865f704640e81cea092d35ba" + } + Frame { + msec: 4288 + hash: "5b3505be865f704640e81cea092d35ba" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 83; y: 164 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4304 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4320 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4336 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4352 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4368 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4384 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4400 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4416 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4432 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4448 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4464 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 158 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 156 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4480 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 86; y: 154 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 86; y: 152 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4496 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 87; y: 150 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 144 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4512 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 93; y: 138 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 99; y: 134 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4528 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 101; y: 128 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 122 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4544 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 109; y: 114 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 113; y: 108 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4560 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 114; y: 106 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 114; y: 105 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4576 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 115; y: 104 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 115; y: 102 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4592 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 115; y: 100 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 116; y: 98 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4608 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 120; y: 92 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 122; y: 86 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4624 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 126; y: 76 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 130; y: 66 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4640 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 132; y: 56 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 134; y: 46 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4656 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 136; y: 38 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 138; y: 30 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4672 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 140; y: 22 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 141; y: 20 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4688 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 143; y: 14 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 144; y: 12 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4704 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 144; y: 11 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 144; y: 9 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4720 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 144; y: 7 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 144; y: 6 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4736 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 143; y: 4 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 143; y: 2 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4752 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 143; y: 1 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4768 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4784 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4800 + image: "windowObjects.4.png" + } + Frame { + msec: 4816 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4832 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4848 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4864 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4880 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4896 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4912 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4928 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4944 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4960 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4976 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4992 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5008 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5024 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5040 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5056 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5072 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5088 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5104 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5120 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5136 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5152 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5168 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5184 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5200 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5216 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5232 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5248 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5264 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5280 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5296 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5312 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5328 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5344 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5360 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5376 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5392 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5408 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5424 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5440 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5456 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5472 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5488 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5504 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5520 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5536 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5552 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5568 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5584 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } +} diff --git a/tests/auto/declarative/visual/webview/javascript/test-objects.html b/tests/auto/declarative/visual/webview/javascript/test-objects.html new file mode 100644 index 0000000..ed7d2ea --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/test-objects.html @@ -0,0 +1,12 @@ +<html> +<head> +</head> +<body> +<h1>Boring Document</h1> +<p> +This is a boring document. +It gets the text on this button: +<input id=button type=button value="click me" + onClick="{document.getElementById('button').value=window.qmltext.text}"> +from QML. +<p> diff --git a/tests/auto/declarative/visual/webview/javascript/windowObjects.qml b/tests/auto/declarative/visual/webview/javascript/windowObjects.qml new file mode 100644 index 0000000..f1d4097 --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/windowObjects.qml @@ -0,0 +1,26 @@ +import Qt 4.6 + +Column { + WebView { + width: 200 + height: 200 + url: "test-objects.html" + javaScriptWindowObjects: + Object { + property string text: btntext.text + WebView.windowObjectName: "qmltext" + } + } + Row { + Text { text: "Input:" } + Rectangle { + width: btntext.width+10 + height: btntext.height+10 + border.color: "black" + TextInput { + id: btntext + text: "Blah" + } + } + } +} diff --git a/tests/auto/declarative/visual/webview/settings/FreeMono.ttf b/tests/auto/declarative/visual/webview/settings/FreeMono.ttf Binary files differnew file mode 100644 index 0000000..d7ce52d --- /dev/null +++ b/tests/auto/declarative/visual/webview/settings/FreeMono.ttf diff --git a/tests/auto/declarative/visual/webview/settings/data/fontFamily.0.png b/tests/auto/declarative/visual/webview/settings/data/fontFamily.0.png Binary files differnew file mode 100644 index 0000000..7721e75 --- /dev/null +++ b/tests/auto/declarative/visual/webview/settings/data/fontFamily.0.png diff --git a/tests/auto/declarative/visual/webview/settings/data/fontFamily.qml b/tests/auto/declarative/visual/webview/settings/data/fontFamily.qml new file mode 100644 index 0000000..195c3ba --- /dev/null +++ b/tests/auto/declarative/visual/webview/settings/data/fontFamily.qml @@ -0,0 +1,395 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 32 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 48 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 64 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 80 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 96 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 112 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 128 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 144 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 160 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 176 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 192 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 208 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 224 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 240 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 256 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 272 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 288 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 304 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 320 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 336 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 352 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 368 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 384 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 400 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 416 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 432 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 448 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 464 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 480 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 496 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 512 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 528 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 544 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 560 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 576 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 592 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 608 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 624 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 640 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 656 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 672 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 688 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 196; y: 25 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 194; y: 19 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 190; y: 13 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 704 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 720 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 736 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 752 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 768 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 784 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 800 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 816 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 832 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 848 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 864 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 880 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 896 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 912 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 928 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 944 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 960 + image: "fontFamily.0.png" + } + Frame { + msec: 976 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 992 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1008 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1024 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1040 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1056 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1072 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1088 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1104 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1120 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1136 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1152 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1168 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1184 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1200 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1216 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1232 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1248 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1264 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1280 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1296 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1312 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1328 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1344 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1360 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1376 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1392 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1408 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1424 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1440 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1456 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } +} diff --git a/tests/auto/declarative/visual/webview/settings/data/fontSize.0.png b/tests/auto/declarative/visual/webview/settings/data/fontSize.0.png Binary files differnew file mode 100644 index 0000000..95196a1 --- /dev/null +++ b/tests/auto/declarative/visual/webview/settings/data/fontSize.0.png diff --git a/tests/auto/declarative/visual/webview/settings/data/fontSize.qml b/tests/auto/declarative/visual/webview/settings/data/fontSize.qml new file mode 100644 index 0000000..438ffa5 --- /dev/null +++ b/tests/auto/declarative/visual/webview/settings/data/fontSize.qml @@ -0,0 +1,339 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 32 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 48 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 64 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 80 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 96 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 112 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 128 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 144 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 160 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 176 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 192 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 208 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 224 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 240 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 256 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 272 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 288 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 304 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 320 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 336 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 352 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 368 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 384 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 400 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 416 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 432 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 448 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 464 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 480 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 496 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 512 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 528 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 544 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 560 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 576 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 592 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 608 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 624 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 640 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 656 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 672 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 688 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 704 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 720 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 736 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 752 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 768 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 784 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 800 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 816 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 832 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 848 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 864 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 880 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 896 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 912 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 928 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 944 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 960 + image: "fontSize.0.png" + } + Frame { + msec: 976 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 992 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1008 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1024 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1040 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1056 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1072 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1088 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1104 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1120 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1136 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1152 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1168 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1184 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1200 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1216 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1232 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1248 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1264 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1280 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1296 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1312 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1328 + hash: "962e77f522956d38f3b1b890df749f0a" + } +} diff --git a/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.0.png b/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.0.png Binary files differnew file mode 100644 index 0000000..48920a2 --- /dev/null +++ b/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.0.png diff --git a/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.1.png b/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.1.png Binary files differnew file mode 100644 index 0000000..48920a2 --- /dev/null +++ b/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.1.png diff --git a/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.qml b/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.qml new file mode 100644 index 0000000..ead5c3b --- /dev/null +++ b/tests/auto/declarative/visual/webview/settings/data/noAutoLoadImages.qml @@ -0,0 +1,595 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 32 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 48 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 64 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 80 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 96 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 112 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 128 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 144 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 160 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 176 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 192 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 208 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 224 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 240 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 256 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 272 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 288 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 304 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 320 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 336 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 352 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 368 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 384 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 400 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 416 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 432 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 448 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 464 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 480 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 496 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 512 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 528 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 544 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 560 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 576 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 592 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 608 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 624 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 640 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 656 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 672 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 688 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 704 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 720 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 736 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 752 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 768 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 784 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 800 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 816 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 832 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 848 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 864 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 880 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 896 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 912 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 928 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 944 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 960 + image: "noAutoLoadImages.0.png" + } + Frame { + msec: 976 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 992 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1008 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1024 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1040 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1056 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1072 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1088 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1104 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1120 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1136 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1152 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1168 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1184 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1200 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1216 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1232 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1248 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1264 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1280 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1296 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1312 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1328 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1344 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1360 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1376 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1392 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1408 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1424 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1440 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1456 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1472 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1488 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1504 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1520 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1536 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1552 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1568 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1584 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1600 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1616 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1632 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1648 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1664 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1680 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1696 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1712 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1728 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1744 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1760 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1776 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1792 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1808 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1824 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1840 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1856 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1872 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1888 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1904 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1920 + image: "noAutoLoadImages.1.png" + } + Frame { + msec: 1936 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1952 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1968 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1984 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2000 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2016 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2032 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2048 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2064 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2080 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2096 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2112 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2128 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2144 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2160 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2176 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2192 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2208 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2224 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2240 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2256 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2272 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2288 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2304 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2320 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2336 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2352 + hash: "5146cfbeefc51268eca7717d84775750" + } +} diff --git a/tests/auto/declarative/visual/webview/settings/data/setFontFamily.0.png b/tests/auto/declarative/visual/webview/settings/data/setFontFamily.0.png Binary files differnew file mode 100644 index 0000000..1a0448a --- /dev/null +++ b/tests/auto/declarative/visual/webview/settings/data/setFontFamily.0.png diff --git a/tests/auto/declarative/visual/webview/settings/data/setFontFamily.qml b/tests/auto/declarative/visual/webview/settings/data/setFontFamily.qml new file mode 100644 index 0000000..da71ef1 --- /dev/null +++ b/tests/auto/declarative/visual/webview/settings/data/setFontFamily.qml @@ -0,0 +1,351 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 32 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 48 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 64 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 80 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 96 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 112 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 128 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 144 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 160 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 176 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 192 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 208 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 224 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 240 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 256 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 272 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 288 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 304 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 320 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 336 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 352 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 368 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 384 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 400 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 416 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 432 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 448 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 464 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 480 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 496 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 512 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 528 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 544 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 560 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 576 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 592 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 608 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 624 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 640 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 656 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 672 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 688 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 704 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 720 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 736 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 752 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 768 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 784 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 800 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 816 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 832 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 848 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 864 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 880 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 896 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 912 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 928 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 944 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 960 + image: "setFontFamily.0.png" + } + Frame { + msec: 976 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 992 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1008 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1024 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1040 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1056 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1072 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1088 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1104 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1120 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1136 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1152 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1168 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1184 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1200 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1216 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1232 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1248 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1264 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1280 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1296 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1312 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1328 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1344 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1360 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } + Frame { + msec: 1376 + hash: "52d74d4a6716ed4d4e202de6480b13b2" + } +} diff --git a/tests/auto/declarative/visual/webview/settings/fontFamily.qml b/tests/auto/declarative/visual/webview/settings/fontFamily.qml new file mode 100644 index 0000000..2bb2a53 --- /dev/null +++ b/tests/auto/declarative/visual/webview/settings/fontFamily.qml @@ -0,0 +1,16 @@ +import Qt 4.6 + +WebView { + id: web + width: 200 + height: 200 + Column { + anchors.fill: parent + Text { text: "standard: " + web.settings.standardFontFamily } + Text { text: "fixed: " + web.settings.fixedFontFamily } + Text { text: "serif: " + web.settings.serifFontFamily } + Text { text: "sansserif: " + web.settings.sansSerifFontFamily } + Text { text: "cursive: " + web.settings.cursiveFontFamily } + Text { text: "fantasy: " + web.settings.fantasyFontFamily } + } +} diff --git a/tests/auto/declarative/visual/webview/settings/fontSize.qml b/tests/auto/declarative/visual/webview/settings/fontSize.qml new file mode 100644 index 0000000..b970783 --- /dev/null +++ b/tests/auto/declarative/visual/webview/settings/fontSize.qml @@ -0,0 +1,70 @@ +import Qt 4.6 + +Grid { + columns: 3 + Rectangle { + Text { color: "green"; text: "Normal" } + border.color: "black" + width: 200 + height: 200 + WebView { + anchors.fill: parent + url: "test.html" + } + } + Rectangle { + Text { color: "green"; text: "Big" } + border.color: "black" + width: 200 + height: 200 + WebView { + anchors.fill: parent + url: "test.html" + settings.minimumFontSize: 20 + } + } + Rectangle { + Text { color: "green"; text: "Big (logical)" } + border.color: "black" + width: 200 + height: 200 + WebView { + anchors.fill: parent + url: "test.html" + settings.minimumLogicalFontSize: 20 + } + } + Rectangle { + Text { color: "green"; text: "Bigger" } + border.color: "black" + width: 200 + height: 200 + WebView { + anchors.fill: parent + url: "test.html" + settings.minimumFontSize: 30 + } + } + Rectangle { + Text { color: "green"; text: "Small (except fixed)" } + border.color: "black" + width: 200 + height: 200 + WebView { + anchors.fill: parent + url: "test.html" + settings.defaultFontSize: 8 + } + } + Rectangle { + Text { color: "green"; text: "Small fixed" } + border.color: "black" + width: 200 + height: 200 + WebView { + anchors.fill: parent + url: "test.html" + settings.defaultFixedFontSize: 8 + } + } +} diff --git a/tests/auto/declarative/visual/webview/settings/noAutoLoadImages.qml b/tests/auto/declarative/visual/webview/settings/noAutoLoadImages.qml new file mode 100644 index 0000000..2478932 --- /dev/null +++ b/tests/auto/declarative/visual/webview/settings/noAutoLoadImages.qml @@ -0,0 +1,20 @@ +import Qt 4.6 + +Grid { + columns: 2 + Rectangle { + Text { id: label; x:10; y:170; color: "green"; text: "No image" } + border.color: "black" + width: 200 + height: 200 + WebView { + anchors.fill: parent + settings.autoLoadImages: false + url: "test-img.html" + MouseRegion { + anchors.fill: parent + onClicked: { parent.settings.autoLoadImages=true; label.text=""; parent.reload.trigger() } + } + } + } +} diff --git a/tests/auto/declarative/visual/webview/settings/qtlogo.png b/tests/auto/declarative/visual/webview/settings/qtlogo.png Binary files differnew file mode 100644 index 0000000..399bd0b --- /dev/null +++ b/tests/auto/declarative/visual/webview/settings/qtlogo.png diff --git a/tests/auto/declarative/visual/webview/settings/setFontFamily.qml b/tests/auto/declarative/visual/webview/settings/setFontFamily.qml new file mode 100644 index 0000000..99d5f2a --- /dev/null +++ b/tests/auto/declarative/visual/webview/settings/setFontFamily.qml @@ -0,0 +1,10 @@ +import Qt 4.6 + +WebView { + url: "test.html" + width: 200 + height: 200 + settings.standardFontFamily: font.name + // WebKit doesn't seem to honour any other FontFamily settings + FontLoader { id: font; source: "FreeMono.ttf" } +} diff --git a/tests/auto/declarative/visual/webview/settings/test-img.html b/tests/auto/declarative/visual/webview/settings/test-img.html new file mode 100644 index 0000000..cdd63ac --- /dev/null +++ b/tests/auto/declarative/visual/webview/settings/test-img.html @@ -0,0 +1,6 @@ +<html> +<body> +<h1>Boring Document</h1> +<p> +This is a boring document. +With a picture: <img src="qtlogo.png"> diff --git a/tests/auto/declarative/visual/webview/settings/test.html b/tests/auto/declarative/visual/webview/settings/test.html new file mode 100644 index 0000000..3265e20 --- /dev/null +++ b/tests/auto/declarative/visual/webview/settings/test.html @@ -0,0 +1,9 @@ +<html> +<body> +<h1>Boring Document</h1> +<p> +This is a boring document. +</p> +<i>This is italic.</i> +<b>This is bold.</b> +<tt>This is fixed.</tt> diff --git a/tests/auto/declarative/visual/webview/zooming/data/resolution.0.png b/tests/auto/declarative/visual/webview/zooming/data/resolution.0.png Binary files differnew file mode 100644 index 0000000..7e989c6 --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/data/resolution.0.png diff --git a/tests/auto/declarative/visual/webview/zooming/data/resolution.1.png b/tests/auto/declarative/visual/webview/zooming/data/resolution.1.png Binary files differnew file mode 100644 index 0000000..60ccc0b --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/data/resolution.1.png diff --git a/tests/auto/declarative/visual/webview/zooming/data/resolution.2.png b/tests/auto/declarative/visual/webview/zooming/data/resolution.2.png Binary files differnew file mode 100644 index 0000000..6c22494 --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/data/resolution.2.png diff --git a/tests/auto/declarative/visual/webview/zooming/data/resolution.3.png b/tests/auto/declarative/visual/webview/zooming/data/resolution.3.png Binary files differnew file mode 100644 index 0000000..71dd56f --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/data/resolution.3.png diff --git a/tests/auto/declarative/visual/webview/zooming/data/resolution.4.png b/tests/auto/declarative/visual/webview/zooming/data/resolution.4.png Binary files differnew file mode 100644 index 0000000..ce03cb6 --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/data/resolution.4.png diff --git a/tests/auto/declarative/visual/webview/zooming/data/resolution.qml b/tests/auto/declarative/visual/webview/zooming/data/resolution.qml new file mode 100644 index 0000000..0a2b8db --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/data/resolution.qml @@ -0,0 +1,1319 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "ac1d9c1cc13813b5e94c692a209a4e36" + } + Frame { + msec: 32 + hash: "1f189a436cf74ae83a03c3bb63c24ec2" + } + Frame { + msec: 48 + hash: "369f761053d5910e00672aa866f698ba" + } + Frame { + msec: 64 + hash: "30a191ae899121ae22d10acee6593415" + } + Frame { + msec: 80 + hash: "7af041898748bb5950643b057ca59eea" + } + Frame { + msec: 96 + hash: "e0a2ed91e78ff9a994deb9649a8afc16" + } + Frame { + msec: 112 + hash: "649ad1a3fb57fb088e4e5cfd749bf2e5" + } + Frame { + msec: 128 + hash: "9053a92e343ebb79bd2831f5ab94a1b5" + } + Frame { + msec: 144 + hash: "dc78b09e27bbc0a2cfec83436eef4446" + } + Frame { + msec: 160 + hash: "2aaa3749f93734dd203e1fea91a9f24a" + } + Frame { + msec: 176 + hash: "8df8dd33eada434231332b81e03430ce" + } + Frame { + msec: 192 + hash: "b5b1beb4dd4720eaa8b888fbef1ba875" + } + Frame { + msec: 208 + hash: "e531d33ef14b58ad843a6be6d7cb0961" + } + Frame { + msec: 224 + hash: "011c0bcca7717b08bc53738718203f7e" + } + Frame { + msec: 240 + hash: "412a630348aa44d56f36f04982035e36" + } + Frame { + msec: 256 + hash: "45528cdc62622b6d01e44466cd85bd38" + } + Frame { + msec: 272 + hash: "0901c99f959d6c10a0b6ea46a282d8fd" + } + Frame { + msec: 288 + hash: "3f200fca4815d555f22912d9fcdc20ee" + } + Frame { + msec: 304 + hash: "5e3c58e2f3a57f4ea48f4315d37ed813" + } + Frame { + msec: 320 + hash: "e8d98ec2d13ef4324feba11be95d0735" + } + Frame { + msec: 336 + hash: "4f3b79b341b63499a20f1e1e2cd979f9" + } + Frame { + msec: 352 + hash: "5ddbc3bc10292bec41531e83c0921c59" + } + Frame { + msec: 368 + hash: "9bc9801e83267689cd2750226f2b08ce" + } + Frame { + msec: 384 + hash: "f87195f2393914a0bbed9a454de01ff5" + } + Frame { + msec: 400 + hash: "4e0fd7f45e53a8d44c416eb9235ec877" + } + Frame { + msec: 416 + hash: "a579d6324fb4bf9ac5ceaba2aa708764" + } + Frame { + msec: 432 + hash: "b9f3f08168fb55ba01e56e670db565de" + } + Frame { + msec: 448 + hash: "cbd63ec868578e295a83170f42b23678" + } + Frame { + msec: 464 + hash: "2ed9d0e09b61dee8b2703e580007d7a5" + } + Frame { + msec: 480 + hash: "92fa2d9ef05140eb9d0fcf78b55f202e" + } + Frame { + msec: 496 + hash: "9a3f9dc04a900020f0e488309d7b4757" + } + Frame { + msec: 512 + hash: "93b4876c3e185ff4875a7447b0bf4f0f" + } + Frame { + msec: 528 + hash: "41b40e36f77d04e62f72ad34aa50709a" + } + Frame { + msec: 544 + hash: "2ea69aeb32fee61b61aa9c4efb2834bf" + } + Frame { + msec: 560 + hash: "0971ac1e05ea2ba387c78d4d103f5ea1" + } + Frame { + msec: 576 + hash: "98e46dff678f293fd6a4e9313ab3aec7" + } + Frame { + msec: 592 + hash: "82b94393071d6c32dd8028e1ee69e7fb" + } + Frame { + msec: 608 + hash: "240df67aa72a24546eb6e043e0d3d205" + } + Frame { + msec: 624 + hash: "56c4113cc341c254ccab66f3bc313154" + } + Frame { + msec: 640 + hash: "20d758c1537ed1a9aff657414b50926c" + } + Frame { + msec: 656 + hash: "ae252d835a05e01c2a12ae820335049a" + } + Frame { + msec: 672 + hash: "4d53256fbb012e738ba3868e2482250d" + } + Frame { + msec: 688 + hash: "261a341cab38986fb2f53b8e430f04a3" + } + Frame { + msec: 704 + hash: "1030f795d310f742ba491a2a90ff52d8" + } + Frame { + msec: 720 + hash: "59d24ebfedd2a87bdbd755d06c4361d2" + } + Frame { + msec: 736 + hash: "a6eaa480b3f93d33ae23bb36b7691b92" + } + Frame { + msec: 752 + hash: "cb6cf1e6e89da3fcbad323f744aef18d" + } + Frame { + msec: 768 + hash: "33a4f07cf7f5d16f006541c61ae2e4ee" + } + Frame { + msec: 784 + hash: "6e857b106486ea0aaa5321d4a7a07eae" + } + Frame { + msec: 800 + hash: "0f80edaf3eecf7a8c015d3fcecc0a494" + } + Frame { + msec: 816 + hash: "24b45d00d70904694c30ebd422c739ce" + } + Frame { + msec: 832 + hash: "c0ca66fefb19294852b9be0c4ba36481" + } + Frame { + msec: 848 + hash: "047846d243e7613193a8ddd526c4268e" + } + Frame { + msec: 864 + hash: "ca85f90e450ccda6b76e6a29a3187a63" + } + Frame { + msec: 880 + hash: "fcd803f5640d054190c2ddc9a6406bb9" + } + Frame { + msec: 896 + hash: "f81152b8a464bfa8343f52efcb0c8b8c" + } + Frame { + msec: 912 + hash: "e86be73d83699584dca986dfdb030b36" + } + Frame { + msec: 928 + hash: "d9798e4ebaf72c35b19a56b336d2ea93" + } + Frame { + msec: 944 + hash: "460f13d8e05b529c0e4fba39b1449ff1" + } + Frame { + msec: 960 + image: "resolution.0.png" + } + Frame { + msec: 976 + hash: "8b2f13580c6de9ec231809330d2d0362" + } + Frame { + msec: 992 + hash: "94a2cc520340573557e6a310f2ea125e" + } + Frame { + msec: 1008 + hash: "a8df78ab2e800349ec887ea6b1f5dcb8" + } + Frame { + msec: 1024 + hash: "0f3a56dbe26d453847ed4847c0e81d1a" + } + Frame { + msec: 1040 + hash: "96c89325862a982235b4b75922ec4669" + } + Frame { + msec: 1056 + hash: "ead6352a4ca47da59422e8d6a5844aa4" + } + Frame { + msec: 1072 + hash: "b50a6b14f15882e2c1ae6e3babeecdf8" + } + Frame { + msec: 1088 + hash: "2f32245c3388b86194e8183a290e99b8" + } + Frame { + msec: 1104 + hash: "2b54d49d30ccbf11ccb5ba8d62ba7d83" + } + Frame { + msec: 1120 + hash: "495b25d87cb6d1d4bdea4d5ec62c698e" + } + Frame { + msec: 1136 + hash: "3d45b061939783b6359fa4cdb908ecc0" + } + Frame { + msec: 1152 + hash: "e9e601c2a65a09b6354fff2c162106d6" + } + Frame { + msec: 1168 + hash: "8cfba8a724e85403b573caf7bbac9d83" + } + Frame { + msec: 1184 + hash: "5910765354645b724e14681cbdea227e" + } + Frame { + msec: 1200 + hash: "4358af7f2ccfc0919614351bfd5a7405" + } + Frame { + msec: 1216 + hash: "032e064336b458a6de03fdc98684cc34" + } + Frame { + msec: 1232 + hash: "c81d87bf83ee7e834a4b15dd103f7082" + } + Frame { + msec: 1248 + hash: "9d4416b55ed3b9e45a2314e9be5a5f2d" + } + Frame { + msec: 1264 + hash: "5b96da1a52a0413f9e8edbc9291a2502" + } + Frame { + msec: 1280 + hash: "aaa4008281ebc60b15616c818816e195" + } + Frame { + msec: 1296 + hash: "81ebf882aeb89648300dfc2e8e2cf11b" + } + Frame { + msec: 1312 + hash: "4e686e6cee12902f92e0ece915386fb3" + } + Frame { + msec: 1328 + hash: "6ff8d9bd6ec4dce414cdc7330646156e" + } + Frame { + msec: 1344 + hash: "dac6334e8b221527ef74b4f93eeef7c3" + } + Frame { + msec: 1360 + hash: "e58dbf419d1831e001e802600803aaa5" + } + Frame { + msec: 1376 + hash: "e8685f9b12c9ccb9d0e471946f1f6f9c" + } + Frame { + msec: 1392 + hash: "0936715ff8d38c2c813ebef0683a3246" + } + Frame { + msec: 1408 + hash: "37ad0a5532af8b083a7d4c4b044075ca" + } + Frame { + msec: 1424 + hash: "52ae25414d353d994cba36918644949a" + } + Frame { + msec: 1440 + hash: "07719485f9a7d0012eb0f3f211f0f21b" + } + Frame { + msec: 1456 + hash: "2d1a4f2c8d4a8d6316a31a81a2d20c61" + } + Frame { + msec: 1472 + hash: "3b279fb9e7b3efe05becc1651ba59493" + } + Frame { + msec: 1488 + hash: "4b9c126dcdf499f9de4e09d4f6ab86bf" + } + Frame { + msec: 1504 + hash: "6a1b8d8ea46949cb65e8f4155ab94819" + } + Frame { + msec: 1520 + hash: "6dbd2106b91ffbbb8a845e6cddbd47d7" + } + Frame { + msec: 1536 + hash: "8244eda92302f2b5cff01f05d438bf20" + } + Frame { + msec: 1552 + hash: "f939bd80ae865e365e554a532ade38f5" + } + Frame { + msec: 1568 + hash: "92d135616eee6737333b3d86d0aa5956" + } + Frame { + msec: 1584 + hash: "ca75854d6e5a77c8e609d65971b5671a" + } + Frame { + msec: 1600 + hash: "b0a113800cd05768b57bac6b9a338b1d" + } + Frame { + msec: 1616 + hash: "7af1a2aa6a201e36c3a969be4330af04" + } + Frame { + msec: 1632 + hash: "e54e8a2cfb0e6678b2a7cc64b8ae08bc" + } + Frame { + msec: 1648 + hash: "5d212c7efd9cf7d3eb5219b0bbe766d7" + } + Frame { + msec: 1664 + hash: "f4f2c95380c0f76c9e89820cdbeb5b31" + } + Frame { + msec: 1680 + hash: "b8eefbf5ade1a6b9eef9608f66a46474" + } + Frame { + msec: 1696 + hash: "d699ace9babbb152aad2fa852114c099" + } + Frame { + msec: 1712 + hash: "ceb3dea0d2b93cc5882a2b38ab3d1b95" + } + Frame { + msec: 1728 + hash: "08175810bfb80e1c5816b0d0aebbac4a" + } + Frame { + msec: 1744 + hash: "86abce93f50e7e7ebbd90690cfb20dd2" + } + Frame { + msec: 1760 + hash: "2918979f2682bd32beb5eaf7ecb3e463" + } + Frame { + msec: 1776 + hash: "b165ab96b0d51d41578bf99cbf7f6d02" + } + Frame { + msec: 1792 + hash: "d56cfdb2c65372cb36aeb13fd9c73deb" + } + Frame { + msec: 1808 + hash: "c53f0e4dc8204e5892ed4f367a6bade3" + } + Frame { + msec: 1824 + hash: "b3ae62e13149160f3695ed5c116411aa" + } + Frame { + msec: 1840 + hash: "057e4a0428ea2ff9893becd40e6d2977" + } + Frame { + msec: 1856 + hash: "10c050131093cc0d3f4b80c44eb1218b" + } + Frame { + msec: 1872 + hash: "17ce5a6dace37f4eb316f37ea26a8a2c" + } + Frame { + msec: 1888 + hash: "6e00c7e74bfaed5cf06aba54c8b73e57" + } + Frame { + msec: 1904 + hash: "5a03b1b698ca28d2afd9c67aef3bc2e9" + } + Frame { + msec: 1920 + image: "resolution.1.png" + } + Frame { + msec: 1936 + hash: "0fab102a33521e8893afdb6a11a3c5c9" + } + Frame { + msec: 1952 + hash: "232e8f1b060ef55e37a372bec4435d11" + } + Frame { + msec: 1968 + hash: "2107724eac0d1b8735060876f80d303a" + } + Frame { + msec: 1984 + hash: "cf5d12d2707975ad364750d5ba787944" + } + Frame { + msec: 2000 + hash: "2457c88828c2cb39feb1d34556077139" + } + Frame { + msec: 2016 + hash: "5f08d6dab8199b3f0f57d32cf2da4d67" + } + Frame { + msec: 2032 + hash: "2457c88828c2cb39feb1d34556077139" + } + Frame { + msec: 2048 + hash: "cf5d12d2707975ad364750d5ba787944" + } + Frame { + msec: 2064 + hash: "2107724eac0d1b8735060876f80d303a" + } + Frame { + msec: 2080 + hash: "232e8f1b060ef55e37a372bec4435d11" + } + Frame { + msec: 2096 + hash: "0a93c515cd328978ebd8103539a2fd63" + } + Frame { + msec: 2112 + hash: "63d6c7beac12e3bd83f9ef58c233c7d2" + } + Frame { + msec: 2128 + hash: "5a03b1b698ca28d2afd9c67aef3bc2e9" + } + Frame { + msec: 2144 + hash: "6e00c7e74bfaed5cf06aba54c8b73e57" + } + Frame { + msec: 2160 + hash: "17ce5a6dace37f4eb316f37ea26a8a2c" + } + Frame { + msec: 2176 + hash: "10c050131093cc0d3f4b80c44eb1218b" + } + Frame { + msec: 2192 + hash: "057e4a0428ea2ff9893becd40e6d2977" + } + Frame { + msec: 2208 + hash: "b3ae62e13149160f3695ed5c116411aa" + } + Frame { + msec: 2224 + hash: "c53f0e4dc8204e5892ed4f367a6bade3" + } + Frame { + msec: 2240 + hash: "d56cfdb2c65372cb36aeb13fd9c73deb" + } + Frame { + msec: 2256 + hash: "b165ab96b0d51d41578bf99cbf7f6d02" + } + Frame { + msec: 2272 + hash: "2918979f2682bd32beb5eaf7ecb3e463" + } + Frame { + msec: 2288 + hash: "86abce93f50e7e7ebbd90690cfb20dd2" + } + Frame { + msec: 2304 + hash: "08175810bfb80e1c5816b0d0aebbac4a" + } + Frame { + msec: 2320 + hash: "ceb3dea0d2b93cc5882a2b38ab3d1b95" + } + Frame { + msec: 2336 + hash: "d699ace9babbb152aad2fa852114c099" + } + Frame { + msec: 2352 + hash: "b8eefbf5ade1a6b9eef9608f66a46474" + } + Frame { + msec: 2368 + hash: "f4f2c95380c0f76c9e89820cdbeb5b31" + } + Frame { + msec: 2384 + hash: "5d212c7efd9cf7d3eb5219b0bbe766d7" + } + Frame { + msec: 2400 + hash: "e54e8a2cfb0e6678b2a7cc64b8ae08bc" + } + Frame { + msec: 2416 + hash: "d9408487f747ffb8eff5e1da92207285" + } + Frame { + msec: 2432 + hash: "e6b3fa1829535ac90d1548f45aadb9be" + } + Frame { + msec: 2448 + hash: "ca75854d6e5a77c8e609d65971b5671a" + } + Frame { + msec: 2464 + hash: "92d135616eee6737333b3d86d0aa5956" + } + Frame { + msec: 2480 + hash: "f939bd80ae865e365e554a532ade38f5" + } + Frame { + msec: 2496 + hash: "8244eda92302f2b5cff01f05d438bf20" + } + Frame { + msec: 2512 + hash: "6dbd2106b91ffbbb8a845e6cddbd47d7" + } + Frame { + msec: 2528 + hash: "6a1b8d8ea46949cb65e8f4155ab94819" + } + Frame { + msec: 2544 + hash: "4b9c126dcdf499f9de4e09d4f6ab86bf" + } + Frame { + msec: 2560 + hash: "3b279fb9e7b3efe05becc1651ba59493" + } + Frame { + msec: 2576 + hash: "bb40b884b56defb61ad86757fd51b9e6" + } + Frame { + msec: 2592 + hash: "07719485f9a7d0012eb0f3f211f0f21b" + } + Frame { + msec: 2608 + hash: "52ae25414d353d994cba36918644949a" + } + Frame { + msec: 2624 + hash: "37ad0a5532af8b083a7d4c4b044075ca" + } + Frame { + msec: 2640 + hash: "0936715ff8d38c2c813ebef0683a3246" + } + Frame { + msec: 2656 + hash: "e8685f9b12c9ccb9d0e471946f1f6f9c" + } + Frame { + msec: 2672 + hash: "e58dbf419d1831e001e802600803aaa5" + } + Frame { + msec: 2688 + hash: "dac6334e8b221527ef74b4f93eeef7c3" + } + Frame { + msec: 2704 + hash: "6ff8d9bd6ec4dce414cdc7330646156e" + } + Frame { + msec: 2720 + hash: "4e686e6cee12902f92e0ece915386fb3" + } + Frame { + msec: 2736 + hash: "81ebf882aeb89648300dfc2e8e2cf11b" + } + Frame { + msec: 2752 + hash: "aaa4008281ebc60b15616c818816e195" + } + Frame { + msec: 2768 + hash: "5b96da1a52a0413f9e8edbc9291a2502" + } + Frame { + msec: 2784 + hash: "9d4416b55ed3b9e45a2314e9be5a5f2d" + } + Frame { + msec: 2800 + hash: "c81d87bf83ee7e834a4b15dd103f7082" + } + Frame { + msec: 2816 + hash: "9fdf30d57c49a6644377ba40140b1969" + } + Frame { + msec: 2832 + hash: "4358af7f2ccfc0919614351bfd5a7405" + } + Frame { + msec: 2848 + hash: "5910765354645b724e14681cbdea227e" + } + Frame { + msec: 2864 + hash: "8cfba8a724e85403b573caf7bbac9d83" + } + Frame { + msec: 2880 + image: "resolution.2.png" + } + Frame { + msec: 2896 + hash: "3d45b061939783b6359fa4cdb908ecc0" + } + Frame { + msec: 2912 + hash: "495b25d87cb6d1d4bdea4d5ec62c698e" + } + Frame { + msec: 2928 + hash: "2b54d49d30ccbf11ccb5ba8d62ba7d83" + } + Frame { + msec: 2944 + hash: "2f32245c3388b86194e8183a290e99b8" + } + Frame { + msec: 2960 + hash: "b50a6b14f15882e2c1ae6e3babeecdf8" + } + Frame { + msec: 2976 + hash: "ead6352a4ca47da59422e8d6a5844aa4" + } + Frame { + msec: 2992 + hash: "96c89325862a982235b4b75922ec4669" + } + Frame { + msec: 3008 + hash: "0f3a56dbe26d453847ed4847c0e81d1a" + } + Frame { + msec: 3024 + hash: "a8df78ab2e800349ec887ea6b1f5dcb8" + } + Frame { + msec: 3040 + hash: "94a2cc520340573557e6a310f2ea125e" + } + Frame { + msec: 3056 + hash: "8b2f13580c6de9ec231809330d2d0362" + } + Frame { + msec: 3072 + hash: "5f76ef4f6b8e703fd0822859cd9a1353" + } + Frame { + msec: 3088 + hash: "460f13d8e05b529c0e4fba39b1449ff1" + } + Frame { + msec: 3104 + hash: "d9798e4ebaf72c35b19a56b336d2ea93" + } + Frame { + msec: 3120 + hash: "e86be73d83699584dca986dfdb030b36" + } + Frame { + msec: 3136 + hash: "f81152b8a464bfa8343f52efcb0c8b8c" + } + Frame { + msec: 3152 + hash: "fcd803f5640d054190c2ddc9a6406bb9" + } + Frame { + msec: 3168 + hash: "ca85f90e450ccda6b76e6a29a3187a63" + } + Frame { + msec: 3184 + hash: "047846d243e7613193a8ddd526c4268e" + } + Frame { + msec: 3200 + hash: "c0ca66fefb19294852b9be0c4ba36481" + } + Frame { + msec: 3216 + hash: "d4a075656790c4f2c50addcd2cc660b5" + } + Frame { + msec: 3232 + hash: "0f80edaf3eecf7a8c015d3fcecc0a494" + } + Frame { + msec: 3248 + hash: "6e857b106486ea0aaa5321d4a7a07eae" + } + Frame { + msec: 3264 + hash: "33a4f07cf7f5d16f006541c61ae2e4ee" + } + Frame { + msec: 3280 + hash: "cb6cf1e6e89da3fcbad323f744aef18d" + } + Frame { + msec: 3296 + hash: "a6eaa480b3f93d33ae23bb36b7691b92" + } + Frame { + msec: 3312 + hash: "59d24ebfedd2a87bdbd755d06c4361d2" + } + Frame { + msec: 3328 + hash: "1030f795d310f742ba491a2a90ff52d8" + } + Frame { + msec: 3344 + hash: "261a341cab38986fb2f53b8e430f04a3" + } + Frame { + msec: 3360 + hash: "4d53256fbb012e738ba3868e2482250d" + } + Frame { + msec: 3376 + hash: "ae252d835a05e01c2a12ae820335049a" + } + Frame { + msec: 3392 + hash: "20d758c1537ed1a9aff657414b50926c" + } + Frame { + msec: 3408 + hash: "56c4113cc341c254ccab66f3bc313154" + } + Frame { + msec: 3424 + hash: "240df67aa72a24546eb6e043e0d3d205" + } + Frame { + msec: 3440 + hash: "82b94393071d6c32dd8028e1ee69e7fb" + } + Frame { + msec: 3456 + hash: "98e46dff678f293fd6a4e9313ab3aec7" + } + Frame { + msec: 3472 + hash: "0971ac1e05ea2ba387c78d4d103f5ea1" + } + Frame { + msec: 3488 + hash: "2ea69aeb32fee61b61aa9c4efb2834bf" + } + Frame { + msec: 3504 + hash: "41b40e36f77d04e62f72ad34aa50709a" + } + Frame { + msec: 3520 + hash: "93b4876c3e185ff4875a7447b0bf4f0f" + } + Frame { + msec: 3536 + hash: "9a3f9dc04a900020f0e488309d7b4757" + } + Frame { + msec: 3552 + hash: "92fa2d9ef05140eb9d0fcf78b55f202e" + } + Frame { + msec: 3568 + hash: "2ed9d0e09b61dee8b2703e580007d7a5" + } + Frame { + msec: 3584 + hash: "cbd63ec868578e295a83170f42b23678" + } + Frame { + msec: 3600 + hash: "b9f3f08168fb55ba01e56e670db565de" + } + Frame { + msec: 3616 + hash: "a579d6324fb4bf9ac5ceaba2aa708764" + } + Frame { + msec: 3632 + hash: "4e0fd7f45e53a8d44c416eb9235ec877" + } + Frame { + msec: 3648 + hash: "f87195f2393914a0bbed9a454de01ff5" + } + Frame { + msec: 3664 + hash: "9bc9801e83267689cd2750226f2b08ce" + } + Frame { + msec: 3680 + hash: "5ddbc3bc10292bec41531e83c0921c59" + } + Frame { + msec: 3696 + hash: "4f3b79b341b63499a20f1e1e2cd979f9" + } + Frame { + msec: 3712 + hash: "e8d98ec2d13ef4324feba11be95d0735" + } + Frame { + msec: 3728 + hash: "5e3c58e2f3a57f4ea48f4315d37ed813" + } + Frame { + msec: 3744 + hash: "3f200fca4815d555f22912d9fcdc20ee" + } + Frame { + msec: 3760 + hash: "0901c99f959d6c10a0b6ea46a282d8fd" + } + Frame { + msec: 3776 + hash: "a186b8e984c999e8609472a7a5fa0610" + } + Frame { + msec: 3792 + hash: "412a630348aa44d56f36f04982035e36" + } + Frame { + msec: 3808 + hash: "011c0bcca7717b08bc53738718203f7e" + } + Frame { + msec: 3824 + hash: "e531d33ef14b58ad843a6be6d7cb0961" + } + Frame { + msec: 3840 + image: "resolution.3.png" + } + Frame { + msec: 3856 + hash: "8df8dd33eada434231332b81e03430ce" + } + Frame { + msec: 3872 + hash: "2aaa3749f93734dd203e1fea91a9f24a" + } + Frame { + msec: 3888 + hash: "dc78b09e27bbc0a2cfec83436eef4446" + } + Frame { + msec: 3904 + hash: "9053a92e343ebb79bd2831f5ab94a1b5" + } + Frame { + msec: 3920 + hash: "649ad1a3fb57fb088e4e5cfd749bf2e5" + } + Frame { + msec: 3936 + hash: "3579849956c1101000ef09949aa4c0f9" + } + Frame { + msec: 3952 + hash: "7af041898748bb5950643b057ca59eea" + } + Frame { + msec: 3968 + hash: "30a191ae899121ae22d10acee6593415" + } + Frame { + msec: 3984 + hash: "369f761053d5910e00672aa866f698ba" + } + Frame { + msec: 4000 + hash: "1f189a436cf74ae83a03c3bb63c24ec2" + } + Frame { + msec: 4016 + hash: "ac1d9c1cc13813b5e94c692a209a4e36" + } + Frame { + msec: 4032 + hash: "f0e0b5c041bcf38d8d9144d466ad74a9" + } + Frame { + msec: 4048 + hash: "38a35c94ebcf33f6720fea33821a54e1" + } + Frame { + msec: 4064 + hash: "061d139f43a3dd63daf887b82721f42f" + } + Frame { + msec: 4080 + hash: "623747b5fe99e5ffaa62f4daa3f840ef" + } + Frame { + msec: 4096 + hash: "4dd5081a387ffda296811b64b9235d7d" + } + Frame { + msec: 4112 + hash: "1598cf2fe996f99ab4c15f84d89cd7bd" + } + Frame { + msec: 4128 + hash: "30cac85bf1a622d438a64b6ccb59a8ca" + } + Frame { + msec: 4144 + hash: "114e54ae3e1493750a022f1c019e7f77" + } + Frame { + msec: 4160 + hash: "a585efc3aae3a426e6af5f4a8cc23b10" + } + Frame { + msec: 4176 + hash: "c0f315549baad93dd885d58b185e7ed7" + } + Frame { + msec: 4192 + hash: "3a00f5f034bef58ca341bf9e1056f46f" + } + Frame { + msec: 4208 + hash: "b3022d07dee989499a35aea21e07e4c1" + } + Frame { + msec: 4224 + hash: "e722464809e94fb7d8c752506f0d3ac2" + } + Frame { + msec: 4240 + hash: "82ea3d06367ce9dc582dbdbc186cc70a" + } + Frame { + msec: 4256 + hash: "359040facbe531c7f6b805b8bfc5b17a" + } + Frame { + msec: 4272 + hash: "264c7b65bae7e3945d87c17edfda6889" + } + Frame { + msec: 4288 + hash: "d941ec8e363942af02f36d4672521801" + } + Frame { + msec: 4304 + hash: "e46e145b4d07d1697c1d9efce80c80de" + } + Frame { + msec: 4320 + hash: "d8bed5c42bc5725d811db4dacdab1581" + } + Frame { + msec: 4336 + hash: "aa221160b4a11b30cb73eaa8ccaa9dfd" + } + Frame { + msec: 4352 + hash: "f411483477906d83f872b306cd021406" + } + Frame { + msec: 4368 + hash: "d9c52e4f99416fa1043a9c34a1c29f5a" + } + Frame { + msec: 4384 + hash: "ec2890446f34b8a5d47ae97ba2853d0f" + } + Frame { + msec: 4400 + hash: "6a3e6ef7d832fa7ec813b38171cb3602" + } + Frame { + msec: 4416 + hash: "6dfd75b6cb780f7d80466f3450d0b255" + } + Frame { + msec: 4432 + hash: "170774843dc6f28f51f07c445e046bd8" + } + Frame { + msec: 4448 + hash: "eab348bef656739d9723d3bd659c43ff" + } + Frame { + msec: 4464 + hash: "f06e546bb710002cdf1cefd51ffa47c4" + } + Frame { + msec: 4480 + hash: "52f7ff1348d9aa7cdf43cd81f0a71625" + } + Frame { + msec: 4496 + hash: "55a5b1befa3b7a4674a62d492b5527ea" + } + Frame { + msec: 4512 + hash: "699c093fddc6b9293a011d8d6eccd36d" + } + Frame { + msec: 4528 + hash: "b988e1ad7dc7d26ffeea8f71a69a9abf" + } + Frame { + msec: 4544 + hash: "8dea2b47492f83f961a47536a10aad0c" + } + Frame { + msec: 4560 + hash: "925ea8105779ffd801a3c62129d64bed" + } + Frame { + msec: 4576 + hash: "aa5d957c4f452b1f1c70ea672ce4a0b9" + } + Frame { + msec: 4592 + hash: "85d3ea97a1fb152ae8ad65a17693a16d" + } + Frame { + msec: 4608 + hash: "069b2bc8b86f822c5e7ceca3664e78a6" + } + Frame { + msec: 4624 + hash: "209071b7f72d8c25b9ce27c05397fe56" + } + Frame { + msec: 4640 + hash: "068dea708612620d34bd57c6affb44b1" + } + Frame { + msec: 4656 + hash: "36b53a0845220645059fed803a6ffcbc" + } + Frame { + msec: 4672 + hash: "2c84e15006a39a554eb2047bae9d4f6f" + } + Frame { + msec: 4688 + hash: "1bdab31534f4b5a7e9d27ede3e9acb57" + } + Frame { + msec: 4704 + hash: "688689eeb584b0c74f0322af35857dd5" + } + Frame { + msec: 4720 + hash: "024939fea5b6c6f9d3e26a0abf42ae3c" + } + Frame { + msec: 4736 + hash: "2efb2f47c6f0be3743f0f4dc7a66b08e" + } + Frame { + msec: 4752 + hash: "4631f3756af880693d3654c16cbe47bb" + } + Frame { + msec: 4768 + hash: "2fd77649c1e1ade97534ef530ad05612" + } + Frame { + msec: 4784 + hash: "5d13517bac111c8af49c444d41a42ea1" + } + Frame { + msec: 4800 + image: "resolution.4.png" + } + Frame { + msec: 4816 + hash: "8bd8efe405a42730304dcc120a6e718c" + } + Frame { + msec: 4832 + hash: "a83c543977e3f1dd4c020375eb3273fd" + } + Frame { + msec: 4848 + hash: "c52f38469fec77afc7f0a44b992e3d0d" + } + Frame { + msec: 4864 + hash: "af645449d6ec3f42449ffc59193aaaa4" + } + Frame { + msec: 4880 + hash: "2eb982cf754c77c109158076957775ae" + } + Frame { + msec: 4896 + hash: "9bf2fd4a4e45f302b34b7f038937d3d7" + } + Frame { + msec: 4912 + hash: "5520e309d68c8eedf76a9392714a6150" + } + Frame { + msec: 4928 + hash: "9dcd043a25e33b788729c0a0531301e7" + } + Frame { + msec: 4944 + hash: "1475b9bcfe08c66135673f4284c9bbcd" + } + Frame { + msec: 4960 + hash: "9af1f355bcf4d5f05b42040ebba75e09" + } + Frame { + msec: 4976 + hash: "8b6e04980ea60ca2ff06053d35c06881" + } + Frame { + msec: 4992 + hash: "def466e377a44afc4b2a9a9ebb258f86" + } + Frame { + msec: 5008 + hash: "18f6d6f5a3fdaee0037580df0f4f9ef0" + } + Frame { + msec: 5024 + hash: "ae2579498558f6f93489999c7c82cbcd" + } + Frame { + msec: 5040 + hash: "623d8e756c2c131150554272df231bf9" + } + Frame { + msec: 5056 + hash: "c13146576229848b8a1e1b382fbf749d" + } + Frame { + msec: 5072 + hash: "f963a399aeea1d34ec3bd30a5b991035" + } + Frame { + msec: 5088 + hash: "45a4db021ba0a53ad783c14a3b66aa38" + } + Frame { + msec: 5104 + hash: "2031618470e3bb3a3435fe0e270a15d4" + } + Frame { + msec: 5120 + hash: "f7cc01c301f29110db8364fecc8751f1" + } + Frame { + msec: 5136 + hash: "2d366fa500257ec0a12863f3637d0c47" + } + Frame { + msec: 5152 + hash: "4ba700e7f9ffba4889ca26d903a63029" + } + Frame { + msec: 5168 + hash: "329bec5e3d6a131b4bd9a056659bdb3e" + } + Frame { + msec: 5184 + hash: "48f7356707cdbcb401c135207ee38821" + } + Frame { + msec: 5200 + hash: "5314e448affe60d193d07a784035ecce" + } + Frame { + msec: 5216 + hash: "c87e98becdf99c214ad4987985b4af07" + } + Frame { + msec: 5232 + hash: "ea81d2a967b619980d7e42937ec74668" + } + Frame { + msec: 5248 + hash: "845319d4e0f6ee97697e59c606220e7a" + } +} diff --git a/tests/auto/declarative/visual/webview/zooming/qtlogo.png b/tests/auto/declarative/visual/webview/zooming/qtlogo.png Binary files differnew file mode 100644 index 0000000..399bd0b --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/qtlogo.png diff --git a/tests/auto/declarative/visual/webview/zooming/resolution.html b/tests/auto/declarative/visual/webview/zooming/resolution.html new file mode 100644 index 0000000..75b1e3f --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/resolution.html @@ -0,0 +1,6 @@ +<html> +<body> +<h1>Resolution</h1> +<p> +This test shows how zooming can include different resolutions. +<img src="qtlogo.png"> diff --git a/tests/auto/declarative/visual/webview/zooming/resolution.qml b/tests/auto/declarative/visual/webview/zooming/resolution.qml new file mode 100644 index 0000000..8336c0f --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/resolution.qml @@ -0,0 +1,17 @@ +import Qt 4.6 + +WebView { + width: 200 * zoomFactor + height: 250 * zoomFactor + scale: 1/zoomFactor + url: "resolution.html" + zoomFactor: + SequentialAnimation { + running: true + repeat: true + NumberAnimation { from: 1; to: 0.25; duration: 2000 } + NumberAnimation { from: 0.25; to: 1; duration: 2000 } + NumberAnimation { from: 1; to: 5; duration: 2000 } + NumberAnimation { from: 5; to: 1; duration: 2000 } + } +} diff --git a/tools/qdoc3/cppcodemarker.cpp b/tools/qdoc3/cppcodemarker.cpp index c07be8b..f3188bd 100644 --- a/tools/qdoc3/cppcodemarker.cpp +++ b/tools/qdoc3/cppcodemarker.cpp @@ -1154,14 +1154,14 @@ QList<Section> CppCodeMarker::qmlSections(const QmlClassNode* qmlClassNode, } } else if ((*c)->type() == Node::QmlSignal) { - const QmlSignalNode* sn = static_cast<const QmlSignalNode*>(*c); + const FunctionNode* sn = static_cast<const FunctionNode*>(*c); if (sn->isAttached()) insert(qmlattachedsignals,*c,style,Okay); else insert(qmlsignals,*c,style,Okay); } else if ((*c)->type() == Node::QmlMethod) { - const QmlMethodNode* mn = static_cast<const QmlMethodNode*>(*c); + const FunctionNode* mn = static_cast<const FunctionNode*>(*c); if (mn->isAttached()) insert(qmlattachedmethods,*c,style,Okay); else @@ -1193,14 +1193,14 @@ QList<Section> CppCodeMarker::qmlSections(const QmlClassNode* qmlClassNode, insert(qmlproperties,*c,style,Okay); } else if ((*c)->type() == Node::QmlSignal) { - const QmlSignalNode* sn = static_cast<const QmlSignalNode*>(*c); + const FunctionNode* sn = static_cast<const FunctionNode*>(*c); if (sn->isAttached()) insert(qmlattachedsignals,*c,style,Okay); else insert(qmlsignals,*c,style,Okay); } else if ((*c)->type() == Node::QmlMethod) { - const QmlMethodNode* mn = static_cast<const QmlMethodNode*>(*c); + const FunctionNode* mn = static_cast<const FunctionNode*>(*c); if (mn->isAttached()) insert(qmlattachedmethods,*c,style,Okay); else diff --git a/tools/qdoc3/cppcodeparser.cpp b/tools/qdoc3/cppcodeparser.cpp index cabbe38..90d83ca 100644 --- a/tools/qdoc3/cppcodeparser.cpp +++ b/tools/qdoc3/cppcodeparser.cpp @@ -693,13 +693,13 @@ Node *CppCodeParser::processTopicCommand(const Doc& doc, if (n && n->subType() == Node::QmlClass) { qmlClass = static_cast<QmlClassNode*>(n); if (command == COMMAND_QMLSIGNAL) - return new QmlSignalNode(qmlClass,name,false); + return makeFunctionNode(doc,arg,qmlClass,Node::QmlSignal,false,COMMAND_QMLSIGNAL); else if (command == COMMAND_QMLATTACHEDSIGNAL) - return new QmlSignalNode(qmlClass,name,true); + return makeFunctionNode(doc,arg,qmlClass,Node::QmlSignal,true,COMMAND_QMLATTACHEDSIGNAL); else if (command == COMMAND_QMLMETHOD) - return new QmlMethodNode(qmlClass,name,false); + return makeFunctionNode(doc,arg,qmlClass,Node::QmlMethod,false,COMMAND_QMLMETHOD); else if (command == COMMAND_QMLATTACHEDMETHOD) - return new QmlMethodNode(qmlClass,name,true); + return makeFunctionNode(doc,arg,qmlClass,Node::QmlMethod,true,COMMAND_QMLATTACHEDMETHOD); else return 0; // never get here. } @@ -1265,7 +1265,9 @@ bool CppCodeParser::matchParameter(FunctionNode *func) bool CppCodeParser::matchFunctionDecl(InnerNode *parent, QStringList *parentPathPtr, FunctionNode **funcPtr, - const QString &templateStuff) + const QString &templateStuff, + Node::Type type, + bool attached) { CodeChunk returnType; QStringList parentPath; @@ -1295,8 +1297,9 @@ bool CppCodeParser::matchFunctionDecl(InnerNode *parent, if (tokenizer->parsingFnOrMacro() && (match(Tok_Q_DECLARE_FLAGS) || match(Tok_Q_PROPERTY))) returnType = CodeChunk(previousLexeme()); - else + else { return false; + } } if (returnType.toString() == "QBool") @@ -1326,8 +1329,9 @@ bool CppCodeParser::matchFunctionDecl(InnerNode *parent, readToken(); } } - if (tok != Tok_LeftParen) + if (tok != Tok_LeftParen) { return false; + } } else if (tok == Tok_LeftParen) { // constructor or destructor @@ -1373,8 +1377,9 @@ bool CppCodeParser::matchFunctionDecl(InnerNode *parent, returnType.append(lexeme()); readToken(); } - if (tok != Tok_Semicolon) + if (tok != Tok_Semicolon) { return false; + } } else if (tok == Tok_Colon) { returnType.appendHotspot(); @@ -1383,8 +1388,9 @@ bool CppCodeParser::matchFunctionDecl(InnerNode *parent, returnType.append(lexeme()); readToken(); } - if (tok != Tok_Semicolon) + if (tok != Tok_Semicolon) { return false; + } } VariableNode *var = new VariableNode(parent, name); @@ -1397,12 +1403,13 @@ bool CppCodeParser::matchFunctionDecl(InnerNode *parent, var->setStatic(sta); return false; } - if (tok != Tok_LeftParen) + if (tok != Tok_LeftParen) { return false; + } } readToken(); - FunctionNode *func = new FunctionNode(parent, name); + FunctionNode *func = new FunctionNode(type, parent, name, attached); func->setAccess(access); func->setLocation(location()); func->setReturnType(returnType.toString()); @@ -1423,12 +1430,14 @@ bool CppCodeParser::matchFunctionDecl(InnerNode *parent, if (tok != Tok_RightParen) { do { - if (!matchParameter(func)) + if (!matchParameter(func)) { return false; + } } while (match(Tok_Comma)); } - if (!match(Tok_RightParen)) + if (!match(Tok_RightParen)) { return false; + } func->setConst(match(Tok_const)); @@ -1444,8 +1453,9 @@ bool CppCodeParser::matchFunctionDecl(InnerNode *parent, if (!match(Tok_Semicolon) && tok != Tok_Eoi) { int braceDepth0 = tokenizer->braceDepth(); - if (!match(Tok_LeftBrace)) + if (!match(Tok_LeftBrace)) { return false; + } while (tokenizer->braceDepth() >= braceDepth0 && tok != Tok_Eoi) readToken(); match(Tok_RightBrace); @@ -2092,7 +2102,9 @@ bool CppCodeParser::matchDocsAndStuff() bool CppCodeParser::makeFunctionNode(const QString& synopsis, QStringList *parentPathPtr, FunctionNode **funcPtr, - InnerNode *root) + InnerNode *root, + Node::Type type, + bool attached) { Tokenizer *outerTokenizer = tokenizer; int outerTok = tok; @@ -2104,15 +2116,39 @@ bool CppCodeParser::makeFunctionNode(const QString& synopsis, tokenizer = &stringTokenizer; readToken(); - bool ok = matchFunctionDecl(root, parentPathPtr, funcPtr); + bool ok = matchFunctionDecl(root, parentPathPtr, funcPtr, QString(), type, attached); // potential memory leak with funcPtr tokenizer = outerTokenizer; tok = outerTok; - return ok; } +/*! + Create a new FunctionNode for a QML method or signal, as + specified by \a type, as a child of \a parent. \a sig is + the complete signature, and if \a attached is true, the + method or signal is "attached". \a qdoctag is the text of + the \a type. + */ +FunctionNode* CppCodeParser::makeFunctionNode(const Doc& doc, + const QString& sig, + InnerNode* parent, + Node::Type type, + bool attached, + QString qdoctag) +{ + QStringList pp; + FunctionNode* fn = 0; + if (!makeFunctionNode(sig,&pp,&fn,parent,type,attached) && + !makeFunctionNode("void "+sig,&pp,&fn,parent,type,attached)) { + doc.location().warning(tr("Invalid syntax in '\\%1'").arg(qdoctag)); + } + if (fn) + return fn; + return 0; +} + void CppCodeParser::parseQiteratorDotH(const Location &location, const QString &filePath) { diff --git a/tools/qdoc3/cppcodeparser.h b/tools/qdoc3/cppcodeparser.h index 233ac09..87c1b69 100644 --- a/tools/qdoc3/cppcodeparser.h +++ b/tools/qdoc3/cppcodeparser.h @@ -127,7 +127,9 @@ class CppCodeParser : public CodeParser bool matchFunctionDecl(InnerNode *parent, QStringList *parentPathPtr = 0, FunctionNode **funcPtr = 0, - const QString &templateStuff = QString()); + const QString &templateStuff = QString(), + Node::Type type = Node::Function, + bool attached = false); bool matchBaseSpecifier(ClassNode *classe, bool isClass); bool matchBaseList(ClassNode *classe, bool isClass); bool matchClassDecl(InnerNode *parent, @@ -143,7 +145,15 @@ class CppCodeParser : public CodeParser bool makeFunctionNode(const QString &synopsis, QStringList *parentPathPtr, FunctionNode **funcPtr, - InnerNode *root = 0); + InnerNode *root = 0, + Node::Type type = Node::Function, + bool attached = false); + FunctionNode* makeFunctionNode(const Doc& doc, + const QString& sig, + InnerNode* parent, + Node::Type type, + bool attached, + QString qdoctag); void parseQiteratorDotH(const Location &location, const QString &filePath); void instantiateIteratorMacro(const QString &container, const QString &includeFile, diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index afd1e74..ae47fc0 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -4219,7 +4219,7 @@ void HtmlGenerator::generateDetailedQmlMember(const Node *node, out() << "</div>"; } else if (node->type() == Node::QmlSignal) { - const QmlSignalNode* qsn = static_cast<const QmlSignalNode*>(node); + const FunctionNode* qsn = static_cast<const FunctionNode*>(node); out() << "<div class=\"qmlproto\">"; out() << "<table class=\"qmlname\">"; out() << "<tr><td>"; @@ -4230,7 +4230,7 @@ void HtmlGenerator::generateDetailedQmlMember(const Node *node, out() << "</div>"; } else if (node->type() == Node::QmlMethod) { - const QmlMethodNode* qmn = static_cast<const QmlMethodNode*>(node); + const FunctionNode* qmn = static_cast<const FunctionNode*>(node); out() << "<div class=\"qmlproto\">"; out() << "<table class=\"qmlname\">"; out() << "<tr><td>"; diff --git a/tools/qdoc3/node.cpp b/tools/qdoc3/node.cpp index ecb4a44..1217042 100644 --- a/tools/qdoc3/node.cpp +++ b/tools/qdoc3/node.cpp @@ -218,6 +218,7 @@ Node *InnerNode::findNode(const QString& name, Type type) } /*! + Find the function node in this node for the function named \a name. */ FunctionNode *InnerNode::findFunctionNode(const QString& name) { @@ -225,6 +226,7 @@ FunctionNode *InnerNode::findFunctionNode(const QString& name) } /*! + Find the function node in this node that has the same name as \a clone. */ FunctionNode *InnerNode::findFunctionNode(const FunctionNode *clone) { @@ -248,6 +250,34 @@ FunctionNode *InnerNode::findFunctionNode(const FunctionNode *clone) } /*! + Returns the list of keys from the primary function map. + */ +QStringList InnerNode::primaryKeys() +{ + QStringList t; + QMap<QString, Node*>::iterator i = primaryFunctionMap.begin(); + while (i != primaryFunctionMap.end()) { + t.append(i.key()); + ++i; + } + return t; +} + +/*! + Returns the list of keys from the secondary function map. + */ +QStringList InnerNode::secondaryKeys() +{ + QStringList t; + QMap<QString, NodeList>::iterator i = secondaryFunctionMap.begin(); + while (i != secondaryFunctionMap.end()) { + t.append(i.key()); + ++i; + } + return t; +} + +/*! */ void InnerNode::setOverload(const FunctionNode *func, bool overlode) { @@ -392,6 +422,7 @@ const Node *InnerNode::findNode(const QString& name, Type type) const } /*! + Find the function node in this node that has the given \a name. */ const FunctionNode *InnerNode::findFunctionNode(const QString& name) const { @@ -400,9 +431,9 @@ const FunctionNode *InnerNode::findFunctionNode(const QString& name) const } /*! + Find the function node in this node that has the same name as \a clone. */ -const FunctionNode *InnerNode::findFunctionNode( - const FunctionNode *clone) const +const FunctionNode *InnerNode::findFunctionNode(const FunctionNode *clone) const { InnerNode *that = (InnerNode *) this; return that->findFunctionNode(clone); @@ -520,7 +551,7 @@ bool InnerNode::isSameSignature(const FunctionNode *f1, const FunctionNode *f2) void InnerNode::addChild(Node *child) { children.append(child); - if (child->type() == Function) { + if ((child->type() == Function) || (child->type() == QmlMethod)) { FunctionNode *func = (FunctionNode *) child; if (!primaryFunctionMap.contains(func->name())) { primaryFunctionMap.insert(func->name(), func); @@ -896,11 +927,40 @@ QString Parameter::reconstruct(bool value) const */ /*! + Construct a function node for a C++ function. It's parent + is \a parent, and it's name is \a name. */ FunctionNode::FunctionNode(InnerNode *parent, const QString& name) - : LeafNode(Function, parent, name), met(Plain), vir(NonVirtual), - con(false), sta(false), ove(false), rf(0), ap(0) + : LeafNode(Function, parent, name), + met(Plain), + vir(NonVirtual), + con(false), + sta(false), + ove(false), + att(false), + rf(0), + ap(0) +{ + // nothing. +} + +/*! + Construct a function node for a QML method or signal, specified + by \a type. It's parent is \a parent, and it's name is \a name. + If \a attached is true, it is an attached method or signal. + */ +FunctionNode::FunctionNode(Type type, InnerNode *parent, const QString& name, bool attached) + : LeafNode(type, parent, name), + met(Plain), + vir(NonVirtual), + con(false), + sta(false), + ove(false), + att(attached), + rf(0), + ap(0) { + // nothing. } /*! @@ -1208,28 +1268,6 @@ bool QmlPropertyNode::fromTrool(Trool troolean, bool defaultValue) return defaultValue; } } - -/*! - Constructor for the QML signal node. - */ -QmlSignalNode::QmlSignalNode(QmlClassNode *parent, - const QString& name, - bool attached) - : LeafNode(QmlSignal, parent, name), att(attached) -{ - // nothing. -} - -/*! - Constructor for the QML method node. - */ -QmlMethodNode::QmlMethodNode(QmlClassNode *parent, - const QString& name, - bool attached) - : LeafNode(QmlMethod, parent, name), att(attached) -{ - // nothing. -} #endif QT_END_NAMESPACE diff --git a/tools/qdoc3/node.h b/tools/qdoc3/node.h index 5712879..3f5be6c 100644 --- a/tools/qdoc3/node.h +++ b/tools/qdoc3/node.h @@ -151,6 +151,7 @@ class Node virtual bool isInnerNode() const = 0; virtual bool isReimp() const { return false; } + virtual bool isFunction() const { return false; } Type type() const { return typ; } virtual SubType subType() const { return NoSubType; } InnerNode *parent() const { return par; } @@ -239,6 +240,9 @@ class InnerNode : public Node NodeList overloads(const QString &funcName) const; const QStringList& includes() const { return inc; } + QStringList primaryKeys(); + QStringList secondaryKeys(); + protected: InnerNode(Type type, InnerNode *parent, const QString& name); @@ -421,36 +425,6 @@ class QmlPropertyNode : public LeafNode Trool wri; bool att; }; - -class QmlSignalNode : public LeafNode -{ - public: - QmlSignalNode(QmlClassNode* parent, - const QString& name, - bool attached); - virtual ~QmlSignalNode() { } - - const QString& element() const { return parent()->name(); } - bool isAttached() const { return att; } - - private: - bool att; -}; - -class QmlMethodNode : public LeafNode -{ - public: - QmlMethodNode(QmlClassNode* parent, - const QString& name, - bool attached); - virtual ~QmlMethodNode() { } - - const QString& element() const { return parent()->name(); } - bool isAttached() const { return att; } - - private: - bool att; -}; #endif class EnumItem @@ -564,6 +538,7 @@ class FunctionNode : public LeafNode enum Virtualness { NonVirtual, ImpureVirtual, PureVirtual }; FunctionNode(InnerNode *parent, const QString &name); + FunctionNode(Type type, InnerNode *parent, const QString &name, bool attached); virtual ~FunctionNode() { } void setReturnType(const QString& returnType) { rt = returnType; } @@ -589,6 +564,7 @@ class FunctionNode : public LeafNode bool isStatic() const { return sta; } bool isOverload() const { return ove; } bool isReimp() const { return reimp; } + bool isFunction() const { return true; } int overloadNumber() const; int numOverloads() const; const QList<Parameter>& parameters() const { return params; } @@ -600,6 +576,8 @@ class FunctionNode : public LeafNode QStringList reconstructParams(bool values = false) const; QString signature(bool values = false) const; + const QString& element() const { return parent()->name(); } + bool isAttached() const { return att; } private: void setAssociatedProperty(PropertyNode *property); @@ -620,6 +598,7 @@ class FunctionNode : public LeafNode bool sta : 1; bool ove : 1; bool reimp: 1; + bool att: 1; QList<Parameter> params; const FunctionNode *rf; const PropertyNode *ap; diff --git a/tools/qdoc3/tree.cpp b/tools/qdoc3/tree.cpp index bcd9709..4d401de 100644 --- a/tools/qdoc3/tree.cpp +++ b/tools/qdoc3/tree.cpp @@ -225,6 +225,7 @@ const FunctionNode *Tree::findFunctionNode(const QStringList &path, { if (!relative) relative = root(); + do { const Node *node = relative; int i; @@ -244,8 +245,7 @@ const FunctionNode *Tree::findFunctionNode(const QStringList &path, NodeList baseClasses = allBaseClasses(static_cast<const ClassNode *>(node)); foreach (const Node *baseClass, baseClasses) { if (i == path.size() - 1) - next = static_cast<const InnerNode *>(baseClass)-> - findFunctionNode(path.at(i)); + next = static_cast<const InnerNode *>(baseClass)->findFunctionNode(path.at(i)); else next = static_cast<const InnerNode *>(baseClass)->findNode(path.at(i)); @@ -256,11 +256,10 @@ const FunctionNode *Tree::findFunctionNode(const QStringList &path, node = next; } - if (node && i == path.size() && node->type() == Node::Function) { + if (node && i == path.size() && node->isFunction()) { // CppCodeParser::processOtherMetaCommand ensures that reimplemented // functions are private. const FunctionNode *func = static_cast<const FunctionNode*>(node); - while (func->access() == Node::Private) { const FunctionNode *from = func->reimplementedFrom(); if (from != 0) { @@ -268,7 +267,8 @@ const FunctionNode *Tree::findFunctionNode(const QStringList &path, return from; else func = from; - } else + } + else break; } return func; @@ -303,7 +303,8 @@ const FunctionNode *Tree::findFunctionNode(const QStringList &parentPath, const Node *parent = findNode(parentPath, relative, findFlags); if (parent == 0 || !parent->isInnerNode()) { return 0; - } else { + } + else { return ((InnerNode *)parent)->findFunctionNode(clone); } } diff --git a/tools/qmlviewer/qfxtester.cpp b/tools/qmlviewer/qfxtester.cpp index 802a927..5484771 100644 --- a/tools/qmlviewer/qfxtester.cpp +++ b/tools/qmlviewer/qfxtester.cpp @@ -248,6 +248,7 @@ void QmlGraphicsTester::updateCurrentTime(int msec) QImage img(m_view->width(), m_view->height(), QImage::Format_RGB32); if (options & QmlViewer::TestImages) { + img.fill(qRgb(255,255,255)); QPainter p(&img); m_view->render(&p); } |