diff -r cdae8c6c3876 -r 4e8ebe173323 homescreenapp/stateplugins/hshomescreenstateplugin/src/hsselectbackgroundstate.cpp --- a/homescreenapp/stateplugins/hshomescreenstateplugin/src/hsselectbackgroundstate.cpp Fri Apr 16 14:54:01 2010 +0300 +++ b/homescreenapp/stateplugins/hshomescreenstateplugin/src/hsselectbackgroundstate.cpp Mon May 03 12:24:59 2010 +0300 @@ -17,6 +17,7 @@ #include #include +#include #include #include @@ -27,10 +28,14 @@ #include "hswallpaper.h" #include "hsdatabase.h" #include "hshomescreenstatecommon.h" +#include "hswallpaperhelper.h" +#ifdef Q_OS_SYMBIAN +#include "hsimagefetcherclient.h" +#else #include "xqaiwgetimageclient.h" #include "xqaiwcommon.h" - +#endif /*! \class HsSelectBackgroundState \ingroup group_hshomescreenstateprovider @@ -48,7 +53,11 @@ mImageFetcher(0), mSourceView(0) { +#ifdef Q_OS_SYMBIAN + mImageFetcher = new HsImageFetcherClient(this); +#else mImageFetcher = new XQAIWGetImageClient; +#endif connect(this, SIGNAL(entered()), SLOT(action_selectWallpaper())); connect(this, SIGNAL(exited()), SLOT(action_disconnectImageFetcher())); } @@ -64,30 +73,6 @@ /*! \internal - Scales and crops (if needed) \a image for given \a orientation - and saves it to \a path. Return true on successful. -*/ -bool HsSelectBackgroundState::saveImage(QImage &image, const QString &path, Qt::Orientation orientation) -{ - QRect rect; - if (orientation == Qt::Vertical) { - rect.setRect(0, 0, (2* 360) + HSBOUNDARYEFFECT, 640); - } else { - rect.setRect(0, 0, (2 * 640) + HSBOUNDARYEFFECT, 360); - } - - if (image.rect().contains(rect)) { - rect.moveCenter(image.rect().center()); - return image.copy(rect).save(path); - } else { - QImage scaledImage = image.scaledToWidth(rect.width()); - rect.moveCenter(scaledImage.rect().center()); - return scaledImage.copy(rect).save(path); - } -} - -/*! - \internal Connects to image fetcher and launches "remote" ui from photos from which user can select background image */ @@ -95,12 +80,19 @@ { mSourceView = HsScene::mainWindow()->currentView(); +#ifdef Q_OS_SYMBIAN + connect(mImageFetcher, SIGNAL(fetchCompleted(const QString&)), + this, SLOT(fetchCompleted(const QString&))); + connect(mImageFetcher, SIGNAL(fetchFailed(int, const QString&)), + this, SLOT(fetchFailed(int, const QString&))); + mImageFetcher->fetch(); +#else connect(mImageFetcher, SIGNAL(fetchComplete(QStringList)), SLOT(onFetchComplete(QStringList))); connect(mImageFetcher, SIGNAL(fetchFailed(int)), SLOT(onFetchFailed(int))); - mImageFetcher->fetch(QVariantMap(), SelectionSingle); +#endif } /*! @@ -116,7 +108,19 @@ /*! \internal - Called when user has selected an image + Called when user has selected an image on emulator or HW +*/ +#ifdef Q_OS_SYMBIAN +void HsSelectBackgroundState::fetchCompleted(const QString& imageFileName) +{ + QStringList imageFileNameAsList(imageFileName); + onFetchComplete(imageFileNameAsList); +} +#endif + +/*! + \internal + Called when user has selected an image */ void HsSelectBackgroundState::onFetchComplete(QStringList imageStringList) { @@ -151,17 +155,31 @@ QString landscapePath = HsWallpaper::wallpaperPath( Qt::Horizontal, QString(), fileExtension); - QImage image(imageStringList.first()); + QRect portraitRect = QRect(0, 0, (2 * 360) + HSBOUNDARYEFFECT, 640); + QRect landscapeRect = QRect(0, 0, (2 * 640) + HSBOUNDARYEFFECT, 360); + QRect sourceRect; // left empty to signal we want to use full size image as source + + QImage portraitImage = HsWallpaperHelper::processImage(imageStringList.first(), + portraitRect, sourceRect); - if (saveImage(image, portraitPath, Qt::Vertical) && - saveImage(image, landscapePath, Qt::Horizontal)) { + QImage landscapeImage = HsWallpaperHelper::processImage(imageStringList.first(), + landscapeRect, sourceRect); + + if (!portraitImage.isNull() && !landscapeImage.isNull()) { + portraitImage.save(portraitPath); sceneData.portraitWallpaper = portraitPath; + + landscapeImage.save(landscapePath); sceneData.landscapeWallpaper = landscapePath; + if (db->updateScene(sceneData)) { scene->wallpaper()->setImagesById(QString(), fileInfo.suffix()); } } - + else { + // display some error note here + } + emit event_waitInput(); } @@ -174,3 +192,15 @@ Q_UNUSED(error) emit event_waitInput(); } + +/*! + \internal + Called when selection of background image fails on emulator or HW +*/ +#ifdef Q_OS_SYMBIAN +void HsSelectBackgroundState::fetchFailed(int error, const QString& errorString) +{ + Q_UNUSED(errorString) + onFetchFailed(error); +} +#endif \ No newline at end of file