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 = {};