camerauis/activepalette/Src/CActivePalettePluginBase.cpp
changeset 0 1ddebce53859
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/activepalette/Src/CActivePalettePluginBase.cpp	Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,335 @@
+/*
+* Copyright (c) 2007 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:  Active Palette Base plugin class*
+*/
+
+
+/**
+ * @file CActivePalettePluginBase.cpp
+ * Active Palette Base plugin class
+ */
+
+// INCLUDE FILES
+
+#include "CActivePalettePluginBase.h"
+#include "ActivePalette2Logger.h"
+
+#include "ActivePalette2Utils.h"
+
+#include <fbs.h>
+#include <bitstd.h>
+
+#include "ActivePalette2Cfg.h"
+
+
+// CONSTANTS
+
+const TInt KAnimPhase1 = 0;
+const TInt KAnimPhase2 = 1;
+const TInt KAnimPhaseMax = KAnimPhase2;
+const TInt KAnimNofPhases = 2;
+
+const TInt KAnimDeviatinFactorMul = 1;
+const TInt KAnimDeviatinFactorDiv = 5;
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CAnimationHelper::CAnimationHelper()
+// C++ constructor
+// -----------------------------------------------------------------------------
+//
+CAnimationHelper::CAnimationHelper()
+    {
+	// empty
+    }
+
+// -----------------------------------------------------------------------------
+// CAnimationHelper::ConstructL()
+// 2nd phase construction
+// -----------------------------------------------------------------------------
+//
+void CAnimationHelper::ConstructL(const TSize aSize, const TBool aMaskNeeded)
+    {
+	ActivePalette2Utils::CreateDrawingObjectsL(aSize,&iFrame,&iFrameDevice,&iFrameGc);
+	if (aMaskNeeded)
+	    {
+		ActivePalette2Utils::CreateDrawingObjectsL(EGray256,
+			aSize,&iFrameMask,&iFrameMaskDevice,&iFrameMaskGc);		
+	    }
+    }
+
+// -----------------------------------------------------------------------------
+// CAnimationHelper::~CAnimationHelper()
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CAnimationHelper::~CAnimationHelper()
+    {
+    // DeleteDrawingObjects checks passed pointers to ensure they are not null
+	ActivePalette2Utils::DeleteDrawingObjects(&iFrame,&iFrameDevice,&iFrameGc);
+	ActivePalette2Utils::DeleteDrawingObjects(&iFrameMask,&iFrameMaskDevice,&iFrameMaskGc);
+    }
+
+// -----------------------------------------------------------------------------
+// CAnimationHelper::NewL()
+// Symbian 2 phase construction
+// -----------------------------------------------------------------------------
+//
+CAnimationHelper * CAnimationHelper::NewL(const TSize aSize, const TBool aMaskNeeded)
+    {
+	CAnimationHelper * self = new (ELeave) CAnimationHelper();
+	
+	CleanupStack::PushL(self);
+	self->ConstructL(aSize, aMaskNeeded);
+	CleanupStack::Pop(self);
+	
+	return self;
+    }
+
+// -----------------------------------------------------------------------------
+// NActivePalettePluginFactory::TPluginCreationParams::PluginObserver()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C MActivePalettePluginObserver& NActivePalettePluginFactory::TPluginCreationParams::PluginObserver(void) const 
+    { 
+	return iObserver; 
+    }
+
+// -----------------------------------------------------------------------------
+// NActivePalettePluginFactory::TPluginCreationParams::Dimensions(void)
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TSize NActivePalettePluginFactory::TPluginCreationParams::Dimensions(void) const
+    {
+	return iDimensions;	
+    }
+
+// -----------------------------------------------------------------------------
+// NActivePalettePluginFactory::TPluginCreationParams::TPluginCreationParams()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C NActivePalettePluginFactory::TPluginCreationParams::TPluginCreationParams(MActivePalettePluginObserver & aObserver,
+						  												  const TSize& aDimensions)
+:   iObserver(aObserver),
+    iDimensions(aDimensions)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CActivePalettePluginBase::CActivePalettePluginBase()
+// C++ constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CActivePalettePluginBase::CActivePalettePluginBase(const NActivePalettePluginFactory::TPluginCreationParams & aCreationParams)
+:   iPluginObserver(aCreationParams.PluginObserver())
+    {
+	LOGTEXT( _L( "CActivePalettePluginBase::CActivePalettePluginBase" ) );
+	PluginObserver().NotifyPluginCreated(this);
+    }
+
+// -----------------------------------------------------------------------------
+// CActivePalettePluginBase::~CActivePalettePluginBase()
+// Destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CActivePalettePluginBase::~CActivePalettePluginBase(void)
+    {
+	LOGTEXT( _L( "CActivePalettePluginBase::~CActivePalettePluginBase" ) );
+	CBase::Delete(iAnimationHelper);
+	iAnimationHelper = NULL;
+	PluginObserver().NotifyPluginDestroyed(this);
+    }
+
+// -----------------------------------------------------------------------------
+// CActivePalettePluginBase::ConstructL()
+// 2nd phase constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CActivePalettePluginBase::ConstructL(const NActivePalettePluginFactory::TPluginCreationParams& /*aCreationParams*/, 
+									               const TDesC8 & /*aCustomDataDes*/,
+									               const TInt /*aCustomDataInt*/)
+    {
+	LOGTEXT( _L( "CActivePalettePluginBase::ConstructL" ) );
+	// empty
+    }
+
+// -----------------------------------------------------------------------------
+// CActivePalettePluginBase::Shutdown()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CActivePalettePluginBase::Shutdown(void)
+    {
+	LOGTEXT( _L( "CActivePalettePluginBase::Shutdown" ) );
+	// empty
+    }
+
+// -----------------------------------------------------------------------------
+// CActivePalettePluginBase::HandleMessageL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CActivePalettePluginBase::HandleMessageL(const TInt aMessageID,
+                                                       const TDesC8& /*aDataDes*/,
+                                                       const TInt /*aDataInt*/)
+    {
+	LOGTEXT1( _L( "CActivePalettePluginBase::HandleMessageL, message ID: %d" ), aMessageID );
+	// empty
+	if (aMessageID)
+	    {
+	    // no compiler warning
+	    }
+    }
+
+// -----------------------------------------------------------------------------
+// CActivePalettePluginBase::PrepareAniFramesL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CActivePalettePluginBase::PrepareAniFramesL(const TInt aAniType,
+									  					  TPluginAnimationInfo& aAniInfo,
+									  					  const TPluginAnimationInfo& aDefaultAniInfo,
+				 						  	   		      const CFbsBitmap& aItemIcon,
+							      		  			      const CFbsBitmap* aItemIconMask)
+    {
+	LOGTEXT1( _L( "CActivePalettePluginBase::PrepareAniFramesL, AniType ID: %d" ), aAniType);
+	
+	// use default animation info
+	aAniInfo = aDefaultAniInfo; 
+	
+	// create data for icon and mask frames
+	iAnimationHelper = CAnimationHelper::NewL(aDefaultAniInfo.iFrameSize,
+											  (NULL != aItemIconMask));	
+
+	if (aAniType)
+	    {
+	    // no compiler warning
+	    }
+	if (aItemIcon.Handle())
+	    {
+	    // no compiler warning
+	    }
+    }
+
+// -----------------------------------------------------------------------------
+// CActivePalettePluginBase::ReleaseAniFrames()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CActivePalettePluginBase::ReleaseAniFrames(const TInt aAniType)
+    {
+	LOGTEXT1( _L( "CActivePalettePluginBase::ReleaseAniFrames, AniType ID: %d" ), aAniType);
+
+	CBase::Delete(iAnimationHelper);
+	iAnimationHelper = NULL;
+
+	if (aAniType) 
+	    {
+	    // no compiler warning
+	    }
+    }
+
+// -----------------------------------------------------------------------------
+// CActivePalettePluginBase::ProduceAniFrame(
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CActivePalettePluginBase::ProduceAniFrame(
+    TInt aAniType,
+    TInt aFrameNo,
+    const TPluginAnimationInfo& aAniInfo,
+    const CFbsBitmap& aItemIcon,
+    const CFbsBitmap* aItemIconMask,
+    CFbsBitmap** aFrame,
+    CFbsBitmap** aFrameMask,
+    TBool& aOwnershipTransferForFrame,
+    TBool& aOwnershipTransferForMask)
+    {
+	LOGTEXT2( 
+		_L( "CActivePalettePluginBase::ProduceAniFrame, AniType ID: %d, frame no : %d" ), 
+		aAniType,
+		aFrameNo);
+
+	CAnimationHelper* ani = static_cast<CAnimationHelper*>(iAnimationHelper);
+
+	aOwnershipTransferForFrame = EFalse;
+	aOwnershipTransferForMask  = EFalse;		
+	
+	*aFrame 		= ani->iFrame;
+	*aFrameMask 	= ani->iFrameMask;
+
+	// empty mask, transparent
+	if (NULL != ani->iFrameMaskGc)
+	    {		
+		ani->iFrameMaskGc->Reset();
+		ani->iFrameMaskGc->SetBrushColor(KRgbBlack);
+		ani->iFrameMaskGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+		ani->iFrameMaskGc->Clear(); 
+	    }
+
+	// empty frame	
+	ani->iFrameGc->Reset();
+	ani->iFrameGc->SetBrushColor(KRgbWhite);
+	ani->iFrameGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+	ani->iFrameGc->Clear(); 
+	
+	// ani frame
+	TInt phase = Min(KAnimPhaseMax, 
+					 KAnimNofPhases * aFrameNo / aAniInfo.iNofFrames);
+	
+	TInt inPhaseMax = aAniInfo.iNofFrames / KAnimNofPhases;
+	
+	TInt inPhaseOfs = Min(inPhaseMax, aFrameNo - (phase * KAnimPhaseMax));
+
+	TInt lenX = aAniInfo.iFrameSize.iWidth;
+	TInt lenY = aAniInfo.iFrameSize.iHeight;
+	
+	TInt devX = lenX * KAnimDeviatinFactorMul / KAnimDeviatinFactorDiv;
+	TInt devY = lenY * KAnimDeviatinFactorMul / KAnimDeviatinFactorDiv;
+	
+	TInt szx(0);
+	TInt szy(0);
+	
+	TInt addX = devX * inPhaseOfs / inPhaseMax;
+	TInt addY = devY * inPhaseOfs / inPhaseMax;
+	
+	switch (phase)
+	    {
+		case KAnimPhase1:
+			szx = lenX - addX;
+			szy = lenY - addY;
+			break;
+
+		case KAnimPhase2:
+		default:
+			szx = lenX - devX + addX;
+			szy = lenY - devY + addY;
+			break;
+	    }
+
+	TRect frameRect(TPoint( (lenX - szx) / 2, (lenY - szy) / 2),
+					TSize(szx, szy));
+	TRect iconRect(TPoint(0,0), aItemIcon.SizeInPixels());
+	
+	if (NULL != aItemIconMask && NULL != ani->iFrameMaskGc)
+	    {
+		ani->iFrameMaskGc->DrawBitmap(frameRect,aItemIconMask,iconRect);
+	    }
+	
+	ani->iFrameGc->DrawBitmap(frameRect,&aItemIcon,iconRect);		
+	
+	if (aAniType)
+	    {
+	    // no compiler warning
+	    }
+    }
+
+// End of File