skins/AknSkins/src/AknsScalabilityUtils.cpp
changeset 1 ba33815114d6
parent 0 05e9090e2422
child 4 4ab28fdd25ad
equal deleted inserted replaced
0:05e9090e2422 1:ba33815114d6
   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