File indexing completed on 2024-12-15 04:01:12

0001 /*
0002  * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #include "meta.hpp"
0008 
0009 using namespace glaxnimate;
0010 
0011 QDataStream& operator<<(QDataStream& ds, const math::bezier::Point& p)
0012 {
0013     return ds << p.pos << p.tan_in << p.tan_out << qint16(p.type);
0014 }
0015 
0016 QDataStream& operator<<(QDataStream& ds, const math::bezier::Bezier& bez)
0017 {
0018     ds << quint32(bez.size()) << bez.closed();
0019     for ( const auto& p : bez )
0020         ds << p;
0021     return ds;
0022 }
0023 
0024 
0025 QDataStream& operator>>(QDataStream& ds, math::bezier::Point& p)
0026 {
0027     qint16 type = 0;
0028     ds >> p.pos >> p.tan_in >> p.tan_out >> type;
0029     p.type = math::bezier::PointType(type);
0030     return ds;
0031 }
0032 
0033 QDataStream& operator>>(QDataStream& ds, math::bezier::Bezier& bez)
0034 {
0035     bez.clear();
0036     quint32 size = 0;
0037     bool closed = false;
0038     ds >> size >> closed;
0039     bez.set_closed(closed);
0040     for ( quint32 i = 0; i < size; i++ )
0041     {
0042         math::bezier::Point p{{}, {}, {}};
0043         ds >> p;
0044         bez.push_back(p);
0045     }
0046     return ds;
0047 }
0048 
0049 void math::bezier::register_meta()
0050 {
0051     qRegisterMetaType<Bezier>("glaxnimate::math::bezier::Bezier");
0052     qRegisterMetaType<Point>("glaxnimate::math::bezier::Point");
0053 #if QT_VERSION_MAJOR < 6
0054     qRegisterMetaTypeStreamOperators<Bezier>("glaxnimate::math::bezier::Bezier");
0055     qRegisterMetaTypeStreamOperators<Point>("glaxnimate::math::bezier::Point");
0056 #endif
0057     QMetaType::registerConverter<Point, QPointF>(&Point::position);
0058     QMetaType::registerConverter<QPointF, Point>([](const QPointF& p) { return Point{p, p, p}; });
0059 }
0060 
0061 
0062 namespace {
0063 
0064 class BezierAutoRegister
0065 {
0066 public:
0067     BezierAutoRegister()
0068     {
0069         math::bezier::register_meta();
0070     }
0071 };
0072 
0073 } // namespace
0074 
0075 static BezierAutoRegister bezier_reg = {};