Revision control
Copy as Markdown
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// Qt-Security score:significant reason:default
#ifndef QQUICKKEYFRAMEDATAUTILS_H
#define QQUICKKEYFRAMEDATAUTILS_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists purely as an
// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
#include <QtCore/QCborStreamWriter>
#include <QtCore/QVariant>
#include <QtCore/QMetaType>
#include <QtCore/QRect>
#include <QtGui/QVector2D>
#include <QtGui/QVector3D>
#include <QtGui/QVector4D>
#include <QtGui/QQuaternion>
#include <QtGui/QColor>
#include <QtCore/private/qglobal_p.h>
// This file contains useful methods to write keyframes
// CBOR binary files and understand the format.
void writeKeyframesHeader(QCborStreamWriter &writer, QMetaType::Type type, int version = 1)
{
// Root array
writer.startArray();
// header name
writer.append("QTimelineKeyframes");
// file version
writer.append(version);
// property type
writer.append(type);
}
// Write QVariant value into CBOR in correct type.
void writeValue(QCborStreamWriter &writer, const QVariant &value)
{
const QMetaType type = value.metaType();
switch (type.id()) {
case QMetaType::Bool: {
bool b = value.toBool();
writer.append(b);
break;
}
case QMetaType::Int: {
int i = value.toInt();
writer.append(i);
break;
}
case QMetaType::Float: {
float f = value.toFloat();
writer.append(f);
break;
}
case QMetaType::Double: {
double d = value.toDouble();
writer.append(d);
break;
}
case QMetaType::QVector2D: {
QVector2D v = value.value<QVector2D>();
writer.append(v.x());
writer.append(v.y());
break;
}
case QMetaType::QVector3D: {
QVector3D v = value.value<QVector3D>();
writer.append(v.x());
writer.append(v.y());
writer.append(v.z());
break;
}
case QMetaType::QVector4D: {
QVector4D v = value.value<QVector4D>();
writer.append(v.x());
writer.append(v.y());
writer.append(v.z());
writer.append(v.w());
break;
}
case QMetaType::QQuaternion: {
QQuaternion q = value.value<QQuaternion>();
writer.append(q.scalar());
writer.append(q.x());
writer.append(q.y());
writer.append(q.z());
break;
}
case QMetaType::QColor: {
QColor c = value.value<QColor>();
writer.append(c.red());
writer.append(c.green());
writer.append(c.blue());
writer.append(c.alpha());
break;
}
case QMetaType::QRect: {
QRect r = value.value<QRect>();
writer.append(r.x());
writer.append(r.y());
writer.append(r.width());
writer.append(r.height());
break;
}
default: {
qDebug() << "Not able to add:" << value << "of type:" << type.name();
qDebug() << "Please add support for this type into generator.";
break;
}
}
}
#endif // QQUICKKEYFRAMEDATAUTILS_H