homescreenapp/hsutils/src/hswallpaperhelper.cpp
changeset 39 4e8ebe173323
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/hsutils/src/hswallpaperhelper.cpp	Mon May 03 12:24:59 2010 +0300
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Homescreen wallpaper helper class.
+*
+*/
+
+#include <QString>
+#include <QImageReader>
+
+#include "hswallpaperhelper.h"
+
+
+/*!
+    \class HsWallpaperHelper
+    \ingroup group_hsapplication
+    \brief Homescreen wallpaper helper class.
+    Implements image scaling and cropping services. 
+*/
+
+/*!
+    \internal
+    Scales and crops (if needed) \a sourcePath image using \a targetRect. 
+    Centers target rect automatically if a\ centerTarget is true.
+    Pass empty a\ sourceRect to use full size source image as starting point. 
+    Returns processed image or null image if operation fails.
+*/
+QImage HsWallpaperHelper::processImage(const QString &sourcePath,
+                                       const QRect &targetRect,
+                                       const QRect &sourceRect,
+                                       bool centerTarget) 
+{
+    QImageReader imageReader(sourcePath);
+    
+    QRect tempTargetRect = targetRect;
+    QRect tempSourceRect = sourceRect;
+    
+    if (imageReader.canRead()) {
+        QSize sourceSize = imageReader.size();
+        if (tempSourceRect.isEmpty()) {
+            // If sourceRect not defined, uses full size image as source.
+            tempSourceRect.setRect(0, 0, sourceSize.width(), sourceSize.height());
+        }
+        sourceSize.scale(tempTargetRect.width(), tempTargetRect.height(), 
+            Qt::KeepAspectRatioByExpanding);
+        imageReader.setScaledSize(sourceSize);
+
+        if (centerTarget) {
+            tempTargetRect.moveCenter(QPoint(sourceSize.width() / 2, sourceSize.height() / 2));
+        }
+        imageReader.setScaledClipRect(tempTargetRect);
+        
+        return imageReader.read();
+    }
+    return QImage(); // returns null QImage
+}