File indexing completed on 2024-04-28 15:39:42
0001 /* SPDX-FileCopyrightText: 2014 Jesper K. Pedersen <blackie@kde.org> 0002 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #ifndef REMOTECONTROL_SERIALIZER_H 0007 #define REMOTECONTROL_SERIALIZER_H 0008 0009 #include <QObject> 0010 0011 namespace RemoteControl 0012 { 0013 0014 enum class BackgroundType { Transparent, 0015 NonTransparent }; 0016 0017 static void fastStreamImage(QDataStream &stream, const QImage &image, BackgroundType type) 0018 { 0019 if (type == BackgroundType::Transparent) { 0020 QImage result(image.width(), image.height(), QImage::Format_RGB32); 0021 result.fill(Qt::black); 0022 QPainter p(&result); 0023 p.drawImage(0, 0, image); 0024 p.end(); 0025 result.save(stream.device(), "JPEG"); 0026 } else 0027 image.save(stream.device(), "JPEG"); 0028 } 0029 0030 class SerializerInterface 0031 { 0032 public: 0033 virtual ~SerializerInterface() { } 0034 virtual void encode(QDataStream &) = 0; 0035 virtual void decode(QDataStream &) = 0; 0036 }; 0037 0038 template <class T> 0039 class Serializer : public SerializerInterface 0040 { 0041 public: 0042 Serializer(T &value) 0043 : m_value(value) 0044 { 0045 } 0046 void encode(QDataStream &stream) override 0047 { 0048 stream << m_value; 0049 } 0050 void decode(QDataStream &stream) override 0051 { 0052 stream >> m_value; 0053 } 0054 0055 private: 0056 T &m_value; 0057 }; 0058 0059 template <> 0060 class Serializer<QImage> : public SerializerInterface 0061 { 0062 public: 0063 Serializer(QImage &value, BackgroundType background = BackgroundType::NonTransparent) 0064 : m_image(value) 0065 , m_background(background) 0066 { 0067 } 0068 void encode(QDataStream &stream) override 0069 { 0070 fastStreamImage(stream, m_image, m_background); 0071 } 0072 void decode(QDataStream &stream) override 0073 { 0074 m_image.load(stream.device(), "JPEG"); 0075 } 0076 0077 private: 0078 QImage &m_image; 0079 BackgroundType m_background; 0080 }; 0081 0082 } // namespace RemoteControl 0083 0084 #endif // REMOTECONTROL_SERIALIZER_H