diff -r 05e9090e2422 -r ba33815114d6 skins/AknSkins/src/AknsScalabilityUtils.cpp --- a/skins/AknSkins/src/AknsScalabilityUtils.cpp Thu Dec 17 09:14:12 2009 +0200 +++ b/skins/AknSkins/src/AknsScalabilityUtils.cpp Thu Jan 07 13:25:09 2010 +0200 @@ -851,6 +851,99 @@ return EFalse; } +CAknsEffectQueueItemData *GetEffectQueueItemData(MAknsSkinInstance* aInstance, const TAknsItemID &aID) + { + CAknsAppSkinInstance* appSkinInstance = + static_cast(aInstance); + + TAknsItemID id = AknsScalabilityUtils::ConcreteEffectQueue(appSkinInstance, aID); + + CAknsItemData *itemData = appSkinInstance->GetCachedItemData(id, EAknsITEffectQueue); + + return static_cast(itemData); + } + +CFbsBitmap *AknsScalabilityUtils::LoadBitmapFromSkinId(MAknsSkinInstance* aInstance, const TAknsItemID &aID, const TSize &size) + { + CAknsAppSkinInstance* appSkinInstance = + static_cast(aInstance); + + CAknsItemData* itemData = NULL; + itemData = aInstance->GetCachedItemData(aID, EAknsITBitmap); + if (itemData) + { + CFbsBitmap *bmp = + static_cast (itemData)->Bitmap(); + + CFbsBitmap *ret = new CFbsBitmap(); + ret->Duplicate(bmp->Handle()); + + return ret; + } + + CFbsBitmap *bitmap = NULL; + CAknsEffectQueueItemData *effectQueueItemData = GetEffectQueueItemData(aInstance, aID); + if(effectQueueItemData) + { + MAknsRlCommandIterator *iter = effectQueueItemData->CreateCommandIteratorL(); + while(iter->HasNext()) + { + const TAknsRlCommandData *commandData = iter->NextL(); + MAknsRlParameterIterator *paramIter = commandData->iParamIterator; + while(paramIter->HasNext()) + { + const TAknsRlParameterData *paramData = paramIter->NextL(); + if( paramData->iType == EAknsRlParameterTypeGraphics) + { + const TDesC16* filename = paramData->iGfx->iFilename; + TInt index = paramData->iGfx->iIndex; + + if(index > 0) + { + bitmap = AknIconUtils::CreateIconL(*filename, index); + AknIconUtils::SetSize(bitmap, size, EAspectRatioNotPreserved); + break; + } + //could be wallpaper + CFbsBitmap *mask = NULL; + TRAPD(err, appSkinInstance->iSession.DecodeWallpaperImageL(*filename, size, bitmap, mask)); + + if(err == KErrNone) + { + break; + } + } + } + + if(bitmap) + { + break; + } + } + + delete iter; + } + + return bitmap; + } + +TBool IsScalableItem ( const TAknsItemID aID ) + { + if ( aID.iMajor == EAknsMajorSkin && + aID.iMinor >= EAknsMinorQsnBgScreen && + aID.iMinor <= EAknsMinorQsnBgAreaMainSmall ) + { + return ETrue; + } + else if ( aID.iMajor == EAknsMajorAvkon && + aID.iMinor >= EAknsMinorQsnBgNavipaneSolid && + aID.iMinor <= EAknsMinorQsnBgNavipaneWipeIdle ) + { + //return ETrue; + } + + return EFalse; + } // ----------------------------------------------------------------------------- // AknsScalabilityUtils::RecursiveCacheRenderL // (commented in the header). @@ -943,7 +1036,31 @@ aMorphingOut = morphing; return existingData; } + if(aSkin->iLocalItemDefArray.Count() == 0) //not in preview + { + if ( hasData && IsScalableItem( thisIid ) ) + { + CAknsMaskedBitmapItemData* data = + CAknsMaskedBitmapItemData::NewL(); + data->SetDrawRect(aLayoutSize); + data->SetParentIID(KAknsIIDNone); + + TAknsImageAttributeData attributes; + attributes.iAttributes = EAknsImageAttributeNBC; + data->SetAttributesL(attributes); + + CFbsBitmap *bmp = LoadBitmapFromSkinId(aSkin, thisIid, aLayoutSize); + data->SetBitmap( bmp ); + data->SetMask(NULL); + + aSkin->AddLayoutBitmapL(thisIid, data, aLayoutType, + aLayoutSize, morphing, aLocalItem); + aMorphingOut = morphing; + return CachedLayoutBitmap(aSkin, thisIid, rect.Size(), + aLayoutSize, aLayoutType, morphing, aLocalItem); + } + } // Otherwise, start rendering CAknsMaskedBitmapItemData* thisData = CAknsMaskedBitmapItemData::NewL();