uifw/AvKon/src/eikfrlbd.cpp
branchRCL_3
changeset 23 3d340a0166ff
parent 18 0aa5fbdfbc30
child 25 941195f2d488
equal deleted inserted replaced
18:0aa5fbdfbc30 23:3d340a0166ff
    38 #include <eikslbd.h>
    38 #include <eikslbd.h>
    39 #include "AknDebug.h"
    39 #include "AknDebug.h"
    40 #include <aknlayoutscalable_avkon.cdl.h>
    40 #include <aknlayoutscalable_avkon.cdl.h>
    41 #include <layoutmetadata.cdl.h>
    41 #include <layoutmetadata.cdl.h>
    42 #include <aknphysics.h>
    42 #include <aknphysics.h>
       
    43 #include <AknIconArray.h>
       
    44 #include <avkon.mbg>
    43 
    45 
    44 
    46 
    45 #ifdef RD_UI_TRANSITION_EFFECTS_LIST
    47 #ifdef RD_UI_TRANSITION_EFFECTS_LIST
    46 #include <aknlistloadertfx.h>
    48 #include <aknlistloadertfx.h>
    47 #include <aknlistboxtfxinternal.h>
    49 #include <aknlistboxtfxinternal.h>
   181     void DrawSmileyWithText( CWindowGc& aGc, const TDesC& aSmileyText, 
   183     void DrawSmileyWithText( CWindowGc& aGc, const TDesC& aSmileyText, 
   182                              const TAknLayoutText& aLayout, 
   184                              const TAknLayoutText& aLayout, 
   183                              TBool aUseLogicalToVisualConversion, 
   185                              TBool aUseLogicalToVisualConversion, 
   184                              const TRgb &aColor);
   186                              const TRgb &aColor);
   185     TInt ConvertTextToSmiley( TDes& aText );
   187     TInt ConvertTextToSmiley( TDes& aText );
       
   188     void LoadMarkingIconsL();
       
   189 
   186 private: // New internal methods
   190 private: // New internal methods
   187     TBool DrawHighlightBackground( CFbsBitGc& aGc );
   191     TBool DrawHighlightBackground( CFbsBitGc& aGc );
   188     void PostDeleteAnimation();
   192     void PostDeleteAnimation();
   189     void CreateAnimationL();
   193     void CreateAnimationL();
   190     void DoResizeL( const TSize& aHighlightSize, TBool aAboutToStart );
   194     void DoResizeL( const TSize& aHighlightSize, TBool aAboutToStart );
   275 
   279 
   276     TRect iMarginRect;    
   280     TRect iMarginRect;    
   277     TBool iKineticScrolling;
   281     TBool iKineticScrolling;
   278     CAknSmileyManager* iSmileyMan;
   282     CAknSmileyManager* iSmileyMan;
   279     TSize iSmileySize; // last set simley size
   283     TSize iSmileySize; // last set simley size
       
   284     CAknIconArray* iMarkingIconArray;
   280     };
   285     };
   281 
   286 
   282 
   287 
   283 /**
   288 /**
   284 * High priority is well argumented because running the active object will
   289 * High priority is well argumented because running the active object will
   323     cenRep->Get( KAknAutomaticListStretching, iStretchingEnabled );
   328     cenRep->Get( KAknAutomaticListStretching, iStretchingEnabled );
   324     delete cenRep;
   329     delete cenRep;
   325 #endif
   330 #endif
   326 
   331 
   327     iKineticScrolling = CAknPhysics::FeatureEnabled();
   332     iKineticScrolling = CAknPhysics::FeatureEnabled();
       
   333     LoadMarkingIconsL();
   328     _AKNTRACE_FUNC_EXIT;
   334     _AKNTRACE_FUNC_EXIT;
   329     }
   335     }
   330 
   336 
   331 CFormattedCellListBoxDataExtension::~CFormattedCellListBoxDataExtension()
   337 CFormattedCellListBoxDataExtension::~CFormattedCellListBoxDataExtension()
   332     {
   338     {
   351     delete iMarquee;
   357     delete iMarquee;
   352     delete i2ndLineMarquee;
   358     delete i2ndLineMarquee;
   353     delete iAnimation;
   359     delete iAnimation;
   354     delete iColorBmp;
   360     delete iColorBmp;
   355     delete iHiliBmp;
   361     delete iHiliBmp;
       
   362     
       
   363     if ( iMarkingIconArray )
       
   364         {
       
   365         iMarkingIconArray->ResetAndDestroy();
       
   366         }
       
   367 
       
   368     delete iMarkingIconArray;
   356     _AKNTRACE_FUNC_EXIT;
   369     _AKNTRACE_FUNC_EXIT;
   357     }
   370     }
   358 
   371 
   359 void 
   372 void 
   360 CFormattedCellListBoxDataExtension::AddRowAndSubCellL(TInt aRow,TInt aSubCell)
   373 CFormattedCellListBoxDataExtension::AddRowAndSubCellL(TInt aRow,TInt aSubCell)
   695     {
   708     {
   696     _AKNTRACE_FUNC_ENTER;
   709     _AKNTRACE_FUNC_ENTER;
   697     DeleteAnim();
   710     DeleteAnim();
   698     TryCreateAnimation();
   711     TryCreateAnimation();
   699     TRAP_IGNORE(CreateColorBitmapsL());
   712     TRAP_IGNORE(CreateColorBitmapsL());
       
   713     TRAP_IGNORE( LoadMarkingIconsL() );
   700     _AKNTRACE_FUNC_EXIT;
   714     _AKNTRACE_FUNC_EXIT;
   701     }
   715     }
   702 
   716 
   703 // -----------------------------------------------------------------------------
   717 // -----------------------------------------------------------------------------
   704 // CFormattedCellListBoxDataExtension::SetControl
   718 // CFormattedCellListBoxDataExtension::SetControl
  1303     __ASSERT_DEBUG( iSmileyMan, Panic(EAknPanicObjectNotFullyConstructed));
  1317     __ASSERT_DEBUG( iSmileyMan, Panic(EAknPanicObjectNotFullyConstructed));
  1304     TInt count = 0;
  1318     TInt count = 0;
  1305     TRAPD( err, count = iSmileyMan->ConvertTextToCodesL( aText )) ;
  1319     TRAPD( err, count = iSmileyMan->ConvertTextToCodesL( aText )) ;
  1306     return err == KErrNone ? count : err;
  1320     return err == KErrNone ? count : err;
  1307     }
  1321     }
       
  1322 
       
  1323 
       
  1324 // -----------------------------------------------------------------------------
       
  1325 // CFormattedCellListBoxDataExtension::LoadMarkingIconsL
       
  1326 // -----------------------------------------------------------------------------
       
  1327 //
       
  1328 void CFormattedCellListBoxDataExtension::LoadMarkingIconsL()
       
  1329     {
       
  1330     if ( !iMarkingIconArray )
       
  1331         {
       
  1332         iMarkingIconArray = new ( ELeave ) CAknIconArray( 2 );
       
  1333         }
       
  1334     else
       
  1335         {
       
  1336         iMarkingIconArray->ResetAndDestroy();
       
  1337         }
       
  1338 
       
  1339     MAknsSkinInstance* skin = AknsUtils::SkinInstance();
       
  1340     const TDesC& avkonIconFile = AknIconUtils::AvkonIconFileName();
       
  1341 
       
  1342     CGulIcon* icon = AknsUtils::CreateGulIconL( skin, 
       
  1343             KAknsIIDQgnPropCheckboxOn, 
       
  1344             avkonIconFile, 
       
  1345             EMbmAvkonQgn_prop_checkbox_on, 
       
  1346             EMbmAvkonQgn_prop_checkbox_on_mask );
       
  1347     
       
  1348     CleanupStack::PushL( icon );
       
  1349     iMarkingIconArray->AppendL( icon );
       
  1350     CleanupStack::Pop( icon );
       
  1351 
       
  1352     icon = AknsUtils::CreateGulIconL( skin, 
       
  1353             KAknsIIDQgnPropCheckboxOff, 
       
  1354             avkonIconFile, 
       
  1355             EMbmAvkonQgn_prop_checkbox_off, 
       
  1356             EMbmAvkonQgn_prop_checkbox_off_mask );
       
  1357 
       
  1358     CleanupStack::PushL( icon );
       
  1359     iMarkingIconArray->AppendL( icon );
       
  1360     CleanupStack::Pop( icon );
       
  1361     }
       
  1362 
  1308 
  1363 
  1309 EXPORT_C CCoeControl *CFormattedCellListBoxData::Control() const 
  1364 EXPORT_C CCoeControl *CFormattedCellListBoxData::Control() const 
  1310     {
  1365     {
  1311     __ASSERT_DEBUG( iExtension, Panic( EAknPanicNullPointer ));
  1366     __ASSERT_DEBUG( iExtension, Panic( EAknPanicNullPointer ));
  1312     return iExtension->iControl;
  1367     return iExtension->iControl;
  2272     _AKNTRACE("DrawFormatted: aItemRect=(%d,%d,%d,%d)",
  2327     _AKNTRACE("DrawFormatted: aItemRect=(%d,%d,%d,%d)",
  2273             aItemRect.iTl.iX, aItemRect.iTl.iY, aItemRect.iBr.iX, 
  2328             aItemRect.iTl.iX, aItemRect.iTl.iY, aItemRect.iBr.iX, 
  2274             aItemRect.iBr.iY);
  2329             aItemRect.iBr.iY);
  2275     
  2330     
  2276     __ASSERT_DEBUG( iExtension, Panic( EAknPanicNullPointer ));
  2331     __ASSERT_DEBUG( iExtension, Panic( EAknPanicNullPointer ));
  2277     CListBoxView* view = static_cast<CEikListBox*>( iExtension->iControl )->View();
  2332     __ASSERT_DEBUG( iExtension->iControl, Panic( EAknPanicNullPointer ));
       
  2333 
       
  2334     CEikListBox* listbox = static_cast<CEikListBox*>( iExtension->iControl ); 
       
  2335     CListBoxView* view = listbox->View();
       
  2336 
  2278     if (!view->ViewRect().Intersects(aItemRect))
  2337     if (!view->ViewRect().Intersects(aItemRect))
  2279         {
  2338         {
  2280         // outside of the clipping rect -> don't process this item
  2339         // outside of the clipping rect -> don't process this item
  2281         return;
  2340         return;
  2282         }
  2341         }
  2283 
  2342 
  2284     if ( aHighlight )
  2343     if ( aHighlight )
  2285         {
  2344         {
  2286         iExtension->iClippedSubcells = 0;
  2345         iExtension->iClippedSubcells = 0;
  2287         }
  2346         }
       
  2347 
       
  2348     TBool backgroundDrawingSuppressed = listbox->BackgroundDrawingSuppressed();
  2288     
  2349     
  2289 #ifdef RD_UI_TRANSITION_EFFECTS_LIST
  2350 #ifdef RD_UI_TRANSITION_EFFECTS_LIST
  2290     MAknListBoxTfxInternal *transApi = CAknListLoader::TfxApiInternal( &aGc );
  2351     MAknListBoxTfxInternal *transApi = CAknListLoader::TfxApiInternal( &aGc );
  2291     if ( transApi )
  2352     if ( transApi && !backgroundDrawingSuppressed )
  2292         {
  2353         {
  2293         transApi->StartDrawing( MAknListBoxTfxInternal::EListItem );
  2354         transApi->StartDrawing( MAknListBoxTfxInternal::EListItem );
  2294         if(transApi->EffectsDisabled())
  2355         if(transApi->EffectsDisabled())
  2295             {
  2356             {
  2296             aGc.SetClippingRect( view->ViewRect() );
  2357             aGc.SetClippingRect( view->ViewRect() );
  2297             }
  2358             }
  2298         }
  2359         }
  2299 #else
  2360 #else
  2300     aGc.SetClippingRect( view->ViewRect() );
  2361     if ( !backgroundDrawingSuppressed )
       
  2362         {
       
  2363         aGc.SetClippingRect( view->ViewRect() );
       
  2364         }
  2301 #endif //RD_UI_TRANSITION_EFFECTS_LIST
  2365 #endif //RD_UI_TRANSITION_EFFECTS_LIST
  2302     TRect vr(view->ViewRect());
  2366     TRect vr(view->ViewRect());
  2303     _AKNTRACE("Clipping: Width %d, (%d,%d)", vr.Width(), vr.iTl.iX, vr.iBr.iX );
  2367     _AKNTRACE("Clipping: Width %d, (%d,%d)", vr.Width(), vr.iTl.iX, vr.iBr.iX );
  2304     if ( UsesScalableLayoutData() )
  2368     if ( UsesScalableLayoutData() )
  2305         {
  2369         {
  2316         */
  2380         */
  2317         DrawFormattedOld( aProperties, aGc, aText, aItemRect, aHighlight, aColors );
  2381         DrawFormattedOld( aProperties, aGc, aText, aItemRect, aHighlight, aColors );
  2318         }
  2382         }
  2319 
  2383 
  2320 #ifdef RD_UI_TRANSITION_EFFECTS_LIST  
  2384 #ifdef RD_UI_TRANSITION_EFFECTS_LIST  
  2321     if ( transApi )
  2385     if ( transApi && !backgroundDrawingSuppressed )
  2322         {        
  2386         {        
  2323         if(transApi->EffectsDisabled())
  2387         if(transApi->EffectsDisabled())
  2324             {
  2388             {
  2325             aGc.CancelClippingRect();
  2389             aGc.CancelClippingRect();
  2326             }
  2390             }
  2327 
  2391 
  2328         transApi->StopDrawing();
  2392         transApi->StopDrawing();
  2329         }
  2393         }
  2330 #else
  2394 #else
  2331     aGc.CancelClippingRect();
  2395     if ( !backgroundDrawingSuppressed )
       
  2396         {
       
  2397         aGc.CancelClippingRect();
       
  2398         }
  2332 #endif //RD_UI_TRANSITION_EFFECTS_LIST 
  2399 #endif //RD_UI_TRANSITION_EFFECTS_LIST 
  2333     _AKNTRACE_FUNC_EXIT;
  2400     _AKNTRACE_FUNC_EXIT;
  2334     }
  2401     }
  2335 
  2402 
  2336 
  2403 
  2408             aItemRect.iBr.iY);
  2475             aItemRect.iBr.iY);
  2409     
  2476     
  2410     __ASSERT_DEBUG( iExtension, Panic( EAknPanicNullPointer ));
  2477     __ASSERT_DEBUG( iExtension, Panic( EAknPanicNullPointer ));
  2411     
  2478     
  2412     TRect textRect(aItemRect);
  2479     TRect textRect(aItemRect);
       
  2480     
       
  2481     CEikListBox* listbox = static_cast<CEikListBox*>( Control() ); 
       
  2482     
       
  2483     if ( listbox->View()->ItemDrawer()->Flags() 
       
  2484             & CListItemDrawer::EMarkingModeEnabled 
       
  2485             && iExtension->iMarkingIconArray
       
  2486             &&  iExtension->iMarkingIconArray->Count() == 2 )
       
  2487         {
       
  2488         textRect.iTl.iX += 
       
  2489                 AknLayoutScalable_Avkon::list_double_graphic_pane_t1( 0 ).LayoutLine().il;
       
  2490 
       
  2491         TAknLayoutRect layoutRect;
       
  2492         layoutRect.LayoutRect( aItemRect, 
       
  2493                 AknLayoutScalable_Avkon::list_double_graphic_pane_g1( 0 ) );
       
  2494         
       
  2495         CGulIcon* icon = (*iExtension->iMarkingIconArray)[1]; // unchecked
       
  2496 
       
  2497         if ( listbox->View()->ItemIsSelected( 
       
  2498                 iExtension->iCurrentlyDrawnItemIndex ) )
       
  2499             {
       
  2500             icon = (*iExtension->iMarkingIconArray)[0];
       
  2501             }
       
  2502         
       
  2503         CFbsBitmap* bitmap = icon->Bitmap();
       
  2504 
       
  2505         if ( bitmap )
       
  2506             {
       
  2507             TSize size( bitmap->SizeInPixels() ); // set size if not already
       
  2508             TSize targetSize( layoutRect.Rect().Size() );
       
  2509             
       
  2510             if ( size.iWidth != targetSize.iWidth && size.iHeight != targetSize.iHeight )
       
  2511                 {
       
  2512                 AknIconUtils::SetSize( bitmap, targetSize,
       
  2513                         EAspectRatioPreservedAndUnusedSpaceRemoved ); 
       
  2514                 }
       
  2515 
       
  2516             aGc.BitBltMasked( layoutRect.Rect().iTl, bitmap, TRect( layoutRect.Rect().Size() ), icon->Mask(), EFalse );
       
  2517             }
       
  2518         }
       
  2519     
  2413     const TColors *subcellColors = &aColors;
  2520     const TColors *subcellColors = &aColors;
  2414 
  2521 
  2415     TInt lastSubCell = Min( LastSubCell(), KMaxSubCellIndex );
  2522     TInt lastSubCell = Min( LastSubCell(), KMaxSubCellIndex );
  2416 
  2523 
  2417     TInt subcell=0;
  2524     TInt subcell=0;
  2431     
  2538     
  2432     Mem::FillZ( &rectClipped[0], KMaxSubCellIndex * sizeof( TBool ) );
  2539     Mem::FillZ( &rectClipped[0], KMaxSubCellIndex * sizeof( TBool ) );
  2433     
  2540     
  2434     if ( iExtension->iSubCellsMightIntersect )
  2541     if ( iExtension->iSubCellsMightIntersect )
  2435         {
  2542         {
  2436         CheckIfSubCellsIntersect( &textLines[0], &rectClipped[0], *aText, aItemRect );
  2543         CheckIfSubCellsIntersect( &textLines[0], &rectClipped[0], *aText, textRect );
  2437         }
  2544         }
  2438 
  2545 
  2439     TInt SCindex=0;
  2546     TInt SCindex=0;
  2440 
  2547 
  2441     // This loop does the drawing.    
  2548     // This loop does the drawing.    
  2934 
  3041 
  2935 EXPORT_C void CPopupFormattedListBoxData::Draw(TListItemProperties aProperties, CWindowGc& aGc,const TDesC* aText,const TRect& aRect,TBool aHighlight, const TColors& aColors) const
  3042 EXPORT_C void CPopupFormattedListBoxData::Draw(TListItemProperties aProperties, CWindowGc& aGc,const TDesC* aText,const TRect& aRect,TBool aHighlight, const TColors& aColors) const
  2936     {
  3043     {
  2937     _AKNTRACE_FUNC_ENTER;
  3044     _AKNTRACE_FUNC_ENTER;
  2938     const TRect &aItemRect = aRect;
  3045     const TRect &aItemRect = aRect;
  2939     
  3046 
  2940     DrawPopupHighlight(aGc, aItemRect, aHighlight);
  3047     DrawDefaultHighlight( aGc, aItemRect, aHighlight );
  2941     
  3048 
  2942     // Draw the actual items.
  3049     // Draw the actual items.
  2943     DrawFormatted(aProperties,aGc,aText,aItemRect,aHighlight,aColors);
  3050     DrawFormatted(aProperties,aGc,aText,aItemRect,aHighlight,aColors);
  2944     _AKNTRACE_FUNC_EXIT;
  3051     _AKNTRACE_FUNC_EXIT;
  2945     }
  3052     }
  2946 
  3053 
  3039 #endif
  3146 #endif
  3040         }
  3147         }
  3041     _AKNTRACE_FUNC_EXIT;
  3148     _AKNTRACE_FUNC_EXIT;
  3042     }
  3149     }
  3043 
  3150 
  3044 void CFormattedCellListBoxData::DrawSettingHighlight(CWindowGc &aGc, const TRect &aItemRect, TBool aHighlight) const
       
  3045     {
       
  3046     _AKNTRACE_FUNC_ENTER;
       
  3047     DrawDefaultHighlight( aGc, aItemRect, aHighlight );
       
  3048     _AKNTRACE_FUNC_EXIT;
       
  3049     }
       
  3050 
       
  3051 void CFormattedCellListBoxData::DrawPopupHighlight(CWindowGc &aGc, const TRect &aItemRect, TBool aHighlight) const
       
  3052     {
       
  3053     _AKNTRACE_FUNC_ENTER;
       
  3054     DrawDefaultHighlight( aGc, aItemRect, aHighlight );
       
  3055     _AKNTRACE_FUNC_EXIT;
       
  3056     }
       
  3057 
       
  3058 void CFormattedCellListBoxData::DrawPopupFrame(CWindowGc &aGc) const
       
  3059     {
       
  3060     _AKNTRACE_FUNC_ENTER;
       
  3061     __ASSERT_DEBUG( iExtension, Panic( EAknPanicNullPointer ));
       
  3062     CCoeControl* control = Control();
       
  3063 
       
  3064     if ( control )
       
  3065         {
       
  3066         aGc.SetPenStyle( CGraphicsContext::ENullPen );
       
  3067 
       
  3068         TBool done = AknsDrawUtils::Background( AknsUtils::SkinInstance(), 
       
  3069                                                 iExtension->iPopupFrame, 
       
  3070                                                 control, 
       
  3071                                                 aGc, 
       
  3072                                                 control->Rect() );
       
  3073         
       
  3074         if ( !done )
       
  3075             {
       
  3076             aGc.Clear( control->Rect() );
       
  3077             }
       
  3078         }
       
  3079     _AKNTRACE_FUNC_EXIT;
       
  3080     }
       
  3081 
  3151 
  3082 void CFormattedCellListBoxData::SetWordWrappedSubcellIndices(
  3152 void CFormattedCellListBoxData::SetWordWrappedSubcellIndices(
  3083     TInt aFirstIndex,
  3153     TInt aFirstIndex,
  3084     TInt aSecondIndex )
  3154     TInt aSecondIndex )
  3085     {
  3155     {
  4105                                              TBool aHighlight,
  4175                                              TBool aHighlight,
  4106                                              const TColors& aColors ) const
  4176                                              const TColors& aColors ) const
  4107     {
  4177     {
  4108     _AKNTRACE_FUNC_ENTER;
  4178     _AKNTRACE_FUNC_ENTER;
  4109     __ASSERT_DEBUG( iExtension, Panic( EAknPanicNullPointer ));
  4179     __ASSERT_DEBUG( iExtension, Panic( EAknPanicNullPointer ));
  4110     
  4180     _AKNTRACE( "DrawFormattedOld: aText=%S, aItemRect=(%d,%d,%d,%d)",
  4111     TRect aRect(aItemRect);
  4181                aText, aItemRect.iTl.iX,
  4112     const TColors *subcellColors = &aColors;
  4182                aItemRect.iTl.iY,
  4113     
  4183                aItemRect.iBr.iX, 
  4114     TInt lastSubCell=LastSubCell();
  4184                aItemRect.iBr.iY );
  4115     if (lastSubCell==KErrNotFound)
  4185 
  4116         {
  4186     TRect itemRect( aItemRect );
  4117         aGc.UseFont(CEikonEnv::Static()->NormalFont());
  4187     
  4118         aGc.DrawText(TPtrC(),aRect,0); // use draw text so that don't need to change pen color/style
  4188     TInt lastSubCell = LastSubCell();
       
  4189     if ( lastSubCell == KErrNotFound )
       
  4190         {
       
  4191         aGc.UseFont( CEikonEnv::Static()->NormalFont() );
       
  4192         // Use draw text so that there's no need to change pen color/style.
       
  4193         aGc.DrawText( TPtrC(), itemRect, 0 );
  4119         aGc.DiscardFont(); // Release the font cache
  4194         aGc.DiscardFont(); // Release the font cache
  4120         _AKNTRACE_FUNC_EXIT;
  4195         _AKNTRACE_FUNC_EXIT;
  4121         return;
  4196         return;
  4122         }
  4197         }
       
  4198     
       
  4199     CEikListBox* listbox = static_cast<CEikListBox*>( Control() ); 
       
  4200     
       
  4201     if ( listbox->View()->ItemDrawer()->Flags()
       
  4202             & CListItemDrawer::EMarkingModeEnabled &&
       
  4203          iExtension->iMarkingIconArray && 
       
  4204          iExtension->iMarkingIconArray->Count() == 2 )
       
  4205         {
       
  4206         itemRect.iTl.iX +=
       
  4207             AknLayoutScalable_Avkon::list_double_graphic_pane_t1( 0 ).LayoutLine().il;
       
  4208 
       
  4209         TAknLayoutRect layoutRect;
       
  4210         layoutRect.LayoutRect(
       
  4211             aItemRect, 
       
  4212             AknLayoutScalable_Avkon::list_double_graphic_pane_g1( 0 ) );
       
  4213         TRect iconRect( layoutRect.Rect() );
       
  4214         
       
  4215         CGulIcon* icon = (*iExtension->iMarkingIconArray)[1]; // unchecked
       
  4216 
       
  4217         if ( listbox->View()->ItemIsSelected( 
       
  4218                 iExtension->iCurrentlyDrawnItemIndex ) )
       
  4219             {
       
  4220             icon = (*iExtension->iMarkingIconArray)[0];
       
  4221             }
       
  4222         
       
  4223         CFbsBitmap* bitmap = icon->Bitmap();
       
  4224 
       
  4225         if ( bitmap )
       
  4226             {
       
  4227             TSize size( bitmap->SizeInPixels() ); // set size if not already
       
  4228             TSize targetSize( layoutRect.Rect().Size() );
       
  4229             
       
  4230             if ( size.iWidth != targetSize.iWidth &&
       
  4231                  size.iHeight != targetSize.iHeight )
       
  4232                 {
       
  4233                 AknIconUtils::SetSize( bitmap, targetSize,
       
  4234                         EAspectRatioPreservedAndUnusedSpaceRemoved ); 
       
  4235                 }
       
  4236 
       
  4237             aGc.BitBltMasked( iconRect.iTl,
       
  4238                               bitmap,
       
  4239                               TRect( iconRect.Size() ),
       
  4240                               icon->Mask(),
       
  4241                               EFalse );
       
  4242             }
       
  4243         }
       
  4244     
       
  4245     const TColors* subcellColors = &aColors;
       
  4246     
  4123     const CFont* font=SubCellFont(0);
  4247     const CFont* font=SubCellFont(0);
  4124     if (font==NULL)
  4248     if (font==NULL)
  4125         {
  4249         {
  4126         font=CEikonEnv::Static()->NormalFont();
  4250         font=CEikonEnv::Static()->NormalFont();
  4127         }
  4251         }
  4128     
  4252     
  4129     TRect textRect=aRect;
  4253     TRect textRect( itemRect );
  4130     textRect.iBr.iX=aRect.iTl.iX;
  4254     textRect.iBr.iX = itemRect.iTl.iX;
  4131     TInt subcell=0;
  4255     TInt subcell=0;
  4132     TInt subcell2=0;
  4256     TInt subcell2=0;
  4133 
  4257 
  4134     TCellInfo textNull[30];
  4258     TCellInfo textNull[30];
  4135     TRect textShadowRect;           // For transparent list
  4259     TRect textShadowRect;           // For transparent list
  4235                     {
  4359                     {
  4236                     continue;
  4360                     continue;
  4237                     }
  4361                     }
  4238                 
  4362                 
  4239                 // This is called O(N^2) times - Do not put anything extra to it, it'll slow down drawing!
  4363                 // This is called O(N^2) times - Do not put anything extra to it, it'll slow down drawing!
  4240                 TRect bRect2 = TRect(SubCellPosition(subcell2),SubCellSize(subcell2));
  4364                 TRect bRect2( SubCellPosition( subcell2 ), SubCellSize( subcell2 ) );
  4241                 if (cRect.Intersects(bRect2) && bRect.Intersects(bRect2) && !istrans && !SubCellIsTransparent(subcell2)) 
  4365                 if (cRect.Intersects(bRect2) && bRect.Intersects(bRect2) && !istrans && !SubCellIsTransparent(subcell2)) 
  4242                     {
  4366                     {
  4243                     cRect.iBr.iX = bRect2.iTl.iX;
  4367                     cRect.iBr.iX = bRect2.iTl.iX;
  4244                     bRect.iBr.iX = bRect2.iTl.iX;
  4368                     bRect.iBr.iX = bRect2.iTl.iX;
  4245                     }
  4369                     }
  4253                     {
  4377                     {
  4254                     continue;
  4378                     continue;
  4255                     }
  4379                     }
  4256                 
  4380                 
  4257                 // This is called O(N^2) times - Do not put anything extra to it, it'll slow down drawing!
  4381                 // This is called O(N^2) times - Do not put anything extra to it, it'll slow down drawing!
  4258                 TRect bRect2 = TRect(SubCellPosition(subcell2),SubCellSize(subcell2));
  4382                 TRect bRect2( SubCellPosition( subcell2 ), SubCellSize( subcell2 ) );
  4259                 if (cRect.Intersects(bRect2) && bRect.Intersects(bRect2) && !istrans && !SubCellIsTransparent(subcell2)) 
  4383                 if (cRect.Intersects(bRect2) && bRect.Intersects(bRect2) && !istrans && !SubCellIsTransparent(subcell2)) 
  4260                     {
  4384                     {
  4261                     cRect.iTl.iX = bRect2.iBr.iX;
  4385                     cRect.iTl.iX = bRect2.iBr.iX;
  4262                     bRect.iTl.iX = bRect2.iBr.iX;
  4386                     bRect.iTl.iX = bRect2.iBr.iX;
  4263                     }
  4387                     }
  4311             continue;
  4435             continue;
  4312             }
  4436             }
  4313         
  4437         
  4314         if ( layoutMirrored ) 
  4438         if ( layoutMirrored ) 
  4315             {
  4439             {
  4316             TRect bRect = TRect(sc->iPosition,sc->iSize);
  4440             TRect bRect( sc->iPosition, sc->iSize );
  4317             TRect cRect2 = TRect(bRect.iTl+TSize(m.iLeft,m.iTop),bRect.Size()-TSize(m.iRight+m.iLeft,m.iBottom+m.iTop));
  4441             TRect cRect2( bRect.iTl + TSize( m.iLeft, m.iTop ),
       
  4442                           bRect.Size() - TSize( m.iRight + m.iLeft,
       
  4443                                                 m.iBottom + m.iTop ) );
  4318             
  4444             
  4319             TInt shift = (cRect2.Size() - sc->iRealTextSize).iWidth;
  4445             TInt shift = (cRect2.Size() - sc->iRealTextSize).iWidth;
  4320             cRect.iTl.iX += shift;
  4446             cRect.iTl.iX += shift;
  4321             cRect.iBr.iX += shift;
  4447             cRect.iBr.iX += shift;
  4322             }
  4448             }
  4323         
  4449         
  4324         textRect=TRect(aItemRect.iTl+cRect.iTl,cRect.Size());
  4450         textRect = TRect( itemRect.iTl + cRect.iTl, cRect.Size() );
  4325         
  4451         
  4326         if (sc->iUseSubCellColors)
  4452         if (sc->iUseSubCellColors)
  4327             {
  4453             {
  4328             subcellColors = &sc->iColors;
  4454             subcellColors = &sc->iColors;
  4329             }
  4455             }
  4449                 CAknMarqueeControl* marquee =
  4575                 CAknMarqueeControl* marquee =
  4450                     subcell == 1 ? iExtension->iMarquee :
  4576                     subcell == 1 ? iExtension->iMarquee :
  4451                                    iExtension->i2ndLineMarquee;
  4577                                    iExtension->i2ndLineMarquee;
  4452                 
  4578                 
  4453                 TBool marqueeDisabled =
  4579                 TBool marqueeDisabled =
  4454                         static_cast<CEikListBox*>(
  4580                     listbox->View()->ItemDrawer()->Flags() & CListItemDrawer::EDisableMarquee;
  4455                             Control() )->View()->ItemDrawer()->Flags() & CListItemDrawer::EDisableMarquee;
       
  4456                 
  4581                 
  4457                 if ( aHighlight && iExtension->IsMarqueeOn() && clipped && !marqueeDisabled )
  4582                 if ( aHighlight && iExtension->IsMarqueeOn() && clipped && !marqueeDisabled )
  4458                     {                    
  4583                     {                    
  4459                     // Let marquee know if it needs to do bidi conversion.
  4584                     // Let marquee know if it needs to do bidi conversion.
  4460                     marquee->UseLogicalToVisualConversion( clipped );
  4585                     marquee->UseLogicalToVisualConversion( clipped );