diff -r 89d6a7a84779 -r 25a17d01db0c Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_scroll_8cpp-source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_scroll_8cpp-source.html Fri Jan 22 18:26:19 2010 +0000 @@ -0,0 +1,301 @@ + +
+00001 // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +00002 // All rights reserved. +00003 // This component and the accompanying materials are made available +00004 // under the terms of "Eclipse Public License v1.0" +00005 // which accompanies this distribution, and is available +00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html". +00007 // +00008 // Initial Contributors: +00009 // Nokia Corporation - initial contribution. +00010 // +00011 // Contributors: +00012 // +00013 // Description: +00014 // WSSCROL1.CPP +00015 // +00016 +00017 #include <w32std.h> +00018 #include "Base.h" +00019 #include "Scroll.h" +00020 +00021 _LIT(KString1,"1"); +00022 _LIT(KString2,"2"); +00023 _LIT(KString3,"3"); +00024 _LIT(KString4,"4"); +00025 _LIT(KString5,"5"); +00026 +00028 // CNumberedWindow implementation +00030 +00031 /****************************************************************************\ +00032 | Function: Constructor/Destructor for CNumberedWindow +00033 | Input: aClient Client application that owns the window +00034 \****************************************************************************/ +00035 CNumberedWindow::CNumberedWindow (CWsClient* aClient, TInt aNum) +00036 : CWindow (aClient), iNumber(aNum), iOldPos(0,0), iOffset(0,0), iRepeatRect(0,0,0,0) +00037 { +00038 } +00039 +00040 +00041 CNumberedWindow::~CNumberedWindow () +00042 { +00043 } +00044 +00045 +00046 /****************************************************************************\ +00047 | Function: CNumberedWindow::Draw +00048 | Purpose: Redraws the contents of CNumberedWindow within a given +00049 | rectangle. CNumberedWindow displays a number in the window. +00050 | Input: aRect Rectangle that needs redrawing +00051 | Output: None +00052 \****************************************************************************/ +00053 void CNumberedWindow::Draw(const TRect& aRect) +00054 { +00055 const TBufC<1> strings[5] = { *&KString1, +00056 *&KString2, +00057 *&KString3, +00058 *&KString4, +00059 *&KString5 +00060 }; +00061 +00062 CWindowGc* gc=SystemGc(); // get a graphics context +00063 gc->SetClippingRect(aRect); // clip outside the redraw area +00064 gc->Clear(aRect); // clear the redraw area +00065 TSize size=iWindow.Size(); +00066 TInt height=size.iHeight; // Need window height to calculate vertical text offset +00067 TInt ascent = Font()->AscentInPixels(); +00068 TInt descent = Font()->DescentInPixels(); +00069 TInt offset = (height + (ascent + descent)) / 2; // Calculate vertical text offset +00070 gc->SetPenColor(TRgb(0,0,0)); // Set pen to black +00071 gc->UseFont(Font()); +00072 gc->DrawText(strings[iNumber], TRect(TPoint(0,0) + iOffset, size), offset, +00073 CGraphicsContext::ECenter); +00074 gc->DrawLine(TPoint(0,0) + iOffset, TPoint(size.iWidth, height) + iOffset); +00075 gc->DiscardFont(); +00076 } +00077 +00078 /****************************************************************************\ +00079 | Function: CNumberedWindow::HandlePointerEvent +00080 | Purpose: Handles pointer events for CNumberedWindow. +00081 | Input: aPointerEvent The pointer event +00082 | Output: None +00083 \****************************************************************************/ +00084 void CNumberedWindow::HandlePointerEvent (TPointerEvent& aPointerEvent) +00085 { +00086 switch (aPointerEvent.iType) +00087 { +00088 case TPointerEvent::EButton1Down: +00089 { +00090 Window().Scroll(TPoint(0,-2)); +00091 iOffset += TPoint(0,-2); +00092 iRepeatRect.iTl = aPointerEvent.iPosition - TPoint(10,10); +00093 iRepeatRect.iBr = aPointerEvent.iPosition + TPoint(10,10); +00094 iScrollDir = Up; +00095 Window().RequestPointerRepeatEvent(TTimeIntervalMicroSeconds32 (20000), iRepeatRect); +00096 break; +00097 } +00098 case TPointerEvent::EButtonRepeat: +00099 { +00100 if (iScrollDir == Up) +00101 { +00102 Window().Scroll(TPoint(0,-2)); +00103 iOffset += TPoint(0,-2); +00104 } +00105 else +00106 { +00107 Window().Scroll(TPoint(0,2)); +00108 iOffset += TPoint(0,2); +00109 } +00110 Window().RequestPointerRepeatEvent(TTimeIntervalMicroSeconds32 (20000), iRepeatRect); +00111 break; +00112 } +00113 case TPointerEvent::EButton3Down: +00114 { +00115 Window().Scroll(TPoint(0,2)); +00116 iOffset += TPoint(0,2); +00117 iRepeatRect.iTl = aPointerEvent.iPosition - TPoint(10,10); +00118 iRepeatRect.iBr = aPointerEvent.iPosition + TPoint(10,10); +00119 iScrollDir = Down; +00120 Window().RequestPointerRepeatEvent(TTimeIntervalMicroSeconds32 (100000), iRepeatRect); +00121 break; +00122 } +00123 default: +00124 break; +00125 } +00126 } +00127 +00128 +00130 // CMainWindow implementation +00132 +00133 +00134 /****************************************************************************\ +00135 | Function: Constructor/Destructor for CMainWindow +00136 | Input: aClient Client application that owns the window +00137 \****************************************************************************/ +00138 CMainWindow::CMainWindow (CWsClient* aClient) +00139 : CWindow (aClient) +00140 { +00141 } +00142 +00143 CMainWindow::~CMainWindow () +00144 { +00145 iWindow.Close(); +00146 } +00147 +00148 /****************************************************************************\ +00149 | Function: CMainWindow::Draw +00150 | Purpose: Redraws the contents of CMainWindow within a given +00151 | rectangle. +00152 | Input: aRect Rectangle that needs redrawing +00153 | Output: None +00154 \****************************************************************************/ +00155 +00156 void CMainWindow::Draw(const TRect& aRect) +00157 { +00158 CWindowGc* gc=SystemGc(); // get a gc +00159 gc->SetClippingRect(aRect); // clip outside this rect +00160 gc->Clear(aRect); // clear +00161 } +00162 +00163 /****************************************************************************\ +00164 | Function: CMainWindow::HandlePointerEvent +00165 | Purpose: Handles pointer events for CMainWindow. +00166 | Input: aPointerEvent The pointer event! +00167 | Output: None +00168 \****************************************************************************/ +00169 +00170 void CMainWindow::HandlePointerEvent (TPointerEvent& aPointerEvent) +00171 { +00172 switch (aPointerEvent.iType) +00173 { +00174 case TPointerEvent::EButton1Down: +00175 case TPointerEvent::EButton1Up: +00176 break; +00177 default: +00178 break; +00179 } +00180 } +00181 +00182 +00184 // CExampleWsClient implementation +00186 +00187 CExampleWsClient* CExampleWsClient::NewL(const TRect& aRect) +00188 { +00189 // make new client +00190 CExampleWsClient* client=new (ELeave) CExampleWsClient(aRect); +00191 CleanupStack::PushL(client); // push, just in case +00192 client->ConstructL(); // construct and run +00193 CleanupStack::Pop(); +00194 return client; +00195 } +00196 +00197 /****************************************************************************\ +00198 | Function: Constructor/Destructor for CExampleWsClient +00199 | Destructor deletes everything that was allocated by +00200 | ConstructMainWindowL() +00201 \****************************************************************************/ +00202 +00203 CExampleWsClient::CExampleWsClient(const TRect& aRect) +00204 :iRect(aRect) +00205 { +00206 } +00207 +00208 CExampleWsClient::~CExampleWsClient () +00209 { +00210 delete iMainWindow; +00211 delete iWindow1; +00212 } +00213 +00214 +00215 /****************************************************************************\ +00216 | Function: CExampleWsClient::ConstructMainWindowL() +00217 | Called by base class's ConstructL +00218 | Purpose: Allocates and creates all the windows owned by this client +00219 | (See list of windows in CExampleWsCLient declaration). +00220 \****************************************************************************/ +00221 +00222 void CExampleWsClient::ConstructMainWindowL() +00223 { +00224 iMainWindow=new (ELeave) CMainWindow(this); +00225 iMainWindow->ConstructL(iRect, TRgb (255,255,255)); +00226 iWindow1 = new (ELeave) CNumberedWindow (this,1); +00227 TRect rec(iRect); +00228 rec.Resize(-50,-50); +00229 iWindow1->ConstructL (rec, TRgb (200, 200, 200),iMainWindow); +00230 } +00231 +00232 +00233 /****************************************************************************\ +00234 | Function: CExampleWsClient::RunL() +00235 | Called by active scheduler when an even occurs +00236 | Purpose: Processes events according to their type +00237 | For key events: calls HandleKeyEventL() (global to client) +00238 | For pointer event: calls HandlePointerEvent() for window +00239 | event occurred in. +00240 \****************************************************************************/ +00241 void CExampleWsClient::RunL() +00242 { +00243 // get the event +00244 iWs.GetEvent(iWsEvent); +00245 TInt eventType=iWsEvent.Type(); +00246 // take action on it +00247 switch (eventType) +00248 { +00249 // events global within window group +00250 case EEventNull: +00251 break; +00252 case EEventKey: +00253 { +00254 TKeyEvent& keyEvent=*iWsEvent.Key(); // get key event +00255 HandleKeyEventL (keyEvent); +00256 break; +00257 } +00258 case EEventModifiersChanged: +00259 break; +00260 case EEventKeyUp: +00261 case EEventKeyDown: +00262 case EEventFocusLost: +00263 case EEventFocusGained: +00264 case EEventSwitchOn: +00265 case EEventPassword: +00266 case EEventWindowGroupsChanged: +00267 case EEventErrorMessage: +00268 break; +00269 // events local to specific windows +00270 case EEventPointer: +00271 { +00272 CWindow* window=(CWindow*)(iWsEvent.Handle()); // get window +00273 TPointerEvent& pointerEvent=*iWsEvent.Pointer(); +00274 window->HandlePointerEvent (pointerEvent); +00275 break; +00276 } +00277 case EEventPointerExit: +00278 case EEventPointerEnter: +00279 case EEventPointerBufferReady: +00280 case EEventDragDrop: +00281 break; +00282 default: +00283 break; +00284 } +00285 IssueRequest(); // maintain outstanding request +00286 } +00287 +00288 /****************************************************************************\ +00289 | Function: CExampleWsClient::HandleKeyEventL() +00290 | Purpose: Processes key events for CExampleWsClient +00291 \****************************************************************************/ +00292 void CExampleWsClient::HandleKeyEventL (TKeyEvent& /*aKeyEvent*/) +00293 { +00294 } +00295 +