/**************************************************************************** | |
** | |
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). | |
** All rights reserved. | |
** Contact: Nokia Corporation (qt-info@nokia.com) | |
** | |
** This file is part of the QtOpenVG module of the Qt Toolkit. | |
** | |
** $QT_BEGIN_LICENSE:LGPL$ | |
** GNU Lesser General Public License Usage | |
** 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, Nokia gives you certain additional | |
** rights. These rights are described in the Nokia 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. | |
** | |
** Other Usage | |
** Alternatively, this file may be used in accordance with the terms and | |
** conditions contained in a signed written agreement between you and Nokia. | |
** | |
** | |
** | |
** | |
** | |
** $QT_END_LICENSE$ | |
** | |
****************************************************************************/ | |
#ifndef QPIXMAPDATA_VG_P_H | |
#define QPIXMAPDATA_VG_P_H | |
// | |
// W A R N I N G | |
// ------------- | |
// | |
// This file is not part of the Qt API. It exists for the convenience | |
// of other Qt classes. This header file may change from version to | |
// version without notice, or even be removed. | |
// | |
// We mean it. | |
// | |
#include <QtGui/private/qpixmap_raster_p.h> | |
#include <QtGui/private/qvolatileimage_p.h> | |
#include "qvg_p.h" | |
#if defined(Q_OS_SYMBIAN) | |
class RSGImage; | |
#endif | |
QT_BEGIN_NAMESPACE | |
class QEglContext; | |
class QVGImagePool; | |
class QImageReader; | |
#if !defined(QT_NO_EGL) | |
class QVGPixmapData; | |
class QVGSharedContext; | |
void qt_vg_register_pixmap(QVGPixmapData *pd); | |
void qt_vg_unregister_pixmap(QVGPixmapData *pd); | |
void qt_vg_hibernate_pixmaps(QVGSharedContext *context); | |
#endif | |
class QNativeImageHandleProvider; | |
class Q_OPENVG_EXPORT QVGPixmapData : public QPixmapData | |
{ | |
public: | |
QVGPixmapData(PixelType type); | |
~QVGPixmapData(); | |
QPixmapData *createCompatiblePixmapData() const; | |
// Is this pixmap valid (i.e. non-zero in size)? | |
bool isValid() const; | |
void resize(int width, int height); | |
void fromImage(const QImage &image, Qt::ImageConversionFlags flags); | |
void fromImageReader(QImageReader *imageReader, | |
Qt::ImageConversionFlags flags); | |
bool fromFile(const QString &filename, const char *format, | |
Qt::ImageConversionFlags flags); | |
bool fromData(const uchar *buffer, uint len, const char *format, | |
Qt::ImageConversionFlags flags); | |
void fill(const QColor &color); | |
bool hasAlphaChannel() const; | |
void setAlphaChannel(const QPixmap &alphaChannel); | |
QImage toImage() const; | |
void copy(const QPixmapData *data, const QRect &rect); | |
QImage *buffer(); | |
QPaintEngine* paintEngine() const; | |
// Return the VGImage form of this pixmap, creating it if necessary. | |
// This assumes that there is a VG context current. | |
virtual VGImage toVGImage(); | |
// Return the VGImage form for a specific opacity setting. | |
virtual VGImage toVGImage(qreal opacity); | |
// Detach this image from the image pool. | |
virtual void detachImageFromPool(); | |
// Release the VG resources associated with this pixmap and copy | |
// the pixmap's contents out of the GPU back into main memory. | |
// The VG resource will be automatically recreated the next time | |
// toVGImage() is called. Does nothing if the pixmap cannot be | |
// hibernated for some reason (e.g. VGImage is shared with another | |
// process via a SgImage). | |
virtual void hibernate(); | |
// Called when the QVGImagePool wants to reclaim this pixmap's | |
// VGImage objects to reuse storage. | |
virtual void reclaimImages(); | |
// If vgImage is valid but source is null, copies pixel data from GPU back | |
// into main memory and destroys vgImage. For a normal pixmap this function | |
// does nothing, however if the pixmap was created directly from a VGImage | |
// (e.g. via SgImage on Symbian) then by doing the readback this ensures | |
// that QImage-based functions can operate too. | |
virtual void ensureReadback(bool readOnly) const; | |
QSize size() const { return QSize(w, h); } | |
#if defined(Q_OS_SYMBIAN) | |
QVolatileImage toVolatileImage() const; | |
void* toNativeType(NativeType type); | |
void fromNativeType(void* pixmap, NativeType type); | |
bool initFromNativeImageHandle(void *handle, const QString &type); | |
void createFromNativeImageHandleProvider(); | |
void releaseNativeImageHandle(); | |
#endif | |
protected: | |
int metric(QPaintDevice::PaintDeviceMetric metric) const; | |
void createPixmapForImage(QImage &image, Qt::ImageConversionFlags flags, bool inPlace); | |
#if defined(Q_OS_SYMBIAN) | |
void cleanup(); | |
#endif | |
private: | |
QVGPixmapData *nextLRU; | |
QVGPixmapData *prevLRU; | |
bool inLRU; | |
bool failedToAlloc; | |
friend class QVGImagePool; | |
friend class QVGPaintEngine; | |
#if !defined(QT_NO_EGL) | |
QVGPixmapData *next; | |
QVGPixmapData *prev; | |
friend void qt_vg_register_pixmap(QVGPixmapData *pd); | |
friend void qt_vg_unregister_pixmap(QVGPixmapData *pd); | |
friend void qt_vg_hibernate_pixmaps(QVGSharedContext *context); | |
#endif | |
protected: | |
QSize prevSize; | |
VGImage vgImage; | |
VGImage vgImageOpacity; | |
qreal cachedOpacity; | |
mutable QVolatileImage source; | |
mutable bool recreate; | |
bool inImagePool; | |
#if !defined(QT_NO_EGL) | |
mutable QEglContext *context; | |
#endif | |
#if defined(Q_OS_SYMBIAN) | |
mutable QNativeImageHandleProvider *nativeImageHandleProvider; | |
void *nativeImageHandle; | |
QString nativeImageType; | |
#endif | |
void forceToImage(bool allowReadback = true); | |
QImage::Format sourceFormat() const; | |
QImage::Format idealFormat(QImage *image, Qt::ImageConversionFlags flags) const; | |
void updateSerial(); | |
void destroyImageAndContext(); | |
void destroyImages(); | |
}; | |
QT_END_NAMESPACE | |
#endif |