diff -r a1caeb42b3a3 -r fcdfafb36fe7 uifw/AvKon/src/AknTabGrpGraphics.cpp --- a/uifw/AvKon/src/AknTabGrpGraphics.cpp Thu Jul 15 18:56:19 2010 +0300 +++ b/uifw/AvKon/src/AknTabGrpGraphics.cpp Thu Aug 19 10:11:06 2010 +0300 @@ -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