diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/coretoolkit/src/huiskinbackgroundlayout.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/coretoolkit/src/huiskinbackgroundlayout.cpp Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,434 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include +#include + +#include "huiskinbackroundlayout.h" + +static inline void GetScalableViaPane( TRect& aRect, const TRect& aParentRect, + const TAknWindowComponentLayout& aIntermediateLayout, + const TAknWindowComponentLayout& aFinalLayout ) + { + TAknLayoutRect layout; + layout.LayoutRect( aParentRect, + TAknWindowComponentLayout::Compose( + aIntermediateLayout, aFinalLayout).LayoutLine() ); + aRect = layout.Rect(); + } + + +TAknsItemID GetParent( const TAknsItemID& aIID ) + { + if( aIID.iMajor == EAknsMajorSkin ) + { + switch( aIID.iMinor ) + { + case EAknsMinorQsnBgScreen: + return KAknsIIDNone; + + case EAknsMinorQsnBgScreenIdle: + case EAknsMinorQsnBgScreenMp: + return KAknsIIDQsnBgScreen; + case EAknsMinorQsnBgAreaMain: + case EAknsMinorQsnBgAreaMainAppsGrid: + case EAknsMinorQsnBgAreaMainListGene: + case EAknsMinorQsnBgAreaMainListSet: + case EAknsMinorQsnBgAreaMainMessage: + return KAknsIIDQsnBgScreen; + + case EAknsMinorQsnBgAreaMainHigh: + case EAknsMinorQsnBgAreaMainCalc: + case EAknsMinorQsnBgAreaMainPinb: + case EAknsMinorQsnBgAreaMainQdial: + return KAknsIIDQsnBgScreen; + + case EAknsMinorQsnBgAreaMainMp: + return KAknsIIDQsnBgScreenMp; + + case EAknsMinorQsnBgAreaMainFlat: + case EAknsMinorQsnBgAreaMainSmall: + return KAknsIIDQsnBgScreen; +#ifdef RD_FULLSCREEN_WALLPAPER + case EAknsMinorWallpaper: + return KAknsIIDQsnBgScreenIdle; +#else + case EAknsMinorWallpaper: + return KAknsIIDQsnBgAreaMainIdle; +#endif //RD_FULLSCREEN_WALLPAPER + + case EAknsMinorQsnBgAreaMainIdle: + case EAknsMinorQsnBgAreaMainIdleDimmed: +#ifdef RD_FULLSCREEN_WALLPAPER + return KAknsIIDWallpaper; +#else + return KAknsIIDQsnBgScreenIdle; +#endif // RD_FULLSCREEN_WALLPAPER + + case EAknsMinorQsnBgAreaStatus: + return KAknsIIDQsnBgScreen; + + case EAknsMinorQsnBgAreaStatusIdle: + return KAknsIIDQsnBgScreenIdle; + + case EAknsMinorQsnBgAreaStaconRt: + case EAknsMinorQsnBgAreaStaconLt: + case EAknsMinorQsnBgAreaStaconRb: + case EAknsMinorQsnBgAreaStaconLb: + return KAknsIIDQsnBgScreen; + + case EAknsMinorQsnBgAreaStaconRtIdle: + case EAknsMinorQsnBgAreaStaconLtIdle: + case EAknsMinorQsnBgAreaStaconRbIdle: + case EAknsMinorQsnBgAreaStaconLbIdle: + return KAknsIIDQsnBgScreenIdle; + + case EAknsMinorQsnBgAreaControl: + case EAknsMinorQsnBgAreaControlPopup: + return KAknsIIDQsnBgScreen; + + case EAknsMinorQsnBgAreaControlMp: + return KAknsIIDQsnBgScreenMp; + + case EAknsMinorQsnBgAreaControlIdle: + return KAknsIIDQsnBgScreenIdle; + + case EAknsMinorQsnBgColumn0: + case EAknsMinorQsnBgColumnA: + case EAknsMinorQsnBgColumnAB: + case EAknsMinorQsnBgColumnC0: + case EAknsMinorQsnBgColumnCA: + case EAknsMinorQsnBgColumnCAB: + return KAknsIIDQsnBgAreaMainListGene; + + case EAknsMinorQsnBgSliceList0: + case EAknsMinorQsnBgSliceListA: + case EAknsMinorQsnBgSliceListAB: + return KAknsIIDQsnBgAreaMainListGene; + + // INSERTION POINT for layout parent relations + } + } + else if( aIID.iMajor == EAknsMajorAvkon ) + { + switch( aIID.iMinor ) + { + case EAknsMinorQsnBgNavipaneSolid: + case EAknsMinorQsnBgNavipaneWipe: + return KAknsIIDQsnBgAreaStatus; + + case EAknsMinorQsnBgNavipaneSolidIdle: + case EAknsMinorQsnBgNavipaneWipeIdle: + return KAknsIIDQsnBgAreaStatusIdle; + } + } + + return KAknsIIDDefault; + } + +TBool GetItemLayout( const TAknsItemID& aIID, + const TRect& aParentRect, TRect& aRect ) + { + if (!CCoeEnv::Static()) + { //ToDO + aRect = aParentRect; + return ETrue; + } + //--------------------------------------- + const AknLayoutScalable_Avkon::CInstance& iAknLayoutScalable_Avkon = AknLayoutScalable_Avkon::CustomisationInstance(); + TAknWindowLineLayout screenLayout = AknLayout::screen(); + TRect iScreenRect = screenLayout.Rect(); + //--------------------------------------- + TRect normParentRect( TPoint(0,0), aParentRect.Size() ); + + + TAknLayoutRect layRect; + + if( aIID.iMajor == EAknsMajorSkin ) { + switch( aIID.iMinor ) + { + case EAknsMinorQsnBgScreen: +#ifdef RD_FULLSCREEN_WALLPAPER + case EAknsMinorWallpaper: +#endif //RD_FULLSCREEN_WALLPAPER + { + aRect = iScreenRect; + return ETrue; + } + case EAknsMinorQsnBgScreenIdle: + case EAknsMinorQsnBgScreenMp: + { + aRect = normParentRect; + return ETrue; + } + + case EAknsMinorQsnBgAreaMainAppsGrid: + { +/* if (iGridMode == -1) + { + // if gridmode is -1, it has not beed read + // so read it here + TRAP_IGNORE( iGridMode = GetGridModeL() ); + } + if (!Layout_Meta_Data::IsLandscapeOrientation() && iGridMode == 1) //3x4 mode + { + layRect.LayoutRect( normParentRect, + iAknLayoutScalable_Avkon.main_pane(7)); + aRect = layRect.Rect(); + return ETrue; + } + else // normal 3x3 mode + { + return AknLayoutUtils::LayoutMetricsRect( + AknLayoutUtils::EMainPane, aRect ); + }*/ + } + + case EAknsMinorQsnBgAreaMain: + case EAknsMinorQsnBgAreaMainListGene: + case EAknsMinorQsnBgAreaMainListSet: + case EAknsMinorQsnBgAreaMainMessage: + layRect.LayoutRect( normParentRect, + AknLayout::main_pane( normParentRect, 0, 1, 1 ) ); + aRect = layRect.Rect(); + return ETrue; + + case EAknsMinorQsnBgAreaMainFlat: + { + layRect.LayoutRect( normParentRect, + iAknLayoutScalable_Avkon.main_pane(7)); + aRect = layRect.Rect(); + return ETrue; + } + case EAknsMinorQsnBgAreaMainSmall: + { + layRect.LayoutRect( normParentRect, + iAknLayoutScalable_Avkon.main_pane(6)); + aRect = layRect.Rect(); + return ETrue; + } + + case EAknsMinorQsnBgAreaMainHigh: + case EAknsMinorQsnBgAreaMainCalc: + case EAknsMinorQsnBgAreaMainPinb: + case EAknsMinorQsnBgAreaMainQdial: + case EAknsMinorQsnBgAreaMainMp: + { + layRect.LayoutRect( normParentRect, + AknLayout::main_pane( normParentRect, 0, 0, 1 ) ); + aRect = layRect.Rect(); + return ETrue; + } + + case EAknsMinorQsnBgAreaMainIdle: + case EAknsMinorQsnBgAreaMainIdleDimmed: + { + layRect.LayoutRect( normParentRect, + AknLayout::main_pane( normParentRect, 0, 1, 1 ) ); + aRect = layRect.Rect(); + return ETrue; + } + + case EAknsMinorQsnBgAreaStatus: + { + GetScalableViaPane( aRect, normParentRect, + iAknLayoutScalable_Avkon.area_top_pane(0), + iAknLayoutScalable_Avkon.status_pane(0) ); + + return ETrue; + } + + case EAknsMinorQsnBgAreaStatusIdle: + { + GetScalableViaPane( aRect, normParentRect, + iAknLayoutScalable_Avkon.area_top_pane(0), + iAknLayoutScalable_Avkon.status_pane(0) ); + + return ETrue; + } + + case EAknsMinorQsnBgAreaStaconRt: + case EAknsMinorQsnBgAreaStaconLt: + case EAknsMinorQsnBgAreaStaconRtIdle: + case EAknsMinorQsnBgAreaStaconLtIdle: + { + GetScalableViaPane( aRect, normParentRect, + iAknLayoutScalable_Avkon.area_top_pane(2), + iAknLayoutScalable_Avkon.stacon_top_pane() ); + return ETrue; + } + + case EAknsMinorQsnBgAreaStaconRb: + case EAknsMinorQsnBgAreaStaconLb: + case EAknsMinorQsnBgAreaStaconRbIdle: + case EAknsMinorQsnBgAreaStaconLbIdle: + { + GetScalableViaPane( aRect, normParentRect, + iAknLayoutScalable_Avkon.area_bottom_pane(2), + iAknLayoutScalable_Avkon.stacon_bottom_pane() ); + return ETrue; + } + + case EAknsMinorQsnBgAreaControl: + case EAknsMinorQsnBgAreaControlPopup: + case EAknsMinorQsnBgAreaControlIdle: + case EAknsMinorQsnBgAreaControlMp: + { + layRect.LayoutRect( normParentRect, + AknLayout::control_pane( normParentRect) ); + aRect = layRect.Rect(); + return ETrue; + } + + case EAknsMinorQsnBgColumn0: + { + layRect.LayoutRect( normParentRect, + SkinLayout::Column_background_and_list_slice_skin_placing_Line_1() ); + aRect = layRect.Rect(); + return ETrue; + } + + case EAknsMinorQsnBgColumnA: + { + layRect.LayoutRect( normParentRect, + SkinLayout::Column_background_and_list_slice_skin_placing_Line_2() ); + aRect = layRect.Rect(); + return ETrue; + } + + case EAknsMinorQsnBgColumnAB: + { + layRect.LayoutRect( normParentRect, + SkinLayout::Column_background_and_list_slice_skin_placing_Line_3() ); + aRect = layRect.Rect(); + return ETrue; + } + + case EAknsMinorQsnBgColumnC0: + { + layRect.LayoutRect( normParentRect, + SkinLayout::Column_background_and_list_slice_skin_placing_Line_4() ); + aRect = layRect.Rect(); + return ETrue; + } + + case EAknsMinorQsnBgColumnCA: + { + layRect.LayoutRect( normParentRect, + SkinLayout::Column_background_and_list_slice_skin_placing_Line_5() ); + aRect = layRect.Rect(); + return ETrue; + } + + case EAknsMinorQsnBgColumnCAB: + { + layRect.LayoutRect( normParentRect, + SkinLayout::Column_background_and_list_slice_skin_placing_Line_6() ); + aRect = layRect.Rect(); + return ETrue; + } + + case EAknsMinorQsnBgSliceList0: + case EAknsMinorQsnBgSliceListA: + case EAknsMinorQsnBgSliceListAB: + { + layRect.LayoutRect( normParentRect, + SkinLayout::Column_background_and_list_slice_skin_placing_Line_7() ); + aRect = layRect.Rect(); + return ETrue; + } +#ifndef RD_FULLSCREEN_WALLPAPER + case EAknsMinorWallpaper: + { + aRect = normParentRect; + return ETrue; + } +#endif //RD_FULLSCREEN_WALLPAPER + + // INSERTION POINT for layout information retrieval + } + } + else if( aIID.iMajor == EAknsMajorAvkon ) + { + switch( aIID.iMinor ) + { + case EAknsMinorQsnBgNavipaneSolid: + { + layRect.LayoutRect( normParentRect, + iAknLayoutScalable_Avkon.status_pane_g1(0) ); + aRect = layRect.Rect(); + // Artificial correction + aRect.iTl.iX = 0; + aRect.SetWidth( aParentRect.Width() ); + return ETrue; + } + + case EAknsMinorQsnBgNavipaneWipe: + { + layRect.LayoutRect( normParentRect, + iAknLayoutScalable_Avkon.status_pane_g1(0) ); + aRect = layRect.Rect(); + // Artificial correction + aRect.iTl.iX = 0; + aRect.SetWidth( aParentRect.Width() ); + return ETrue; + } + + case EAknsMinorQsnBgNavipaneSolidIdle: + { + layRect.LayoutRect( normParentRect, + iAknLayoutScalable_Avkon.status_pane_g1(0) ); + aRect = layRect.Rect(); + // Artificial correction + aRect.iTl.iX = 0; + aRect.SetWidth( aParentRect.Width() ); + return ETrue; + } + + case EAknsMinorQsnBgNavipaneWipeIdle: + { + layRect.LayoutRect( normParentRect, + iAknLayoutScalable_Avkon.status_pane_g1(0) ); + aRect = layRect.Rect(); + // Artificial correction + aRect.iTl.iX = 0; + aRect.SetWidth( aParentRect.Width() ); + return ETrue; + } + } + } + + return EFalse; + } + +EXPORT_C void GetRectForItem(const TAknsItemID& aID, TRect& aParentRect, TRect& aOutRect) + { + TAknsItemID parent = GetParent(aID); + TRect parentRect; + TRect itemRect; + + if (parent != KAknsIIDDefault)//KAknsIIDNone) // go recursively down to the root element + { + GetRectForItem(parent, aParentRect, aOutRect); + } + else // root element + { + CHuiStatic::LayoutMetricsRect(AknLayoutUtils::EScreen, aParentRect); + } + GetItemLayout( aID,aParentRect, aOutRect ); + aParentRect = aOutRect; + }