diff -r e5618cc85d74 -r 6c158198356e javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swtdisplaybase.cpp --- a/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swtdisplaybase.cpp Thu Jul 15 18:31:06 2010 +0300 +++ b/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swtdisplaybase.cpp Thu Aug 19 09:48:13 2010 +0300 @@ -16,6 +16,11 @@ #include #include #include +#include +#include +#include +#include +#include #include #include "s60commonutils.h" #include "swtfactory.h" @@ -30,7 +35,7 @@ #include "swtjavabufferdrawer.h" #include "swtfont.h" #include "swtuiutils.h" - +#include "imagescaler.h" #define ASSERT_JAVAUITHREAD() ASSERT(IsCurrentThreadJavaUi()) #define ASSERT_NATIVEUITHREAD() ASSERT(IsCurrentThreadNativeUi()) @@ -363,7 +368,6 @@ /** * Constructs an uninitialised Image - * * @param aSize The new image's size */ MSwtImage* ASwtDisplayBase::NewImageL(const TSize& aSize) @@ -371,10 +375,8 @@ return CSwtImage::NewL(*this, aSize, *this); } - /** * Constructs an Image with initial data - * * @param aData The data to construct the image from */ MSwtImage* ASwtDisplayBase::NewImageFromDataL(const MSwtImageData& aData) @@ -382,6 +384,93 @@ return CSwtImage::NewL(this, aData, this); } +/** + * Constructs an image from native theme. + * @param aId See TSwtThemeImageId + */ +MSwtImage* ASwtDisplayBase::NewImageFromThemeL(const TInt aId) +{ + CFbsBitmap* bmp = NULL; + CFbsBitmap* mask = NULL; + TSize size(0, 0); + switch (aId) + { + case ESwtThemeImageSecurityTrusted: + AknsUtils::CreateIconL(AknsUtils::SkinInstance(), + KAknsIIDQgnIndiMidpTrusted, bmp, mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_midp_trusted, + EMbmAvkonQgn_indi_midp_trusted_mask); + size = CSwtLafFacade::GetLayoutRect(CSwtLafFacade::EListSingleGraphicPaneG1, + TRect(),0).Rect().Size(); + break; + case ESwtThemeImageSecurityUntrusted: + AknsUtils::CreateIconL(AknsUtils::SkinInstance(), + KAknsIIDQgnIndiMidpUntrusted, bmp, mask, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_indi_midp_untrusted, + EMbmAvkonQgn_indi_midp_untrusted_mask); + size = CSwtLafFacade::GetLayoutRect(CSwtLafFacade::EListSingleGraphicPaneG1, + TRect(),0).Rect().Size(); + break; + default: + return NULL; + } + + if (!bmp) + { + return NULL; + } + else + { + if (size.iWidth > 0) + { + AknIconUtils::SetSize(bmp, size); + } + // bmp & mask ownership transferred to returned object + return CSwtImage::NewL(*bmp, mask); + } +} + +/** + * Constructs an Image from another Image. + * @param aData The data to construct the image from + */ +MSwtImage* ASwtDisplayBase::ScaleImageL(const MSwtImage& aSrcImage, + const TSize& aDestSize, TBool aKeepAspectRatio) +{ + CFbsBitmap& srcBmp = const_cast(aSrcImage.Bitmap()); + CFbsBitmap* srcMask = const_cast(aSrcImage.MaskBitmap()); + + CFbsBitmap* bmp = new(ELeave) CFbsBitmap; + CleanupStack::PushL(bmp); + User::LeaveIfError(bmp->Create(aDestSize, srcBmp.DisplayMode())); + + CFbsBitmap* mask = 0; + if (srcMask) + { + mask = new(ELeave) CFbsBitmap; + CleanupStack::PushL(mask); + User::LeaveIfError(mask->Create(aDestSize, EGray256)); + } + + CImageScaler* scaler = CImageScaler::NewL(); + CleanupStack::PushL(scaler); + scaler->Scale(srcBmp, *bmp, aKeepAspectRatio); + if (srcMask) + { + scaler->Scale(*srcMask, *mask, aKeepAspectRatio); + } + CleanupStack::PopAndDestroy(scaler); + if (mask) + { + CleanupStack::Pop(mask); + } + CleanupStack::Pop(bmp); + + // bmp & mask ownership transferred to returned object + return CSwtImage::NewL(*bmp, mask); +} // // Own internal event methods