--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/src/AknTabGrpGraphics.cpp Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,3631 @@
+/*
+* Copyright (c) 2004-2008 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"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Class for drawing tab graphics.
+*
+*/
+
+
+// SYSTEM INCLUDE FILES
+#include <avkon.mbg>
+#include <fbs.h>
+#include <bitdev.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <AknIconUtils.h>
+#include <AknsUtils.h>
+#include <layoutmetadata.cdl.h>
+#include <akniconconfig.h>
+
+// USER INCLUDE FILES
+#include "AknTabGrpGraphics.h"
+#include "AknUtils.h"
+#include "aknappui.h"
+#include "AknStatuspaneUtils.h"
+#include "AknDebug.h"
+
+// CONSTANTS
+
+/**
+* These are the fading parameters used in drawing the "hidden" tabs.
+* The hidden tabs are drawn with faded graphics context to make them
+* appear slightly lighter in color than the actual visible tabs and thus to
+* make them stand out from them. These values work for most of the themes
+* but it would be better if these were defined in the skin content.
+*
+* Currently the fading is not used as custom fading parameters are not
+* supported by all display drivers (parameters are not used if
+* SYMBIAN_USE_FAST_FADING is defined).
+*/
+//const TUint8 KHiddenFadeBlackMap( 20 );
+//const TUint8 KHiddenFadeWhiteMap( 255 );
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CAknTabGroupGraphics::CAknTabGroupGraphics
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CAknTabGroupGraphics::CAknTabGroupGraphics()
+ {
+ iTabGroupBackgroundAvailable = ETrue;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknTabGroupGraphics::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CAknTabGroupGraphics::ConstructL()
+ {
+ TRAPD( err, LoadTabGraphicsL() );
+ if ( err != KErrNone )
+ {
+ iTabGroupBackgroundAvailable = EFalse;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknTabGroupGraphics::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CAknTabGroupGraphics* CAknTabGroupGraphics::NewL()
+ {
+ CAknTabGroupGraphics* self =
+ new (ELeave) CAknTabGroupGraphics();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CAknTabGroupGraphics::~CAknTabGroupGraphics()
+ {
+ delete iActiveTabLeft;
+ delete iActiveTabLeftMask;
+ delete iActiveTabMiddle;
+ delete iActiveTabMiddleMask;
+ delete iActiveTabRight;
+ delete iActiveTabRightMask;
+
+ delete iPassiveTabLeft;
+ delete iPassiveTabLeftMask;
+ delete iPassiveTabMiddle;
+ delete iPassiveTabMiddleMask;
+ delete iPassiveTabRight;
+ delete iPassiveTabRightMask;
+ }
+
+void CAknTabGroupGraphics::SetTabGroupBackgroundParent( TRect aParent )
+ {
+ iTabGroupBackgroundParent = aParent;
+ }
+
+#if 0
+
+CAknTabGroupGraphics::SAknTabGroupBackground CAknTabGroupGraphics::CreateTabGroupBackgroundL( TInt aAvkonBitmapId)
+ {
+ CAknTabGroupGraphics::SAknTabGroupBackground emptyTabGroupBackGround;
+
+ if ( !TabGroupBackgroundAvailable() )
+ {
+ return emptyTabGroupBackGround;
+ }
+
+ TBool longTabs = EFalse;
+ TInt numberOfTabs = 0;
+ TInt activeTab = 0;
+
+ switch ( aAvkonBitmapId )
+ {
+ case EMbmAvkonQgn_graf_tab_21:
+ {
+ longTabs = EFalse;
+ numberOfTabs = 2;
+ activeTab = 1;
+ break;
+ }
+ case EMbmAvkonQgn_graf_tab_22:
+ {
+ longTabs = EFalse;
+ numberOfTabs = 2;
+ activeTab = 2;
+ break;
+ }
+ case EMbmAvkonQgn_graf_tab_31:
+ {
+ longTabs = EFalse;
+ numberOfTabs = 3;
+ activeTab = 1;
+ break;
+ }
+ case EMbmAvkonQgn_graf_tab_32:
+ {
+ longTabs = EFalse;
+ numberOfTabs = 3;
+ activeTab = 2;
+ break;
+ }
+ case EMbmAvkonQgn_graf_tab_33:
+ {
+ longTabs = EFalse;
+ numberOfTabs = 3;
+ activeTab = 3;
+ break;
+ }
+ case EMbmAvkonQgn_graf_tab_41:
+ {
+ longTabs = EFalse;
+ numberOfTabs = 4;
+ activeTab = 1;
+ break;
+ }
+ case EMbmAvkonQgn_graf_tab_42:
+ {
+ longTabs = EFalse;
+ numberOfTabs = 4;
+ activeTab = 2;
+ break;
+ }
+ case EMbmAvkonQgn_graf_tab_43:
+ {
+ longTabs = EFalse;
+ numberOfTabs = 4;
+ activeTab = 3;
+ break;
+ }
+ case EMbmAvkonQgn_graf_tab_44:
+ {
+ longTabs = EFalse;
+ numberOfTabs = 4;
+ activeTab = 4;
+ break;
+ }
+ case EMbmAvkonQgn_graf_tab_long_21:
+ {
+ longTabs = ETrue;
+ numberOfTabs = 2;
+ activeTab = 1;
+ break;
+ }
+ case EMbmAvkonQgn_graf_tab_long_22:
+ {
+ longTabs = ETrue;
+ numberOfTabs = 2;
+ activeTab = 2;
+ break;
+ }
+ case EMbmAvkonQgn_graf_tab_long_31:
+ {
+ longTabs = ETrue;
+ numberOfTabs = 3;
+ activeTab = 1;
+ break;
+ }
+ case EMbmAvkonQgn_graf_tab_long_32:
+ {
+ longTabs = ETrue;
+ numberOfTabs = 3;
+ activeTab = 2;
+ break;
+ }
+ case EMbmAvkonQgn_graf_tab_long_33:
+ {
+ longTabs = ETrue;
+ numberOfTabs = 3;
+ activeTab = 3;
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+
+ return CreateTabGroupBackgroundL( longTabs, numberOfTabs, activeTab );
+ }
+
+CAknTabGroupGraphics::SAknTabGroupBackground CAknTabGroupGraphics::CreateTabGroupBackgroundL(
+ TBool aLongTabs, TInt aNumberOfTabs, TInt aActiveTab )
+ {
+ CAknTabGroupGraphics::SAknTabGroupBackground tabGroupBackGround;
+ CAknTabGroupGraphics::SAknTabGroupBackgroundLayout tabGroupBackGroundLayout;
+
+ AknIconConfig::TPreferredDisplayMode mode;
+ AknIconConfig::PreferredDisplayMode( mode,
+ AknIconConfig::EImageTypeOffscreen );
+
+ TDisplayMode bitmapDisplayMode = mode.iBitmapMode;
+ TDisplayMode maskDisplayMode = EGray256;
+ TSize size( iTabGroupBackgroundParent.Size() );
+
+ // BITMAP
+ tabGroupBackGround.iBitmap = new (ELeave) CFbsBitmap();
+ CleanupStack::PushL( tabGroupBackGround.iBitmap );
+ User::LeaveIfError( tabGroupBackGround.iBitmap->Create( size, bitmapDisplayMode ) );
+ CFbsBitmapDevice* bitmapDevice = CFbsBitmapDevice::NewL( tabGroupBackGround.iBitmap );
+ CleanupStack::PushL( bitmapDevice );
+ CFbsBitGc* bitmapGc;
+ User::LeaveIfError( bitmapDevice->CreateContext( bitmapGc ) );
+
+ // Clear background first...
+ bitmapGc->SetBrushColor( KRgbBlack );
+ bitmapGc->SetBrushStyle( CGraphicsContext::ESolidBrush );
+ bitmapGc->DrawRect( iTabGroupBackgroundParent );
+
+ bitmapGc->SetBrushStyle( CGraphicsContext::ENullBrush );
+ DrawTabGroupBackgroundL( CAknTabGroupGraphics::ENormal,
+ aLongTabs,
+ aNumberOfTabs,
+ aActiveTab,
+ bitmapGc,
+ tabGroupBackGroundLayout,
+ ENone );
+ delete bitmapGc;
+
+ CleanupStack::Pop( 2, tabGroupBackGround.iBitmap );
+ delete bitmapDevice;
+ bitmapGc = NULL;
+ bitmapDevice = NULL;
+
+ // MASK
+ tabGroupBackGround.iMask = new (ELeave) CFbsBitmap();
+ CleanupStack::PushL( tabGroupBackGround.iMask );
+ User::LeaveIfError( tabGroupBackGround.iMask->Create( size, maskDisplayMode ) );
+ bitmapDevice = CFbsBitmapDevice::NewL( tabGroupBackGround.iMask );
+ CleanupStack::PushL( bitmapDevice );
+ User::LeaveIfError( bitmapDevice->CreateContext( bitmapGc ) );
+
+ // Clear background first...
+ bitmapGc->SetBrushStyle( CGraphicsContext::ESolidBrush );
+ if ( maskDisplayMode == EGray256 )
+ {
+ bitmapGc->SetBrushColor( KRgbBlack );
+ }
+ else
+ {
+ bitmapGc->SetBrushColor( KRgbWhite );
+ }
+ bitmapGc->DrawRect( iTabGroupBackgroundParent );
+
+ bitmapGc->SetBrushStyle( CGraphicsContext::ENullBrush );
+ DrawTabGroupBackgroundL( CAknTabGroupGraphics::EMaskOnly,
+ aLongTabs,
+ aNumberOfTabs,
+ aActiveTab,
+ bitmapGc,
+ tabGroupBackGroundLayout,
+ ENone);
+ delete bitmapGc;
+
+ CleanupStack::Pop( 2, tabGroupBackGround.iMask );
+ delete bitmapDevice;
+
+ return tabGroupBackGround;
+ }
+
+#endif
+
+
+// ---------------------------------------------------------------------------
+// Draws normal tab background from given parameters.
+// ---------------------------------------------------------------------------
+//
+void CAknTabGroupGraphics::DrawTabGroupBackgroundL(
+ TTabDrawMode aTabDrawMode,
+ TBool aLongTabs,
+ TInt aNumberOfTabs,
+ TInt aActiveTab,
+ CBitmapContext* aGc,
+ SAknTabGroupBackgroundLayout& aLayout,
+ TTabsHidden aTabsHidden,
+ TTabAnimationType aAnimation ) const
+ {
+ switch ( aNumberOfTabs )
+ {
+ case 2:
+ {
+ if ( aLongTabs )
+ {
+ DrawTwoLongTabBackground( aTabDrawMode,
+ aActiveTab,
+ aGc,
+ aLayout );
+ }
+ else
+ {
+ DrawTwoTabBackground( aTabDrawMode,
+ aActiveTab,
+ aGc,
+ aLayout );
+ }
+ break;
+ }
+ case 3:
+ {
+ if ( aLongTabs )
+ {
+ DrawThreeLongTabBackground( aTabDrawMode,
+ aActiveTab,
+ aGc,
+ aLayout );
+ }
+ else
+ {
+ DrawThreeTabBackground( aTabDrawMode,
+ aActiveTab,
+ aGc,
+ aLayout,
+ aTabsHidden,
+ aAnimation );
+ }
+ break;
+ }
+ case 4:
+ {
+ DrawFourTabBackground( aTabDrawMode,
+ aActiveTab,
+ aGc,
+ aLayout );
+ break;
+ }
+ default:
+ {
+#ifdef AVKON_RDEBUG_ERROR
+ RDebug::Print( _L("CAknTabGroupGraphics: Unknown tab layout !") );
+#endif
+ }
+ }
+
+ if ( !aLayout.iUse )
+ {
+ aLayout.iFirstTab.iActive = EFalse;
+ aLayout.iSecondTab.iActive = EFalse;
+ aLayout.iThirdTab.iActive = EFalse;
+ aLayout.iFourthTab.iActive = EFalse;
+
+ if ( aActiveTab == 1 )
+ {
+ aLayout.iFirstTab.iActive = ETrue;
+ }
+ else if ( aActiveTab == 2 )
+ {
+ aLayout.iSecondTab.iActive = ETrue;
+ }
+ else if ( aActiveTab == 3 )
+ {
+ aLayout.iThirdTab.iActive = ETrue;
+ }
+ else if ( aActiveTab == 4 )
+ {
+ aLayout.iFourthTab.iActive = ETrue;
+ }
+ }
+ }
+
+void CAknTabGroupGraphics::DrawTabGroupNarrowBackgroundL(
+ TTabDrawMode aTabDrawMode,
+ TBool aLongTabs,
+ TInt aNumberOfTabs,
+ TInt aActiveTab,
+ CBitmapContext* aGc,
+ SAknTabGroupBackgroundLayout& aLayout ) const
+ {
+ switch ( aNumberOfTabs )
+ {
+ case 2:
+ {
+ if ( aLongTabs )
+ {
+ if ( !aLayout.iUse )
+ {
+ aLayout = TwoLongTabNarrowBackground( aActiveTab );
+ }
+ aLayout.iUse = ETrue;
+ DrawTwoLongTabNarrowBackground( aTabDrawMode,
+ aActiveTab,
+ aGc,
+ aLayout );
+ }
+ else
+ {
+ if ( !aLayout.iUse )
+ {
+ aLayout = TwoTabNarrowBackground( aActiveTab );
+ }
+ aLayout.iUse = ETrue;
+ DrawTwoTabNarrowBackground( aTabDrawMode,
+ aActiveTab,
+ aGc,
+ aLayout );
+ }
+ break;
+ }
+ case 3:
+ {
+ if ( aLongTabs )
+ {
+ if ( !aLayout.iUse )
+ {
+ aLayout = ThreeLongTabNarrowBackground( aActiveTab );
+ }
+ aLayout.iUse = ETrue;
+ DrawThreeLongTabNarrowBackground( aTabDrawMode,
+ aActiveTab,
+ aGc,
+ aLayout );
+ }
+ else
+ {
+ if ( !aLayout.iUse )
+ {
+ aLayout = ThreeTabNarrowBackground( aActiveTab );
+ }
+ aLayout.iUse = ETrue;
+ DrawThreeTabNarrowBackground( aTabDrawMode,
+ aActiveTab,
+ aGc,
+ aLayout );
+ }
+ break;
+ }
+ case 4:
+ {
+ if ( !aLayout.iUse )
+ {
+ aLayout = FourTabNarrowBackground( aActiveTab );
+ }
+ aLayout.iUse = ETrue;
+ DrawFourTabNarrowBackground( aTabDrawMode,
+ aActiveTab,
+ aGc,
+ aLayout );
+ break;
+ }
+ default:
+ {
+#ifdef AVKON_RDEBUG_ERROR
+ RDebug::Print( _L("CAknTabGroupGraphics: Unknown tab layout !") );
+#endif
+ }
+ }
+
+ if ( !aLayout.iUse )
+ {
+ aLayout.iFirstTab.iActive = EFalse;
+ aLayout.iSecondTab.iActive = EFalse;
+ aLayout.iThirdTab.iActive = EFalse;
+ aLayout.iFourthTab.iActive = EFalse;
+
+ if ( aActiveTab == 1 )
+ {
+ aLayout.iFirstTab.iActive = ETrue;
+ }
+ else if ( aActiveTab == 2 )
+ {
+ aLayout.iSecondTab.iActive = ETrue;
+ }
+ else if ( aActiveTab == 3 )
+ {
+ aLayout.iThirdTab.iActive = ETrue;
+ }
+ else if ( aActiveTab == 4 )
+ {
+ aLayout.iFourthTab.iActive = ETrue;
+ }
+ }
+ }
+
+TBool CAknTabGroupGraphics::TabClickedL( TInt aTabComponent,
+ const TRect& aTabRect,
+ const TPoint& aPoint,
+ TBool aIsActiveTab )
+ {
+ CFbsBitmap* mask = NULL;
+
+ switch ( aTabComponent )
+ {
+ case ELeft:
+ if ( aIsActiveTab )
+ {
+ mask = iActiveTabLeftMask;
+ }
+ else
+ {
+ mask = iPassiveTabLeftMask;
+ }
+ break;
+
+ case EMiddle:
+ if ( aIsActiveTab )
+ {
+ mask = iActiveTabMiddleMask;
+ }
+ else
+ {
+ mask = iPassiveTabMiddleMask;
+ }
+ break;
+
+ case ERight:
+ if ( aIsActiveTab )
+ {
+ mask = iActiveTabRightMask;
+ }
+ else
+ {
+ mask = iPassiveTabRightMask;
+ }
+ break;
+
+ default:
+ User::Leave( KErrArgument );
+ break;
+ }
+
+ // scale coordinates to bitmap origin
+ TPoint point( aPoint.iX - aTabRect.iTl.iX, aPoint.iY - aTabRect.iTl.iY );
+
+ if ( AknStatuspaneUtils::StaconPaneActive() )
+ {
+ point.iY = aTabRect.iBr.iY - aPoint.iY;
+ }
+
+ TBool retval = EFalse;
+ TRgb pixel;
+ // Note that mask must be in uncomressed state here.
+ // That is taken care of in CAknTabGroupGraphics::LoadTabGraphicsL().
+ mask->GetPixel( pixel, point );
+
+ if ( pixel != KRgbBlack )
+ {
+ retval = ETrue;
+ }
+
+ return retval;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Gets the whole tab rectangle in relation to the tab group container.
+// ---------------------------------------------------------------------------
+//
+TRect CAknTabGroupGraphics::TabRectFromLayout(
+ const SAknTabLayout& aLayout )
+ {
+ TRect tabRect( aLayout.iLeft );
+ tabRect.BoundingRect( aLayout.iMiddle );
+ tabRect.BoundingRect( aLayout.iRight );
+ return tabRect;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Adjusts the tab part rectangles by the specified x and y offsets.
+// ---------------------------------------------------------------------------
+//
+void CAknTabGroupGraphics::AdjustTabLayoutRect(
+ SAknTabLayout& aLayout, TInt aXOffset, TInt aYOffset ) const
+ {
+ aLayout.iLeft.Move( aXOffset, aYOffset );
+ aLayout.iRight.Move( aXOffset, aYOffset );
+ aLayout.iMiddle.iTl.iX = aLayout.iLeft.iBr.iX;
+ aLayout.iMiddle.iBr.iX = aLayout.iRight.iTl.iX;
+ }
+
+CAknTabGroupGraphics::SAknTabGroupBackgroundLayout CAknTabGroupGraphics::TwoTabBackground( TInt aActiveTab ) const
+ {
+ SAknTabGroupBackgroundLayout aLayout;
+
+ TRect parentRect( iTabGroupBackgroundParent );
+
+ // navi tabs 2 pane
+ TRect naviTabsTwoPaneRect(
+ RectFromLayout( parentRect,
+ AknLayoutScalable_Avkon::navi_tabs_2_pane() ) );
+
+ TInt tabsActivePassivePaneOption = 0;
+ if ( aActiveTab != 1 )
+ {
+ tabsActivePassivePaneOption = 1;
+ }
+
+ // Tabs two passive pane
+ TRect tabsTwoPassivePaneRect(
+ RectFromLayout( naviTabsTwoPaneRect,
+ AknLayoutScalable_Avkon::tabs_2_passive_pane(
+ tabsActivePassivePaneOption ) ) );
+
+ // Tabs two active pane
+ TRect tabsTwoActivePaneRect(
+ RectFromLayout( naviTabsTwoPaneRect,
+ AknLayoutScalable_Avkon::tabs_2_active_pane(
+ tabsActivePassivePaneOption ) ) );
+
+ // bg active tab pane
+ TRect tabsBackgroundActivePaneRect(
+ RectFromLayout( tabsTwoActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_cp1( 0 ) ) );
+
+ // bg passive tab pane
+ TRect tabsBackgroundFirstPassivePaneRect(
+ RectFromLayout( tabsTwoPassivePaneRect,
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_cp1( 0 ) ) );
+
+ // Active tab left
+ TRect activeTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g1_cp1() ) );
+
+ // Active tab middle
+ TRect activeTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g2_cp1() ) );
+
+ // Active tab right
+ TRect activeTabRightPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g3_cp1() ) );
+
+ // First passive tab left
+ TRect firstPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g1_cp1() ) );
+
+ // First passive tab middle
+ TRect firstPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g2_cp1() ) );
+
+ // First passive tab right
+ TRect firstPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g3_cp1() ) );
+
+ if ( aActiveTab == 1 )
+ {
+ aLayout.iFirstTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = activeTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = firstPassiveTabRightPaneRect;
+ }
+ else
+ {
+ aLayout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = activeTabRightPaneRect;
+ }
+
+ TRect nullRect(0,0,0,0);
+
+ aLayout.iThirdTab.iLeft = nullRect;
+ aLayout.iThirdTab.iMiddle = nullRect;
+ aLayout.iThirdTab.iRight = nullRect;
+
+ aLayout.iFourthTab.iLeft = nullRect;
+ aLayout.iFourthTab.iMiddle = nullRect;
+ aLayout.iFourthTab.iRight = nullRect;
+
+ return aLayout;
+ }
+
+CAknTabGroupGraphics::SAknTabGroupBackgroundLayout CAknTabGroupGraphics::TwoTabNarrowBackground(TInt aActiveTab) const
+ {
+ SAknTabGroupBackgroundLayout aLayout;
+
+ // navi tabs pane
+ TRect parentRect( NarrowParentRect() );
+
+ // navi tabs 2 pane
+ TRect naviTabsTwoPaneRect(
+ RectFromLayout( parentRect,
+ AknLayoutScalable_Avkon::navi_tabs_2_pane_srt() ) );
+
+ TInt tabsActivePassivePaneOption = 0;
+ if ( aActiveTab == 1 )
+ {
+ tabsActivePassivePaneOption = 0;
+ }
+ else
+ {
+ tabsActivePassivePaneOption = 1;
+ }
+
+ // Tabs two passive pane
+ TRect tabsTwoPassivePaneRect(
+ RectFromLayout( naviTabsTwoPaneRect,
+ AknLayoutScalable_Avkon::tabs_2_passive_pane_srt(
+ tabsActivePassivePaneOption ) ) );
+
+ // Tabs two active pane
+ TRect tabsTwoActivePaneRect(
+ RectFromLayout( naviTabsTwoPaneRect,
+ AknLayoutScalable_Avkon::tabs_2_active_pane_srt(
+ tabsActivePassivePaneOption ) ) );
+
+ // bg active tab pane
+ TRect tabsBackgroundActivePaneRect(
+ RectFromLayout( tabsTwoActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_cp1_srt( 0 ) ) );
+
+ // bg passive tab pane
+ TRect tabsBackgroundFirstPassivePaneRect(
+ RectFromLayout( tabsTwoPassivePaneRect,
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_cp1_srt( 0 ) ) );
+
+
+ // Active tab left
+ TRect activeTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g1_cp1_srt() ) );
+
+ // Active tab middle
+ TRect activeTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g2_cp1_srt() ) );
+
+ // Active tab right
+ TRect activeTabRightPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g3_cp1_srt() ) );
+
+
+
+ // First passive tab left
+ TRect firstPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g1_cp1_srt() ) );
+
+ // First passive tab middle
+ TRect firstPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g2_cp1_srt() ) );
+
+ // First passive tab right
+ TRect firstPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g3_cp1_srt() ) );
+
+ if ( aActiveTab == 1 )
+ {
+ aLayout.iFirstTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = activeTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = firstPassiveTabRightPaneRect;
+ }
+ else
+ {
+ aLayout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = activeTabRightPaneRect;
+ }
+
+ TRect nullRect( 0,0,0,0 );
+
+ aLayout.iThirdTab.iLeft = nullRect;
+ aLayout.iThirdTab.iMiddle = nullRect;
+ aLayout.iThirdTab.iRight = nullRect;
+
+ aLayout.iFourthTab.iLeft = nullRect;
+ aLayout.iFourthTab.iMiddle = nullRect;
+ aLayout.iFourthTab.iRight = nullRect;
+
+ return aLayout;
+ }
+
+void CAknTabGroupGraphics::DrawTwoTabBackground(
+ TTabDrawMode aTabDrawMode,
+ TInt aActiveTab,
+ CBitmapContext* aGc,
+ SAknTabGroupBackgroundLayout& aLayout ) const
+ {
+ // If not given layout, then get the default layout
+ if ( !aLayout.iUse )
+ {
+ aLayout = TwoTabBackground( aActiveTab );
+ }
+
+ if ( aActiveTab == 1 )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+ }
+ else
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+ }
+ }
+
+void CAknTabGroupGraphics::DrawTwoTabNarrowBackground(
+ TTabDrawMode aTabDrawMode,
+ TInt aActiveTab,
+ CBitmapContext* aGc,
+ SAknTabGroupBackgroundLayout& aLayout ) const
+ {
+ // If not given layout, then get the default layout
+ if ( !aLayout.iUse )
+ {
+ aLayout = TwoTabBackground( aActiveTab );
+ }
+
+ if ( aActiveTab == 1 )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+ }
+ else
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Extracts tab group background layout from layout data for three tab layout.
+// ---------------------------------------------------------------------------
+//
+CAknTabGroupGraphics::SAknTabGroupBackgroundLayout CAknTabGroupGraphics::ThreeTabBackground(
+ TInt aActiveTab ) const
+ {
+ SAknTabGroupBackgroundLayout layout;
+
+ // parent
+ TRect parentRect( iTabGroupBackgroundParent );
+
+ // navi tabs 3 pane
+ TRect naviTabsThreePaneRect(
+ RectFromLayout( parentRect,
+ AknLayoutScalable_Avkon::navi_tabs_3_pane() ) );
+
+ TRect tabsPassiveFirstPaneRect;
+ TRect tabsPassiveSecondPaneRect;
+ TRect tabsActivePaneRect;
+
+ // We don't want to use options, just assume that active and passive tabs are same sizes.
+ TRect parent( naviTabsThreePaneRect );
+ TAknWindowComponentLayout firstTab(
+ AknLayoutScalable_Avkon::tabs_3_active_pane( 0 ) );
+ TAknWindowComponentLayout secondTab(
+ AknLayoutScalable_Avkon::tabs_3_passive_pane( 0 ) );
+ TAknWindowComponentLayout thirdTab(
+ AknLayoutScalable_Avkon::tabs_3_passive_pane_cp( 0 ) );
+
+ // Revise the invalid parameter.
+ if (aActiveTab <= 0)
+ aActiveTab = 1;
+
+ if ( aActiveTab == 1 )
+ {
+ tabsActivePaneRect = RectFromLayout( parent, firstTab );
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, secondTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, thirdTab );
+ }
+ else if ( aActiveTab == 2 )
+ {
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, firstTab );
+ tabsActivePaneRect = RectFromLayout( parent, secondTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, thirdTab );
+ }
+ else if ( aActiveTab == 3 )
+ {
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, firstTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, secondTab );
+ tabsActivePaneRect = RectFromLayout( parent, thirdTab );
+ }
+
+ // Tabs 3 first passive tab pane
+ TRect tabsThreePassiveFirstPaneRect( tabsPassiveFirstPaneRect );
+
+ // Tabs 3 second passive tab pane
+ TRect tabsThreePassiveSecondPaneRect( tabsPassiveSecondPaneRect );
+
+ // Tabs 3 active tab pane
+ TRect tabsThreeActivePaneRect( tabsActivePaneRect );
+
+ TAknWindowComponentLayout passivePaneLayout(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_cp2( 0 ) );
+
+ TAknWindowComponentLayout passiveTabLayout1(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g1_cp2() );
+
+ TAknWindowComponentLayout passiveTabLayout2(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g2_cp2() );
+
+ TAknWindowComponentLayout passiveTabLayout3(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g3_cp2() );
+
+ // bg active tab pane
+ TRect tabsBackgroundActivePaneRect(
+ RectFromLayout( tabsThreeActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_cp2( 0 ) ) );
+
+ // bg first passive tab pane
+ TRect tabsBackgroundFirstPassivePaneRect(
+ RectFromLayout( tabsThreePassiveFirstPaneRect,
+ passivePaneLayout ) );
+
+ // bg second passive tab pane
+ TRect tabsBackgroundSecondPassivePaneRect(
+ RectFromLayout( tabsThreePassiveSecondPaneRect,
+ passivePaneLayout ) );
+
+
+ // Active tab left
+ TRect activeTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g1_cp2() ) );
+
+ // Active tab middle
+ TRect activeTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g2_cp2() ) );
+
+ // Active tab right
+ TRect activeTabRightPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g3_cp2() ) );
+
+
+ // First passive tab left
+ TRect firstPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveTabLayout1 ) );
+
+ // First passive tab middle
+ TRect firstPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveTabLayout2 ) );
+
+ // First passive tab right
+ TRect firstPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveTabLayout3 ) );
+
+
+ // Second passive tab left
+ TRect secondPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveTabLayout1 ) );
+
+ // Second passive tab middle
+ TRect secondPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveTabLayout2 ) );
+
+ // Second passive tab right
+ TRect secondPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveTabLayout3 ) );
+
+ if ( aActiveTab == 1 )
+ {
+ layout.iFirstTab.iLeft = activeTabLeftPaneRect;
+ layout.iFirstTab.iMiddle = activeTabMiddlePaneRect;
+ layout.iFirstTab.iRight = activeTabRightPaneRect;
+
+ layout.iSecondTab.iLeft = firstPassiveTabLeftPaneRect;
+ layout.iSecondTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ layout.iSecondTab.iRight = firstPassiveTabRightPaneRect;
+
+ layout.iThirdTab.iLeft = secondPassiveTabLeftPaneRect;
+ layout.iThirdTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ layout.iThirdTab.iRight = secondPassiveTabRightPaneRect;
+ }
+ else if ( aActiveTab == 2 )
+ {
+ layout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ layout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ layout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ layout.iSecondTab.iLeft = activeTabLeftPaneRect;
+ layout.iSecondTab.iMiddle = activeTabMiddlePaneRect;
+ layout.iSecondTab.iRight = activeTabRightPaneRect;
+
+ layout.iThirdTab.iLeft = secondPassiveTabLeftPaneRect;
+ layout.iThirdTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ layout.iThirdTab.iRight = secondPassiveTabRightPaneRect;
+ }
+ else if ( aActiveTab == 3 )
+ {
+ layout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ layout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ layout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ layout.iSecondTab.iLeft = secondPassiveTabLeftPaneRect;
+ layout.iSecondTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ layout.iSecondTab.iRight = secondPassiveTabRightPaneRect;
+
+ layout.iThirdTab.iLeft = activeTabLeftPaneRect;
+ layout.iThirdTab.iMiddle = activeTabMiddlePaneRect;
+ layout.iThirdTab.iRight = activeTabRightPaneRect;
+ }
+
+ layout.iFourthTab.iLeft.SetRect( 0, 0, 0, 0 );
+ layout.iFourthTab.iMiddle.SetRect( 0, 0, 0, 0 );
+ layout.iFourthTab.iRight.SetRect( 0, 0, 0, 0 );
+
+ // Calculate the amount of horizontal overlap in the tab backgrounds
+ // since the hidden tab rectangles are not read from layout data
+ // and must be adjusted to correspond with the "real" tabs.
+ TInt xOverlap = layout.iFirstTab.iRight.iTl.iX -
+ layout.iSecondTab.iLeft.iTl.iX;
+
+ layout.iHiddenTabLeft.iLeft = TRect( layout.iFirstTab.iLeft.iTl.iX -
+ layout.iFirstTab.iMiddle.Width() -
+ layout.iFirstTab.iLeft.Width(),
+ layout.iFirstTab.iLeft.iTl.iY,
+ layout.iFirstTab.iLeft.iTl.iX -
+ layout.iFirstTab.iMiddle.Width(),
+ layout.iFirstTab.iLeft.iBr.iY );
+ layout.iHiddenTabLeft.iLeft.Move( xOverlap, 0 );
+
+ layout.iHiddenTabLeft.iMiddle = TRect( layout.iFirstTab.iLeft.iTl.iX -
+ layout.iFirstTab.iMiddle.Width(),
+ layout.iFirstTab.iLeft.iTl.iY,
+ layout.iFirstTab.iLeft.iTl.iX,
+ layout.iFirstTab.iLeft.iBr.iY );
+ layout.iHiddenTabLeft.iMiddle.Move( xOverlap, 0 );
+
+ layout.iHiddenTabLeft.iRight = layout.iFirstTab.iLeft;
+ layout.iHiddenTabLeft.iRight.Move( xOverlap, 0 );
+
+ layout.iHiddenTabRight.iLeft = layout.iThirdTab.iRight;
+ layout.iHiddenTabRight.iLeft.Move( -xOverlap, 0 );
+ layout.iHiddenTabRight.iMiddle = TRect( layout.iThirdTab.iRight.iBr.iX,
+ layout.iThirdTab.iRight.iTl.iY,
+ layout.iThirdTab.iRight.iBr.iX +
+ layout.iThirdTab.iMiddle.Width(),
+ layout.iThirdTab.iRight.iBr.iY );
+ layout.iHiddenTabRight.iMiddle.Move( -xOverlap, 0 );
+
+ layout.iHiddenTabRight.iRight = TRect( layout.iThirdTab.iRight.iBr.iX +
+ layout.iThirdTab.iMiddle.Width(),
+ layout.iThirdTab.iRight.iTl.iY,
+ layout.iThirdTab.iRight.iBr.iX +
+ layout.iThirdTab.iMiddle.Width() +
+ layout.iThirdTab.iRight.Width(),
+ layout.iThirdTab.iRight.iBr.iY );
+ layout.iHiddenTabRight.iRight.Move( -xOverlap, 0 );
+
+ return layout;
+ }
+
+CAknTabGroupGraphics::SAknTabGroupBackgroundLayout CAknTabGroupGraphics::ThreeTabNarrowBackground(TInt aActiveTab) const
+ {
+ SAknTabGroupBackgroundLayout aLayout;
+
+ // navi tabs pane
+ TRect parentRect( NarrowParentRect() );
+
+ // navi tabs 3 pane
+ TRect naviTabsThreePaneRect(
+ RectFromLayout( parentRect,
+ AknLayoutScalable_Avkon::navi_tabs_3_pane_srt() ) );
+
+ TRect tabsPassiveFirstPaneRect;
+ TRect tabsPassiveSecondPaneRect;
+ TRect tabsActivePaneRect;
+
+ // We don't want to use options, just assume that active and passive tabs are same sizes.
+ TRect parent = naviTabsThreePaneRect;
+ TAknWindowComponentLayout aFirstTab(
+ AknLayoutScalable_Avkon::tabs_3_active_pane_srt( 0 ) );
+ TAknWindowComponentLayout aSecondTab(
+ AknLayoutScalable_Avkon::tabs_3_passive_pane_srt( 0 ) );
+ TAknWindowComponentLayout aThirdTab(
+ AknLayoutScalable_Avkon::tabs_3_passive_pane_cp_srt( 0 ) );
+
+ if ( aActiveTab == 1 )
+ {
+ tabsActivePaneRect = RectFromLayout( parent, aFirstTab );
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, aSecondTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, aThirdTab );
+ }
+ else if ( aActiveTab == 2 )
+ {
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, aFirstTab );
+ tabsActivePaneRect = RectFromLayout( parent, aSecondTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, aThirdTab );
+ }
+ else if ( aActiveTab == 3 )
+ {
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, aFirstTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, aSecondTab );
+ tabsActivePaneRect = RectFromLayout( parent, aThirdTab );
+ }
+
+ // Tabs 3 first passive tab pane
+ TRect tabsThreePassiveFirstPaneRect( tabsPassiveFirstPaneRect );
+
+ // Tabs 3 second passive tab pane
+ TRect tabsThreePassiveSecondPaneRect( tabsPassiveSecondPaneRect );
+
+ // Tabs 3 active tab pane
+ TRect tabsThreeActivePaneRect( tabsActivePaneRect );
+
+ TAknWindowComponentLayout passivePaneLayout(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_cp2_srt( 0 ) );
+
+ TAknWindowComponentLayout passiveTabLayout1(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g1_cp2_srt() );
+
+ TAknWindowComponentLayout passiveTabLayout2(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g2_cp2_srt() );
+
+ TAknWindowComponentLayout passiveTabLayout3(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g3_cp2_srt() );
+
+ // bg active tab pane
+ TRect tabsBackgroundActivePaneRect(
+ RectFromLayout( tabsThreeActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_cp2_srt( 0 ) ) );
+
+ // bg first passive tab pane
+ TRect tabsBackgroundFirstPassivePaneRect(
+ RectFromLayout( tabsThreePassiveFirstPaneRect,
+ passivePaneLayout ) );
+
+ // bg second passive tab pane
+ TRect tabsBackgroundSecondPassivePaneRect(
+ RectFromLayout( tabsThreePassiveSecondPaneRect,
+ passivePaneLayout ) );
+
+ // Active tab left
+ TRect activeTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g1_cp2_srt() ) );
+
+ // Active tab middle
+ TRect activeTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g2_cp2_srt() ) );
+
+ // Active tab right
+ TRect activeTabRightPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g3_cp2_srt() ) );
+
+ // First passive tab left
+ TRect firstPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveTabLayout1 ) );
+
+ // First passive tab middle
+ TRect firstPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveTabLayout2 ) );
+
+ // First passive tab right
+ TRect firstPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveTabLayout3 ) );
+
+ // Second passive tab left
+ TRect secondPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveTabLayout1 ) );
+
+ // Second passive tab middle
+ TRect secondPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveTabLayout2 ) );
+
+ // Second passive tab right
+ TRect secondPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveTabLayout3 ) );
+
+ if ( aActiveTab == 1 )
+ {
+ aLayout.iFirstTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = activeTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iThirdTab.iLeft = secondPassiveTabLeftPaneRect;
+ aLayout.iThirdTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ aLayout.iThirdTab.iRight = secondPassiveTabRightPaneRect;
+ }
+ else if ( aActiveTab == 2 )
+ {
+ aLayout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = activeTabRightPaneRect;
+
+ aLayout.iThirdTab.iLeft = secondPassiveTabLeftPaneRect;
+ aLayout.iThirdTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ aLayout.iThirdTab.iRight = secondPassiveTabRightPaneRect;
+ }
+ else if ( aActiveTab == 3 )
+ {
+ aLayout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = secondPassiveTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = secondPassiveTabRightPaneRect;
+
+ aLayout.iThirdTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iThirdTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iThirdTab.iRight = activeTabRightPaneRect;
+ }
+
+ aLayout.iFourthTab.iLeft = TRect(0,0,0,0);
+ aLayout.iFourthTab.iMiddle = TRect(0,0,0,0);
+ aLayout.iFourthTab.iRight = TRect(0,0,0,0);
+
+ return aLayout;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Draws the tab group background in three tab layout.
+// ---------------------------------------------------------------------------
+//
+void CAknTabGroupGraphics::DrawThreeTabBackground(
+ TTabDrawMode aTabDrawMode,
+ TInt aActiveTab,
+ CBitmapContext* aGc,
+ SAknTabGroupBackgroundLayout& aLayout,
+ TTabsHidden aTabsHidden,
+ TTabAnimationType aAnimation ) const
+ {
+ TInt animActiveTab( aActiveTab );
+ if ( aAnimation && aActiveTab == 2 )
+ {
+ // Move the tab highlight already during the animation.
+ animActiveTab = aAnimation == ECycleToLeft ? aActiveTab - 1 :
+ aActiveTab + 1;
+ }
+
+ // If not given layout, then get the default layout.
+ if ( !aLayout.iUse )
+ {
+ aLayout = ThreeTabBackground( animActiveTab );
+ }
+
+ TInt xOffset( aLayout.iFirstTab.iRight.iBr.iX -
+ aLayout.iSecondTab.iLeft.iTl.iX );
+
+ if ( aActiveTab == 1 )
+ {
+ if ( aTabsHidden == EOnRightSide )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iHiddenTabRight.iLeft,
+ aLayout.iHiddenTabRight.iMiddle,
+ aLayout.iHiddenTabRight.iRight,
+ aGc,
+ ETrue );
+ }
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+ }
+ else if ( aActiveTab == 2 )
+ {
+ switch ( aTabsHidden )
+ {
+ case EOnLeftSide:
+ {
+ TRect bitRect( aLayout.iHiddenTabLeft.iLeft );
+ bitRect.Resize( xOffset, 0 );
+ DrawPassiveTabBit( aTabDrawMode,
+ ERight,
+ bitRect,
+ aGc );
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iHiddenTabLeft.iLeft,
+ aLayout.iHiddenTabLeft.iMiddle,
+ aLayout.iHiddenTabLeft.iRight,
+ aGc,
+ aAnimation != ECycleToLeft ? ETrue : EFalse );
+ break;
+ }
+ case EOnRightSide:
+ {
+ TRect bitRect( aLayout.iHiddenTabRight.iRight );
+ bitRect.Move( -xOffset, 0 );
+ bitRect.Resize( xOffset, 0 );
+ DrawPassiveTabBit( aTabDrawMode,
+ ELeft,
+ bitRect,
+ aGc );
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iHiddenTabRight.iLeft,
+ aLayout.iHiddenTabRight.iMiddle,
+ aLayout.iHiddenTabRight.iRight,
+ aGc,
+ aAnimation != ECycleToRight ? ETrue : EFalse );
+ break;
+ }
+ case EOnBothSides:
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iHiddenTabLeft.iLeft,
+ aLayout.iHiddenTabLeft.iMiddle,
+ aLayout.iHiddenTabLeft.iRight,
+ aGc,
+ aAnimation != ECycleToLeft ? ETrue : EFalse );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iHiddenTabRight.iLeft,
+ aLayout.iHiddenTabRight.iMiddle,
+ aLayout.iHiddenTabRight.iRight,
+ aGc,
+ aAnimation != ECycleToRight ? ETrue : EFalse );
+ break;
+ }
+ case ETwoOnBothSides:
+ {
+ TRect bitRect( aLayout.iHiddenTabLeft.iLeft );
+ bitRect.Resize( xOffset, 0 );
+ DrawPassiveTabBit( aTabDrawMode,
+ ERight,
+ bitRect,
+ aGc );
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iHiddenTabLeft.iLeft,
+ aLayout.iHiddenTabLeft.iMiddle,
+ aLayout.iHiddenTabLeft.iRight,
+ aGc,
+ aAnimation != ECycleToLeft ? ETrue : EFalse );
+
+ bitRect = aLayout.iHiddenTabRight.iRight;
+ bitRect.Move( -xOffset, 0 );
+ bitRect.Resize( xOffset, 0 );
+ DrawPassiveTabBit( aTabDrawMode,
+ ELeft,
+ bitRect,
+ aGc );
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iHiddenTabRight.iLeft,
+ aLayout.iHiddenTabRight.iMiddle,
+ aLayout.iHiddenTabRight.iRight,
+ aGc,
+ aAnimation != ECycleToRight ? ETrue : EFalse);
+ break;
+ }
+ case ENone:
+ default:
+ {
+ break;
+ }
+ }
+
+ if ( aAnimation == ECycleToLeft )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc,
+ ETrue );
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+ }
+ else if ( aAnimation == ECycleToRight )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc,
+ ETrue );
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+ }
+ else
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+
+ if ( aAnimation )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+ }
+ else
+ {
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+ }
+ }
+ }
+ else if ( aActiveTab == 3 )
+ {
+ if ( aTabsHidden == EOnLeftSide )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iHiddenTabLeft.iLeft,
+ aLayout.iHiddenTabLeft.iMiddle,
+ aLayout.iHiddenTabLeft.iRight,
+ aGc,
+ ETrue );
+ }
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Draws the tab group background in three tab narrow layout.
+// ---------------------------------------------------------------------------
+//
+void CAknTabGroupGraphics::DrawThreeTabNarrowBackground(
+ TTabDrawMode aTabDrawMode,
+ TInt aActiveTab,
+ CBitmapContext* aGc,
+ SAknTabGroupBackgroundLayout& aLayout ) const
+ {
+ // If not given layout, then get the default layout
+ if ( !aLayout.iUse )
+ {
+ aLayout = ThreeTabBackground( aActiveTab );
+ }
+
+ if ( aActiveTab == 1 )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+ }
+ else if ( aActiveTab == 2 )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+ }
+ else if ( aActiveTab == 3 )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+ }
+ }
+
+
+CAknTabGroupGraphics::SAknTabGroupBackgroundLayout CAknTabGroupGraphics::FourTabBackground(
+ TInt aActiveTab ) const
+ {
+ SAknTabGroupBackgroundLayout aLayout;
+
+ TRect parentRect( iTabGroupBackgroundParent );
+
+ // navi tabs 4 pane
+ TRect naviTabsFourPaneRect(
+ RectFromLayout( parentRect,
+ AknLayoutScalable_Avkon::navi_tabs_4_pane() ) );
+
+ TRect tabsPassiveFirstPaneRect;
+ TRect tabsPassiveSecondPaneRect;
+ TRect tabsPassiveThirdPaneRect;
+ TRect tabsActivePaneRect;
+
+ // We don't want to use options, just assume that active and passive tabs are same sizes.
+ TRect parent = naviTabsFourPaneRect;
+ TAknWindowComponentLayout aFirstTab( AknLayoutScalable_Avkon::tabs_4_active_pane(0) );
+ TAknWindowComponentLayout aSecondTab( AknLayoutScalable_Avkon::tabs_4_passive_pane_cp(0) );
+ TAknWindowComponentLayout aThirdTab( AknLayoutScalable_Avkon::tabs_4_passive_pane(0) );
+ TAknWindowComponentLayout aFourthTab( AknLayoutScalable_Avkon::tabs_4_passive_pane_cp2(0) );
+
+ if ( aActiveTab == 1 )
+ {
+ tabsActivePaneRect = RectFromLayout( parent, aFirstTab );
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, aSecondTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, aThirdTab );
+ tabsPassiveThirdPaneRect = RectFromLayout( parent, aFourthTab );
+ }
+ else if ( aActiveTab == 2 )
+ {
+ tabsActivePaneRect = RectFromLayout( parent, aSecondTab );
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, aFirstTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, aThirdTab );
+ tabsPassiveThirdPaneRect = RectFromLayout( parent, aFourthTab );
+ }
+ else if ( aActiveTab == 3 )
+ {
+ tabsActivePaneRect = RectFromLayout( parent, aThirdTab );
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, aFirstTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, aSecondTab );
+ tabsPassiveThirdPaneRect = RectFromLayout( parent, aFourthTab );
+ }
+ else if ( aActiveTab == 4 )
+ {
+ tabsActivePaneRect = RectFromLayout( parent, aFourthTab );
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, aFirstTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, aSecondTab );
+ tabsPassiveThirdPaneRect = RectFromLayout( parent, aThirdTab );
+ }
+
+ TAknWindowComponentLayout passivePaneLayout(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_cp3( 0 ) );
+
+ TAknWindowComponentLayout passiveTabLayout1(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g1_cp3() );
+
+ TAknWindowComponentLayout passiveTabLayout2(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g2_cp3() );
+
+ TAknWindowComponentLayout passiveTabLayout3(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g3_cp3() );
+
+
+ // Tabs 4 first passive tab pane
+ TRect tabsFourPassiveFirstPaneRect( tabsPassiveFirstPaneRect );
+
+ // Tabs 4 second passive tab pane
+ TRect tabsFourPassiveSecondPaneRect( tabsPassiveSecondPaneRect );
+
+ // Tabs 4 third passive tab pane
+ TRect tabsFourPassiveThirdPaneRect( tabsPassiveThirdPaneRect );
+
+ // Tabs 4 active tab pane
+ TRect tabsFourActivePaneRect( tabsActivePaneRect );
+
+ // bg active tab pane
+ TRect tabsBackgroundActivePaneRect(
+ RectFromLayout( tabsFourActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_cp3( 0 ) ) );
+
+ // bg first passive tab pane
+ TRect tabsBackgroundFirstPassivePaneRect(
+ RectFromLayout( tabsFourPassiveFirstPaneRect, passivePaneLayout ) );
+
+ // bg second passive tab pane
+ TRect tabsBackgroundSecondPassivePaneRect(
+ RectFromLayout( tabsFourPassiveSecondPaneRect, passivePaneLayout ) );
+
+ // bg third passive tab pane
+ TRect tabsBackgroundThirdPassivePaneRect(
+ RectFromLayout( tabsFourPassiveThirdPaneRect, passivePaneLayout ) );
+
+ // Active tab left
+ TRect activeTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g1_cp3() ) );
+
+ // Active tab middle
+ TRect activeTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g2_cp3() ) );
+
+ // Active tab right
+ TRect activeTabRightPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g3_cp3() ) );
+
+ // First passive tab left
+ TRect firstPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveTabLayout1 ) );
+
+ // First passive tab middle
+ TRect firstPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveTabLayout2 ) );
+
+ // First passive tab right
+ TRect firstPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveTabLayout3 ) );
+
+ // Second passive tab left
+ TRect secondPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveTabLayout1 ) );
+
+ // Second passive tab middle
+ TRect secondPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveTabLayout2 ) );
+
+ // Second passive tab right
+ TRect secondPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveTabLayout3 ) );
+
+ // Third passive tab left
+ TRect thirdPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundThirdPassivePaneRect,
+ passiveTabLayout1 ) );
+
+ // third passive tab middle
+ TRect thirdPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundThirdPassivePaneRect,
+ passiveTabLayout2 ) );
+
+ // third passive tab right
+ TRect thirdPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundThirdPassivePaneRect,
+ passiveTabLayout3 ) );
+
+ if ( aActiveTab == 1 )
+ {
+ aLayout.iFirstTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = activeTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iThirdTab.iLeft = secondPassiveTabLeftPaneRect;
+ aLayout.iThirdTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ aLayout.iThirdTab.iRight = secondPassiveTabRightPaneRect;
+
+ aLayout.iFourthTab.iLeft = thirdPassiveTabLeftPaneRect;
+ aLayout.iFourthTab.iMiddle = thirdPassiveTabMiddlePaneRect;
+ aLayout.iFourthTab.iRight = thirdPassiveTabRightPaneRect;
+ }
+ else if ( aActiveTab == 2 )
+ {
+ aLayout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = activeTabRightPaneRect;
+
+ aLayout.iThirdTab.iLeft = secondPassiveTabLeftPaneRect;
+ aLayout.iThirdTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ aLayout.iThirdTab.iRight = secondPassiveTabRightPaneRect;
+
+ aLayout.iFourthTab.iLeft = thirdPassiveTabLeftPaneRect;
+ aLayout.iFourthTab.iMiddle = thirdPassiveTabMiddlePaneRect;
+ aLayout.iFourthTab.iRight = thirdPassiveTabRightPaneRect;
+ }
+ else if ( aActiveTab == 3 )
+ {
+ aLayout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = secondPassiveTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = secondPassiveTabRightPaneRect;
+
+ aLayout.iThirdTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iThirdTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iThirdTab.iRight = activeTabRightPaneRect;
+
+ aLayout.iFourthTab.iLeft = thirdPassiveTabLeftPaneRect;
+ aLayout.iFourthTab.iMiddle = thirdPassiveTabMiddlePaneRect;
+ aLayout.iFourthTab.iRight = thirdPassiveTabRightPaneRect;
+ }
+ else if ( aActiveTab == 4 )
+ {
+ aLayout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = secondPassiveTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = secondPassiveTabRightPaneRect;
+
+ aLayout.iThirdTab.iLeft = thirdPassiveTabLeftPaneRect;
+ aLayout.iThirdTab.iMiddle = thirdPassiveTabMiddlePaneRect;
+ aLayout.iThirdTab.iRight = thirdPassiveTabRightPaneRect;
+
+ aLayout.iFourthTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iFourthTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iFourthTab.iRight = activeTabRightPaneRect;
+ }
+
+ return aLayout;
+ }
+
+CAknTabGroupGraphics::SAknTabGroupBackgroundLayout CAknTabGroupGraphics::FourTabNarrowBackground(TInt aActiveTab) const
+ {
+ SAknTabGroupBackgroundLayout aLayout;
+
+ // navi tabs pane
+ TRect parentRect( NarrowParentRect() );
+
+ // navi tabs 4 pane
+ TRect naviTabsFourPaneRect(
+ RectFromLayout( parentRect,
+ AknLayoutScalable_Avkon::navi_tabs_4_pane_srt() ) );
+
+ TRect tabsPassiveFirstPaneRect;
+ TRect tabsPassiveSecondPaneRect;
+ TRect tabsPassiveThirdPaneRect;
+ TRect tabsActivePaneRect;
+
+ TRect parent = naviTabsFourPaneRect;
+
+ // We don't want to use options, just assume that active and passive tabs are same sizes.
+ TAknWindowComponentLayout aFirstTab(
+ AknLayoutScalable_Avkon::tabs_4_active_pane_srt(0) );
+
+ TAknWindowComponentLayout aSecondTab(
+ AknLayoutScalable_Avkon::tabs_4_passive_pane_cp_srt(0) );
+
+ TAknWindowComponentLayout aThirdTab(
+ AknLayoutScalable_Avkon::tabs_4_passive_pane_srt(0) );
+
+ TAknWindowComponentLayout aFourthTab(
+ AknLayoutScalable_Avkon::tabs_4_passive_pane_cp2_srt(0) );
+
+ if ( aActiveTab == 1 )
+ {
+ tabsActivePaneRect = RectFromLayout( parent, aFirstTab );
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, aSecondTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, aThirdTab );
+ tabsPassiveThirdPaneRect = RectFromLayout( parent, aFourthTab );
+ }
+ else if ( aActiveTab == 2 )
+ {
+ tabsActivePaneRect = RectFromLayout( parent, aSecondTab );
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, aFirstTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, aThirdTab );
+ tabsPassiveThirdPaneRect = RectFromLayout( parent, aFourthTab );
+ }
+ else if ( aActiveTab == 3 )
+ {
+ tabsActivePaneRect = RectFromLayout( parent, aThirdTab );
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, aFirstTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, aSecondTab );
+ tabsPassiveThirdPaneRect = RectFromLayout( parent, aFourthTab );
+ }
+ else if ( aActiveTab == 4 )
+ {
+ tabsActivePaneRect = RectFromLayout( parent, aFourthTab );
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, aFirstTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, aSecondTab );
+ tabsPassiveThirdPaneRect = RectFromLayout( parent, aThirdTab );
+ }
+
+ // Tabs 4 first passive tab pane
+ TRect tabsFourPassiveFirstPaneRect( tabsPassiveFirstPaneRect );
+
+ // Tabs 4 second passive tab pane
+ TRect tabsFourPassiveSecondPaneRect( tabsPassiveSecondPaneRect );
+
+ // Tabs 4 third passive tab pane
+ TRect tabsFourPassiveThirdPaneRect( tabsPassiveThirdPaneRect );
+
+ // Tabs 4 active tab pane
+ TRect tabsFourActivePaneRect( tabsActivePaneRect );
+
+ TAknWindowComponentLayout passivePaneLayout(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_cp3_srt( 0 ) );
+
+ TAknWindowComponentLayout passiveTabLayout1(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g1_cp3_srt() );
+
+ TAknWindowComponentLayout passiveTabLayout2(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g2_cp3_srt() );
+
+ TAknWindowComponentLayout passiveTabLayout3(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g3_cp3_srt() );
+
+ // bg active tab pane
+ TRect tabsBackgroundActivePaneRect(
+ RectFromLayout( tabsFourActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_cp3_srt( 0 ) ) );
+
+ // bg first passive tab pane
+ TRect tabsBackgroundFirstPassivePaneRect(
+ RectFromLayout( tabsFourPassiveFirstPaneRect, passivePaneLayout ) );
+
+ // bg second passive tab pane
+ TRect tabsBackgroundSecondPassivePaneRect(
+ RectFromLayout( tabsFourPassiveSecondPaneRect, passivePaneLayout ) );
+
+ // bg third passive tab pane
+ TRect tabsBackgroundThirdPassivePaneRect(
+ RectFromLayout( tabsFourPassiveThirdPaneRect, passivePaneLayout ) );
+
+
+ // Active tab left
+ TRect activeTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g1_cp3_copy1() ) );
+
+ // Active tab middle
+ TRect activeTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g2_cp3_copy1() ) );
+
+ // Active tab right
+ TRect activeTabRightPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g3_cp3_copy1() ) );
+
+
+ // First passive tab left
+ TRect firstPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveTabLayout1 ) );
+
+ // First passive tab middle
+ TRect firstPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveTabLayout2 ) );
+
+ // First passive tab right
+ TRect firstPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveTabLayout3 ) );
+
+
+ // Second passive tab left
+ TRect secondPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveTabLayout1 ) );
+
+ // Second passive tab middle
+ TRect secondPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveTabLayout2 ) );
+
+ // Second passive tab right
+ TRect secondPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveTabLayout3 ) );
+
+
+ // Third passive tab left
+ TRect thirdPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundThirdPassivePaneRect,
+ passiveTabLayout1 ) );
+
+ // third passive tab middle
+ TRect thirdPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundThirdPassivePaneRect,
+ passiveTabLayout2 ) );
+
+ // third passive tab right
+ TRect thirdPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundThirdPassivePaneRect,
+ passiveTabLayout3 ) );
+
+
+ if ( aActiveTab == 1 )
+ {
+ aLayout.iFirstTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = activeTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iThirdTab.iLeft = secondPassiveTabLeftPaneRect;
+ aLayout.iThirdTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ aLayout.iThirdTab.iRight = secondPassiveTabRightPaneRect;
+
+ aLayout.iFourthTab.iLeft = thirdPassiveTabLeftPaneRect;
+ aLayout.iFourthTab.iMiddle = thirdPassiveTabMiddlePaneRect;
+ aLayout.iFourthTab.iRight = thirdPassiveTabRightPaneRect;
+ }
+ else if ( aActiveTab == 2 )
+ {
+ aLayout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = activeTabRightPaneRect;
+
+ aLayout.iThirdTab.iLeft = secondPassiveTabLeftPaneRect;
+ aLayout.iThirdTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ aLayout.iThirdTab.iRight = secondPassiveTabRightPaneRect;
+
+ aLayout.iFourthTab.iLeft = thirdPassiveTabLeftPaneRect;
+ aLayout.iFourthTab.iMiddle = thirdPassiveTabMiddlePaneRect;
+ aLayout.iFourthTab.iRight = thirdPassiveTabRightPaneRect;
+ }
+ else if ( aActiveTab == 3 )
+ {
+ aLayout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = secondPassiveTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = secondPassiveTabRightPaneRect;
+
+ aLayout.iThirdTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iThirdTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iThirdTab.iRight = activeTabRightPaneRect;
+
+ aLayout.iFourthTab.iLeft = thirdPassiveTabLeftPaneRect;
+ aLayout.iFourthTab.iMiddle = thirdPassiveTabMiddlePaneRect;
+ aLayout.iFourthTab.iRight = thirdPassiveTabRightPaneRect;
+ }
+ else if ( aActiveTab == 4 )
+ {
+ aLayout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = secondPassiveTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = secondPassiveTabRightPaneRect;
+
+ aLayout.iThirdTab.iLeft = thirdPassiveTabLeftPaneRect;
+ aLayout.iThirdTab.iMiddle = thirdPassiveTabMiddlePaneRect;
+ aLayout.iThirdTab.iRight = thirdPassiveTabRightPaneRect;
+
+ aLayout.iFourthTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iFourthTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iFourthTab.iRight = activeTabRightPaneRect;
+ }
+
+ return aLayout;
+ }
+
+void CAknTabGroupGraphics::DrawFourTabBackground( TTabDrawMode aTabDrawMode,
+ TInt aActiveTab,
+ CBitmapContext* aGc,
+ SAknTabGroupBackgroundLayout& aLayout ) const
+ {
+ // If not given layout, then get the default layout
+ if ( !aLayout.iUse )
+ {
+ aLayout = FourTabBackground( aActiveTab );
+ }
+
+ if ( aActiveTab == 1 )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFourthTab.iLeft,
+ aLayout.iFourthTab.iMiddle,
+ aLayout.iFourthTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+ }
+ else if ( aActiveTab == 2 )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFourthTab.iLeft,
+ aLayout.iFourthTab.iMiddle,
+ aLayout.iFourthTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+ }
+ else if ( aActiveTab == 3 )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFourthTab.iLeft,
+ aLayout.iFourthTab.iMiddle,
+ aLayout.iFourthTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+ }
+ else if ( aActiveTab == 4 )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iFourthTab.iLeft,
+ aLayout.iFourthTab.iMiddle,
+ aLayout.iFourthTab.iRight,
+ aGc );
+ }
+ }
+
+void CAknTabGroupGraphics::DrawFourTabNarrowBackground( TTabDrawMode aTabDrawMode,
+ TInt aActiveTab,
+ CBitmapContext* aGc,
+ SAknTabGroupBackgroundLayout& aLayout ) const
+ {
+ // If not given layout, then get the default layout
+ if ( !aLayout.iUse )
+ {
+ aLayout = FourTabBackground( aActiveTab );
+ }
+
+ if ( aActiveTab == 1 )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFourthTab.iLeft,
+ aLayout.iFourthTab.iMiddle,
+ aLayout.iFourthTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+ }
+ else if ( aActiveTab == 2 )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFourthTab.iLeft,
+ aLayout.iFourthTab.iMiddle,
+ aLayout.iFourthTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+ }
+ else if ( aActiveTab == 3 )
+ {
+ // Note the drawing order of passive tabs
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFourthTab.iLeft,
+ aLayout.iFourthTab.iMiddle,
+ aLayout.iFourthTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+ }
+ else if ( aActiveTab == 4 )
+ {
+ // Note the drawing order of passive tabs
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iFourthTab.iLeft,
+ aLayout.iFourthTab.iMiddle,
+ aLayout.iFourthTab.iRight,
+ aGc );
+ }
+ }
+
+CAknTabGroupGraphics::SAknTabGroupBackgroundLayout CAknTabGroupGraphics::TwoLongTabBackground(TInt aActiveTab) const
+ {
+ SAknTabGroupBackgroundLayout aLayout;
+
+ // screen
+ TRect screenRect;
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect );
+
+ TBool landscape( Layout_Meta_Data::IsLandscapeOrientation() );
+
+ TRect parentRect( iTabGroupBackgroundParent );
+
+ // two tabs pane
+ TRect naviTabsTwoPaneRect(
+ RectFromLayout( parentRect,
+ AknLayoutScalable_Avkon::navi_tabs_2_long_pane() ) );
+
+ TInt tabsActivePassivePaneOption = ( aActiveTab == 1 ) ? 0 : 1;
+
+ // Tabs two passive pane
+ TRect tabsTwoPassivePaneRect(
+ RectFromLayout( naviTabsTwoPaneRect,
+ AknLayoutScalable_Avkon::tabs_2_long_passive_pane(
+ tabsActivePassivePaneOption ) ) );
+
+ // Tabs two active pane
+ TRect tabsTwoActivePaneRect(
+ RectFromLayout( naviTabsTwoPaneRect,
+ AknLayoutScalable_Avkon::tabs_2_long_active_pane(
+ tabsActivePassivePaneOption ) ) );
+
+ // bg active tab pane
+ TRect tabsBackgroundActivePaneRect(
+ RectFromLayout( tabsTwoActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_cp4(
+ landscape ) ) );
+
+ // bg passive tab pane
+ TRect tabsBackgroundFirstPassivePaneRect(
+ RectFromLayout( tabsTwoPassivePaneRect,
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_cp4(
+ landscape ) ) );
+
+ // Active tab left
+ TRect activeTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g1_cp4() ) );
+
+ // Active tab middle
+ TRect activeTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g2_cp4() ) );
+
+ // Active tab right
+ TRect activeTabRightPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g3_cp4() ) );
+
+ // First passive tab left
+ TRect firstPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g1_cp4() ) );
+
+ // First passive tab middle
+ TRect firstPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g2_cp4() ) );
+
+ // First passive tab right
+ TRect firstPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g3_cp4() ) );
+
+ if ( aActiveTab == 1 )
+ {
+ aLayout.iFirstTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = activeTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = firstPassiveTabRightPaneRect;
+ }
+ else
+ {
+ aLayout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = activeTabRightPaneRect;
+ }
+
+ TRect nullRect( 0,0,0,0 );
+
+ aLayout.iThirdTab.iLeft = nullRect;
+ aLayout.iThirdTab.iMiddle = nullRect;
+ aLayout.iThirdTab.iRight = nullRect;
+
+ aLayout.iFourthTab.iLeft = nullRect;
+ aLayout.iFourthTab.iMiddle = nullRect;
+ aLayout.iFourthTab.iRight = nullRect;
+
+ return aLayout;
+ }
+
+CAknTabGroupGraphics::SAknTabGroupBackgroundLayout CAknTabGroupGraphics::TwoLongTabNarrowBackground(TInt aActiveTab) const
+ {
+ SAknTabGroupBackgroundLayout aLayout;
+
+ TBool landscape( Layout_Meta_Data::IsLandscapeOrientation() );
+
+ // navi tabs pane
+ TRect parentRect( NarrowParentRect() );
+
+ // two tabs pane
+ TRect naviTabsTwoPaneRect(
+ RectFromLayout( parentRect,
+ AknLayoutScalable_Avkon::navi_tabs_2_long_pane_srt() ) );
+
+ TInt tabsActivePassivePaneOption = ( aActiveTab == 1 ) ? 0 : 1;
+
+ // Tabs two passive pane
+ TRect tabsTwoPassivePaneRect(
+ RectFromLayout( naviTabsTwoPaneRect,
+ AknLayoutScalable_Avkon::tabs_2_long_passive_pane_srt(
+ tabsActivePassivePaneOption ) ) );
+
+ // Tabs two active pane
+ TRect tabsTwoActivePaneRect(
+ RectFromLayout( naviTabsTwoPaneRect,
+ AknLayoutScalable_Avkon::tabs_2_long_active_pane_srt(
+ tabsActivePassivePaneOption ) ) );
+
+ // bg active tab pane
+ TRect tabsBackgroundActivePaneRect(
+ RectFromLayout( tabsTwoActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_cp4_srt(
+ landscape ) ) );
+
+ // bg passive tab pane
+ TRect tabsBackgroundFirstPassivePaneRect(
+ RectFromLayout( tabsTwoPassivePaneRect,
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_cp4_srt(
+ landscape ) ) );
+
+ // Active tab left
+ TRect activeTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g1_cp4_srt() ) );
+
+ // Active tab middle
+ TRect activeTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g2_cp4_srt() ) );
+
+ // Active tab right
+ TRect activeTabRightPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g3_cp4_srt() ) );
+
+ // First passive tab left
+ TRect firstPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g1_cp4_srt() ) );
+
+ // First passive tab middle
+ TRect firstPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g2_cp4_srt() ) );
+
+ // First passive tab right
+ TRect firstPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g3_cp4_srt() ) );
+
+
+ if ( aActiveTab == 1 )
+ {
+ aLayout.iFirstTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = activeTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = firstPassiveTabRightPaneRect;
+ }
+ else
+ {
+ aLayout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = activeTabRightPaneRect;
+ }
+
+ TRect nullRect( 0,0,0,0 );
+
+ aLayout.iThirdTab.iLeft = nullRect;
+ aLayout.iThirdTab.iMiddle = nullRect;
+ aLayout.iThirdTab.iRight = nullRect;
+
+ aLayout.iFourthTab.iLeft = nullRect;
+ aLayout.iFourthTab.iMiddle = nullRect;
+ aLayout.iFourthTab.iRight = nullRect;
+
+ return aLayout;
+ }
+
+void CAknTabGroupGraphics::DrawTwoLongTabBackground(
+ TTabDrawMode aTabDrawMode,
+ TInt aActiveTab,
+ CBitmapContext* aGc,
+ SAknTabGroupBackgroundLayout& aLayout ) const
+ {
+ // If not given layout, then get the default layout
+ if ( !aLayout.iUse )
+ {
+ aLayout = TwoLongTabBackground( aActiveTab );
+ }
+
+ if ( aActiveTab == 1 )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+ }
+ else
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+ }
+ }
+
+void CAknTabGroupGraphics::DrawTwoLongTabNarrowBackground(
+ TTabDrawMode aTabDrawMode,
+ TInt aActiveTab,
+ CBitmapContext* aGc,
+ SAknTabGroupBackgroundLayout& aLayout ) const
+ {
+ // If not given layout, then get the default layout
+ if ( !aLayout.iUse )
+ {
+ aLayout = TwoLongTabBackground( aActiveTab );
+ }
+
+ if ( aActiveTab == 1 )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+ }
+ else
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+ }
+ }
+
+CAknTabGroupGraphics::SAknTabGroupBackgroundLayout CAknTabGroupGraphics::ThreeLongTabBackground(TInt aActiveTab) const
+ {
+ SAknTabGroupBackgroundLayout aLayout;
+
+ // screen
+ TRect screenRect;
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect );
+
+ TBool landscape( Layout_Meta_Data::IsLandscapeOrientation() );
+
+ TRect parentRect( iTabGroupBackgroundParent );
+
+ // navi tabs 3 pane
+ TRect naviTabsThreePaneRect(
+ RectFromLayout( parentRect,
+ AknLayoutScalable_Avkon::navi_tabs_3_long_pane() ) );
+
+ TRect tabsPassiveFirstPaneRect;
+ TRect tabsPassiveSecondPaneRect;
+ TRect tabsActivePaneRect;
+
+ // We don't want to use options, just assume that active and passive tabs are same sizes.
+ TRect parent( naviTabsThreePaneRect );
+
+ TAknWindowComponentLayout aFirstTab(
+ AknLayoutScalable_Avkon::tabs_3_long_active_pane( 0 ) );
+
+ TAknWindowComponentLayout aSecondTab(
+ AknLayoutScalable_Avkon::tabs_3_long_passive_pane( 0 ) );
+
+ TAknWindowComponentLayout aThirdTab(
+ AknLayoutScalable_Avkon::tabs_3_long_passive_pane_cp( 0 ) );
+
+ if ( aActiveTab == 1 )
+ {
+ tabsActivePaneRect = RectFromLayout( parent, aFirstTab );
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, aSecondTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, aThirdTab );
+ }
+ else if ( aActiveTab == 2 )
+ {
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, aFirstTab );
+ tabsActivePaneRect = RectFromLayout( parent, aSecondTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, aThirdTab );
+ }
+ else if ( aActiveTab == 3 )
+ {
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, aFirstTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, aSecondTab );
+ tabsActivePaneRect = RectFromLayout( parent, aThirdTab );
+ }
+
+ // Tabs 3 first passive tab pane
+ TRect tabsThreePassiveFirstPaneRect( tabsPassiveFirstPaneRect );
+
+ // Tabs 3 second passive tab pane
+ TRect tabsThreePassiveSecondPaneRect( tabsPassiveSecondPaneRect );
+
+ // Tabs 3 active tab pane
+ TRect tabsThreeActivePaneRect( tabsActivePaneRect );
+
+ TAknWindowComponentLayout passivePaneLayout(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_cp5( landscape ) );
+
+ TAknWindowComponentLayout passiveTabLayout1(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g1_cp5() );
+
+ TAknWindowComponentLayout passiveTabLayout2(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g2_cp5() );
+
+ TAknWindowComponentLayout passiveTabLayout3(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g3_cp5() );
+
+ // bg active tab pane
+ TRect tabsBackgroundActivePaneRect(
+ RectFromLayout( tabsThreeActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_cp5( landscape ) ) );
+
+ // bg first passive tab pane
+ TRect tabsBackgroundFirstPassivePaneRect(
+ RectFromLayout( tabsThreePassiveFirstPaneRect,
+ passivePaneLayout ) );
+
+ // bg second passive tab pane
+ TRect tabsBackgroundSecondPassivePaneRect(
+ RectFromLayout( tabsThreePassiveSecondPaneRect,
+ passivePaneLayout ) );
+
+
+ // Active tab left
+ TRect activeTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g1_cp5() ) );
+
+ // Active tab middle
+ TRect activeTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g2_cp5() ) );
+
+ // Active tab right
+ TRect activeTabRightPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g3_cp5() ) );
+
+
+ // First passive tab left
+ TRect firstPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveTabLayout1 ) );
+
+ // First passive tab middle
+ TRect firstPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveTabLayout2 ) );
+
+ // First passive tab right
+ TRect firstPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveTabLayout3 ) );
+
+
+ // Second passive tab left
+ TRect secondPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveTabLayout1 ) );
+
+ // Second passive tab middle
+ TRect secondPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveTabLayout2 ) );
+
+ // Second passive tab right
+ TRect secondPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveTabLayout3 ) );
+
+ if ( aActiveTab == 1 )
+ {
+ aLayout.iFirstTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = activeTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iThirdTab.iLeft = secondPassiveTabLeftPaneRect;
+ aLayout.iThirdTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ aLayout.iThirdTab.iRight = secondPassiveTabRightPaneRect;
+ }
+ else if ( aActiveTab == 2 )
+ {
+ aLayout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = activeTabRightPaneRect;
+
+ aLayout.iThirdTab.iLeft = secondPassiveTabLeftPaneRect;
+ aLayout.iThirdTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ aLayout.iThirdTab.iRight = secondPassiveTabRightPaneRect;
+ }
+ else if ( aActiveTab == 3 )
+ {
+ aLayout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = secondPassiveTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = secondPassiveTabRightPaneRect;
+
+ aLayout.iThirdTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iThirdTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iThirdTab.iRight = activeTabRightPaneRect;
+ }
+
+ aLayout.iFourthTab.iLeft = TRect(0,0,0,0);
+ aLayout.iFourthTab.iMiddle = TRect(0,0,0,0);
+ aLayout.iFourthTab.iRight = TRect(0,0,0,0);
+
+ return aLayout;
+ }
+
+CAknTabGroupGraphics::SAknTabGroupBackgroundLayout CAknTabGroupGraphics::ThreeLongTabNarrowBackground(
+ TInt aActiveTab ) const
+ {
+ SAknTabGroupBackgroundLayout aLayout;
+
+ TBool landscape( Layout_Meta_Data::IsLandscapeOrientation() );
+
+ // navi tabs pane
+ TRect parentRect( NarrowParentRect() );
+
+ // navi tabs 3 pane
+ TRect naviTabsThreePaneRect(
+ RectFromLayout( parentRect,
+ AknLayoutScalable_Avkon::navi_tabs_3_long_pane_srt() ) );
+
+ TRect tabsPassiveFirstPaneRect;
+ TRect tabsPassiveSecondPaneRect;
+ TRect tabsActivePaneRect;
+
+ // We don't want to use options, just assume that active and passive tabs are same sizes.
+ TRect parent( naviTabsThreePaneRect );
+
+ TAknWindowComponentLayout aFirstTab(
+ AknLayoutScalable_Avkon::tabs_3_long_active_pane_srt( 0 ) );
+
+ TAknWindowComponentLayout aSecondTab(
+ AknLayoutScalable_Avkon::tabs_3_long_passive_pane_srt( 0 ) );
+
+ TAknWindowComponentLayout aThirdTab(
+ AknLayoutScalable_Avkon::tabs_3_long_passive_pane_cp_srt( 0 ) );
+
+ if ( aActiveTab == 1 )
+ {
+ tabsActivePaneRect = RectFromLayout( parent, aFirstTab );
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, aSecondTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, aThirdTab );
+ }
+ else if ( aActiveTab == 2)
+ {
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, aFirstTab );
+ tabsActivePaneRect = RectFromLayout( parent, aSecondTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, aThirdTab );
+ }
+ else if ( aActiveTab == 3)
+ {
+ tabsPassiveFirstPaneRect = RectFromLayout( parent, aFirstTab );
+ tabsPassiveSecondPaneRect = RectFromLayout( parent, aSecondTab );
+ tabsActivePaneRect = RectFromLayout( parent, aThirdTab );
+ }
+
+ // Tabs 3 first passive tab pane
+ TRect tabsThreePassiveFirstPaneRect( tabsPassiveFirstPaneRect );
+
+ // Tabs 3 second passive tab pane
+ TRect tabsThreePassiveSecondPaneRect( tabsPassiveSecondPaneRect );
+
+ // Tabs 3 active tab pane
+ TRect tabsThreeActivePaneRect( tabsActivePaneRect );
+
+ TAknWindowComponentLayout passivePaneLayout(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_cp5_srt( landscape ) );
+ TAknWindowComponentLayout passiveLayout1(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g1_cp5_srt() );
+ TAknWindowComponentLayout passiveLayout2(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g2_cp5_srt() );
+ TAknWindowComponentLayout passiveLayout3(
+ AknLayoutScalable_Avkon::bg_passive_tab_pane_g3_cp5_srt() );
+
+ // bg active tab pane
+ TRect tabsBackgroundActivePaneRect(
+ RectFromLayout( tabsThreeActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_cp5_srt( landscape ) ) );
+
+ // bg first passive tab pane
+ TRect tabsBackgroundFirstPassivePaneRect(
+ RectFromLayout( tabsThreePassiveFirstPaneRect,
+ passivePaneLayout ) );
+
+ // bg second passive tab pane
+ TRect tabsBackgroundSecondPassivePaneRect(
+ RectFromLayout( tabsThreePassiveSecondPaneRect,
+ passivePaneLayout ) );
+
+
+ // Active tab left
+ TRect activeTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g1_cp5_srt() ) );
+
+ // Active tab middle
+ TRect activeTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g2_cp5_srt() ) );
+
+ // Active tab right
+ TRect activeTabRightPaneRect(
+ RectFromLayout( tabsBackgroundActivePaneRect,
+ AknLayoutScalable_Avkon::bg_active_tab_pane_g3_cp5_srt() ) );
+
+
+ // First passive tab left
+ TRect firstPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveLayout1 ) );
+
+ // First passive tab middle
+ TRect firstPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveLayout2 ) );
+
+ // First passive tab right
+ TRect firstPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundFirstPassivePaneRect,
+ passiveLayout3 ) );
+
+
+ // Second passive tab left
+ TRect secondPassiveTabLeftPaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveLayout1 ) );
+
+ // Second passive tab middle
+ TRect secondPassiveTabMiddlePaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveLayout2 ) );
+
+ // Second passive tab right
+ TRect secondPassiveTabRightPaneRect(
+ RectFromLayout( tabsBackgroundSecondPassivePaneRect,
+ passiveLayout3 ) );
+
+
+ if ( aActiveTab == 1 )
+ {
+ aLayout.iFirstTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = activeTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iThirdTab.iLeft = secondPassiveTabLeftPaneRect;
+ aLayout.iThirdTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ aLayout.iThirdTab.iRight = secondPassiveTabRightPaneRect;
+ }
+ else if ( aActiveTab == 2)
+ {
+ aLayout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = activeTabRightPaneRect;
+
+ aLayout.iThirdTab.iLeft = secondPassiveTabLeftPaneRect;
+ aLayout.iThirdTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ aLayout.iThirdTab.iRight = secondPassiveTabRightPaneRect;
+ }
+ else if ( aActiveTab == 3)
+ {
+ aLayout.iFirstTab.iLeft = firstPassiveTabLeftPaneRect;
+ aLayout.iFirstTab.iMiddle = firstPassiveTabMiddlePaneRect;
+ aLayout.iFirstTab.iRight = firstPassiveTabRightPaneRect;
+
+ aLayout.iSecondTab.iLeft = secondPassiveTabLeftPaneRect;
+ aLayout.iSecondTab.iMiddle = secondPassiveTabMiddlePaneRect;
+ aLayout.iSecondTab.iRight = secondPassiveTabRightPaneRect;
+
+ aLayout.iThirdTab.iLeft = activeTabLeftPaneRect;
+ aLayout.iThirdTab.iMiddle = activeTabMiddlePaneRect;
+ aLayout.iThirdTab.iRight = activeTabRightPaneRect;
+ }
+
+ aLayout.iFourthTab.iLeft = TRect(0,0,0,0);
+ aLayout.iFourthTab.iMiddle = TRect(0,0,0,0);
+ aLayout.iFourthTab.iRight = TRect(0,0,0,0);
+
+ return aLayout;
+ }
+
+void CAknTabGroupGraphics::DrawThreeLongTabBackground( TTabDrawMode aTabDrawMode,
+ TInt aActiveTab, CBitmapContext* aGc,
+ SAknTabGroupBackgroundLayout& aLayout ) const
+ {
+ // If not given layout, then get the default layout
+ if ( !aLayout.iUse )
+ {
+ aLayout = ThreeLongTabBackground( aActiveTab );
+ }
+
+ if ( aActiveTab == 1 )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+ }
+ else if ( aActiveTab == 2)
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+ }
+ else if ( aActiveTab == 3)
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+ }
+ }
+
+void CAknTabGroupGraphics::DrawThreeLongTabNarrowBackground( TTabDrawMode aTabDrawMode,
+ TInt aActiveTab,
+ CBitmapContext* aGc,
+ SAknTabGroupBackgroundLayout& aLayout ) const
+ {
+ // If not given layout, then get the default layout
+ if ( !aLayout.iUse )
+ {
+ aLayout = ThreeLongTabBackground( aActiveTab );
+ }
+
+ if ( aActiveTab == 1 )
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+ }
+ else if ( aActiveTab == 2)
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+ }
+ else if ( aActiveTab == 3)
+ {
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iFirstTab.iLeft,
+ aLayout.iFirstTab.iMiddle,
+ aLayout.iFirstTab.iRight,
+ aGc );
+ DrawPassiveTab( aTabDrawMode,
+ aLayout.iSecondTab.iLeft,
+ aLayout.iSecondTab.iMiddle,
+ aLayout.iSecondTab.iRight,
+ aGc );
+ DrawActiveTab( aTabDrawMode,
+ aLayout.iThirdTab.iLeft,
+ aLayout.iThirdTab.iMiddle,
+ aLayout.iThirdTab.iRight,
+ aGc );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Draws single tab graphics for an active tab.
+// ---------------------------------------------------------------------------
+//
+void CAknTabGroupGraphics::DrawActiveTab( TTabDrawMode aTabDrawMode,
+ TRect aLeft,
+ TRect aMiddle,
+ TRect aRight,
+ CBitmapContext* aGc ) const
+ {
+ AknIconUtils::SetSize( iActiveTabLeft,
+ aLeft.Size(),
+ EAspectRatioNotPreserved );
+
+ AknIconUtils::SetSize( iActiveTabMiddle,
+ aMiddle.Size(),
+ EAspectRatioNotPreserved );
+
+ AknIconUtils::SetSize( iActiveTabRight,
+ aRight.Size(),
+ EAspectRatioNotPreserved );
+
+ TRect rect( aLeft );
+
+ if ( aTabDrawMode == CAknTabGroupGraphics::ENoDraw )
+ {
+ return;
+ }
+ else if ( aTabDrawMode == CAknTabGroupGraphics::ENormal )
+ {
+ aGc->BitBltMasked( rect.iTl,
+ iActiveTabLeft,
+ TRect( 0, 0, rect.Width(), rect.Height() ),
+ iActiveTabLeftMask,
+ ETrue );
+
+ rect = aMiddle;
+ aGc->BitBltMasked( rect.iTl,
+ iActiveTabMiddle,
+ TRect( 0, 0, rect.Width(), rect.Height() ),
+ iActiveTabMiddleMask,
+ ETrue );
+
+ rect = aRight;
+ aGc->BitBltMasked( rect.iTl,
+ iActiveTabRight,
+ TRect( 0, 0, rect.Width(), rect.Height() ),
+ iActiveTabRightMask,
+ ETrue );
+ }
+ else if ( aTabDrawMode == CAknTabGroupGraphics::EBitmapOnly )
+ {
+ aGc->BitBlt( rect.iTl,
+ iActiveTabLeft,
+ TRect( 0, 0, rect.Width(), rect.Height() ) );
+ rect = aMiddle;
+
+ aGc->BitBlt( rect.iTl,
+ iActiveTabMiddle,
+ TRect( 0, 0, rect.Width(), rect.Height() ) );
+
+ rect = aRight;
+ aGc->BitBlt( rect.iTl,
+ iActiveTabRight,
+ TRect( 0, 0, rect.Width(), rect.Height() ) );
+
+ }
+ else if ( aTabDrawMode == CAknTabGroupGraphics::EMaskOnly )
+ {
+ aGc->BitBltMasked( rect.iTl,
+ iActiveTabLeftMask,
+ TRect( 0, 0, rect.Width(), rect.Height() ),
+ iActiveTabLeftMask,
+ ETrue );
+
+ rect = aMiddle;
+ aGc->BitBltMasked( rect.iTl,
+ iActiveTabMiddleMask,
+ TRect( 0, 0, rect.Width(), rect.Height() ),
+ iActiveTabMiddleMask,
+ ETrue );
+
+ rect = aRight;
+ aGc->BitBltMasked( rect.iTl,
+ iActiveTabRightMask,
+ TRect( 0, 0, rect.Width(), rect.Height() ),
+ iActiveTabRightMask,
+ ETrue );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Draws single tab graphics for a passive tab.
+// ---------------------------------------------------------------------------
+//
+void CAknTabGroupGraphics::DrawPassiveTab( TTabDrawMode aDrawMode,
+ TRect aLeft,
+ TRect aMiddle,
+ TRect aRight,
+ CBitmapContext* aGc,
+ TBool aFaded ) const
+ {
+ AknIconUtils::SetSize( iPassiveTabLeft,
+ aLeft.Size(),
+ EAspectRatioNotPreserved );
+
+ AknIconUtils::SetSize( iPassiveTabMiddle,
+ aMiddle.Size(),
+ EAspectRatioNotPreserved );
+
+ AknIconUtils::SetSize( iPassiveTabRight,
+ aRight.Size(),
+ EAspectRatioNotPreserved );
+
+ TRect rect( aLeft );
+
+ if ( aDrawMode != CAknTabGroupGraphics::ENoDraw )
+ {
+ if ( aFaded )
+ {
+ // Fading not currently supported.
+ /*aGc->SetFadingParameters( KHiddenFadeBlackMap,
+ KHiddenFadeWhiteMap );
+ aGc->SetFaded( ETrue );*/
+ }
+ }
+ else
+ {
+ return;
+ }
+
+ if ( aDrawMode == CAknTabGroupGraphics::ENormal )
+ {
+ aGc->BitBltMasked( rect.iTl,
+ iPassiveTabLeft,
+ TRect( rect.Size() ),
+ iPassiveTabLeftMask,
+ ETrue );
+ rect = aMiddle;
+ aGc->BitBltMasked( rect.iTl,
+ iPassiveTabMiddle,
+ TRect( rect.Size() ),
+ iPassiveTabMiddleMask,
+ ETrue );
+
+ rect = aRight;
+ aGc->BitBltMasked( rect.iTl,
+ iPassiveTabRight,
+ TRect( rect.Size() ),
+ iPassiveTabRightMask,
+ ETrue);
+ }
+ else if ( aDrawMode == CAknTabGroupGraphics::EBitmapOnly )
+ {
+ aGc->BitBlt( rect.iTl, iPassiveTabLeft, TRect( rect.Size() ) );
+
+ rect = aMiddle;
+ aGc->BitBlt( rect.iTl, iPassiveTabMiddle, TRect( rect.Size() ) );
+
+ rect = aRight;
+ aGc->BitBlt( rect.iTl, iPassiveTabRight, TRect( rect.Size() ) );
+ }
+ else if ( aDrawMode == CAknTabGroupGraphics::EMaskOnly )
+ {
+ aGc->BitBltMasked( rect.iTl,
+ iPassiveTabLeftMask,
+ TRect( rect.Size() ),
+ iPassiveTabLeftMask,
+ ETrue );
+
+ rect = aMiddle;
+ aGc->BitBltMasked( rect.iTl,
+ iPassiveTabMiddleMask,
+ TRect( rect.Size() ),
+ iPassiveTabMiddleMask,
+ ETrue );
+
+ rect = aRight;
+ aGc->BitBltMasked( rect.iTl,
+ iPassiveTabRightMask,
+ TRect( rect.Size() ),
+ iPassiveTabRightMask,
+ ETrue );
+ }
+
+ if ( aFaded )
+ {
+ // Fading not currently supported.
+ //aGc->SetFaded( EFalse );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Draws single tab part graphics for a passive tab.
+// ---------------------------------------------------------------------------
+//
+void CAknTabGroupGraphics::DrawPassiveTabBit( TTabDrawMode aDrawMode,
+ TTabPart aTabPart,
+ TRect aRect,
+ CBitmapContext* aGc ) const
+ {
+ if ( aDrawMode == CAknTabGroupGraphics::ENoDraw )
+ {
+ return;
+ }
+
+ // The passive tab bits are always parts of the hidden tabs and
+ // as such always drawn faded.
+ // Fading not currently supported.
+ //aGc->SetFadingParameters( KHiddenFadeBlackMap, KHiddenFadeWhiteMap );
+ //aGc->SetFaded( ETrue );
+
+ CFbsBitmap* passiveTabBit = NULL;
+ CFbsBitmap* passiveTabBitMask = NULL;
+
+ TSize rectSize( aRect.Size() );
+
+ switch ( aTabPart )
+ {
+ case ERight:
+ {
+ AknIconUtils::SetSize( iPassiveTabRight,
+ rectSize,
+ EAspectRatioNotPreserved );
+ passiveTabBit = iPassiveTabRight;
+ passiveTabBitMask = iPassiveTabRightMask;
+ break;
+ }
+
+ case ELeft:
+ {
+ AknIconUtils::SetSize( iPassiveTabLeft,
+ rectSize,
+ EAspectRatioNotPreserved );
+ passiveTabBit = iPassiveTabLeft;
+ passiveTabBitMask = iPassiveTabLeftMask;
+ break;
+ }
+
+ default:
+ {
+ return;
+ }
+ }
+
+ if ( aDrawMode == CAknTabGroupGraphics::ENormal )
+ {
+ aGc->BitBltMasked( aRect.iTl,
+ passiveTabBit,
+ TRect( rectSize ),
+ passiveTabBitMask,
+ ETrue );
+ }
+ else if ( aDrawMode == CAknTabGroupGraphics::EBitmapOnly )
+ {
+ aGc->BitBlt( aRect.iTl, passiveTabBit, TRect( rectSize ) );
+ }
+ else if ( aDrawMode == CAknTabGroupGraphics::EMaskOnly )
+ {
+ aGc->BitBltMasked( aRect.iTl,
+ passiveTabBitMask,
+ TRect( rectSize ),
+ passiveTabBitMask,
+ ETrue );
+ }
+
+ // Fading not currently supported.
+ //aGc->SetFaded( EFalse );
+ }
+
+
+void CAknTabGroupGraphics::LoadTabGraphicsL()
+ {
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+ TAknsItemID iid;
+
+ // active tabs
+ iid = KAknsIIDQgnGrafTabActiveL;
+ AknsUtils::CreateIconL( skin,
+ iid,
+ iActiveTabLeft,
+ iActiveTabLeftMask,
+ AknIconUtils::AvkonIconFileName(),
+ EMbmAvkonQgn_graf_tab_active_l,
+ EMbmAvkonQgn_graf_tab_active_l_mask );
+
+ iid = KAknsIIDQgnGrafTabActiveM;
+ AknsUtils::CreateIconL( skin,
+ iid,
+ iActiveTabMiddle,
+ iActiveTabMiddleMask,
+ AknIconUtils::AvkonIconFileName(),
+ EMbmAvkonQgn_graf_tab_active_m,
+ EMbmAvkonQgn_graf_tab_active_m_mask );
+
+ iid = KAknsIIDQgnGrafTabActiveR;
+ AknsUtils::CreateIconL( skin,
+ iid,
+ iActiveTabRight,
+ iActiveTabRightMask,
+ AknIconUtils::AvkonIconFileName(),
+ EMbmAvkonQgn_graf_tab_active_r,
+ EMbmAvkonQgn_graf_tab_active_r_mask );
+
+ // passive tabs
+ iid = KAknsIIDQgnGrafTabPassiveL;
+ AknsUtils::CreateIconL( skin,
+ iid,
+ iPassiveTabLeft,
+ iPassiveTabLeftMask,
+ AknIconUtils::AvkonIconFileName(),
+ EMbmAvkonQgn_graf_tab_passive_l,
+ EMbmAvkonQgn_graf_tab_passive_l_mask );
+
+ iid = KAknsIIDQgnGrafTabPassiveM;
+ AknsUtils::CreateIconL( skin,
+ iid,
+ iPassiveTabMiddle,
+ iPassiveTabMiddleMask,
+ AknIconUtils::AvkonIconFileName(),
+ EMbmAvkonQgn_graf_tab_passive_m,
+ EMbmAvkonQgn_graf_tab_passive_m_mask );
+
+ iid = KAknsIIDQgnGrafTabPassiveR;
+ AknsUtils::CreateIconL( skin,
+ iid,
+ iPassiveTabRight,
+ iPassiveTabRightMask,
+ AknIconUtils::AvkonIconFileName(),
+ EMbmAvkonQgn_graf_tab_passive_r,
+ EMbmAvkonQgn_graf_tab_passive_r_mask );
+
+ // Disable compression of the masks because the pointer event
+ // hit-test needs to use CFbsBitmap::GetPixel()-method.
+ AknIconUtils::DisableCompression( iActiveTabLeftMask );
+ AknIconUtils::DisableCompression( iActiveTabMiddleMask );
+ AknIconUtils::DisableCompression( iActiveTabRightMask );
+ AknIconUtils::DisableCompression( iPassiveTabLeftMask );
+ AknIconUtils::DisableCompression( iPassiveTabMiddleMask );
+ AknIconUtils::DisableCompression( iPassiveTabRightMask );
+ }
+
+TRect CAknTabGroupGraphics::RectFromLayout( TRect aParent,
+ TAknWindowComponentLayout aComponentLayout ) const
+ {
+ TAknLayoutRect layoutRect;
+ layoutRect.LayoutRect( aParent, aComponentLayout );
+ return layoutRect.Rect();
+ }
+
+
+TRect CAknTabGroupGraphics::NarrowParentRect() const
+ {
+ // screen
+ TRect screenRect;
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect );
+
+ TBool landscape( Layout_Meta_Data::IsLandscapeOrientation() );
+
+ // top area
+ TAknWindowComponentLayout areaLayout;
+ if ( landscape )
+ {
+ areaLayout = AknLayoutScalable_Avkon::area_top_pane( 8 );
+ }
+ else
+ {
+ areaLayout = AknLayoutScalable_Avkon::area_top_pane( 6 );
+ }
+ TRect areaRect( RectFromLayout( screenRect, areaLayout ) );
+
+ // navi pane
+ TRect naviRect(
+ RectFromLayout( areaRect, AknLayoutScalable_Avkon::navi_pane( 2 ) ) );
+
+ // short navi pane
+ TAknWindowComponentLayout naviSrtLayout;
+ if ( landscape )
+ {
+ naviSrtLayout = AknLayoutScalable_Avkon::navi_pane_srt( 0 );
+ }
+ else
+ {
+ naviSrtLayout = AknLayoutScalable_Avkon::navi_pane_srt( 3 );
+ }
+ TRect naviSrtRect( RectFromLayout( areaRect, naviSrtLayout ) );
+
+ TRect parentRect( naviSrtRect );
+
+ // Set relative to navipane coordinates
+ parentRect.Move( -naviRect.iTl.iX, 0 );
+ parentRect.iTl.iY = 0;
+ parentRect.SetHeight( iTabGroupBackgroundParent.Height() );
+
+ // navi navi pane
+ TRect naviNaviPaneRect(
+ RectFromLayout( parentRect,
+ AknLayoutScalable_Avkon::navi_navi_pane_srt() ) );
+
+ // navi tabs pane
+ TRect naviNaviTabsPaneRect(
+ RectFromLayout( naviNaviPaneRect,
+ AknLayoutScalable_Avkon::navi_navi_tabs_pane_srt() ) );
+
+ if ( !landscape )
+ {
+ // In portrait mode the indicator pane width must be
+ // taken into account separately.
+ TAknWindowLineLayout indicatorPaneLayout(
+ AknLayoutScalable_Avkon::uni_indicator_pane( 1 ).LayoutLine() );
+ naviNaviTabsPaneRect.Move(
+ AknLayoutUtils::LayoutMirrored() ? indicatorPaneLayout.iW :
+ -indicatorPaneLayout.iW,
+ 0 );
+ }
+
+ return naviNaviTabsPaneRect;
+ }
+
+
+TBool CAknTabGroupGraphics::TabGroupBackgroundAvailable()
+ {
+ // 1. If SVG icons are not available, return false. We don't
+ // want to use bitmap versions because those would look ugly in
+ // this case (we prefer to default then to old style bitmaps).
+ //
+ // 2. If currently acive skin provides old bitmap tabs we
+ // don't want to override those for skin backwards
+ // compatibility reasons. But not in stacon pane because
+ // many old skins do not look good in that layout.
+ //
+ // 3. Finally check if scalable UI data is not available
+ // we cannot draw tabs from SVG because we don't have
+ // access to layout data.
+
+#ifndef __SCALABLE_ICONS
+ return EFalse; // 1
+#endif
+
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+ TAknsItemID iid;
+ iid.Set( EAknsMajorAvkon, EMbmAvkonQgn_graf_tab_21 );
+
+ if ( AknsUtils::GetCachedBitmap( skin, iid ) &&
+ !AknStatuspaneUtils::StaconPaneActive() )
+ {
+ return EFalse; // 2.
+ }
+
+ return iTabGroupBackgroundAvailable; // 3
+ }
+
+// End of file