diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraapp/generic/src/CamDecorator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraapp/generic/src/CamDecorator.cpp Wed Sep 01 12:30:54 2010 +0100 @@ -0,0 +1,301 @@ +/* +* 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: Camera UI decorator* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Cam.hrh" +#include "CamAppController.h" +#include "CamAppUi.h" +#include "CamObservable.h" +#include "CamRecordingIconDecoration.h" +#include "CamDecorator.h" +#include "camlogging.h" +#include "CameraUiConfigManager.h" +#include "CamUtility.h" + +// ----------------------------------------------------------------------------- +// CCamDecorator::CCamDecorator() +// Default constructor +// ----------------------------------------------------------------------------- +// +CCamDecorator::CCamDecorator( CCamAppController& aController ) + : iController( aController ) + { + } + +// ----------------------------------------------------------------------------- +// CCamDecorator::NewL +// Factory method to safely create a new instance +// ----------------------------------------------------------------------------- +// +CCamDecorator* +CCamDecorator::NewL( CCamAppController& aController, + TInt aResourceId, + MCamObserver* aObserver /*=NULL*/ ) + { + CCamDecorator* me = + new (ELeave) CCamDecorator( aController ); + + CleanupStack::PushL( me ); + me->ConstructL( aResourceId, aObserver ); + CleanupStack::Pop( me ); + + return me; + } + +// ----------------------------------------------------------------------------- +// CCamDecorator::ConstructL +// Initializes a new instance +// ----------------------------------------------------------------------------- +// +void CCamDecorator::ConstructL(TInt aResourceId, MCamObserver* aObserver) + { + if ( aResourceId ) + { + iPossibleObserver = aObserver; + + TResourceReader reader; + CEikonEnv::Static()->CreateResourceReaderLC( reader, aResourceId ); + + TInt numDecorations = reader.ReadInt16(); + + TInt currentDecoration = 0; + TScreenDecorationType decorationType; + for ( currentDecoration = 0; currentDecoration < numDecorations; currentDecoration++ ) + { + decorationType = static_cast(reader.ReadInt16()); + + switch(decorationType) + { + case ECamScreenDecorationBlendedBackground: + CreateBlendedBackgroundL(reader); + break; + + case ECamScreenDecorationDVFBlanker: + CreateDVFBlankerL(reader); + break; + + case ECamScreenDecorationRecordingIcon: + CreateRecordingIconL(reader); + break; + + default: + break; + } + } + + CleanupStack::PopAndDestroy(); + + } + else + { + iDrawNothing = ETrue; + } + } + +// ----------------------------------------------------------------------------- +// CCamDecorator::~CCamDecorator() +// Destructor +// ----------------------------------------------------------------------------- +// +CCamDecorator::~CCamDecorator() + { + PRINT( _L("Camera => ~CCamDecorator") ); + iDVFBlankers.Reset(); + iRecordingIcons.ResetAndDestroy(); + PRINT( _L("Camera <= ~CCamDecorator") ); + } + +// ----------------------------------------------------------------------------- +// CCamDecorator::Draw +// Draws all the decorations +// ----------------------------------------------------------------------------- +// +void CCamDecorator::Draw( CBitmapContext& aGc, const TRect& aDrawRect, const TBool aForceBlankers ) + { + if ( !iDrawNothing ) + { + TInt element = 0; + TInt count = 0; + + // Draw the blankers + count = iDVFBlankers.Count(); + + if ( count > 0 ) + { + TRgb blankerColour( KRgbWhite ); + CCamAppUi* appUi = static_cast( CEikonEnv::Static()->AppUi() ); + if ( appUi && appUi->IsDirectViewfinderActive()) + { + blankerColour = KRgbWhite; + + aGc.SetPenStyle( CGraphicsContext::ENullPen ); + aGc.SetBrushColor( blankerColour ); + aGc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + + for ( element = 0; element < count; element++ ) + { + aGc.DrawRect( iDVFBlankers[element] ); + } + + aGc.Reset(); + } + } + + if ( aForceBlankers ) + { + count = iDVFBlankers.Count(); + if ( count > 0 ) + { + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + CWindowGc& gc = CCoeEnv::Static()->SystemGc(); + for ( element = 0; element < count; element++ ) + { + AknsDrawUtils::Background( skin, NULL, gc, iDVFBlankers[element] ); + } + } + } + + // Draw the recording icons + count = iRecordingIcons.Count(); + for ( element = 0; element < count; element++ ) + { + iRecordingIcons[element]->Draw( aGc, aDrawRect ); + } + } + } + +// ----------------------------------------------------------------------------- +// CCamDecorator::CreateBlendedBackgroundL +// Create a new blended background decoration based on resource +// ----------------------------------------------------------------------------- +// +void CCamDecorator::CreateBlendedBackgroundL(TResourceReader& aResourceReader) + { + PRINT( _L("Camera => CCamDecorator::CreateBlendedBackgroundL") ); + aResourceReader.ReadInt16(); // tl_x + aResourceReader.ReadInt16(); // tl_y + aResourceReader.ReadInt16(); // width + + /* + CBlendedBackground* blendedBackground = CBlendedBackground::NewL( TPoint(tl_x, tl_y), width, KBlendedBackgroundDisplayMode ); + + CleanupStack::PushL( blendedBackground ); + + User::LeaveIfError(iBlendedBackgrounds.Append(blendedBackground)); + + CleanupStack::Pop( blendedBackground ); + */ + + PRINT( _L("Camera <= CCamDecorator::CreateBlendedBackgroundL") ); + } + +// ----------------------------------------------------------------------------- +// CCamDecorator::CreateDVFBlankerL +// Create a new dvf blanker decoration based on resource +// ----------------------------------------------------------------------------- +// +void CCamDecorator::CreateDVFBlankerL(TResourceReader& aResourceReader) + { + PRINT( _L("Camera => CCamDecorator::CreateDVFBlankerL") ); + TInt tl_x = aResourceReader.ReadInt16(); + TInt tl_y = aResourceReader.ReadInt16(); + TInt width = aResourceReader.ReadInt16(); + TInt height = aResourceReader.ReadInt16(); + + TRect blanker(TPoint(tl_x, tl_y), TSize(width, height)); + + User::LeaveIfError(iDVFBlankers.Append(blanker)); + PRINT( _L("Camera <= CCamDecorator::CreateDVFBlankerL") ); + } + +// ----------------------------------------------------------------------------- +// CCamDecorator::CreateRecordingIconL +// Create a new recording icon decoration based on resource +// ----------------------------------------------------------------------------- +// +void CCamDecorator::CreateRecordingIconL(TResourceReader& /* aResourceReader */) + { + PRINT( _L("Camera => CCamDecorator::CreateRecordingIconL") ); + + TRect screenRect; + if ( Layout_Meta_Data::IsLandscapeOrientation() || CamUtility::IsNhdDevice() ) + { + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect ); + } + else + { + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, screenRect ); + } + + TAknLayoutRect progressPaneLayout; + TAknLayoutRect recIconLayout; + TInt vari = Layout_Meta_Data::IsLandscapeOrientation(); + if ( CamUtility::IsNhdDevice() ) + { + progressPaneLayout.LayoutRect( screenRect, + AknLayoutScalable_Apps::vid4_progress_pane( vari ) ); + + recIconLayout.LayoutRect( progressPaneLayout.Rect(), + AknLayoutScalable_Apps::vid4_progress_pane_g3( !vari ) ); + } + else + { + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + progressPaneLayout.LayoutRect( screenRect, + AknLayoutScalable_Apps::vid6_indi_pane( !vari ) ); + recIconLayout.LayoutRect( progressPaneLayout.Rect(), + AknLayoutScalable_Apps::vid6_indi_pane_g5( vari ) ); + + } + else + { + progressPaneLayout.LayoutRect( screenRect, + AknLayoutScalable_Apps::vid6_indi_pane( 3 ) ); + recIconLayout.LayoutRect( progressPaneLayout.Rect(), + AknLayoutScalable_Apps::vid6_indi_pane_g5( 2 ) ); + } + } + + TRect location = recIconLayout.Rect(); + + CCamRecordingIconDecoration* recIcon = + CCamRecordingIconDecoration::NewL( location, iController ); + + CleanupStack::PushL( recIcon ); + + if ( iPossibleObserver ) + { + recIcon->RegisterObserverL(iPossibleObserver); + } + + User::LeaveIfError(iRecordingIcons.Append(recIcon)); + + CleanupStack::Pop( recIcon ); + PRINT( _L("Camera <= CCamDecorator::CreateRecordingIconL") ); + } + +// End of File