diff options
author | Jorgen Lind <jorgen.lind@theqtcompany.com> | 2014-12-25 20:42:56 +0100 |
---|---|---|
committer | Jørgen Lind <jorgen.lind@theqtcompany.com> | 2015-02-05 07:12:15 +0000 |
commit | 2322ef51948ef20afb3a93d1fea7830dfee4f7d6 (patch) | |
tree | a48e95e243954fb14fe782318efeacbd08aea918 /src/shared | |
parent | 18c16b7caeafe3fbd745a18e54af0dd0b40e54b3 (diff) |
Add a SHM format converter class
This class helps keeing one lookuptable for server and client
It relies on that wayland-(client|server)-protocol.h being included
before the qwaylandshmformathelper.h
Change-Id: I12158126a80c8fef5c52427d35792f33716020f1
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/qwaylandshmformathelper.h | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/src/shared/qwaylandshmformathelper.h b/src/shared/qwaylandshmformathelper.h new file mode 100644 index 000000000..131ad780d --- /dev/null +++ b/src/shared/qwaylandshmformathelper.h @@ -0,0 +1,138 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDSHMFORMATHELPER_H +#define QWAYLANDSHMFORMATHELPER_H + +#include <QtGui/QImage> + +//the correct protocol header for the wayland server or wayland client has to be +//included before this file is included + +QT_BEGIN_NAMESPACE + +class QWaylandShmFormatHelper +{ +public: + static inline wl_shm_format fromQImageFormat(QImage::Format format); + static inline QImage::Format fromWaylandShmFormat(wl_shm_format format); + static inline QVector<wl_shm_format> supportedWaylandFormats(); + +private: +//IMPLEMENTATION (which has to be inline in the header because of the include trick) + struct Array + { + Array(const size_t size, const wl_shm_format *data) + : size(size) + , data(data) + { } + const size_t size; + const wl_shm_format *data; + }; + + static const Array getData() + { + static wl_shm_format formats_array[] = { + wl_shm_format(INT_MIN), //Format_Invalid, + wl_shm_format(INT_MIN), //Format_Mono, + wl_shm_format(INT_MIN), //Format_MonoLSB, + wl_shm_format(INT_MIN), //Format_Indexed8, + WL_SHM_FORMAT_XRGB8888, //Format_RGB32, + WL_SHM_FORMAT_ARGB8888, //Format_ARGB32, + WL_SHM_FORMAT_ARGB8888, //Format_ARGB32_Premultiplied, + WL_SHM_FORMAT_RGB565, //Format_RGB16, + wl_shm_format(INT_MIN), //Format_ARGB8565_Premultiplied, + wl_shm_format(INT_MIN), //Format_RGB666, + wl_shm_format(INT_MIN), //Format_ARGB6666_Premultiplied, + WL_SHM_FORMAT_XRGB1555, //Format_RGB555, + wl_shm_format(INT_MIN), //Format_ARGB8555_Premultiplied, + WL_SHM_FORMAT_RGB888, //Format_RGB888, + WL_SHM_FORMAT_XRGB4444, //Format_RGB444, + WL_SHM_FORMAT_ARGB4444, //Format_ARGB4444_Premultiplied, + WL_SHM_FORMAT_XBGR8888, //Format_RGBX8888, + WL_SHM_FORMAT_ABGR8888, //Format_RGBA8888, + WL_SHM_FORMAT_ABGR8888, //Format_RGBA8888_Premultiplied, + WL_SHM_FORMAT_XBGR2101010, //Format_BGR30, + WL_SHM_FORMAT_ARGB2101010, //Format_A2BGR30_Premultiplied, + WL_SHM_FORMAT_XRGB2101010, //Format_RGB30, + WL_SHM_FORMAT_ARGB2101010, //Format_A2RGB30_Premultiplied, + WL_SHM_FORMAT_C8, //Format_Alpha8, + WL_SHM_FORMAT_C8 //Format_Grayscale8, + }; + const size_t size = sizeof(formats_array) / sizeof(*formats_array); + return Array(size, formats_array); + } +}; + +wl_shm_format QWaylandShmFormatHelper::fromQImageFormat(QImage::Format format) +{ + Array array = getData(); + if (array.size <= size_t(format)) + return wl_shm_format(INT_MIN); + return array.data[format]; +} + +QImage::Format QWaylandShmFormatHelper::fromWaylandShmFormat(wl_shm_format format) +{ + Array array = getData(); + for (size_t i = 0; i < array.size; i++) { + if (array.data[i] == format) + return QImage::Format(i); + } + return QImage::Format_Invalid; +} + +QVector<wl_shm_format> QWaylandShmFormatHelper::supportedWaylandFormats() +{ + QVector<wl_shm_format> retFormats; + Array array = getData(); + for (size_t i = 0; i < array.size; i++) { + if (int(array.data[i]) != INT_MIN + && !retFormats.contains(array.data[i])) { + retFormats.append(array.data[i]); + } + } + return retFormats; +} + +QT_END_NAMESPACE + +#endif //QWAYLANDSHMFORMATHELPER_H |