void tst_TimelineRenderState::assembleNodeTree() { TimelineModel model(3); TimelineRenderState state1(1, 2, 0.5, 3); state1.assembleNodeTree(&model, 30, 30); QSGTransformNode *node = state1.finalize(0, true, QMatrix4x4()); QVERIFY(node != static_cast<QSGTransformNode *>(0)); QVERIFY(node->childCount() == 2); TimelineRenderState state2(3, 4, 0.5, 3); state2.setPassState(0, new TimelineRenderPass::State); state2.assembleNodeTree(&model, 30, 30); QCOMPARE(state2.finalize(node, true, QMatrix4x4()), node); QVERIFY(node->childCount() == 2); TimelineRenderState state3(4, 5, 0.5, 3); DummyPassState *dummyState = new DummyPassState; state3.setPassState(0, new TimelineRenderPass::State); state3.setPassState(1, dummyState); state3.assembleNodeTree(&model, 30, 30); node = state3.finalize(node, true, QMatrix4x4()); QCOMPARE(node->firstChild()->firstChild()->firstChild(), dummyState->expandedRows()[0]); QCOMPARE(node->lastChild()->firstChild(), dummyState->expandedOverlay()); node = state3.finalize(node, false, QMatrix4x4()); QCOMPARE(node->firstChild()->firstChild()->firstChild(), dummyState->collapsedRows()[0]); QCOMPARE(node->lastChild()->firstChild(), dummyState->collapsedOverlay()); delete node; }
QSGTransformNode *TimelineRenderState::finalize(QSGNode *oldNode, bool expanded, const QMatrix4x4 &transform) { Q_D(TimelineRenderState); QSGNode *rowNode = expanded ? d->expandedRowRoot : d->collapsedRowRoot; QSGNode *overlayNode = expanded ?d->expandedOverlayRoot : d->collapsedOverlayRoot; QSGTransformNode *node = oldNode ? static_cast<QSGTransformNode *>(oldNode) : new QSGTransformNode; node->setMatrix(transform); if (node->firstChild() != rowNode || node->lastChild() != overlayNode) { node->removeAllChildNodes(); node->appendChildNode(rowNode); node->appendChildNode(overlayNode); } return node; }