epoc32/include/gulsprite.h
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
permissions -rw-r--r--
Final list of Symbian^2 public API header files
williamr@2
     1
// Copyright (c) 2001-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
#if !defined(__GULSPRITE_H__)
williamr@2
    17
#define __GULSPRITE_H__
williamr@2
    18
williamr@2
    19
#include <w32std.h>
williamr@2
    20
#include <gulicon.h>
williamr@2
    21
williamr@2
    22
class CWindowToBitmapMappingGc;
williamr@2
    23
williamr@2
    24
class CSpriteSet : public CBase
williamr@2
    25
/**
williamr@2
    26
The CSpriteSet class allows a window server sprite to be drawn to a window.  The class
williamr@2
    27
supports storage of any number of bitmap/mask pairs, though allowing only one of these
williamr@2
    28
bitmap/mask members to be displayed at any one time.  The client of this class should
williamr@2
    29
provide the source bitmap/mask pairs which can be resized to fit a specified rectangle.
williamr@2
    30
Also provided for at runtime is the ability to draw onto the sprite as though it were a
williamr@2
    31
regular CWindowGc and using the same coordinate offsets as the window it exists in.
williamr@2
    32
williamr@2
    33
@publishedPartner 
williamr@2
    34
@released 
williamr@2
    35
*/
williamr@2
    36
	{
williamr@2
    37
public:
williamr@2
    38
	enum TSpriteResizeMode
williamr@2
    39
		{
williamr@2
    40
		ENoResizing,
williamr@2
    41
		EResizeHorizToFit,
williamr@2
    42
		EResizeVertToFit,
williamr@2
    43
		EResizeHorizAndVertToFit
williamr@2
    44
		};
williamr@2
    45
public:
williamr@2
    46
	// methods for creation of the sprite set
williamr@2
    47
	IMPORT_C static CSpriteSet* NewL(RWindowTreeNode& aWindow, RWsSession& aWs, CWsScreenDevice& aDevice, CGulIcon* aSpriteSetMember, TBool aInvertMask);
williamr@2
    48
	IMPORT_C static CSpriteSet* NewLC(RWindowTreeNode& aWindow, RWsSession& aWs, CWsScreenDevice& aDevice, CGulIcon* aSpriteSetMember, TBool aInvertMask);
williamr@2
    49
	IMPORT_C void AddMemberL(CGulIcon* aSpriteSetMember);
williamr@2
    50
	IMPORT_C void RemoveMember(TInt aSpriteSetMemberIndex);
williamr@2
    51
	// methods for preparing and using a sprite in the set
williamr@2
    52
	IMPORT_C void PrepareSpriteForDisplayL(TInt aSpriteType, const TPoint& aSpritePos, const TSize& aSpriteSize, TSpriteResizeMode aSpriteResizeMode);
williamr@2
    53
	IMPORT_C void StartDisplayingSpriteL();
williamr@2
    54
	IMPORT_C void StopDisplayingSprite();
williamr@2
    55
	IMPORT_C CWindowGc* SpriteGc() const;
williamr@2
    56
	IMPORT_C void TranslateSpritePosition(const TPoint& aSpritePos);
williamr@2
    57
	IMPORT_C void SetClippingRect(const TRect& aRect);
williamr@2
    58
public:
williamr@2
    59
	~CSpriteSet();
williamr@2
    60
private:
williamr@2
    61
	enum TInternalSpriteResizeMode
williamr@2
    62
		{
williamr@2
    63
		EHSameVSame,
williamr@2
    64
		EHSameVShrink,
williamr@2
    65
		EHSameVStretch,
williamr@2
    66
		EHShrinkVSame,
williamr@2
    67
		EHShrinkVShrink,
williamr@2
    68
		EHShrinkVStretch,
williamr@2
    69
		EHStretchVSame,
williamr@2
    70
		EHStretchVShrink,
williamr@2
    71
		EHStretchVStretch
williamr@2
    72
		};
williamr@2
    73
private:
williamr@2
    74
	CSpriteSet(TBool aInvertMask);
williamr@2
    75
	void ConstructL(RWindowTreeNode& aWindow, RWsSession& aWs, CWsScreenDevice& aDevice);
williamr@2
    76
	void CreateSpriteMember();
williamr@2
    77
	void AdjustSpriteSizeAccordingToResizeMode(TSize& aTargetSize, const TSize& aSourceSize, TSpriteResizeMode aSpriteResizeMode) const;
williamr@2
    78
	void ComputeInternalResizeMode(TInternalSpriteResizeMode& aInternalSpriteResizeMode, TSpriteResizeMode aSpriteResizeMode, const TSize& aSourceSize, const TSize& aSpriteSize) const;
williamr@2
    79
	void RenderSprite(TInt aSpriteType, TInternalSpriteResizeMode aInternalSpriteResizeMode, const TSize& aSourceSize, const TSize& aSpriteSize);
williamr@2
    80
private:
williamr@2
    81
	enum TFlags
williamr@2
    82
		{
williamr@2
    83
		EMaskIsInverted				=0x01,
williamr@2
    84
		ESpriteIsCurrentlyDisplayed	=0x02
williamr@2
    85
		};
williamr@2
    86
private:
williamr@2
    87
	RPointerArray<CGulIcon> iSourceMembers;
williamr@2
    88
	CWsBitmap* iTargetBitmap;
williamr@2
    89
	CWsBitmap* iTargetMaskBitmap;
williamr@2
    90
	RWsSprite iSprite;
williamr@2
    91
	TSpriteMember iSpriteMember;
williamr@2
    92
	CWindowToBitmapMappingGc* iWindowToBitmapMappingGc;
williamr@2
    93
	CFbsBitGc* iMainFbsBitGc;
williamr@2
    94
	CFbsBitGc* iMaskFbsBitGc;
williamr@2
    95
	CFbsBitmapDevice* iMainBmpDevice;
williamr@2
    96
	CFbsBitmapDevice* iMaskBmpDevice;
williamr@2
    97
	TPoint iSpritePosition;
williamr@2
    98
	TRect iClippingRect;
williamr@2
    99
	TInt iFlags;
williamr@2
   100
	};
williamr@2
   101
williamr@2
   102
#endif