--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/graphics/qt/imageimpl.cpp Fri Oct 15 12:29:39 2010 +0300
@@ -0,0 +1,248 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nokia Corporation - initial API and implementation
+ *******************************************************************************/
+
+#include <QPixmap>
+#include "imageimpl.h"
+#include "gfxlog.h"
+
+namespace Java { namespace GFX {
+
+ImageImpl::ImageImpl() : ImageBase()
+ {
+ GFX_LOG_FUNC_CALL();
+ }
+
+ImageImpl::~ImageImpl()
+ {
+ GFX_LOG_FUNC_CALL();
+ }
+
+void ImageImpl::createBySize(int aWidth, int aHeight, int aFillColor, TImageFormat aFormat)
+ {
+ GFX_LOG_FUNC_CALL();
+ Q_ASSERT(mImage.isNull());
+
+ mImage = QImage(aWidth, aHeight, mapInternalFormatToQt(aFormat));
+ // Check if creation was successful
+ if(mImage.isNull())
+ {
+ throw GfxException(EGfxErrorNoMemory, "Image (QImage) creation failed");
+ }
+ // Finally fill with given fillColor, also clears the image mem area
+ // otherwise there might be some random coloured pixels in image
+ mImage.fill(aFillColor);
+ }
+
+
+void ImageImpl::createFromQImage(const QImage& aImage)
+ {
+ GFX_LOG_FUNC_CALL();
+ Q_ASSERT(mImage.isNull());
+
+ mImage = QImage(aImage);
+ // Validate allocation
+ if(mImage.isNull())
+ {
+ throw GfxException(EGfxErrorNoMemory, "Image (QImage) creation failed");
+ }
+ }
+
+void ImageImpl::createFromQPixmap(const QPixmap& aPixmap)
+ {
+ GFX_LOG_FUNC_CALL();
+ Q_ASSERT(mImage.isNull());
+
+ mImage = aPixmap.toImage();
+ // Validate allocation
+ if(mImage.isNull())
+ {
+ throw GfxException(EGfxErrorNoMemory, "Image (QImage) creation failed");
+ }
+ }
+
+void ImageImpl::createFromImage(Image* aImage, int aX, int aY, int aWidth, int aHeight)
+ {
+ GFX_LOG_FUNC_CALL();
+ Q_ASSERT(mImage.isNull());
+
+ // Check if the copy should be exactly same as the original
+ if((aImage->getWidth() == aWidth) && (aImage->getHeight() == aHeight) ||
+ QRect(aX, aY, aWidth, aHeight).isEmpty())
+ {
+ mImage = aImage->toImage();
+ }
+ // it's needed to make partial copy of the original
+ else
+ {
+ switch(aImage->type())
+ {
+ case EImage:
+ {
+ mImage = aImage->getConstImage()->copy(aX, aY, aWidth, aHeight);
+ break;
+ }
+ case EPixmap:
+ {
+ mImage = (aImage->getConstPixmap()->copy(aX, aY, aWidth, aHeight)).toImage();
+ break;
+ }
+ default:
+ throw GfxException(EGfxErrorIllegalArgument, "Unsupported source image type");
+ }
+ }
+ if(mImage.isNull())
+ {
+ throw GfxException(EGfxErrorNoMemory, "Image (pixmap) creation failed");
+ }
+ }
+
+void ImageImpl::createFromImageData(ImageDataWrapper* aData)
+ {
+ GFX_LOG_FUNC_CALL();
+ Q_ASSERT(mImage.isNull());
+
+ mImage = imageDataToQImage(aData);
+
+ if(mImage.isNull())
+ {
+ throw GfxException(EGfxErrorNoMemory, "Image (QImage) creation failed");
+ }
+ }
+
+void ImageImpl::createFromRGB(int* aRgbdata, int aWidth, int aHeight, bool aHasAlpha)
+ {
+ GFX_LOG_FUNC_CALL();
+ Q_ASSERT(mImage.isNull());
+
+ // Create QImage from rgbdata
+ mImage = QImage(reinterpret_cast<unsigned char*>(aRgbdata), aWidth, aHeight,
+ (aHasAlpha ? QImage::Format_ARGB32 : QImage::Format_RGB32));
+
+ // Validate creation
+ if(mImage.isNull())
+ {
+ throw GfxException(EGfxErrorNoMemory, "Image (QImage) creation failed");
+ }
+ }
+
+void ImageImpl::dispose()
+ {
+ GFX_LOG_FUNC_CALL();
+ delete this;
+ }
+
+QPaintDevice* ImageImpl::getBindable()
+ {
+ GFX_LOG_FUNC_CALL();
+ return static_cast<QPaintDevice*>(&mImage);
+ }
+
+TImageFormat ImageImpl::getFormat()
+ {
+ return mapQtFormatToInternal(mImage.format());
+ }
+
+int ImageImpl::getHeight()
+ {
+ GFX_LOG_FUNC_CALL();
+ return mImage.height();
+ }
+
+const QImage* ImageImpl::getConstImage()
+ {
+ GFX_LOG_FUNC_CALL();
+ return &mImage;
+ }
+
+
+QImage* ImageImpl::getImage()
+ {
+ GFX_LOG_FUNC_CALL();
+ return &mImage;
+ }
+
+const QPixmap* ImageImpl::getConstPixmap()
+ {
+ GFX_LOG_FUNC_CALL();
+ return NULL;
+ }
+
+QPixmap* ImageImpl::getPixmap()
+ {
+ GFX_LOG_FUNC_CALL();
+ return NULL;
+ }
+
+void ImageImpl::getRgb(int* aRgbdata, int aOffset, int aScanlength, int aX, int aY, int aWidth, int aHeight)
+ {
+ GFX_LOG_FUNC_CALL();
+ doGetRgb(mImage, aRgbdata, aOffset, aScanlength, aX, aY, aWidth, aHeight);
+ }
+
+void ImageImpl::getRgb(char* aRgbdata, char* aTransparencyMask,int aOffset, int aScanlength, int aX, int aY, int aWidth, int aHeight, int aFormat)
+ {
+ GFX_LOG_FUNC_CALL();
+ doGetRgb(mImage, aRgbdata, aTransparencyMask, aOffset, aScanlength, aX, aY, aWidth, aHeight, aFormat);
+ }
+
+void ImageImpl::getRgb(short* aRgbdata, int aOffset, int aScanlength, int aX, int aY, int aWidth, int aHeight, int aFormat)
+ {
+ GFX_LOG_FUNC_CALL();
+ doGetRgb(mImage, aRgbdata, aOffset, aScanlength, aX, aY, aWidth, aHeight, aFormat);
+ }
+int ImageImpl::getWidth()
+ {
+ GFX_LOG_FUNC_CALL();
+ return mImage.width();
+ }
+
+const QImage ImageImpl::toConstImage()
+ {
+ GFX_LOG_FUNC_CALL();
+ return QImage(mImage);
+ }
+
+QImage ImageImpl::toImage()
+ {
+ GFX_LOG_FUNC_CALL();
+ return QImage(mImage);
+ }
+
+QPixmap ImageImpl::toPixmap()
+ {
+ GFX_LOG_FUNC_CALL();
+ return QPixmap::fromImage(mImage);
+ }
+
+void ImageImpl::transform(TTransform aTransform)
+ {
+ GFX_LOG_FUNC_CALL();
+ mImage = mImage.transformed(generateTransformMatrix(aTransform), Qt::FastTransformation);
+ // Validate creation
+ if(mImage.isNull())
+ {
+ throw GfxException(EGfxErrorNoMemory, "Image (QImage) creation failed");
+ }
+ }
+
+TImageType ImageImpl::type()
+ {
+ return EImage;
+ }
+
+bool ImageImpl::hasAlphaChannel()
+ {
+ GFX_LOG_FUNC_CALL();
+ return mImage.hasAlphaChannel();
+ }
+
+} // namespace GFX
+} // namespace Java