textinput/peninputcommonctrls/src/peninputselectionlist/peninputscrollablelist.cpp
branchRCL_3
changeset 9 e6a39382bb9c
parent 0 eb1f2e154e89
child 11 c8fb4cf7b3ae
--- a/textinput/peninputcommonctrls/src/peninputselectionlist/peninputscrollablelist.cpp	Wed Apr 14 16:18:34 2010 +0300
+++ b/textinput/peninputcommonctrls/src/peninputselectionlist/peninputscrollablelist.cpp	Tue Apr 27 16:59:43 2010 +0300
@@ -121,7 +121,7 @@
         {
     	if (bmpMskId != KInvalidBmp)
     		{
-		    AknsUtils::CreateColorIconL( AknsUtils::SkinInstance(),
+		    AknsUtils::CreateColorIconL( UiLayout()->SkinInstance(),
 						         id,
 						         KAknsIIDQsnIconColors,
 						         EAknsCIQsnIconColorsCG30,
@@ -134,7 +134,7 @@
             }
         else
             {
-    	    AknsUtils::CreateIconL(AknsUtils::SkinInstance(),
+    	    AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
     	                           id,
     	                           iSeperationBmp,
     	                           bmpFileName,
@@ -199,7 +199,7 @@
     gc->Activate(BitmapDevice());
     gc->Clear(rect);
 
-	AknsDrawUtils::DrawFrame(AknsUtils::SkinInstance(), 
+	AknsDrawUtils::DrawFrame(UiLayout()->SkinInstance(), 
 	                         *gc, 
 	                         rect, 
 	                         innerRect,
@@ -241,7 +241,7 @@
 
 	    if ( AknsUtils::AvkonSkinEnabled() )
 	        {
-	        AknsUtils::GetCachedColor( AknsUtils::SkinInstance(),
+	        AknsUtils::GetCachedColor( UiLayout()->SkinInstance(),
 	                               color, KAknsIIDQsnTextColors, clrIndex );
 	        }
 
@@ -346,15 +346,28 @@
 
 EXPORT_C void CFepLayoutScrollableList::CalculateItemWidth()
     {
+	TBuf<KDisplayTextLen> buf;
+	CFont::TMeasureTextInput::TFlags flg = CFont::TMeasureTextInput::EFVisualOrder;
+	if(iAlign == CGraphicsContext::ERight)
+		flg = CFont::TMeasureTextInput::EFVisualOrderRightToLeft;
+	
+	const CFont* font = iFont;
+	if(iTextLineSet)
+		{
+		TAknLayoutText textLayout;
+		textLayout.LayoutText(TRect(0, 0, 1, 1), iTextLine);
+		font = textLayout.Font();
+		}
+	ASSERT(font);
+	
     iItemSize.iWidth = iInitItemWidth;
     const RPointerArray<SItem>& allItems = ItemArray();
-    for( TInt i = 0; i < allItems.Count() ; ++i )
+    for(TInt i = 0; i < allItems.Count(); ++i)
         {
-        TInt itemWidth = iFont->TextWidthInPixels( allItems[i]->iText );
-        if( itemWidth > iItemSize.iWidth )
-            {
+		TInt itemWidth = AknBidiTextUtils::MeasureTextBoundsWidth(
+				*font, allItems[i]->iText, flg);
+        if(itemWidth > iItemSize.iWidth)
             iItemSize.iWidth = itemWidth;
-            }
         }
      
     TPixelsTwipsAndRotation ptScreenSize;             
@@ -431,7 +444,7 @@
         gc->Activate(BitmapDevice());   
 
 	      // draw frame
-        MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+        MAknsSkinInstance* skin = UiLayout()->SkinInstance();
 	    TRect innerRect = itemRect;
 	    innerRect.Shrink(7, 7);
         AknsDrawUtils::DrawFrame(skin, 
@@ -441,61 +454,45 @@
                                  aItemActive ? iItemActiveFrId : iItemFrId,
                                  KAknsIIDDefault); 
         }
-
+    
+    CFepLayoutChoiceList::SItem* item = ItemArray()[aItemIndex];
+    const CFont* font = iFont;
+    TRgb color = iFontColor;
+    TInt baseLine = iBaselineOffset;
+    
     // draw text
     if (iTextLineSet)
         {
-        gc->SetBrushStyle(CGraphicsContext::ENullBrush);
-        gc->SetBrushColor(KRgbBlack); 
-	    TRgb color( KRgbBlack );  // sane default for nonskinned case
-               
         TAknLayoutText textLayout;
-        textLayout.LayoutText(itemRect, 
-                              iTextLine);
+        textLayout.LayoutText(itemRect, iTextLine);
+        
 	    TAknsQsnTextColorsIndex clrIndex;
 	    clrIndex = isFocus ? EAknsCIQsnTextColorsCG10 : EAknsCIQsnTextColorsCG20;
 
-	    if ( AknsUtils::AvkonSkinEnabled() )
-	        {
-	        AknsUtils::GetCachedColor( AknsUtils::SkinInstance(),
+	    color = KRgbBlack;
+	    if (AknsUtils::AvkonSkinEnabled())
+	        AknsUtils::GetCachedColor( UiLayout()->SkinInstance(),
 	                               color, KAknsIIDQsnTextColors, clrIndex );
-	        }
-
-	    textLayout.DrawText(*gc, ItemArray()[aItemIndex]->iText, ETrue, color);
+	    font = textLayout.Font();
+	    itemRect = textLayout.TextRect();
+	    baseLine = itemRect.Height() / 2 + font->AscentInPixels() / 2;
         }
-    else if (iFont)
-        {
-        gc->UseFont(iFont);
-
-        gc->SetBrushStyle(CGraphicsContext::ENullBrush);
-        gc->SetBrushColor(KRgbBlack);
-        gc->SetPenColor(iFontColor);
-        gc->SetPenStyle(CGraphicsContext::ESolidPen);
-        gc->SetPenSize(PenSize());
 
-        if (iFont->TextWidthInPixels(ItemArray()[aItemIndex]->iText) > itemRect.Width())
-            {
-            TBuf<KDisplayTextLen> buf;
-            AknBidiTextUtils::ConvertToVisualAndClip(ItemArray()[aItemIndex]->iText,
-                                                     buf,
-                                                     *iFont,
-                                                     itemRect.Width(),
-                                                     itemRect.Width());
-            gc->DrawText(buf, 
-                         itemRect,
-                         iBaselineOffset,
-                         CGraphicsContext::ELeft);  
-            }
-        else
-            {
-            gc->DrawText(ItemArray()[aItemIndex]->iText,
-                         itemRect,
-                         iBaselineOffset,
-                         CGraphicsContext::ELeft);
-            }
+    if(font == NULL)
+    	return;
+    
+	gc->UseFont(font);
+	gc->SetBrushStyle(CGraphicsContext::ENullBrush);
+	gc->SetBrushColor(KRgbBlack);
+	gc->SetPenColor(color);
+	gc->SetPenStyle(CGraphicsContext::ESolidPen);
+	gc->SetPenSize(PenSize());
 
-        gc->DiscardFont();
-        }    
+	TBuf<KDisplayTextLen> buf;
+	AknBidiTextUtils::ConvertToVisualAndClip(item->iText, buf, *iFont,
+										 itemRect.Width(), itemRect.Width());
+	gc->DrawText(buf, itemRect, baseLine, iAlign);
+	gc->DiscardFont();
     }
 
 EXPORT_C void CFepLayoutScrollableList::ConstructL()
@@ -606,7 +603,7 @@
             }
         }
     }
-    
+
 EXPORT_C void CFepLayoutScrollableList::UpdatePageInfoL( TInt aCurrentPage, TInt aTotalPage )
 	{
 	if( iPageInfoResID == 0 )