00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef CGFXDIRECTACCESS_H_
00030 #define CGFXDIRECTACCESS_H_
00031
00032 #include <e32base.h>
00033 #include <w32std.h>
00034
00035 class CDirectScreenBitmap;
00036 struct SScreenData
00037 {
00038 TInt iDisplayMemoryAddress;
00039 TInt iDisplayOffsetToFirstPixel;
00040 TInt iDisplayXPixels;
00041 TInt iDisplayYPixels;
00042 TInt iDisplayMode;
00043 TInt iDisplayOffsetBetweenLines;
00044 TInt iDisplayBitsPerPixel;
00045 TBool iDisplayIsPixelOrderLandscape;
00046 };
00047
00048 class CGfxDirectAccess : public CTimer, public MDirectScreenAccess
00049 {
00050 public:
00051 CGfxDirectAccess(RWsSession& aClient,
00052 RWindow& aWindow, const TRect& aDsaRect, TBool aGcDrawMode);
00053
00054 virtual ~CGfxDirectAccess();
00055
00056
00057 void Restart(RDirectScreenAccess::TTerminationReasons aReason);
00058 void AbortNow(RDirectScreenAccess::TTerminationReasons aReason);
00059
00060
00061 public:
00062 void ConstructL();
00063 void StartL();
00064
00065
00066 private:
00067
00068 void RunL();
00069 void DoCancel();
00070
00071 private:
00072 void SetupScreenDataL();
00073 TUint8* BeginDraw();
00074 void EndDraw();
00075 void ProcessFrameWritePixels();
00076 void ProcessFrameGc();
00077
00078 void LogCapsL();
00079
00080
00081 private:
00082
00083 RWsSession& iClient;
00084 RWindow& iWindow;
00085
00086
00087 CDirectScreenAccess* iDirectScreenAccess;
00088 CDirectScreenBitmap* iDSBitmap;
00089 TRect iDsaRect;
00090 TBool iGcDrawMode;
00091 TInt iFrameCounter;
00092 SScreenData iScreenData;
00093 };
00094
00095 #endif