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