diff -r 000000000000 -r 1ddebce53859 camerauis/cameraapp/generic/src/cambatterypanedrawer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraapp/generic/src/cambatterypanedrawer.cpp Thu Jan 07 16:18:56 2010 +0200 @@ -0,0 +1,345 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implemantation for CCamBatteryPaneDrawer class. +* +* Copyright © 2007-2008 Nokia. All rights reserved. +* This material, including documentation and any related computer +* programs, is protected by copyright controlled by Nokia. All +* rights are reserved. Copying, including reproducing, storing, +* adapting or translating, any or all of this material requires the +* prior written consent of Nokia. This material also contains +* confidential information which may not be disclosed to others +* without the prior written consent of Nokia. + +* +* +*/ + + +#include "cambatterypanedrawer.h" + +#include +#include +#include +#include // KAvkonBitmapFile +#include // FbsBitmap +#include +#include +#include +#include // TAknWindowLineLayout +#include +#include +#include + +#include +#include + +#include "CamUtility.h" +#include "cambitmapitem.h" + +const TInt KCamDefaultBatteryCellHeight = 3; +const TInt KCamDefaultBatteryCellMargin = 1; + +// --------------------------------------------------------------------------- +// CCamBatteryPaneDrawer::CCamBatteryPaneDrawer +// --------------------------------------------------------------------------- +// +CCamBatteryPaneDrawer::CCamBatteryPaneDrawer() + { + } + +// --------------------------------------------------------------------------- +// CCamBatteryPaneDrawer::~CCamBatteryPaneDrawer +// --------------------------------------------------------------------------- +// +CCamBatteryPaneDrawer::~CCamBatteryPaneDrawer() + { + PRINT ( _L("Camera => ~CCamBatteryPaneDrawer") ); + + DeleteIcons(); + + PRINT ( _L("Camera <= ~CCamBatteryPaneDrawer") ); + } + +// --------------------------------------------------------------------------- +// CCamBatteryPaneDrawer::NewL +// --------------------------------------------------------------------------- +// +CCamBatteryPaneDrawer* CCamBatteryPaneDrawer::NewL() + { + PRINT ( _L("Camera => CCamBatteryPaneDrawer::NewL") ); + + CCamBatteryPaneDrawer* self = new (ELeave) CCamBatteryPaneDrawer(); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); // self + PRINT ( _L("Camera <= CCamBatteryPaneDrawer::NewL") ); + return self; + } + +// --------------------------------------------------------------------------- +// CCamBatteryPaneDrawer::ConstructL +// --------------------------------------------------------------------------- +// +void CCamBatteryPaneDrawer::ConstructL() + { + PRINT( _L("Camera => CCamBatteryPaneDrawer::ConstructL") ); + + // Load icon bitmaps + LoadIconsL(); + // Load/calculate layout data + LoadLayoutsL(); + + PRINT( _L("Camera <= CCamBatteryPaneDrawer::ConstructL") ); + } + +// --------------------------------------------------------------------------- +// CCamBatteryPaneDrawer::SetBatteryStrength +// --------------------------------------------------------------------------- +// +void CCamBatteryPaneDrawer::SetBatteryStrength( TInt aBatteryStrength ) + { + iBatteryStrength = aBatteryStrength; + } + +// --------------------------------------------------------------------------- +// CCamBatteryPaneDrawer::SetLocation +// --------------------------------------------------------------------------- +// +void CCamBatteryPaneDrawer::SetLocation( const TPoint& aLocation ) + { + iRect = TRect( aLocation, iRect.Size() ); + } + +// --------------------------------------------------------------------------- +// CCamBatteryPaneDrawer::LoadIconsL +// --------------------------------------------------------------------------- +// +void CCamBatteryPaneDrawer::LoadIconsL() + { + PRINT( _L("Camera => CCamBatteryPaneDrawer::LoadIconsL") ); + + // Delete existing icon bitmaps + DeleteIcons(); + + // Load and resize battery icon and mask + delete iBatteryIcon; + iBatteryIcon = NULL; + iBatteryIcon = CCamBitmapItem::NewL( + EMbmCameraappQgn_prop_cam_battery_icon, + EMbmCameraappQgn_prop_cam_battery_icon_mask ); + + // Load and resize battery strength icon and mask + delete iBatteryStrengthIcon; + iBatteryStrengthIcon = NULL; + iBatteryStrengthIcon = CCamBitmapItem::NewL( + EMbmCameraappQgn_indi_cam_battery_strength, + EMbmCameraappQgn_indi_cam_battery_strength_mask ); + + PRINT( _L("Camera <= CCamBatteryPaneDrawer::LoadIconsL") ); + } + + +// --------------------------------------------------------------------------- +// CCamBatteryPaneDrawer::Rect +// --------------------------------------------------------------------------- +// +TRect CCamBatteryPaneDrawer::Rect() const + { + return iRect; + } + +// --------------------------------------------------------------------------- +// CCamBatteryPaneDrawer::Draw +// --------------------------------------------------------------------------- +// +void CCamBatteryPaneDrawer::Draw( CBitmapContext& aGc ) const + { + // Make sure that no brush is being used + aGc.SetBrushStyle( CGraphicsContext::ENullBrush ); + + if( iBatteryStrengthIcon ) + { + TSize iconSize = iBatteryStrengthIcon->BitmapSize(); + + TRect strengthIconCropRect( + 0, + iconSize.iHeight - BatteryStrengthIconHeight( iBatteryStrength ), + iconSize.iWidth, + iconSize.iHeight ); + + // Draw the icon, with correct battery strength + iBatteryStrengthIcon->DrawPartial( + aGc, + iBatteryStrengthIcon->LayoutRect(), + strengthIconCropRect ); + } + + if( iBatteryIcon ) + { + iBatteryIcon->Draw( aGc ); + } + } + +// --------------------------------------------------------------------------- +// CCamBatteryPaneDrawer::ClearBattery +// --------------------------------------------------------------------------- +// +void CCamBatteryPaneDrawer::ClearBattery( CBitmapContext& aGc ) const + { + PRINT( _L("Camera => CCamBatteryPaneDrawer::ClearBattery") ); + + // Get the battery pane rectangle + const TRect rect = Rect(); + aGc.SetPenStyle( CGraphicsContext::ENullPen ); + aGc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + aGc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha ); + aGc.SetBrushColor( TRgb::Color16MA( 0 ) ); + aGc.Clear( rect ); //DrawRect( rect ); + PRINT( _L("Camera <= CCamBatteryPaneDrawer::ClearBattery") ); + } + +// --------------------------------------------------------------------------- +// CCamBatteryPaneDrawer::LoadLayoutsL +// --------------------------------------------------------------------------- +// +void CCamBatteryPaneDrawer::LoadLayoutsL() + { + PRINT( _L("Camera => CCamBatteryPaneDrawer::LoadLayoutsL") ); + if ( CamUtility::IsNhdDevice() ) + { + TouchLayoutL(); + } + else + { + NonTouchLayoutL(); + } + } + + +// --------------------------------------------------------------------------- +// CCamBatteryPaneDrawer::BatteryStrengthIconHeight +// --------------------------------------------------------------------------- +// +TInt CCamBatteryPaneDrawer::BatteryStrengthIconHeight( TInt aLevel ) const + { + TInt cellHeight = KCamDefaultBatteryCellHeight; + if ( iBatteryStrengthIcon ) + { + cellHeight = iBatteryStrengthIcon->BitmapSize().iHeight / + KMaxBatteryStrength; + } + return ( aLevel * cellHeight ) + KCamDefaultBatteryCellMargin; + } + +// --------------------------------------------------------------------------- +// CCamBatteryPaneDrawer::DeleteIcons +// --------------------------------------------------------------------------- +// +void CCamBatteryPaneDrawer::DeleteIcons() + { + delete iBatteryIcon; + iBatteryIcon = NULL; + delete iBatteryStrengthIcon; + iBatteryStrengthIcon = NULL; + } + +// --------------------------------------------------------------------------- +// CCamBatteryPaneDrawer::HandleResourceChange +// --------------------------------------------------------------------------- +// +void CCamBatteryPaneDrawer::HandleResourceChange( TInt /* aType */ ) + { + PRINT( _L("Camera => CCamBatteryPaneDrawer::HandleResourceChange") ); + + // Called when either skin or color scheme has changed. + // We need to reload icons and re-create the battery color bitmap. + + + // Reload icons + TRAP_IGNORE(LoadIconsL()); + TRAP_IGNORE(LoadLayoutsL()); + + PRINT( _L("Camera <= CCamBatteryPaneDrawer::HandleResourceChange") ); + } + +// --------------------------------------------------------------------------- +// CCamBatteryPaneDrawer::NonTouchLayout +// --------------------------------------------------------------------------- +void CCamBatteryPaneDrawer::NonTouchLayoutL() + { + TRect screen; + TAknLayoutRect indicatorsPane; + TAknLayoutRect batteryPane; + TInt cba = AknLayoutUtils::CbaLocation() == + AknLayoutUtils::EAknCbaLocationLeft? + AknLayoutUtils::EAknCbaLocationLeft : 0; + + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screen ); + indicatorsPane.LayoutRect( screen, + AknLayoutScalable_Apps::cam6_indi_pane( cba )); + batteryPane.LayoutRect( indicatorsPane.Rect(), + AknLayoutScalable_Apps::cam6_battery_pane( cba ) ); + iRect = batteryPane.Rect(); + + // Battery icon + if ( iBatteryIcon ) + { + iBatteryIcon->SetLayoutL( iRect, + AknLayoutScalable_Apps::cam6_battery_pane_g1( cba )); + } + + // Battery strength icon + if ( iBatteryStrengthIcon ) + { + iBatteryStrengthIcon->SetLayoutL( iRect, + AknLayoutScalable_Apps::cam6_battery_pane_g2( cba )); + } + } + +// --------------------------------------------------------------------------- +// CCamBatteryPaneDrawer::TouchLayoutL +// --------------------------------------------------------------------------- +void CCamBatteryPaneDrawer::TouchLayoutL() + { + TRect screen; + TAknLayoutRect indicatorsPane; + TAknLayoutRect batteryPane; + TInt var = Layout_Meta_Data::IsLandscapeOrientation(); + + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screen ); + indicatorsPane.LayoutRect( screen, + AknLayoutScalable_Apps::cam4_indicators_pane( var ).LayoutLine() ); + batteryPane.LayoutRect( indicatorsPane.Rect(), + AknLayoutScalable_Apps::cam4_battery_pane( var ).LayoutLine() ); + iRect = batteryPane.Rect(); + + // Battery icon + if ( iBatteryIcon ) + { + iBatteryIcon->SetLayoutL( iRect, + AknLayoutScalable_Apps::cam4_battery_pane_g2( var ).LayoutLine() ); + } + + // Battery strength icon + if ( iBatteryStrengthIcon ) + { + iBatteryStrengthIcon->SetLayoutL( iRect, + AknLayoutScalable_Apps::cam4_battery_pane_g1( var ).LayoutLine() ); + } + } + +// End of file +