epoc32/include/mw/bmpansrv.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:27:01 +0100
branchSymbian2
changeset 3 e1b950c65cb4
parent 2 epoc32/include/bmpansrv.h@2fe1408b6811
child 4 837f303aceeb
permissions -rw-r--r--
Attempt to represent the S^2->S^3 header reorganisation as a series of "hg rename" operations
williamr@2
     1
// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     2
// All rights reserved.
williamr@2
     3
// This component and the accompanying materials are made available
williamr@2
     4
// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
williamr@2
     5
// which accompanies this distribution, and is available
williamr@2
     6
// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
williamr@2
     7
//
williamr@2
     8
// Initial Contributors:
williamr@2
     9
// Nokia Corporation - initial contribution.
williamr@2
    10
//
williamr@2
    11
// Contributors:
williamr@2
    12
//
williamr@2
    13
// Description:
williamr@2
    14
//
williamr@2
    15
williamr@2
    16
williamr@2
    17
williamr@2
    18
/**
williamr@2
    19
 @file
williamr@2
    20
 @internalComponent 
williamr@2
    21
*/
williamr@2
    22
williamr@2
    23
#if !defined(__BMPANSRV_H__)
williamr@2
    24
#define __BMPANSRV_H__
williamr@2
    25
williamr@2
    26
#include <e32std.h>
williamr@2
    27
#include <w32adll.h>
williamr@2
    28
#include <bmpanconsts.h>
williamr@2
    29
#include "bmpancli.h"
williamr@2
    30
#include <e32math.h>
williamr@2
    31
williamr@2
    32
williamr@2
    33
williamr@2
    34
enum TBitmapAnimServerPanic
williamr@2
    35
	{
williamr@2
    36
	EAnimationServerPanicIndexOutOfRange,
williamr@2
    37
	EAnimationServerPanicFrameIntervalNegative
williamr@2
    38
	};
williamr@2
    39
williamr@2
    40
// For packaging the new animation position offset
williamr@2
    41
struct SBitmapAnimNewPosition
williamr@2
    42
	{
williamr@2
    43
	TPoint iPosition;
williamr@2
    44
	};
williamr@2
    45
williamr@2
    46
// For packaging the new animation index
williamr@2
    47
struct SBitmapAnimIndexFrame
williamr@2
    48
	{
williamr@2
    49
	TInt iIndex;
williamr@2
    50
	};
williamr@2
    51
williamr@2
    52
// For packaging the number of cycles
williamr@2
    53
struct SBitmapAnimNumberOfCycles
williamr@2
    54
	{
williamr@2
    55
	TInt iCycles;
williamr@2
    56
	};
williamr@2
    57
williamr@2
    58
williamr@2
    59
williamr@2
    60
/**
williamr@2
    61
 TFrameData
williamr@2
    62
williamr@2
    63
 This class is used for packaging the data of one frame.
williamr@2
    64
*/
williamr@2
    65
class TFrameData
williamr@2
    66
	{
williamr@2
    67
public:
williamr@2
    68
	TInt iBitmapHandle;
williamr@2
    69
	TInt iMaskBitmapHandle;
williamr@2
    70
	TPoint iPosition;
williamr@2
    71
	TInt iIntervalInMilliSeconds;			// the time is expressed in ms
williamr@2
    72
	};
williamr@2
    73
williamr@2
    74
williamr@2
    75
williamr@2
    76
/**
williamr@2
    77
 TBmpAnimAttributes
williamr@2
    78
williamr@2
    79
 This class is used for packaging the attriutes of the animation.
williamr@2
    80
*/
williamr@2
    81
class TBmpAnimAttributes
williamr@2
    82
	{
williamr@2
    83
public:
williamr@2
    84
	TBool iFlash;
williamr@2
    85
	TInt iFrameIntervalInMilliSeconds;
williamr@2
    86
	CBitmapAnimClientData::TPlayMode iPlayMode;
williamr@2
    87
	};
williamr@2
    88
williamr@2
    89
williamr@2
    90
williamr@2
    91
williamr@2
    92
/**
williamr@2
    93
 class MBitmapAnimTimerObserver
williamr@2
    94
*/
williamr@2
    95
class MBitmapAnimTimerObserver
williamr@2
    96
	{
williamr@2
    97
public:
williamr@2
    98
	virtual void DisplayNextFrameL()=0;
williamr@2
    99
	};
williamr@2
   100
