00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include <w32std.h>
00017 #include "Base.h"
00018 #include "VectorSprite.h"
00019
00020 CSprite::CSprite(CWsClient *aClient) : iClient(aClient)
00021 {
00022 }
00023
00024 CSprite::~CSprite()
00025 {
00026 for (TInt i=0; i<4; i++)
00027 {
00028 delete iSpriteMember[i].iBitmap;
00029 delete iSpriteMember[i].iMaskBitmap;
00030 }
00031 iSprite.Close();
00032 }
00033
00034 void CSprite::ConstructL(CWindow* aWindow)
00035 {
00036 iSprite = RWsSprite(iClient->iWs);
00037 User::LeaveIfError(iSprite.Construct(aWindow->Window(), TPoint(100,100), 0));
00038 for (TInt spriteNum = 0; spriteNum < 4; spriteNum++)
00039 {
00040 CreateBitmapL(iSpriteMember[spriteNum].iBitmap, spriteNum, EFalse);
00041 CreateBitmapL(iSpriteMember[spriteNum].iMaskBitmap, spriteNum, ETrue);
00042 iSpriteMember[spriteNum].iInvertMask = EFalse;
00043 iSpriteMember[spriteNum].iOffset = TPoint (0,0);
00044 iSpriteMember[spriteNum].iInterval = TTimeIntervalMicroSeconds32 (500000);
00045 iSpriteMember[spriteNum].iDrawMode = CGraphicsContext::EDrawModePEN;
00046 User::LeaveIfError(iSprite.AppendMember(iSpriteMember[spriteNum]));
00047 }
00048 User::LeaveIfError(iSprite.Activate());
00049 iSprite.UpdateMember(3);
00050 }
00051
00052 void CSprite::CreateBitmapL(CFbsBitmap* &aBitmap, TInt aSpriteNum, TBool aDoMask)
00053 {
00054
00055 CFbsBitmapDevice* bitmapDevice;
00056 CGraphicsContext* bitmapContext;
00057
00058
00059
00060
00061
00062
00063 aBitmap = new (ELeave) CFbsBitmap();
00064 aBitmap->Create(TSize(50,50),EGray4);
00065
00066 bitmapDevice = CFbsBitmapDevice::NewL(aBitmap);
00067 bitmapDevice->CreateContext(bitmapContext);
00068
00069 bitmapContext->SetBrushColor(aDoMask? TRgb::Gray4(0) : TRgb::Gray4(2));
00070 bitmapContext->SetBrushStyle(CGraphicsContext::ESolidBrush);
00071 bitmapContext->SetPenStyle(CGraphicsContext::ENullPen);
00072 bitmapContext->DrawRect(TRect(TSize(50,50)));
00073 bitmapContext->SetPenStyle(CGraphicsContext::ESolidPen);
00074 bitmapContext->SetPenSize(TSize(4,4));
00075 bitmapContext->SetPenColor(aDoMask? TRgb::Gray4(3) : TRgb::Gray4(0));
00076
00077 switch (aSpriteNum)
00078 {
00079 case 0:
00080 bitmapContext->DrawLine (TPoint(10,10), TPoint(40,40));
00081 break;
00082 case 1:
00083 bitmapContext->DrawLine (TPoint(25,10), TPoint(25,40));
00084 break;
00085 case 2:
00086 bitmapContext->DrawLine (TPoint(40,10), TPoint(10,40));
00087 break;
00088 case 3:
00089 bitmapContext->DrawLine (TPoint(10,25), TPoint(40,25));
00090 break;
00091 }
00092
00093 delete bitmapContext;
00094 delete bitmapDevice;
00095 }
00096
00097
00098
00099
00100
00101 CMainWindow::CMainWindow (CWsClient* aClient)
00102 : CWindow (aClient)
00103 {
00104 }
00105
00106
00107 CMainWindow::~CMainWindow ()
00108 {
00109 iWindow.Close();
00110 }
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120 void CMainWindow::Draw(const TRect& aRect)
00121 {
00122 CWindowGc* gc=SystemGc();
00123 gc->SetClippingRect(aRect);
00124 gc->Clear(aRect);
00125 gc->SetPenStyle(CGraphicsContext::ESolidPen);
00126 gc->SetPenColor(TRgb::Gray4(2));
00127 TSize size = Window().Size();
00128 TInt width = size.iWidth;
00129 TInt height = size.iHeight;
00130 TInt numHoriz=height/5;
00131 TInt numVert=width/10;
00132 for (TInt i=numHoriz; i>0; i--)
00133 {
00134 gc->DrawLine (TPoint(0,height/numHoriz*i), TPoint(width, height/numHoriz*i));
00135 }
00136 for (TInt j=numVert; j>0; j--)
00137 {
00138 gc->DrawLine (TPoint(width/numVert*j, 0), TPoint(width/numVert*j, height));
00139 }
00140 }
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150 void CMainWindow::HandlePointerEvent (TPointerEvent& aPointerEvent)
00151 {
00152 switch (aPointerEvent.iType)
00153 {
00154 case TPointerEvent::EButton1Down:
00155 break;
00156 case TPointerEvent::EButton1Up:
00157 break;
00158 case TPointerEvent::EButton3Down:
00159 break;
00160 default:
00161 break;
00162 }
00163 }
00164
00165
00167
00169
00170 CExampleWsClient* CExampleWsClient::NewL(const TRect& aRect)
00171 {
00172
00173 CExampleWsClient* client=new (ELeave) CExampleWsClient(aRect);
00174 CleanupStack::PushL(client);
00175 client->ConstructL();
00176 CleanupStack::Pop();
00177 return client;
00178 }
00179
00180
00181
00182
00183
00184
00185
00186 CExampleWsClient::CExampleWsClient(const TRect& aRect)
00187 :iRect(aRect)
00188 {
00189 }
00190
00191 CExampleWsClient::~CExampleWsClient ()
00192 {
00193 delete iMainWindow;
00194 delete iSprite;
00195 }
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205 void CExampleWsClient::ConstructMainWindowL()
00206 {
00207 iMainWindow=new (ELeave) CMainWindow(this);
00208 iMainWindow->ConstructL(iRect, TRgb (255,255,255));
00209 iSprite=new (ELeave) CSprite (this);
00210 iSprite->ConstructL(iMainWindow);
00211 }
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222 void CExampleWsClient::RunL()
00223 {
00224
00225 iWs.GetEvent(iWsEvent);
00226 TInt eventType=iWsEvent.Type();
00227
00228 switch (eventType)
00229 {
00230
00231 case EEventNull:
00232 break;
00233 case EEventKey:
00234 {
00235 TKeyEvent& keyEvent=*iWsEvent.Key();
00236 HandleKeyEventL (keyEvent);
00237 break;
00238 }
00239 case EEventModifiersChanged:
00240 break;
00241 case EEventKeyUp:
00242 case EEventKeyDown:
00243 case EEventFocusLost:
00244 case EEventFocusGained:
00245 case EEventSwitchOn:
00246 case EEventPassword:
00247 case EEventWindowGroupsChanged:
00248 case EEventErrorMessage:
00249 break;
00250
00251 case EEventPointer:
00252 {
00253 CWindow* window=(CWindow*)(iWsEvent.Handle());
00254 TPointerEvent& pointerEvent=*iWsEvent.Pointer();
00255 window->HandlePointerEvent (pointerEvent);
00256 break;
00257 }
00258 case EEventPointerExit:
00259 case EEventPointerEnter:
00260 break;
00261 case EEventPointerBufferReady:
00262 {
00263 break;
00264 }
00265 case EEventDragDrop:
00266 break;
00267 default:
00268 break;
00269 }
00270 IssueRequest();
00271 }
00272
00273
00274
00275
00276
00277 void CExampleWsClient::HandleKeyEventL (TKeyEvent& )
00278 {
00279 }