uifw/AvKon/src/akncontext.cpp
branchRCL_3
changeset 55 aecbbf00d063
parent 38 c52421ed5f07
child 56 d48ab3b357f1
--- a/uifw/AvKon/src/akncontext.cpp	Thu Aug 19 10:11:06 2010 +0300
+++ b/uifw/AvKon/src/akncontext.cpp	Tue Aug 31 15:28:30 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -11,8 +11,7 @@
 *
 * Contributors:
 *
-* Description: Context pane control used to display the application icon
-*              in status pane.
+* Description:
 *
 */
 
@@ -59,6 +58,7 @@
 public:
     CEikImage*  iContextImage;
     CEikImage*  iDefaultContextImage;
+    TInt        iCurrentColorScheme;
     };
 
 CAknContextPaneExtension::CAknContextPaneExtension()
@@ -91,20 +91,7 @@
 EXPORT_C void CAknContextPane::ConstructL()
     {
     CommonConstructL();
-
-    // Perf optimization: We don't set the default picture if the context
-    // pane is not in current status pane layout. The picture will be created
-    // in SizeChanged() if a valid size is set for context pane, but at
-    // the moment context pane isn't used in any of the supported Avkon
-    // status pane layouts.
-    CEikStatusPaneBase* statusPane = CEikStatusPaneBase::Current();
-    if ( statusPane &&
-         statusPane->PaneCapabilities(
-             TUid::Uid( EEikStatusPaneUidContext ) ).IsInCurrentLayout() )
-        {
-        // Trapped because of Java midlet issues.
-        TRAP_IGNORE( SetPictureToDefaultL() );
-        }
+    TRAP_IGNORE(SetPictureToDefaultL()); // Trapped because of Java midlet issues
     }
 
 