williamr@2
   101
williamr@2
   102
williamr@2
   103
/**
williamr@2
   104
 class CBitmapAnimTimer
williamr@2
   105
williamr@2
   106
 This class is used to determine when to swap the current frame with the next one.
williamr@2
   107
*/
williamr@2
   108
class CBitmapAnimTimer : public CTimer
williamr@2
   109
	{
williamr@2
   110
public:
williamr@2
   111
	~CBitmapAnimTimer();
williamr@2
   112
	static CBitmapAnimTimer* NewL(MBitmapAnimTimerObserver* aObserver);
williamr@2
   113
	void RunL();
williamr@2
   114
private:
williamr@2
   115
	CBitmapAnimTimer(MBitmapAnimTimerObserver* aObserver);
williamr@2
   116
	void ConstructL();
williamr@2
   117
private:
williamr@2
   118
	MBitmapAnimTimerObserver* iAnimate;
williamr@2
   119
	};
williamr@2
   120
williamr@2
   121
williamr@2
   122
williamr@2
   123
/**
williamr@2
   124
 class MBitmapAnimFlashTimerObserver
williamr@2
   125
*/
williamr@2
   126
williamr@2
   127
class MBitmapAnimFlashTimerObserver
williamr@2
   128
	{
williamr@2
   129
public:
williamr@2
   130
	virtual void FlashFrame(TBool aFlash)=0;
williamr@2
   131
	};
williamr@2
   132
williamr@2
   133
williamr@2
   134
williamr@2
   135
/**
williamr@2
   136
 class CBitmapAnimFlashTimer
williamr@2
   137
*/
williamr@2
   138
williamr@2
   139
class CBitmapAnimFlashTimer : public CTimer
williamr@2
   140
	{
williamr@2
   141
public:
williamr@2
   142
	~CBitmapAnimFlashTimer();
williamr@2
   143
	static CBitmapAnimFlashTimer* NewL(MBitmapAnimFlashTimerObserver* aObserver);
williamr@2
   144
	void DoCancel();
williamr@2
   145
	void RunL();
williamr@2
   146
private:
williamr@2
   147
	CBitmapAnimFlashTimer(MBitmapAnimFlashTimerObserver* aObserver);
williamr@2
   148
	void ConstructL();
williamr@2
   149
private:
williamr@2
   150
	MBitmapAnimFlashTimerObserver* iAnimate;
williamr@2
   151
	TBool iFlash;
williamr@2
   152
	};
williamr@2
   153
williamr@2
   154
williamr@2
   155
williamr@2
   156
/**
williamr@2
   157
 class CBitmapAnimFrameData
williamr@2
   158
williamr@2
   159
 This class encapsulates the information of one frame.
williamr@2
   160
*/
williamr@2
   161
williamr@2
   162
class CBitmapAnimFrameData : public CBase
williamr@2
   163
	{
williamr@2
   164
public:
williamr@2
   165
	static CBitmapAnimFrameData* NewL();
williamr@2
   166
	static CBitmapAnimFrameData* NewLC();
williamr@2
   167
	~CBitmapAnimFrameData();
williamr@2
   168
	void FillFrameDataL(const TFrameData& aFrameDataArg);
williamr@2
   169
	void CheckAndCreateBitmapsL();
williamr@2
   170
	
williamr@2
   171
private:
williamr@2
   172
	CBitmapAnimFrameData();
williamr@2
   173
	void InitialiseMembers();
williamr@2
   174
	
williamr@2
   175
public:
williamr@2
   176
	CFbsBitmap* iBitmap;
williamr@2
   177
	CFbsBitmap* iMaskBitmap;
williamr@2
   178
	TPoint iPosition;
williamr@2
   179
	TTimeIntervalMicroSeconds32 iInterval;
williamr@2
   180
	};
williamr@2
   181
williamr@2
   182
williamr@2
   183
williamr@2
   184
/**
williamr@2
   185
 class CBitmapAnim
williamr@2
   186
williamr@2
   187
 This class encapsulates the enire animation: attributes and frames.
williamr@2
   188
*/
williamr@2
   189
williamr@2
   190
