aboutsummaryrefslogtreecommitdiffstats
path: root/tests/manual/keyframeBinaryGenerator/main.cpp
blob: dedc00b26a2923fe6d89b4846480f54a98c026c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
// 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();
}