summaryrefslogtreecommitdiffstats
path: root/src/gui/image
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/image')
-rw-r--r--src/gui/image/image.pri2
-rw-r--r--src/gui/image/qpixmap.h5
-rw-r--r--src/gui/image/qpixmap_s60.cpp58
-rw-r--r--src/gui/image/qpixmapdata.cpp11
-rw-r--r--src/gui/image/qpixmapdata_p.h9
5 files changed, 83 insertions, 2 deletions
diff --git a/src/gui/image/image.pri b/src/gui/image/image.pri
index f365f66..b67be55 100644
--- a/src/gui/image/image.pri
+++ b/src/gui/image/image.pri
@@ -24,7 +24,7 @@ HEADERS += \
image/qpixmap.h \
image/qpixmap_raster_p.h \
image/qpixmapcache.h \
- image/qpixmapcache_p.h \
+ image/qpixmapcache_p.h \
image/qpixmapdata_p.h \
image/qpixmapdatafactory_p.h \
image/qpixmapfilter_p.h \
diff --git a/src/gui/image/qpixmap.h b/src/gui/image/qpixmap.h
index 4a8a876..54e89ff 100644
--- a/src/gui/image/qpixmap.h
+++ b/src/gui/image/qpixmap.h
@@ -54,6 +54,7 @@ QT_BEGIN_HEADER
#if defined(Q_OS_SYMBIAN)
class CFbsBitmap;
+class RSgImage;
#endif
QT_BEGIN_NAMESPACE
@@ -158,9 +159,11 @@ public:
#if defined(Q_OS_SYMBIAN)
enum ConversionMode { CopyData, DuplicateHandle };
-
+
CFbsBitmap *toSymbianCFbsBitmap(ConversionMode mode = DuplicateHandle) const;
static QPixmap fromSymbianCFbsBitmap(CFbsBitmap *bitmap, ConversionMode mode = DuplicateHandle);
+ RSgImage* toSymbianRSgImage() const;
+ static QPixmap fromSymbianRSgImage(RSgImage *sgImage);
#endif
inline QPixmap copy(int x, int y, int width, int height) const;
diff --git a/src/gui/image/qpixmap_s60.cpp b/src/gui/image/qpixmap_s60.cpp
index 8a6ecb0..0a81ebd 100644
--- a/src/gui/image/qpixmap_s60.cpp
+++ b/src/gui/image/qpixmap_s60.cpp
@@ -42,6 +42,8 @@
#include <w32std.h>
#include <fbs.h>
+#include <private/qapplication_p.h>
+#include <private/qgraphicssystem_p.h>
#include <private/qt_s60_p.h>
#include <private/qpaintengine_s60_p.h>
@@ -895,5 +897,61 @@ void QS60PixmapData::endDataAccess(bool readOnly) const
symbianBitmapDataAccess->endDataAccess(cfbsBitmap);
}
+/*!
+ \since 4.6
+
+ Returns a QPixmap that wraps given \c RSgImage \a graphics resource.
+ The data should be valid even when original RSgImage handle has been
+ closed.
+
+ \warning This function is only available on Symbian OS.
+
+ \sa toSymbianRSgImage(), {QPixmap#Pixmap Conversion}{Pixmap Conversion}
+*/
+
+QPixmap QPixmap::fromSymbianRSgImage(RSgImage *sgImage)
+{
+ // It is expected that RSgImage will
+ // CURRENTLY be used in conjuction with
+ // OpenVG graphics system
+ //
+ // Surely things might change in future
+
+ if (!sgImage)
+ return QPixmap();
+
+ QPixmap pixmap;
+ pixmap.pixmapData()->fromRSgImage(sgImage);
+
+ return pixmap;
+}
+
+/*!
+\since 4.6
+
+Returns a \c RSgImage that is equivalent to the QPixmap by copying the data.
+
+It is the caller's responsibility to close/delete the \c RSgImage after use.
+
+\warning This function is only available on Symbian OS.
+
+\sa fromSymbianRSgImage()
+*/
+
+RSgImage *QPixmap::toSymbianRSgImage() const
+{
+ // It is expected that RSgImage will
+ // CURRENTLY be used in conjuction with
+ // OpenVG graphics system
+ //
+ // Surely things might change in future
+
+ if (isNull())
+ return 0;
+
+ RSgImage *sgImage = pixmapData()->toRSgImage();
+
+ return sgImage;
+}
QT_END_NAMESPACE
diff --git a/src/gui/image/qpixmapdata.cpp b/src/gui/image/qpixmapdata.cpp
index 8ce5447..65899a4 100644
--- a/src/gui/image/qpixmapdata.cpp
+++ b/src/gui/image/qpixmapdata.cpp
@@ -223,4 +223,15 @@ QImage* QPixmapData::buffer()
return 0;
}
+#if defined(Q_OS_SYMBIAN)
+RSgImage* QPixmapData::toRSgImage()
+{
+ return 0;
+}
+
+void QPixmapData::fromRSgImage(RSgImage* rsgImage)
+{
+ return;
+}
+#endif
QT_END_NAMESPACE
diff --git a/src/gui/image/qpixmapdata_p.h b/src/gui/image/qpixmapdata_p.h
index 0af2af8..bac5065 100644
--- a/src/gui/image/qpixmapdata_p.h
+++ b/src/gui/image/qpixmapdata_p.h
@@ -56,6 +56,10 @@
#include <QtGui/qpixmap.h>
#include <QtCore/qatomic.h>
+#if defined(Q_OS_SYMBIAN)
+class RSgImage;
+#endif
+
QT_BEGIN_NAMESPACE
class Q_GUI_EXPORT QPixmapData
@@ -109,6 +113,11 @@ public:
inline int depth() const { return d; }
inline bool isNull() const { return is_null; }
+#if defined(Q_OS_SYMBIAN)
+ virtual RSgImage* toRSgImage();
+ virtual void fromRSgImage(RSgImage* rsgImage);
+#endif
+
protected:
void setSerialNumber(int serNo);
int w;