diff -r 73a1feb507fb -r bc78a40cd63c mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mccscreen.cpp --- a/mmsharing/livecommsui/lcui/tsrc/mustester/Stubs/mceclientstub/src/mccscreen.cpp Tue Aug 31 15:12:07 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,402 +0,0 @@ -/* -* Copyright (c) 2006 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 - -#include "MccScreen.h" -#include "muslogger.h" - -// EXTERNAL DATA STRUCTURES - -// EXTERNAL FUNCTION PROTOTYPES - -// CONSTANTS - -_LIT(KMccWindowGroupName,"32MccVideoWindow"); - -// MACROS - -// LOCAL CONSTANTS AND MACROS - -// MODULE DATA STRUCTURES - -// LOCAL FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// ============================= LOCAL FUNCTIONS =============================== - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CMccScreen::CMccScreen -// ----------------------------------------------------------------------------- -// -CMccScreen* CMccScreen::NewL( - TPoint aPos, - TSize aArea, - TInt aIndex, - TInt aWindowOrdinalPosition, - TInt aWindowOrdinalPriority, - TSize aViewFinderImageSize ) - { - CMccScreen* self = new ( ELeave ) CMccScreen( aPos, - aArea, - aIndex, - aWindowOrdinalPosition, - aWindowOrdinalPriority ); - CleanupStack::PushL( self ); - self->ConstructL( aViewFinderImageSize ); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CMccScreen::CMccScreen -// ----------------------------------------------------------------------------- -// -CMccScreen::CMccScreen( - TPoint aPos, - TSize aArea, - TInt aIndex, - TInt aWindowOrdinalPosition, - TInt aWindowOrdinalPriority ) : - iDeviceIndex( aIndex ), - iPosition( aPos ), - iArea( aArea ), - iWindowOrdinalPosition( aWindowOrdinalPosition ), - iWindowOrdinalPriority( aWindowOrdinalPriority ), - iAborted( ETrue ) - { - } - -// ----------------------------------------------------------------------------- -// CMccScreen::CMccScreen -// ----------------------------------------------------------------------------- -// -CMccScreen::~CMccScreen() - { - MUS_LOG( "CMccScreen::~CMccScreen" ) - - DetachFrame(); // Must do bitmap detach before releasing window resources - delete iDirectScreenAccess; - delete iDev; - delete iRw; - delete iRwGroup; - iRwSession.Close(); - - MUS_LOG( "CMccScreen::~CMccScreen, exit" ) - } - -// ----------------------------------------------------------------------------- -// CMccScreen::CMccScreen -// ----------------------------------------------------------------------------- -// -void CMccScreen::ConstructL( TSize aViewFinderImageSize ) - { - MUS_LOG( "CMccScreen::ConstructL" ) - User::LeaveIfError( iRwSession.Connect() ); - - // Create window group - TInt groupId = iRwSession.GetFocusWindowGroup(); - iRwGroup = new (ELeave) RWindowGroup( iRwSession ) ; - //TInt handle = iRwSession.GetWindowGroupHandle( groupId ); - - MUS_LOG1( "CMccScreen::ConstructL, window ordinal pos", iWindowOrdinalPosition ) - MUS_LOG1( "CMccScreen::ConstructL, window ordinal priority", iWindowOrdinalPriority ) - - iRwGroup->Construct( groupId, EFalse ); - iRwGroup->SetName( KMccWindowGroupName ); - - iRwGroup->SetOrdinalPosition( iWindowOrdinalPosition, iWindowOrdinalPriority ); - - // Create screen device - iDev = new (ELeave) CWsScreenDevice( iRwSession ); - iDev->Construct( iDeviceIndex ); - - TInt currMode = iDev->CurrentScreenMode(); - MUS_LOG1( "CMccScreen::ConstructL, screen device mode = %d", currMode ) - - TPixelsTwipsAndRotation sizeAndRotation; - iDev->GetScreenModeSizeAndRotation( currMode, sizeAndRotation ); - MUS_LOG2( "CMccScreen::ConstructL, screen device size %d %d", - sizeAndRotation.iPixelSize.iWidth, - sizeAndRotation.iPixelSize.iHeight ) - - MUS_LOG1( "CMccScreen::ConstructL, screen device orientation %d", - sizeAndRotation.iRotation ) - - // Create window - iRw = new (ELeave) RWindow( iRwSession ); - - iRw->Construct( *iRwGroup, (TUint32) this + 2 ); - - MUS_LOG2( "CMccScreen::ConstructL, window pos %d %d", iPosition.iX, iPosition.iY ) - MUS_LOG2( "CMccScreen::ConstructL, window size %d %d", iArea.iWidth, iArea.iHeight ) - - iRw->SetPosition( iPosition ); - iRw->SetBackgroundColor( KRgbBlack ); - iRw->SetSize( iArea ); - iRw->SetOrdinalPosition( iWindowOrdinalPosition ); - iRw->Activate(); - iRwSession.Flush(); - - // Create direct screen access - iDirectScreenAccess = CDirectScreenAccess::NewL( iRwSession, *iDev, *iRw, *this ); - - UpdateViewFinderArea( aViewFinderImageSize ); - - MUS_LOG2( "CMccScreen::ConstructL, viewfinder pos %d %d", - iViewFinderImageRect.iTl.iX, iViewFinderImageRect.iTl.iY ) - MUS_LOG2( "CMccScreen::ConstructL, viewfinder size %d %d", - iViewFinderImageRect.Width(), iViewFinderImageRect.Height() ) - - MUS_LOG( "CMccScreen::ConstructL, exit" ) - } - -// ----------------------------------------------------------------------------- -// CMccScreen::CMccScreen -// ----------------------------------------------------------------------------- -// -void CMccScreen::StartL() - { - MUS_LOG( "CMccScreen::StartL" ) - - iAborted = EFalse; - - iDirectScreenAccess->StartL(); - iGc = iDirectScreenAccess->Gc(); - iFbsDev = iDirectScreenAccess->ScreenDevice(); - iRegion = iDirectScreenAccess->DrawingRegion(); - -#ifdef __MCC_CONTROLLER - if ( iRegion && !iRegion->IsEmpty() ) - { - for ( TInt i = 0; i < iRegion->Count(); i++ ) - { - const TRect& regionRect = (*iRegion)[ i ]; - MUS_LOG_INT2( "CMccScreen::StartL, rect tl", regionRect.iTl.iX, regionRect.iTl.iY ) - MUS_LOG_INT2( "CMccScreen::StartL, rect br", regionRect.iBr.iX, regionRect.iBr.iY ) - } - } -#endif - - iGc->SetClippingRegion( iRegion ); - - // Fill with black areas which are not covered by viewfinder image. - // If viewfinder image has not been yet received and drawn, fill whole area. - // - iGc->SetBrushColor( KRgbBlack ); - iGc->SetBrushStyle( CGraphicsContext::ESolidBrush ); - - if ( !iFirstImageDrawn ) - { - // Whole area - TPoint pointTl( 0, 0 ); - TRect rect( pointTl, iArea ); - iGc->DrawRect( rect ); - } - else - { - // Upper area - TPoint pointTl( 0, 0 ); - TPoint pointBr( iArea.iWidth, iViewFinderImageRect.iTl.iY ); - TRect rect( pointTl, pointBr ); - iGc->DrawRect( rect ); - - // Lower area - pointTl.SetXY( 0, iViewFinderImageRect.iBr.iY ); - pointBr.SetXY( iArea.iWidth, iArea.iHeight ); - rect.SetRect( pointTl, pointBr ); - iGc->DrawRect( rect ); - - // Left area - pointTl.SetXY( 0, iViewFinderImageRect.iTl.iY ); - pointBr.SetXY( iViewFinderImageRect.iTl.iX, iViewFinderImageRect.iBr.iY ); - rect.SetRect( pointTl, pointBr ); - iGc->DrawRect( rect ); - - // Right area - pointTl.SetXY( iViewFinderImageRect.iBr.iX, iViewFinderImageRect.iTl.iY ); - pointBr.SetXY( iArea.iWidth, iViewFinderImageRect.iBr.iY ); - rect.SetRect( pointTl, pointBr ); - iGc->DrawRect( rect ); - } - - if ( iAttachedFrame ) - { - MUS_LOG( "CMccScreen::StartL, draw attached frame" ) - - TSize viewFinderImageSize = iAttachedFrame->SizeInPixels(); - - TPoint corner = UpdateViewFinderArea( viewFinderImageSize ); - - iGc->BitBlt( corner, iAttachedFrame ); - } - - DoScreenDeviceUpdate(); - - iGc->SetBrushStyle( CGraphicsContext::ENullBrush ); - - MUS_LOG( "CMccScreen::StartL, exit" ) - } - -// ----------------------------------------------------------------------------- -// CMccScreen::CMccScreen -// ----------------------------------------------------------------------------- -// -void CMccScreen::Stop() - { - MUS_LOG( "CMccScreen::Stop" ) - iDirectScreenAccess->Cancel(); - MUS_LOG( "CMccScreen::Stop, exit" ) - } - -// ----------------------------------------------------------------------------- -// CMccScreen::CMccScreen -// ----------------------------------------------------------------------------- -// -void CMccScreen::Restart( RDirectScreenAccess::TTerminationReasons /*aReason*/ ) - { - MUS_LOG( "CMccScreen::Restart" ) - - TRAP_IGNORE( StartL() ); - } - -// ----------------------------------------------------------------------------- -// CMccScreen::CMccScreen -// ----------------------------------------------------------------------------- -// -void CMccScreen::AbortNow( RDirectScreenAccess::TTerminationReasons /*aReason*/ ) - { - MUS_LOG( "CMccScreen::AbortNow" ) - iDirectScreenAccess->Cancel(); - - iAborted = ETrue; - } - -// ----------------------------------------------------------------------------- -// CMccScreen::CMccScreen -// ----------------------------------------------------------------------------- -// -void CMccScreen::Draw( CFbsBitmap& aFrame ) - { - // When frame draw is requested, attached frame is not anymore drawn - DetachFrame(); - - DoDraw( aFrame ); - } - -// ----------------------------------------------------------------------------- -// CMccScreen::AttachFrameL -// ----------------------------------------------------------------------------- -// -void CMccScreen::AttachFrameL( CFbsBitmap* aFrame ) - { - MUS_LOG( "CMccScreen::AttachFrameL" ) - - __ASSERT_ALWAYS( aFrame, User::Leave( KErrArgument ) ); - - DetachFrame(); - - iAttachedFrame = aFrame; - - DoDraw( *iAttachedFrame ); - - MUS_LOG( "CMccScreen::AttachFrameL, exit" ) - } - -// ----------------------------------------------------------------------------- -// CMccScreen::DetachFrame -// ----------------------------------------------------------------------------- -// -void CMccScreen::DetachFrame() - { - if ( iAttachedFrame ) - { - MUS_LOG( "CMccScreen::DetachFrame, detaching" ) - iAttachedFrame->Reset(); - delete iAttachedFrame; - } - - iAttachedFrame = NULL; - } - -// ----------------------------------------------------------------------------- -// CMccScreen::UpdateViewFinderArea -// ----------------------------------------------------------------------------- -// -TPoint CMccScreen::UpdateViewFinderArea( TSize aViewFinderImageSize ) - { - TPoint corner( 0, 0 ); - if ( aViewFinderImageSize.iWidth < iArea.iWidth ) - { - // Divide the subtraction by two (i.e. do centering) - corner.iX = ( iArea.iWidth - aViewFinderImageSize.iWidth ) >> 1; - } - - if ( aViewFinderImageSize.iHeight < iArea.iHeight ) - { - // Divide the subtraction by two (i.e. do centering) - corner.iY = ( iArea.iHeight - aViewFinderImageSize.iHeight ) >> 1; - } - - iViewFinderImageRect = TRect( corner, aViewFinderImageSize ); - - return corner; - } - -// ----------------------------------------------------------------------------- -// CMccScreen::DoDraw -// ----------------------------------------------------------------------------- -// -void CMccScreen::DoDraw( CFbsBitmap& aFrame ) - { - if ( !iAborted && iGc ) - { - iFirstImageDrawn = ETrue; - - TSize viewFinderImageSize = aFrame.SizeInPixels(); - - TPoint corner = UpdateViewFinderArea( viewFinderImageSize ); - - iGc->BitBlt( corner, &aFrame ); - - DoScreenDeviceUpdate(); - } - } - -// ----------------------------------------------------------------------------- -// CMccScreen::DoScreenDeviceUpdate -// ----------------------------------------------------------------------------- -// -void CMccScreen::DoScreenDeviceUpdate() - { - if ( iFbsDev ) - { - iFbsDev->Update(); - } - } - -// End of file -