Revision control
Copy as Markdown
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QCoreApplication>
#include <QtCore/QCborStreamWriter>
#include <QtCore/QFile>
#include <QtCore/QDir>
#include <QtCore/QMetaType>
#include <QtGui/QColor>
#include <QtGui/QVector3D>
#include "keyframedatautils_p.h"
struct Keyframe
{
double frame;
QVariant value;
int easing = 0;
};
struct KeyframeData
{
QString filename;
QMetaType::Type propertyType;
QList<Keyframe> keyframes;
};
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
QList<KeyframeData> data;
// Animate real ('opacity' property)
KeyframeData keyframeData1;
keyframeData1.filename = "animate_real.cbor";
keyframeData1.propertyType = QMetaType::QReal;
Keyframe key1_1;
key1_1.frame = 0;
key1_1.value = 0.0;
key1_1.easing = 0;
keyframeData1.keyframes.append(key1_1);
Keyframe key1_2;
key1_2.frame = 1000;
key1_2.value = 1.0;
key1_2.easing = 0;
keyframeData1.keyframes.append(key1_2);
Keyframe key1_3;
key1_3.frame = 2000;
key1_3.value = 0.0;
key1_3.easing = 0;
keyframeData1.keyframes.append(key1_3);
data.append(keyframeData1);
// Animate bool ('visible' property)
KeyframeData keyframeData2;
keyframeData2.filename = "animate_bool.cbor";
keyframeData2.propertyType = QMetaType::Bool;
Keyframe key2_1;
key2_1.frame = 0;
key2_1.value = true;
key2_1.easing = 0;
keyframeData2.keyframes.append(key2_1);
Keyframe key2_2;
key2_2.frame = 1000;
key2_2.value = false;
key2_2.easing = 0;
keyframeData2.keyframes.append(key2_2);
Keyframe key2_3;
key2_3.frame = 2000;
key2_3.value = true;
key2_3.easing = 0;
keyframeData2.keyframes.append(key2_3);
data.append(keyframeData2);
// Animate color
KeyframeData keyframeData3;
keyframeData3.filename = "animate_color.cbor";
keyframeData3.propertyType = QMetaType::QColor;
Keyframe key3_1;
key3_1.frame = 0;
key3_1.value = QColor("green");
key3_1.easing = 0;
keyframeData3.keyframes.append(key3_1);
Keyframe key3_2;
key3_2.frame = 1000;
key3_2.value = QColor(255, 255, 0);
key3_2.easing = 0;
keyframeData3.keyframes.append(key3_2);
Keyframe key3_3;
key3_3.frame = 2000;
key3_3.value = QColor(255, 255, 255);
key3_3.easing = 0;
keyframeData3.keyframes.append(key3_3);
data.append(keyframeData3);
// Animate vector3d
KeyframeData keyframeData4;
keyframeData4.filename = "animate_vector3d.cbor";
keyframeData4.propertyType = QMetaType::QVector3D;
Keyframe key4_1;
key4_1.frame = 0;
key4_1.value = QVector3D(500.0, 500.0, 500.0);
key4_1.easing = 0;
keyframeData4.keyframes.append(key4_1);
Keyframe key4_2;
key4_2.frame = 1000;
key4_2.value = QVector3D(100.0, 200.0, 300.0);
key4_2.easing = 0;
keyframeData4.keyframes.append(key4_2);
Keyframe key4_3;
key4_3.frame = 2000;
key4_3.value = QVector3D(-1000.0, 0.0, 0.0);
key4_3.easing = 0;
keyframeData4.keyframes.append(key4_3);
data.append(keyframeData4);
for (auto keyframeData : data) {
// Output into current running path
QString path = QDir::currentPath();
QString outputFile = path + "\\" + keyframeData.filename;
QFile output(outputFile);
qDebug() << "Generating:" << outputFile;
if (!output.open(QIODevice::WriteOnly)) {
qWarning() << "Unable to open output file:" << outputFile;
exit(0);
}
QCborStreamWriter writer(&output);
writeKeyframesHeader(writer, keyframeData.propertyType);
// Start keyframes array
writer.startArray();
for (auto keyFrame : keyframeData.keyframes) {
writer.append(keyFrame.frame);
writer.append(keyFrame.easing);
writeValue(writer, keyFrame.value);
}
// End Keyframes array
writer.endArray();
// End root array
writer.endArray();
output.close();
}
return app.exec();
}