--- a/uifw/AvKon/src/AknTabGrpGraphics.cpp Tue Aug 31 15:28:30 2010 +0300
+++ b/uifw/AvKon/src/AknTabGrpGraphics.cpp Wed Sep 01 12:16:19 2010 +0100
@@ -49,6 +49,76 @@
//const TUint8 KHiddenFadeBlackMap( 20 );
//const TUint8 KHiddenFadeWhiteMap( 255 );
+
+/****************************** New functions for refactoring tab drawing logic ******************************/
+/**
+ * Specifies the structure of each drawing instruction
+ */
+struct TTabInstruction
+ {
+ // 1 - Active tab, 2 - Passive tab, 3 - HighLight tab, 4 - Bit tab right, 5 - Bit tab left.
+ TInt iTabStyle;
+
+ // 1 - iFirstTab, 2 - iSecondTab, 3 - iThirdTab, 4 - iFourthTab, 5 - iHiddenTabLeft, 6 - iHiddenTabRight.
+ TInt iLayoutIdx;
+
+ // Rect for DrawPassiveTabBit.
+ TRect iBitTabRect;
+
+ // Fade for DrawPassiveTab.
+ TBool iPassiveFade;
+ };
+
+/******************** Three help functions for setting struct TTabInstruction. *******************/
+/**
+ * Composes the instructions used for drawing passive bit tab.
+ *
+ */
+void AssemblyPassiveTabBitInstruction(
+ TTabInstruction& instruction,
+ TInt aTabStyle,
+ TRect &aRect )
+ {
+ instruction.iTabStyle = aTabStyle;
+ instruction.iBitTabRect = aRect;
+ }
+
+/**
+ * Composes the instructions used for drawing passive or highlight tab.
+ *
+ */
+void AssemblyPassiveOrHighlightTabInstruction(
+ TTabInstruction& instruction,
+ TInt aHighlightTab,
+ TInt aLayoutIdx,
+ TBool aFade )
+ {
+ if (aHighlightTab != 0 && aHighlightTab == aLayoutIdx)
+ {
+ //Highlight tab
+ instruction.iTabStyle = 3;
+ }
+ else
+ {
+ instruction.iTabStyle = 2;
+ }
+ instruction.iLayoutIdx = aLayoutIdx;
+ instruction.iPassiveFade = aFade;
+ }
+
+/**
+ * Composes the instructions for drawing active tab.
+ *
+ */
+void AssemblyActiveTabInstruction(
+ TTabInstruction& instruction,
+ TInt aLayoutIdx )
+ {
+ instruction.iTabStyle = 1;
+ instruction.iLayoutIdx = aLayoutIdx;
+ }
+
+
// ============================ MEMBER FUNCTIONS ===============================
// -----------------------------------------------------------------------------
@@ -117,217 +187,11 @@
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(
+void CAknTabGroupGraphics::DrawTabGroupBackground(
TTabDrawMode aTabDrawMode,
TBool aLongTabs,
TInt aNumberOfTabs,
@@ -335,91 +199,210 @@
CBitmapContext* aGc,
SAknTabGroupBackgroundLayout& aLayout,
TTabsHidden aTabsHidden,
- TTabAnimationType aAnimation ) const
+ TTabAnimationType aAnimation,
+ TInt aHighlightTab ) const
{
- switch ( aNumberOfTabs )
+ //Set the layout for tab background;
+ ReviseLayoutForTabBackground(aLayout, aNumberOfTabs, aLongTabs, aActiveTab, EFalse, aAnimation);
+
+ TInt insCnt = 0;
+ TTabInstruction instruction[8];
+
+ switch (aNumberOfTabs)
{
case 2:
{
- if ( aLongTabs )
+ if (aActiveTab == 1)
{
- DrawTwoLongTabBackground( aTabDrawMode,
- aActiveTab,
- aGc,
- aLayout );
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 2, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 1);
}
else
{
- DrawTwoTabBackground( aTabDrawMode,
- aActiveTab,
- aGc,
- aLayout );
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 1, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 2);
}
+ }
break;
- }
case 3:
{
if ( aLongTabs )
{
- DrawThreeLongTabBackground( aTabDrawMode,
- aActiveTab,
- aGc,
- aLayout );
+ if (aActiveTab == 1)
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 3, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 2, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 1);
+ }
+ else if ( aActiveTab == 2)
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 1, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 3, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 2);
+ }
+ else if ( aActiveTab == 3)
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 1, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 2, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 3);
+ }
}
else
{
- DrawThreeTabBackground( aTabDrawMode,
- aActiveTab,
- aGc,
- aLayout,
- aTabsHidden,
- aAnimation );
+ TInt xOffset(aLayout.iFirstTab.iRight.iBr.iX - aLayout.iSecondTab.iLeft.iTl.iX);
+
+ if (aActiveTab == 1)
+ {
+ if (aTabsHidden == EOnRightSide)
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 6, ETrue);
+ }
+
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 3, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 2, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 1);
+ }
+ else if (aActiveTab == 2)
+ {
+ switch (aTabsHidden)
+ {
+ case EOnLeftSide:
+ {
+ TRect bitRect(aLayout.iHiddenTabLeft.iLeft);
+ bitRect.Resize(xOffset, 0);
+ AssemblyPassiveTabBitInstruction(instruction[insCnt++], 5, bitRect);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 5,
+ aAnimation != ECycleToLeft ? ETrue : EFalse);
+ }
+ break;
+ case EOnRightSide:
+ {
+ TRect bitRect(aLayout.iHiddenTabRight.iRight);
+ bitRect.Move(-xOffset, 0);
+ bitRect.Resize(xOffset, 0);
+ AssemblyPassiveTabBitInstruction(instruction[insCnt++], 4, bitRect);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 6,
+ aAnimation != ECycleToRight ? ETrue : EFalse);
+ }
+ break;
+ case EOnBothSides:
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 5,
+ aAnimation != ECycleToLeft ? ETrue : EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 6,
+ aAnimation != ECycleToRight ? ETrue : EFalse);
+ }
+ break;
+ case ETwoOnBothSides:
+ {
+ TRect bitRect(aLayout.iHiddenTabLeft.iLeft);
+ bitRect.Resize(xOffset, 0);
+ AssemblyPassiveTabBitInstruction(instruction[insCnt++], 5, bitRect);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 5,
+ aAnimation != ECycleToLeft ? ETrue : EFalse);
+
+ bitRect = aLayout.iHiddenTabRight.iRight;
+ bitRect.Move(-xOffset, 0);
+ bitRect.Resize(xOffset, 0);
+ AssemblyPassiveTabBitInstruction(instruction[insCnt++], 4, bitRect);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 6,
+ aAnimation != ECycleToRight ? ETrue : EFalse);
+ }
+ break;
+ case ENone:
+ default:
+ break;
+ }
+
+ if (aAnimation == ECycleToLeft)
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 3, ETrue);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 2, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 1);
+ }
+ else if ( aAnimation == ECycleToRight )
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 1, ETrue);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 2, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 3);
+ }
+ else
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 1, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 3, EFalse);
+
+ if (aAnimation)
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 2, EFalse);
+ }
+ else
+ {
+ AssemblyActiveTabInstruction(instruction[insCnt++], 2);
+ }
+ }
+ }
+ else if (aActiveTab == 3)
+ {
+ if (aTabsHidden == EOnLeftSide)
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 5, ETrue);
+ }
+
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 1, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 2, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 3);
+ }
}
+ }
break;
- }
case 4:
{
- DrawFourTabBackground( aTabDrawMode,
- aActiveTab,
- aGc,
- aLayout );
+ if (aActiveTab == 1)
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 4, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 3, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 2, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 1);
+ }
+ else if ( aActiveTab == 2 )
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 4, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 3, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 1, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 2);
+ }
+ else if ( aActiveTab == 3 )
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 1, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 2, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 4, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 3);
+ }
+ else if ( aActiveTab == 4 )
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 1, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 2, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], aHighlightTab, 3, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 4);
+ }
+ }
break;
- }
default:
{
#ifdef AVKON_RDEBUG_ERROR
- RDebug::Print( _L("CAknTabGroupGraphics: Unknown tab layout !") );
+ RDebug::Print( _L("CAknTabGroupGraphics: Unknown tab group background !") );
#endif
+ break;
}
}
-
- 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;
- }
- }
+
+ //Draw tab background according to instructions
+ ProcessDrawTabInstructions(instruction, insCnt, aTabDrawMode, aLayout, aGc);
+
+ ReviseLayoutUseFlag(aLayout, aActiveTab);
}
-void CAknTabGroupGraphics::DrawTabGroupNarrowBackgroundL(
+void CAknTabGroupGraphics::DrawTabGroupNarrowBackground(
TTabDrawMode aTabDrawMode,
TBool aLongTabs,
TInt aNumberOfTabs,
@@ -427,111 +410,98 @@
CBitmapContext* aGc,
SAknTabGroupBackgroundLayout& aLayout ) const
{
+ //Set the layout for tab background;
+ ReviseLayoutForTabBackground(aLayout, aNumberOfTabs, aLongTabs, aActiveTab, ETrue, ENoAnimation);
+
+ TInt insCnt = 0;
+ TTabInstruction instruction[6];
+
switch ( aNumberOfTabs )
{
case 2:
{
- if ( aLongTabs )
- {
- if ( !aLayout.iUse )
- {
- aLayout = TwoLongTabNarrowBackground( aActiveTab );
- }
- aLayout.iUse = ETrue;
- DrawTwoLongTabNarrowBackground( aTabDrawMode,
- aActiveTab,
- aGc,
- aLayout );
- }
- else
+ if (aActiveTab == 1)
{
- 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 );
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 2, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 1);
}
else
{
- if ( !aLayout.iUse )
- {
- aLayout = ThreeTabNarrowBackground( aActiveTab );
- }
- aLayout.iUse = ETrue;
- DrawThreeTabNarrowBackground( aTabDrawMode,
- aActiveTab,
- aGc,
- aLayout );
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 1, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 2);
+ }
+ }
+ break;
+ case 3:
+ {
+ if (aActiveTab == 1)
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 3, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 2, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 1);
}
+ else if (aActiveTab == 2)
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 1, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 3, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 2);
+ }
+ else if (aActiveTab == 3)
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 1, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 2, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 3);
+ }
+ }
break;
- }
case 4:
{
- if ( !aLayout.iUse )
+ if (aActiveTab == 1)
{
- aLayout = FourTabNarrowBackground( aActiveTab );
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 4, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 3, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 2, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 1);
+ }
+ else if (aActiveTab == 2)
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 4, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 3, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 1, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 2);
}
- aLayout.iUse = ETrue;
- DrawFourTabNarrowBackground( aTabDrawMode,
- aActiveTab,
- aGc,
- aLayout );
+ else if (aActiveTab == 3)
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 1, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 2, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 4, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 3);
+ }
+ else if (aActiveTab == 4)
+ {
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 1, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 2, EFalse);
+ AssemblyPassiveOrHighlightTabInstruction(instruction[insCnt++], 0, 3, EFalse);
+ AssemblyActiveTabInstruction(instruction[insCnt++], 4);
+ }
+ }
break;
- }
default:
{
#ifdef AVKON_RDEBUG_ERROR
- RDebug::Print( _L("CAknTabGroupGraphics: Unknown tab layout !") );
+ RDebug::Print( _L("CAknTabGroupGraphics: Unknown tab narrow background !") );
#endif
+ break;
}
}
-
- 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;
- }
- }
+
+ //Draw tab background according to instructions
+ ProcessDrawTabInstructions(instruction, insCnt, aTabDrawMode, aLayout, aGc);
+
+ ReviseLayoutUseFlag(aLayout, aActiveTab);
}
+
TBool CAknTabGroupGraphics::TabClickedL( TInt aTabComponent,
const TRect& aTabRect,
const TPoint& aPoint,
@@ -843,91 +813,6 @@
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.
// ---------------------------------------------------------------------------
@@ -1333,339 +1218,6 @@
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
{
@@ -2140,242 +1692,6 @@
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;
@@ -2588,90 +1904,6 @@
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;
@@ -3040,140 +2272,6 @@
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.
// ---------------------------------------------------------------------------
@@ -3628,4 +2726,300 @@
return iTabGroupBackgroundAvailable; // 3
}
+void CAknTabGroupGraphics::DrawHighlightTabL(TTabDrawMode aDrawMode,
+ TRect aLeft, TRect aMiddle, TRect aRight, CBitmapContext* aGc) const
+ {
+ if ( aDrawMode == CAknTabGroupGraphics::ENoDraw )
+ {
+ return;
+ }
+
+ TRect rect( aLeft );
+ CFbsBitmap* activeColorBitmap = new (ELeave) CFbsBitmap();
+ CleanupStack::PushL( activeColorBitmap );
+
+ TDisplayMode screenDisplayMode( iPassiveTabLeft->DisplayMode() );
+ activeColorBitmap->Create( rect.Size(), screenDisplayMode );
+
+ TRgb color;
+ AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), color,
+ KAknsIIDQsnOtherColors, EAknsCIQsnOtherColorsCG25 );
+
+ CFbsBitmapDevice* destinationDevice = CFbsBitmapDevice::NewL( activeColorBitmap );
+ CleanupStack::PushL( destinationDevice );
+ CFbsBitGc* destinationGc;
+ User::LeaveIfError( destinationDevice->CreateContext( destinationGc ) );
+ destinationGc->SetPenColor( color );
+ destinationGc->SetPenStyle( CGraphicsContext::ESolidPen );
+ destinationGc->SetBrushColor( color );
+ destinationGc->SetBrushStyle( CGraphicsContext::ESolidBrush );
+ destinationGc->DrawRect( TRect( activeColorBitmap->SizeInPixels() ) );
+
+ delete destinationGc;
+ CleanupStack::PopAndDestroy( destinationDevice );
+
+ aGc->BitBltMasked( rect.iTl, activeColorBitmap,
+ TRect( 0, 0, rect.Width(), rect.Height() ),
+ iPassiveTabLeftMask, ETrue );
+
+ CleanupStack::PopAndDestroy( activeColorBitmap );
+
+ /*********************************************************************/
+
+ rect = aMiddle;
+
+ CFbsBitmap* activeColorBitmapM = new (ELeave) CFbsBitmap();
+ CleanupStack::PushL( activeColorBitmapM );
+
+ activeColorBitmapM->Create( rect.Size(), screenDisplayMode );
+
+ destinationDevice = CFbsBitmapDevice::NewL( activeColorBitmapM );
+ CleanupStack::PushL( destinationDevice );
+ User::LeaveIfError( destinationDevice->CreateContext( destinationGc ) );
+ destinationGc->SetPenColor( color );
+ destinationGc->SetPenStyle( CGraphicsContext::ESolidPen );
+ destinationGc->SetBrushColor( color );
+ destinationGc->SetBrushStyle( CGraphicsContext::ESolidBrush );
+ destinationGc->DrawRect( TRect( activeColorBitmapM->SizeInPixels() ) );
+
+ delete destinationGc;
+ CleanupStack::PopAndDestroy( destinationDevice );
+
+ aGc->BitBltMasked(rect.iTl, activeColorBitmapM,
+ TRect(0, 0, rect.Width(), rect.Height() ),
+ iPassiveTabMiddleMask, ETrue );
+ CleanupStack::PopAndDestroy( activeColorBitmapM );
+
+ /*********************************************************************/
+
+ rect = aRight;
+
+ CFbsBitmap* activeColorBitmapR = new (ELeave) CFbsBitmap();
+ CleanupStack::PushL( activeColorBitmapR );
+
+ activeColorBitmapR->Create( rect.Size(), screenDisplayMode );
+
+ destinationDevice = CFbsBitmapDevice::NewL( activeColorBitmapR );
+ CleanupStack::PushL( destinationDevice );
+ User::LeaveIfError( destinationDevice->CreateContext( destinationGc ) );
+ destinationGc->SetPenColor( color );
+ destinationGc->SetPenStyle( CGraphicsContext::ESolidPen );
+ destinationGc->SetBrushColor( color );
+ destinationGc->SetBrushStyle( CGraphicsContext::ESolidBrush );
+ destinationGc->DrawRect( TRect( activeColorBitmapR->SizeInPixels() ) );
+
+ delete destinationGc;
+ CleanupStack::PopAndDestroy( destinationDevice );
+ aGc->BitBltMasked( rect.iTl, activeColorBitmapR,
+ TRect(0, 0, rect.Width(), rect.Height() ),
+ iPassiveTabRightMask, ETrue );
+
+ CleanupStack::PopAndDestroy( activeColorBitmapM );
+ }
+
+void CAknTabGroupGraphics::ReviseLayoutForTabBackground(
+ SAknTabGroupBackgroundLayout& aLayout,
+ TInt aNumberOfTabs,
+ TBool aLongTabs,
+ TInt aActiveTab,
+ TBool aIsNarrow,
+ TTabAnimationType aAnimation) const
+ {
+ if (aLayout.iUse)
+ {
+ // aLayout has been set, return directly.
+ return;
+ }
+
+ if (aIsNarrow)
+ {
+ switch (aNumberOfTabs)
+ {
+ case 2:
+ {
+ aLayout = aLongTabs ? TwoLongTabNarrowBackground(aActiveTab) : TwoTabNarrowBackground(aActiveTab);
+ break;
+ }
+ case 3:
+ {
+ aLayout = aLongTabs ? ThreeLongTabNarrowBackground(aActiveTab) : ThreeTabNarrowBackground(aActiveTab);
+ break;
+ }
+ case 4:
+ {
+ aLayout = FourTabNarrowBackground(aActiveTab);
+ break;
+ }
+ default:
+ {
+#ifdef AVKON_RDEBUG_ERROR
+ RDebug::Print(_L("CAknTabGroupGraphics: Unknown narrow tab layout !"));
+#endif
+ }
+ }
+ aLayout.iUse = ETrue;
+ }
+ else
+ {
+ switch (aNumberOfTabs)
+ {
+ case 2:
+ {
+ aLayout = aLongTabs ? TwoLongTabBackground(aActiveTab) : TwoTabBackground(aActiveTab);
+ break;
+ }
+ case 3:
+ {
+ if (aLongTabs)
+ {
+ aLayout = ThreeLongTabBackground(aActiveTab);
+ }
+ else
+ {
+ TInt animActiveTab = aActiveTab;
+ if (aAnimation && aActiveTab == 2)
+ {
+ // Move the tab highlight already during the animation.
+ animActiveTab =
+ aAnimation == ECycleToLeft ? aActiveTab - 1 : aActiveTab + 1;
+ }
+ aLayout = ThreeTabBackground(animActiveTab);
+ }
+ break;
+ }
+ case 4:
+ {
+ aLayout = FourTabBackground(aActiveTab);
+ break;
+ }
+ default:
+ {
+#ifdef AVKON_RDEBUG_ERROR
+ RDebug::Print( _L("CAknTabGroupGraphics: Unknown tab layout !") );
+#endif
+ }
+ }
+ }
+ }
+
+void CAknTabGroupGraphics::ReviseLayoutUseFlag(
+ SAknTabGroupBackgroundLayout& aLayout,
+ TInt aActiveTab) const
+ {
+ 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;
+ }
+ }
+ }
+
+
+#define GET_TABLAYOUT_RECT(idx) do{ \
+ left = aLayout.idx.iLeft; \
+ middle = aLayout.idx.iMiddle; \
+ right = aLayout.idx.iRight; \
+}while (0)
+
+void CAknTabGroupGraphics::ProcessDrawTabInstructions(
+ TTabInstruction *aInstructions,
+ TInt aNumOfIns,
+ TTabDrawMode aTabDrawMode,
+ SAknTabGroupBackgroundLayout& aLayout,
+ CBitmapContext* aGc) const
+ {
+ if (aInstructions == NULL || aNumOfIns <= 0 || aGc == NULL)
+ {
+ return;
+ }
+
+ for ( TInt i = 0; i < aNumOfIns; i++ )
+ {
+ if ( aInstructions[i].iTabStyle == 5 || aInstructions[i].iTabStyle == 6 )
+ {
+ // Draw passive tab bit.
+ DrawPassiveTabBit(aTabDrawMode,
+ aInstructions[i].iTabStyle == 5 ? ELeft : ERight,
+ aInstructions[i].iBitTabRect,
+ aGc);
+ }
+ else
+ {
+ TBool layoutValid = ETrue;
+ TRect left, middle, right;
+ switch (aInstructions[i].iLayoutIdx)
+ {
+ case 1:
+ {
+ GET_TABLAYOUT_RECT(iFirstTab);
+ break;
+ }
+ case 2:
+ {
+ GET_TABLAYOUT_RECT(iSecondTab);
+ break;
+ }
+ case 3:
+ {
+ GET_TABLAYOUT_RECT(iThirdTab);
+ break;
+ }
+ case 4:
+ {
+ GET_TABLAYOUT_RECT(iFourthTab);
+ break;
+ }
+ case 5:
+ {
+ GET_TABLAYOUT_RECT(iHiddenTabLeft);
+ break;
+ }
+ case 6:
+ {
+ GET_TABLAYOUT_RECT(iHiddenTabRight);
+ break;
+ }
+ default:
+ {
+ layoutValid = EFalse;
+ }
+ }
+
+ if (layoutValid)
+ {
+ if (aInstructions[i].iTabStyle == 1)
+ {
+ DrawActiveTab(aTabDrawMode, left, middle, right, aGc);
+ }
+ else if (aInstructions[i].iTabStyle == 2)
+ {
+ DrawPassiveTab(aTabDrawMode, left, middle, right, aGc, aInstructions[i].iPassiveFade);
+ }
+ else if (aInstructions[i].iTabStyle == 3)
+ {
+ TRAP_IGNORE( DrawHighlightTabL(aTabDrawMode, left, middle, right, aGc) );
+ }
+ }
+ }
+ }
+ }
+
// End of file