os/graphics/windowing/windowserver/nga/SERVER/ANIM.H
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 // Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 // Definition of classes related to Anim DLL's
    15 // 
    16 //
    17 
    18 #ifndef __ANIM_H__
    19 #define __ANIM_H__
    20 
    21 #include <e32std.h>
    22 #include <w32adll.h>
    23 #include "server.h"
    24 #include "sprite.h"
    25 
    26 class CWsAnimDll : public CWsObject
    27 	{
    28 public:
    29 	static void InitStaticsL();
    30 	static void DeleteStatics();
    31 public:
    32 	CWsAnimDll(CWsClient *owner);
    33 	~CWsAnimDll();
    34 	TInt CreateInstanceL(TUint32 aHandle, TInt aType, TAny *aArgs, TBool aIsWindow);
    35 	void LoadL(const TDesC &aDllName);
    36 	void CommandL(TInt aOpcode, const TAny *aCmdData);
    37 	void Remove(TInt aHandle);
    38 	inline TInt AnimObjectHandle(CWsAnim *aAnimObject) const;
    39 	inline CWsAnim* AnimObjectL(TInt aAnimHandle) const;
    40 	
    41 private:
    42 	TInt doCreateInstanceL(CWsAnim *aInstance, TInt aType, TAny *aArgs, TBool aIsWindow);
    43 private:
    44 	static CObjectConIx *AnimObjectConIx;
    45 private:
    46 	CObjectCon *iInstanceCon;
    47 	CObjectIx *iInstanceIndex;
    48 	CAnimDll *iAnimDll;
    49 	RLibrary iAnimLib;
    50 	
    51 public:
    52 	TSglQueLink iQue;
    53 	};
    54 	
    55 class CWsAnimGc;
    56 
    57 class CWsAnim : public CObject, public MAnimGeneralFunctions, public MAnimGeneralFunctionsWindowExtension,
    58 													public MAnimFreeTimerWindowFunctions, public MAnimSpriteFunctions, public MAnimGeneralFunctionsEventExtension,
    59 													public MWsWindowTreeNode
    60 	{
    61 public:
    62 	~CWsAnim();
    63 	void RedrawWindowAnimL(const TTime& aTimeNow, MWsGraphicsContext* aGc, const TRegion* aRegion);
    64 	void AnimateSpriteAnimL(const TTime& aTimeNow);
    65 	void UserDeactivateAnimGc();
    66 	static void WindowClosing(CWsAnim *aWsAnim);
    67 	static void CloseAnim(CWsAnim *aWsAnim);
    68 	TRect BestRect() const;
    69 	void FocusChanged(TBool aNewFocusState);
    70 	void SetMessage(const RMessagePtr2* aMessage);
    71 	TInt CommandReply(TInt aOpcode, TAny* aArgs);
    72 	void SessionPanic() const;
    73 	void Panic() const;
    74 	void Panic(TClientPanic aPanic) const;
    75 	inline CWsAnim * Next();
    76 	inline CWsClientWindow* ClientWindow() const;
    77 	void SendState(MWsWindowTreeObserver& aWindowTreeObserver) const;
    78 
    79 private:
    80 	CWsAnim(CWsAnimDll *aDll);
    81 	void Connect(CWsClientWindow *aWindow);
    82 	void Connect(CWsSprite *aSprite);
    83 	void ConstructL(CAnim *aAnim, TAny *aArgs, CWsAnimDll *aAnimDll, TBool aIsWindow);
    84 	inline CAnim *Anim() const;
    85 	const TRect& Rect() const;
    86 	
    87 // Functions from MAnimGeneralFunctions
    88 	TDateTime SystemTime() const;
    89 	TBool FlashStateOn() const;				// Return ETrue if in the on part of the flash cycle
    90 
    91 	const CFbsScreenDevice *ScreenDevice();						// Pointer to screen device
    92 	CFbsBitmap *DuplicateBitmapL(TInt aHandle);
    93 	CFbsFont *DuplicateFontL(TInt aHandle);
    94 	void CloseFont(CFbsFont *);
    95 	TAnimSync Sync() const;					// Return the current sync mode
    96 	void Animate(TDateTime *aDateTime);		// Trigger a call to the DLL's Animate function
    97 	void SetSync(TAnimSync aSyncMode);
    98 	void SetInterval(TInt aInterval);		// Set the regular repeat interval, does not affect the current countdown
    99 	void SetNextInterval(TInt aInterval);	// Sets the interval to the next Animate, after that it will fall back to the usual rate
   100 	const RThread &Client();				// Return a reference to the calling clients thread
   101 	void ReplyBuf(const TDesC8 &aDes);
   102 	void ReplyBuf(const TDesC16 &aDes);
   103 	void GetRawEvents(TBool aGetEvents) const;	// Raw events are passed to CAnim::OfferRawEventL
   104 	void PostRawEvent(const TRawEvent &aRawEvent) const;
   105 	void PostKeyEvent(const TKeyEvent &aRawEvent) const;
   106 	const RMessagePtr2* Message();
   107 	TAny* ExtendedInterface(TInt aInterface);
   108 	TInt RegisterForNotifications(TUint32 aNotifications);
   109 
   110 // Functions from MAnimGeneralFunctionsWindowExtension
   111 	TInt Screens() const;
   112 	TInt FocusScreens() const;
   113 	void SetFocusScreen(TInt aScreenNo);
   114 	TInt WindowGroups(TInt aScreen) const;
   115 	TBool WindowGroupInfo(TWindowGroupInfo& aInfo,TInt aScreen,TInt aWindowGroup) const;
   116 	TBool WindowGroupName(TPtrC& aWindowName,TInt aScreen,TInt aWindowGroup) const;
   117 	TInt SetOrdinalPosition(TInt aWindowGroupId,TInt aPos,TInt aOrdinalPriority);
   118 	void WindowConfig(TWindowConfig& aWindowConfig) const;	
   119 // Functions from MAnimWindowFunctions
   120 	void ActivateGc();	// Activate the GC to enable drawing in a command or animate function
   121 	void Invalidate(const TRect &aRect);
   122 	void Parameters(TWindowInfo &aData);
   123 	void VisibleRegion(TRegion& aRegion);
   124  	TSize WindowSize() const;				// Return the window size
   125 	TBool IsHidden();
   126 	void SetVisible(TBool aState);
   127 	void SetRect(const TRect &aRect);		// Sets the rect that this instance wants to draw to.
   128 // Functions from MAnimFreeTimerWindowFunctions
   129 	void DeactivateGc();					// Deactivate the GC after drawing from our own RunL
   130 	void Update();
   131 // Functions from MAnimSpriteFunctions
   132 	TSpriteMember *GetSpriteMember(TInt aMember) const;	//Returns sprite member data
   133 	void UpdateMember(TInt aMember,const TRect& aRect,TBool aFullUpdate);		//redraw of part of a sprite
   134 	void Activate(TBool aActive);		// Turn sprite on or off
   135 	void SizeChangedL();
   136 	void SetPosition(const TPoint &aPos);			//Change the positon of the sprite
   137 	TBool SpriteCanBeSeen() const;
   138 // Functions from MAnimGeneralFunctionsEventExtension
   139 	void PostKeyEvent(const TKeyEvent& aRawEvent,TInt aRepeats) const; //Repeated key events
   140 // Functions from MWsWindowTreeNode
   141 	MWsWindowTreeNode::TType NodeType() const;
   142 	const MWsWindow* Window() const;
   143 	const MWsSprite* Sprite() const;
   144 	const MWsStandardTextCursor* StandardTextCursor() const;
   145 	const MWsWindowGroup* WindowGroup() const;
   146 	const MWsWindowTreeNode* ParentNode() const;
   147 
   148 	void ScheduleSelf(const TTimeIntervalMicroSeconds& aFrom);
   149 	void AnimateL(const TTime& aTimeNow, TInt& aFrame, TInt64& aAdjustedStart);
   150 	void RedrawWindowAnimL(MWsGraphicsContext* aGc, const TRegion* aRegion);
   151 	void ReSchedule(const TTime& aTimeNow, const TInt& aFrame, const TInt64& aAdjustedStart);
   152 
   153 private:
   154 	CWsClient *iClient;
   155 	TTimeIntervalMicroSeconds iInterval;
   156 	TAnimSync iAnimSync;
   157 	/* Linked list of animated objects attached to a window */
   158 	CWsAnim *iNextWin;
   159 	union 
   160 		{
   161 		CWindowAnim* iWindowAnim; 
   162 		CSpriteAnim* iSpriteAnim; 
   163 		} iAnim;
   164 	CWsAnimGc *iAnimGc;
   165 	CWsAnimDll *iAnimDll;
   166 	CWsClientWindow *iWindow;
   167 	TRect iRect;
   168 	CWsSprite *iSprite;
   169 	const RMessagePtr2* iMessage;
   170 	TWindowInfo::TRegionPair* iRedrawRegionPair;
   171 	friend class CWsAnimDll;
   172 	friend class DllAnimator;
   173 	mutable TBool iAnimAddedInHandler;
   174 	TTime iStartTime;
   175 	TInt iLastFrame;
   176 	enum TFlags
   177 		{
   178 		/** ETrue if this anim accepts advanced pointer events
   179 		   (TRawEvents with pointer number, pointer pressure and proximity info) */
   180 		EAdvancedPointersEnabled,
   181 		EFlashOn,
   182 		EWinAnimConstructed,
   183 		/** This flag is set when this anim is called in the context of CScreenRedraw::OnAnimation
   184 		    i.e. when the screen is in the process of sending a new frame to the display hardware. */
   185 		EInRedraw,
   186 		};
   187 	TBitFlags iBitFlags;
   188 	};
   189 
   190 class CAnimFbsFont;
   191 
   192 class CWsAnimGc : public CAnimGc
   193 	{
   194 public:
   195 	CWsAnimGc(CWsAnim& aWsAnim);
   196 	~CWsAnimGc();
   197 //
   198 	void Activate(const TRegion* aRegion, MWsGraphicsContext* aGc);
   199 	void Deactivate();
   200 	TBool IsActive() const;
   201 	void UserActivate();
   202 	void UserDeactivate();
   203 // From CGraphicsContext
   204 	virtual CGraphicsDevice* Device() const;
   205 	virtual void SetDrawMode(TDrawMode aDrawingMode);
   206 	virtual void SetClippingRect(const TRect& aRect);
   207 	virtual void CancelClippingRect();
   208 	virtual void CancelClippingRegion();
   209 	virtual void UseFont(const CFont *aFont);
   210 	virtual void DiscardFont();
   211 	virtual void SetUnderlineStyle(TFontUnderline aUnderlineStyle);
   212 	virtual void SetStrikethroughStyle(TFontStrikethrough aStrikethroughStyle);
   213 	virtual void SetWordJustification(TInt aExcessWidth,TInt aNumGaps);
   214 	virtual void SetCharJustification(TInt aExcessWidth,TInt aNumChars);
   215 	virtual void SetPenColor(const TRgb &aColor);
   216 	virtual void SetPenStyle(TPenStyle aPenStyle);
   217 	virtual void SetPenSize(const TSize& aSize);
   218 	virtual void SetBrushColor(const TRgb &aColor);
   219 	virtual void SetBrushStyle(TBrushStyle aBrushStyle);
   220 	virtual void SetBrushOrigin(const TPoint &aOrigin);
   221 	virtual void UseBrushPattern(const CFbsBitmap *aBitmap);
   222 	virtual void DiscardBrushPattern();
   223 	virtual void DrawArc(const TRect &aRect,const TPoint &aStart,const TPoint &aEnd);
   224 	virtual void DrawLine(const TPoint &aPoint1,const TPoint &aPoint2);
   225 	virtual void DrawLineTo(const TPoint &aPoint);
   226 	virtual void DrawLineBy(const TPoint &aPoint);
   227 	virtual void DrawPolyLine(const CArrayFix<TPoint> *aPointList);
   228 	virtual void DrawPolyLine(const TPoint* aPointList,TInt aNumPoints);
   229 	virtual void DrawPie(const TRect &aRect,const TPoint &aStart,const TPoint &aEnd);
   230 	virtual void DrawEllipse(const TRect &aRect);
   231 	virtual void DrawRect(const TRect &aRect);
   232 	virtual void DrawRoundRect(const TRect &aRect,const TSize &aCornerSize);
   233 	virtual void Clear(const TRect &aRect);
   234 	virtual void Clear();
   235 	virtual TInt DrawPolygon(const CArrayFix<TPoint> *aPointList,TFillRule aFillRule);
   236 	virtual TInt DrawPolygon(const TPoint* aPointList,TInt aNumPoints,TFillRule aFillRule=EAlternate);
   237 	virtual void DrawBitmap(const TPoint &aTopLeft, const CFbsBitmap *aSource);
   238 	virtual void DrawBitmap(const TRect &aDestRect, const CFbsBitmap *aSource);
   239 	virtual void DrawBitmap(const TRect &aDestRect, const CFbsBitmap *aSource, const TRect &aSourceRect);
   240 	virtual void DrawBitmapMasked(const TRect &aDestRect, const CFbsBitmap *aBitmap, const TRect &aSrcRect, const CFbsBitmap* aMaskBitmap, TBool aInvertMask);
   241 	virtual void DrawText(const TDesC &aString,const TPoint &aPosition);
   242 	virtual void DrawText(const TDesC &aString,const TRect &aBox,TInt aBaselineOffset,TTextAlign aHoriz=ELeft,TInt aLeftMrg=0);
   243 	virtual void MoveTo(const TPoint &aPoint);
   244 	virtual void MoveBy(const TPoint &aPoint);
   245 	virtual void Plot(const TPoint &aPoint);
   246 	virtual void SetOrigin(const TPoint &aPoint);
   247 	virtual void BitBlt(const TPoint &,const CFbsBitmap *aBitmap);
   248 	virtual void BitBlt(const TPoint &,const CFbsBitmap *aBitmap,const TRect &);
   249 	virtual void BitBltMasked(const TPoint& aPoint,const CFbsBitmap* aBitmap,const TRect& aSourceRect,const CFbsBitmap* aMaskBitmap,TBool aInvertMask);
   250 	virtual void CopyRect(const TPoint& aOffset,const TRect& aRect);
   251 	virtual void Reset();
   252 // Extra command defined in CBitmapContext
   253 	virtual void SetFaded(TBool aFaded);
   254 	virtual void SetFadingParameters(TUint8 aBlackMap,TUint8 aWhiteMap);
   255 
   256 	virtual TInt SetClippingRegion(const TRegion &aRegion);	
   257 	virtual TInt AlphaBlendBitmaps(const TPoint& aDestPt, const CFbsBitmap* aSrcBmp, const TRect& aSrcRect, const CFbsBitmap* aAlphaBmp,	const TPoint& aAlphaPt);	
   258 	virtual void MapColors(const TRect &aRect,const TRgb *aColors,TInt aNumPairs,TBool aMapForwards);
   259 	virtual void DrawTextVertical(const TDesC& aText,const TPoint& aPos,TBool aUp);
   260 	virtual void DrawTextVertical(const TDesC& aText,const TRect& aBox,TInt aBaselineOffset,TBool aUp,TTextAlign aVert=ELeft,TInt aMargin=0);
   261 	
   262 private:
   263 	void CloseCurrentFont();
   264 	virtual void DrawBitmapMasked(const TRect& /*aDestRect*/,const CWsBitmap* /*aBitmap*/,const TRect& /*aSrcRect*/,const CWsBitmap* /*aMaskBitmap*/, TBool /*aInvertMask*/);
   265 	TInt AlphaBlendBitmaps(const TPoint& aDestPt, const CWsBitmap* aSrcBmp,	const TRect& aSrcRect, const CWsBitmap* aAlphaBmp,	const TPoint& aAlphaPt);
   266 private:
   267 	CWsAnim& iOwningWsAnim;
   268 	MWsGraphicsContext* iGc;
   269 	TBool iUserActive;
   270 	const TRegion *iBaseRegion;	// Base clipping region provided on activation
   271 	TBool iUseDrawingRegion;	// Indicates that the user has set a drawing region
   272 	RWsRegion iDrawingRegion;	// Drawing region provided by the user (in screen coordinates)
   273 	TRect iClippingRect;		// Clipping rectangle (in screen coordinates)
   274 	CAnimFbsFont *iFont;
   275 	};
   276 
   277 //
   278 // inlines			//
   279 //
   280 
   281 inline CAnim *CWsAnim::Anim() const
   282 	{
   283 	if(iWindow)
   284 		return iAnim.iWindowAnim;
   285 	else
   286 		return iAnim.iSpriteAnim;
   287 	}
   288 inline TInt CWsAnimDll::AnimObjectHandle(CWsAnim *aAnimObject) const
   289 	{return(iInstanceIndex->At(aAnimObject));}
   290 inline CWsAnim* CWsAnimDll::AnimObjectL(TInt aAnimHandle) const
   291 	{return STATIC_CAST(CWsAnim*,iInstanceIndex->AtL(aAnimHandle));}
   292 inline CWsAnim* CWsAnim::Next()
   293 	{return iNextWin;}
   294 inline CWsClientWindow* CWsAnim::ClientWindow() const
   295 	{return iWindow;}
   296 #endif