@@ -319,14 +306,8 @@
 
 EXPORT_C void CAknContextPane::SizeChanged()
     {
-    if ( !Rect().IsEmpty() ) // Fix for Parent getting parent relative data. 
+    if (Rect() != TRect(0,0,0,0)) // Fix for Parent getting parent relative data. 
         {
-        if ( !iExtension->iContextImage )
-            {
-            // Create the default picture if it doesn't exist yet. 
-            TRAP_IGNORE( SetPictureToDefaultL() );
-            }
-
         if (iExtension->iContextImage && iExtension->iContextImage->Bitmap()) 
             {
             TAknLayoutRect layoutRect;
@@ -381,9 +362,8 @@
 
 EXPORT_C void CAknContextPane::HandleResourceChange( TInt aType ) 
     {
-    if ( aType==KEikDynamicLayoutVariantSwitch )
+    if ( aType == KEikColorResourceChange || aType==KEikDynamicLayoutVariantSwitch )
         {
-        SizeChanged();
         DrawDeferred();
         }
     else if( aType == KAknsMessageSkinChange )
@@ -429,63 +409,76 @@
     {
     CWindowGc& gc=SystemGc();
 
-    TRect rect( Rect() );
+    // screen
+    TRect screenRect = iAvkonAppUi->ApplicationRect();
+    
+    //TAknWindowLineLayout screenLayout = AknLayout::screen();
+    //TRect screenRect = screenLayout.Rect();
+
+
+    // app window
+    TAknWindowLineLayout applicationWindowLayout =
+        AknLayout::application_window(screenRect);
+    
+    TAknLayoutRect applicationWindowLayoutRect;
+    applicationWindowLayoutRect.LayoutRect(screenRect, applicationWindowLayout);
+    TRect applicationWindowRect = applicationWindowLayoutRect.Rect(); 
+
+    // statuspane
+    TAknWindowLineLayout statusPaneLayout = 
+        AknLayout::status_pane(applicationWindowRect, 0);
+
+    TAknLayoutRect statusPaneLayoutRect;
+    statusPaneLayoutRect.LayoutRect(applicationWindowRect, statusPaneLayout);
+    TRect statusPaneRect = statusPaneLayoutRect.Rect(); 
+
+    // context pane
+    TAknWindowLineLayout contextPaneLayout = 
+        AknLayout::context_pane(statusPaneRect, 0);
+    
+    TAknLayoutRect contextPaneLayoutRect;
+    contextPaneLayoutRect.LayoutRect(statusPaneRect, contextPaneLayout);
+    TRect contextPaneRect = contextPaneLayoutRect.Rect(); 
+
+    TAknWindowLineLayout naviPaneGraphicsLayout = 
+        AknLayout::Status_pane_elements_Line_1();
+
+    TAknWindowLineLayout naviWipeGraphicsLayout = 
+        AknLayout::Status_pane_elements_Line_2();
+
+    TAknLayoutRect naviPaneGraphicsLayoutRect;
+    naviPaneGraphicsLayoutRect.LayoutRect(statusPaneRect, naviPaneGraphicsLayout);
+    TRect naviPaneGraphicsRect = naviPaneGraphicsLayoutRect.Rect(); 
+
+    TAknLayoutRect naviWipeGraphicsLayoutRect;
+    naviWipeGraphicsLayoutRect.LayoutRect(statusPaneRect, naviWipeGraphicsLayout);
+    TRect naviWipeGraphicsRect = naviWipeGraphicsLayoutRect.Rect(); 
+
+    TRect rect(Rect());
+
+    TRect barRect = contextPaneRect;
+    if (barRect.Intersects(naviPaneGraphicsRect))
+        {
+        barRect.Intersection(naviPaneGraphicsRect);
+        
+        // calculate new origo, relative to context pane.
+        barRect.iTl.iX -= contextPaneRect.iTl.iX;
+        barRect.iTl.iY -= contextPaneRect.iTl.iY;
+        barRect.iBr.iX -= contextPaneRect.iTl.iX;
+        barRect.iBr.iY -= contextPaneRect.iTl.iY;
+        }
+    else
+        {
+        barRect = TRect(0,0,0,0);
+        }
+    
+
     MAknsSkinInstance* skin = AknsUtils::SkinInstance();
     MAknsControlContext* cc = AknsDrawUtils::ControlContext(this);
 
-    // Solid or wipe comes from background
-    if ( !AknsDrawUtils::Background( skin, cc, this, gc, rect ) )
+        // Solid or wipe comes from background
+    if( !AknsDrawUtils::Background( skin, cc, this, gc, rect ) )
         {
-        // screen
-        TRect screenRect = iAvkonAppUi->ApplicationRect();
-    
-        // app window
-        TAknWindowLineLayout applicationWindowLayout =
-            AknLayout::application_window(screenRect);
-        
-        TAknLayoutRect applicationWindowLayoutRect;
-        applicationWindowLayoutRect.LayoutRect(screenRect, applicationWindowLayout);
-        TRect applicationWindowRect = applicationWindowLayoutRect.Rect(); 
-    
-        // statuspane
-        TAknWindowLineLayout statusPaneLayout = 
-            AknLayout::status_pane(applicationWindowRect, 0);
-    
-        TAknLayoutRect statusPaneLayoutRect;
-        statusPaneLayoutRect.LayoutRect(applicationWindowRect, statusPaneLayout);
-        TRect statusPaneRect = statusPaneLayoutRect.Rect(); 
-    
-        // context pane
-        TAknWindowLineLayout contextPaneLayout = 
-            AknLayout::context_pane(statusPaneRect, 0);
-        
-        TAknLayoutRect contextPaneLayoutRect;
-        contextPaneLayoutRect.LayoutRect(statusPaneRect, contextPaneLayout);
-        TRect contextPaneRect = contextPaneLayoutRect.Rect(); 
-    
-        TAknWindowLineLayout naviPaneGraphicsLayout = 
-            AknLayout::Status_pane_elements_Line_1();
-    
-        TAknLayoutRect naviPaneGraphicsLayoutRect;
-        naviPaneGraphicsLayoutRect.LayoutRect(statusPaneRect, naviPaneGraphicsLayout);
-        TRect naviPaneGraphicsRect = naviPaneGraphicsLayoutRect.Rect();
-
-        TRect barRect( contextPaneRect );
-        if ( barRect.Intersects( naviPaneGraphicsRect ) )
-            {
-            barRect.Intersection( naviPaneGraphicsRect );
-            
-            // calculate new origo, relative to context pane.
-            barRect.iTl.iX -= contextPaneRect.iTl.iX;
-            barRect.iTl.iY -= contextPaneRect.iTl.iY;
-            barRect.iBr.iX -= contextPaneRect.iTl.iX;
-            barRect.iBr.iY -= contextPaneRect.iTl.iY;
-            }
-        else
-            {
-            barRect = TRect(0,0,0,0);
-            }
-
         // Default drawing if skinning is not available
         gc.Clear(rect); 
         gc.SetPenStyle(CGraphicsContext::ENullPen);
@@ -540,19 +533,7 @@
         }
     else
         {
-        // Perf optimization: We don't set the default picture if the context
-        // pane is not in current status pane layout. The picture will be
-        // created in SizeChanged() if a valid size is set for context pane,
-        // but at the moment context pane isn't used in any of the supported
-        // Avkon status pane layouts.
-        CEikStatusPaneBase* statusPane = CEikStatusPaneBase::Current();
-        if ( statusPane &&
-             statusPane->PaneCapabilities(
-                 TUid::Uid( EEikStatusPaneUidContext ) ).IsInCurrentLayout() )
-            {
-            // Trapped because of Java midlet issues.
-            TRAP_IGNORE( SetPictureToDefaultL() );
-            }
+        TRAP_IGNORE(SetPictureToDefaultL()); // Trapped because of Java midlet issues
         }
     }