849 } |
849 } |
850 |
850 |
851 return EFalse; |
851 return EFalse; |
852 } |
852 } |
853 |
853 |
|
854 CAknsEffectQueueItemData *GetEffectQueueItemData(MAknsSkinInstance* aInstance, const TAknsItemID &aID) |
|
855 { |
|
856 CAknsAppSkinInstance* appSkinInstance = |
|
857 static_cast<CAknsAppSkinInstance*>(aInstance); |
|
858 |
|
859 TAknsItemID id = AknsScalabilityUtils::ConcreteEffectQueue(appSkinInstance, aID); |
|
860 |
|
861 CAknsItemData *itemData = appSkinInstance->GetCachedItemData(id, EAknsITEffectQueue); |
|
862 |
|
863 return static_cast<CAknsEffectQueueItemData *>(itemData); |
|
864 } |
|
865 |
|
866 CFbsBitmap *AknsScalabilityUtils::LoadBitmapFromSkinId(MAknsSkinInstance* aInstance, const TAknsItemID &aID, const TSize &size) |
|
867 { |
|
868 CAknsAppSkinInstance* appSkinInstance = |
|
869 static_cast<CAknsAppSkinInstance*>(aInstance); |
|
870 |
|
871 CAknsItemData* itemData = NULL; |
|
872 itemData = aInstance->GetCachedItemData(aID, EAknsITBitmap); |
|
873 if (itemData) |
|
874 { |
|
875 CFbsBitmap *bmp = |
|
876 static_cast<CAknsBitmapItemData*> (itemData)->Bitmap(); |
|
877 |
|
878 CFbsBitmap *ret = new CFbsBitmap(); |
|
879 ret->Duplicate(bmp->Handle()); |
|
880 |
|
881 return ret; |
|
882 } |
|
883 |
|
884 CFbsBitmap *bitmap = NULL; |
|
885 CAknsEffectQueueItemData *effectQueueItemData = GetEffectQueueItemData(aInstance, aID); |
|
886 if(effectQueueItemData) |
|
887 { |
|
888 MAknsRlCommandIterator *iter = effectQueueItemData->CreateCommandIteratorL(); |
|
889 while(iter->HasNext()) |
|
890 { |
|
891 const TAknsRlCommandData *commandData = iter->NextL(); |
|
892 MAknsRlParameterIterator *paramIter = commandData->iParamIterator; |
|
893 while(paramIter->HasNext()) |
|
894 { |
|
895 const TAknsRlParameterData *paramData = paramIter->NextL(); |
|
896 if( paramData->iType == EAknsRlParameterTypeGraphics) |
|
897 { |
|
898 const TDesC16* filename = paramData->iGfx->iFilename; |
|
899 TInt index = paramData->iGfx->iIndex; |
|
900 |
|
901 if(index > 0) |
|
902 { |
|
903 bitmap = AknIconUtils::CreateIconL(*filename, index); |
|
904 AknIconUtils::SetSize(bitmap, size, EAspectRatioNotPreserved); |
|
905 break; |
|
906 } |
|
907 //could be wallpaper |
|
908 CFbsBitmap *mask = NULL; |
|
909 TRAPD(err, appSkinInstance->iSession.DecodeWallpaperImageL(*filename, size, bitmap, mask)); |
|
910 |
|
911 if(err == KErrNone) |
|
912 { |
|
913 break; |
|
914 } |
|
915 } |
|
916 } |
|
917 |
|
918 if(bitmap) |
|
919 { |
|
920 break; |
|
921 } |
|
922 } |
|
923 |
|
924 delete iter; |
|
925 } |
|
926 |
|
927 return bitmap; |
|
928 } |
|
929 |
|
930 TBool IsScalableItem ( const TAknsItemID aID ) |
|
931 { |
|
932 if ( aID.iMajor == EAknsMajorSkin && |
|
933 aID.iMinor >= EAknsMinorQsnBgScreen && |
|
934 aID.iMinor <= EAknsMinorQsnBgAreaMainSmall ) |
|
935 { |
|
936 return ETrue; |
|
937 } |
|
938 else if ( aID.iMajor == EAknsMajorAvkon && |
|
939 aID.iMinor >= EAknsMinorQsnBgNavipaneSolid && |
|
940 aID.iMinor <= EAknsMinorQsnBgNavipaneWipeIdle ) |
|
941 { |
|
942 //return ETrue; |
|
943 } |
|
944 |
|
945 return EFalse; |
|
946 } |
854 // ----------------------------------------------------------------------------- |
947 // ----------------------------------------------------------------------------- |
855 // AknsScalabilityUtils::RecursiveCacheRenderL |
948 // AknsScalabilityUtils::RecursiveCacheRenderL |
856 // (commented in the header). |
949 // (commented in the header). |
857 // ----------------------------------------------------------------------------- |
950 // ----------------------------------------------------------------------------- |
858 // |
951 // |
941 if( existingData ) |
1034 if( existingData ) |
942 { |
1035 { |
943 aMorphingOut = morphing; |
1036 aMorphingOut = morphing; |
944 return existingData; |
1037 return existingData; |
945 } |
1038 } |
946 |
1039 if(aSkin->iLocalItemDefArray.Count() == 0) //not in preview |
|
1040 { |
|
1041 if ( hasData && IsScalableItem( thisIid ) ) |
|
1042 { |
|
1043 CAknsMaskedBitmapItemData* data = |
|
1044 CAknsMaskedBitmapItemData::NewL(); |
|
1045 |
|
1046 data->SetDrawRect(aLayoutSize); |
|
1047 data->SetParentIID(KAknsIIDNone); |
|
1048 |
|
1049 TAknsImageAttributeData attributes; |
|
1050 attributes.iAttributes = EAknsImageAttributeNBC; |
|
1051 data->SetAttributesL(attributes); |
|
1052 |
|
1053 CFbsBitmap *bmp = LoadBitmapFromSkinId(aSkin, thisIid, aLayoutSize); |
|
1054 data->SetBitmap( bmp ); |
|
1055 data->SetMask(NULL); |
|
1056 |
|
1057 aSkin->AddLayoutBitmapL(thisIid, data, aLayoutType, |
|
1058 aLayoutSize, morphing, aLocalItem); |
|
1059 aMorphingOut = morphing; |
|
1060 return CachedLayoutBitmap(aSkin, thisIid, rect.Size(), |
|
1061 aLayoutSize, aLayoutType, morphing, aLocalItem); |
|
1062 } |
|
1063 } |
947 // Otherwise, start rendering |
1064 // Otherwise, start rendering |
948 |
1065 |
949 CAknsMaskedBitmapItemData* thisData = CAknsMaskedBitmapItemData::NewL(); |
1066 CAknsMaskedBitmapItemData* thisData = CAknsMaskedBitmapItemData::NewL(); |
950 CleanupStack::PushL( thisData ); // (1) |
1067 CleanupStack::PushL( thisData ); // (1) |
951 |
1068 |