diff -r fcdfafb36fe7 -r aecbbf00d063 uifw/AvKon/src/akncontext.cpp --- 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 } }