examples/Graphics/WS/Scroll/Scroll.cpp

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 

Generated by  doxygen 1.6.2