class CBitmapAnim : public CFreeTimerWindowAnim, MBitmapAnimTimerObserver//, MBitmapAnimFlashTimerObserver
williamr@2
   191
	{
williamr@2
   192
public:
williamr@2
   193
	~CBitmapAnim();
williamr@2
   194
	static CBitmapAnim* NewL();
williamr@2
   195
private:
williamr@2
   196
	CBitmapAnim();
williamr@2
   197
private:
williamr@2
   198
	enum TAnimateFlags
williamr@2
   199
		{
williamr@2
   200
//	State
williamr@2
   201
		ERunning				= 0x0001,
williamr@2
   202
		EFlashing				= 0x0002,
williamr@2
   203
		EFrozen					= 0x0004,
williamr@2
   204
//	Play mode
williamr@2
   205
		EPlayModeCycle			= 0x0010,
williamr@2
   206
		EPlayModeBounce			= 0x0020,
williamr@2
   207
		EPlayForwards			= 0x0040,
williamr@2
   208
		EPlayBackwards			= 0x0080,
williamr@2
   209
//	General
williamr@2
   210
		EFlash									= 0x0100,
williamr@2
   211
		EBackgroundBitmapProvided				= 0x0200,
williamr@2
   212
		EWindowContentsInitialized				= 0x0400,
williamr@2
   213
		ENoBitmapWindowRestoring				= 0x0800,
williamr@2
   214
		EChangedBackgroundFramePending			= 0x1000,
williamr@2
   215
		EBackgroundShouldIncludeWindowContents	= 0x2000,
williamr@2
   216
		EDisplayLastFrameWhenFinished			= 0x4000,
williamr@2
   217
		EBackgroundMaskProvided					= 0x8000
williamr@2
   218
		};
williamr@2
   219
williamr@2
   220
private: //Pure Virtual function from CAnim
williamr@2
   221
	virtual void ConstructL(TAny *aArgs, TBool aHasFocus);
williamr@2
   222
	virtual void Command(TInt aOpcode, TAny* aArgs);
williamr@2
   223
	virtual TInt CommandReplyL(TInt aOpcode, TAny *aArgs);
williamr@2
   224
	virtual void Animate(TDateTime* aDateTime);
williamr@2
   225
	virtual void Redraw();
williamr@2
   226
	virtual void FocusChanged(TBool aState);
williamr@2
   227
private: //Pure Virtual function from MEventHandler
williamr@2
   228
	virtual TBool OfferRawEvent(const TRawEvent &aRawEvent);
williamr@2
   229
private: //Pure Virtual function from MBitmapAnimTimerObserver
williamr@2
   230
	virtual void DisplayNextFrameL();
williamr@2
   231
private: //Pure Virtual function from MBitmapAnimFlashTimerObserver
williamr@2
   232
	virtual void FlashFrame(TBool aFlash);
williamr@2
   233
private:
williamr@2
   234
	void AppendFrameL(const TFrameData& aFrameData);
williamr@2
   235
	inline TInt Count() const;
williamr@2
   236
	void DisplayFrame(TInt aPreviousIndex=-1);
williamr@2
   237
	void DrawBitmap(TInt aPreviousIndex=-1, TBool aRedraw=EFalse);
williamr@2
   238
	inline TBool IsFrameDisplayable() const;
williamr@2
   239
	inline TBool IsRunning() const;
williamr@2
   240
	inline TBool IsFrozen() const;
williamr@2
   241
	void ResetAnimation();
williamr@2
   242
	void ClearFrame(TInt aIndex);
williamr@2
   243
	void ClearFrameNow(TInt aIndex);
williamr@2
   244
	void RenderFrameBackground(TInt aIndex);
williamr@2
   245
	TRect CalcFrameRect(TInt aIndex);
williamr@2
   246
	void SetBackgroundFrameL(TFrameData aFrameDataArg);
williamr@2
   247
	void SetFlash(TBmpAnimAttributes aFlash);
williamr@2
   248
	void SetFrameInterval(TBmpAnimAttributes aFrameInterval);
williamr@2
   249
	TInt SetIndexFrame(SBitmapAnimIndexFrame aIndexFrame);
williamr@2
   250
	void SetNumberOfCycles(SBitmapAnimNumberOfCycles aNumberOfCycles);
williamr@2
   251
	void SetPlayMode(TBmpAnimAttributes aPlayMode);
williamr@2
   252
	void SetPosition(SBitmapAnimNewPosition aNewPosition);
williamr@2
   253
	void StartAnimationL();
williamr@2
   254
	void StopAnimation();
williamr@2
   255
	void StoreWindowContentsToBackgroundBitmapL(const TRegion* aRegion);
williamr@2
   256
	void UpdateCurrentIndex();
williamr@2
   257
	inline TRect WindowRect() const;
williamr@2
   258
	CFbsBitmap* CreateRestoringBitmapL(TPoint& aPosition, TInt aPreviousIndex);
williamr@2
   259
	void UpdateBackgroundBitmapIfNeeded(const TRegion* aRegion, TRect aBackgroundBitmapScreenRect);
williamr@2
   260
	static TBool FrameNeedsRedrawing(const TRegion* aRedrawRegion, TRect aFrameScreenRect);
williamr@2
   261
	void ResetFrameArray();
williamr@2
   262
	void ClearFrameData();
williamr@2
   263
	TBool CanDrawNextFrameWithoutErasingPreviousFrameL(TInt aPreviousIndex);
williamr@2
   264
	TBool CompareBitmapsL(CFbsBitmap* aBmp1, CFbsBitmap* aBmp2);
williamr@2
   265
	
williamr@2
   266
private:
williamr@2
   267
	RPointerArray<CBitmapAnimFrameData> iBitmapAnimFrameDataArray;
williamr@2
   268
	CBitmapAnimTimer* iAnimTimer;
williamr@2
   269
	CBitmapAnimFlashTimer* iFlashTimer;
williamr@2
   270
	CBitmapAnimFrameData* iBackgroundFrame;
williamr@2
   271
	CFbsBitmap*  iBackgroundBitmap;
williamr@2
   272
	CFbsBitmapDevice* iBackgroundbitmapDevice;
williamr@2
   273
	CFbsBitGc* iBackgroundbitmapGc;
williamr@2
   274
williamr@2
   275
//
williamr@2
   276
	TInt iDummy;
williamr@2
   277
	TInt iFlags;
williamr@2
   278
	TInt iIndex;
williamr@2
   279
	TInt iNumberOfCycles;
williamr@2
   280
	TPoint iPosition;
williamr@2
   281
	TInt iWindowConfig;
williamr@2
   282
	TTimeIntervalMicroSeconds32 iFrameInterval;
williamr@2
   283
//
williamr@2
   284
	CFbsBitGc* iRestoringGc;	
williamr@2
   285
	};
