mirror of https://github.com/cutefishos/core
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
4.2 KiB
C++
149 lines
4.2 KiB
C++
/*
|
|
* SNI DBus Serialisers
|
|
* Copyright 2015 David Edmundson <davidedmundson@kde.org>
|
|
* Copyright 2009 by Marco Martin <notmart@gmail.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of
|
|
* the License or (at your option) version 3 or any later version
|
|
* accepted by the membership of KDE e.V. (or its successor approved
|
|
* by the membership of KDE e.V.), which shall act as a proxy
|
|
* defined in Section 14 of version 3 of the license.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
#include "snidbus.h"
|
|
|
|
#include <QSysInfo>
|
|
#include <QtEndian>
|
|
|
|
//mostly copied from KStatusNotiferItemDbus.cpps from knotification
|
|
|
|
KDbusImageStruct::KDbusImageStruct()
|
|
{
|
|
}
|
|
|
|
KDbusImageStruct::KDbusImageStruct(const QImage &image)
|
|
{
|
|
width = image.size().width();
|
|
height = image.size().height();
|
|
if (image.format() == QImage::Format_ARGB32) {
|
|
data = QByteArray((char *)image.bits(), image.byteCount());
|
|
} else {
|
|
QImage image32 = image.convertToFormat(QImage::Format_ARGB32);
|
|
data = QByteArray((char *)image32.bits(), image32.byteCount());
|
|
}
|
|
|
|
//swap to network byte order if we are little endian
|
|
if (QSysInfo::ByteOrder == QSysInfo::LittleEndian) {
|
|
quint32 *uintBuf = (quint32 *) data.data();
|
|
for (uint i = 0; i < data.size() / sizeof(quint32); ++i) {
|
|
*uintBuf = qToBigEndian(*uintBuf);
|
|
++uintBuf;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Marshall the ImageStruct data into a D-BUS argument
|
|
const QDBusArgument &operator<<(QDBusArgument &argument, const KDbusImageStruct &icon)
|
|
{
|
|
argument.beginStructure();
|
|
argument << icon.width;
|
|
argument << icon.height;
|
|
argument << icon.data;
|
|
argument.endStructure();
|
|
return argument;
|
|
}
|
|
|
|
// Retrieve the ImageStruct data from the D-BUS argument
|
|
const QDBusArgument &operator>>(const QDBusArgument &argument, KDbusImageStruct &icon)
|
|
{
|
|
qint32 width;
|
|
qint32 height;
|
|
QByteArray data;
|
|
|
|
argument.beginStructure();
|
|
argument >> width;
|
|
argument >> height;
|
|
argument >> data;
|
|
argument.endStructure();
|
|
|
|
icon.width = width;
|
|
icon.height = height;
|
|
icon.data = data;
|
|
|
|
return argument;
|
|
}
|
|
|
|
// Marshall the ImageVector data into a D-BUS argument
|
|
const QDBusArgument &operator<<(QDBusArgument &argument, const KDbusImageVector &iconVector)
|
|
{
|
|
argument.beginArray(qMetaTypeId<KDbusImageStruct>());
|
|
for (int i = 0; i < iconVector.size(); ++i) {
|
|
argument << iconVector[i];
|
|
}
|
|
argument.endArray();
|
|
return argument;
|
|
}
|
|
|
|
// Retrieve the ImageVector data from the D-BUS argument
|
|
const QDBusArgument &operator>>(const QDBusArgument &argument, KDbusImageVector &iconVector)
|
|
{
|
|
argument.beginArray();
|
|
iconVector.clear();
|
|
|
|
while (!argument.atEnd()) {
|
|
KDbusImageStruct element;
|
|
argument >> element;
|
|
iconVector.append(element);
|
|
}
|
|
|
|
argument.endArray();
|
|
|
|
return argument;
|
|
}
|
|
|
|
// Marshall the ToolTipStruct data into a D-BUS argument
|
|
const QDBusArgument &operator<<(QDBusArgument &argument, const KDbusToolTipStruct &toolTip)
|
|
{
|
|
argument.beginStructure();
|
|
argument << toolTip.icon;
|
|
argument << toolTip.image;
|
|
argument << toolTip.title;
|
|
argument << toolTip.subTitle;
|
|
argument.endStructure();
|
|
return argument;
|
|
}
|
|
|
|
// Retrieve the ToolTipStruct data from the D-BUS argument
|
|
const QDBusArgument &operator>>(const QDBusArgument &argument, KDbusToolTipStruct &toolTip)
|
|
{
|
|
QString icon;
|
|
KDbusImageVector image;
|
|
QString title;
|
|
QString subTitle;
|
|
|
|
argument.beginStructure();
|
|
argument >> icon;
|
|
argument >> image;
|
|
argument >> title;
|
|
argument >> subTitle;
|
|
argument.endStructure();
|
|
|
|
toolTip.icon = icon;
|
|
toolTip.image = image;
|
|
toolTip.title = title;
|
|
toolTip.subTitle = subTitle;
|
|
|
|
return argument;
|
|
}
|