williamr@2
   286
williamr@2
   287
// Returns the number of frames store in the frame array.
williamr@2
   288
inline TInt CBitmapAnim::Count() const
williamr@2
   289
	{ return iBitmapAnimFrameDataArray.Count(); }
williamr@2
   290
williamr@2
   291
// Returns ETrue every time the index frame is valid, otherwise it returns EFalse.
williamr@2
   292
inline TBool CBitmapAnim::IsFrameDisplayable() const
williamr@2
   293
	{ return ( (iIndex >= 0) && iBitmapAnimFrameDataArray[iIndex]->iBitmap ); }
williamr@2
   294
williamr@2
   295
// Returns ETrue if the animation is running, otherwise it returns EFalse.
williamr@2
   296
inline TBool CBitmapAnim::IsRunning() const
williamr@2
   297
	{ return iFlags&ERunning; }
williamr@2
   298
williamr@2
   299
//Returns ETrue if the animation is frozen (app is not in the foreground)
williamr@2
   300
inline TBool CBitmapAnim::IsFrozen() const
williamr@2
   301
{ return iFlags&EFrozen; }
williamr@2
   302
williamr@2
   303
// Returns the available window rect.
williamr@2
   304
inline TRect CBitmapAnim::WindowRect() const
williamr@2
   305
	{ return TRect(TPoint(0, 0), iWindowFunctions->WindowSize()); }
williamr@2
   306
williamr@2
   307
williamr@2
   308
williamr@2
   309
williamr@2
   310
/**
williamr@2
   311
 CBitmapAnimDll class
williamr@2
   312
*/
williamr@2
   313
williamr@2
   314
class CBitmapAnimDll : public CAnimDll
williamr@2
   315
	{
williamr@2
   316
public:
williamr@2
   317
	CBitmapAnimDll();
williamr@2
   318
	virtual CAnim* CreateInstanceL(TInt aType);
williamr@2
   319
	};
williamr@2
   320
williamr@2
   321
williamr@2
   322
/**
williamr@2
   323
 global functions
williamr@2
   324
*/
williamr@2
   325
GLREF_C void Panic(TBitmapAnimServerPanic aReason);
williamr@2
   326
williamr@2
   327
williamr@2
   328
#endif