diff -r 89d6a7a84779 -r 25a17d01db0c Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/transparent__util_8cpp-source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/transparent__util_8cpp-source.html Fri Jan 22 18:26:19 2010 +0000 @@ -0,0 +1,275 @@ + + +TB10.1 Example Applications: examples/Graphics/WS/transparent/transparent_util.cpp Source File + + + + +

examples/Graphics/WS/transparent/transparent_util.cpp

Go to the documentation of this file.
00001 // Copyright (c) 2007-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 // This provides various functions for window event handling, control and access.
+00015 //
+00016 
+00017 
+00018 
+00023 #include "transparent.h"
+00028 static TInt CallDoChangeTransparencyL(TAny *aPtr)
+00029         {
+00030         return (static_cast<CTransparentUtil *> (aPtr)->DoChangeTransparencyL());
+00031         }
+00032 
+00037 static TInt CallDoSetTransparentRegion(TAny *aPtr)
+00038         {
+00039         return (static_cast<CTransparentUtil *> (aPtr)->DoSetTransparentRegion());
+00040         }
+00041 
+00045 CTransparentUtil::CTransparentUtil()
+00046         {
+00047         }
+00048 
+00053 CTransparentUtil* CTransparentUtil::NewL()
+00054         {
+00055         CTransparentUtil* self = new(ELeave) CTransparentUtil();
+00056         CleanupStack::PushL(self);
+00057         self->ConstructL();
+00058         CleanupStack::Pop(self);
+00059         return self;
+00060         }
+00061 
+00065 CTransparentUtil::~CTransparentUtil()
+00066         {
+00067         if(iPeriodicObject->IsActive())
+00068             {
+00069             iPeriodicObject->Cancel();
+00070             }
+00071         delete iPeriodicObject;
+00072         delete iBitmapGc;
+00073         delete iBitmapDevice;
+00074         delete iEventHandler;
+00075         
+00076         iForegndWindowTrans.Close();
+00077         iFgndWinTransRegion.Close();    
+00078         iBackgndWindow.Close();
+00079         iGroup.Close();
+00080 
+00081         delete iGc;
+00082         delete iScr;
+00083         iWs.Close();
+00084         }
+00085 
+00093 void CTransparentUtil::ConstructL()
+00094         {
+00095         // Connect the client session to the window server.
+00096         User::LeaveIfError(iWs.Connect());
+00097 
+00098         // Construct a new screen device attached to the window server session.
+00099         iScr = new(ELeave) CWsScreenDevice(iWs);
+00100         User::LeaveIfError(iScr->Construct(0)); // screen number (0 is first screen)
+00101 
+00102         // Create the graphics context  but do not initialise
+00103         iGc = new(ELeave) CWindowGc(iScr);
+00104 
+00105         // Complete construction
+00106         User::LeaveIfError(iGc->Construct());
+00107 
+00108         // Create an initialised window group handle within the session.
+00109         iGroup  = RWindowGroup(iWs);
+00110         User::LeaveIfError(iGroup.Construct((TUint)&iGroup, ETrue));
+00111 
+00112         // Initialise the background window handle
+00113         iBackgndWindow = RWindow(iWs);
+00114 
+00115         // Initialise the foreground window handle to demonstrate TransparencyVariance(). 
+00116         iForegndWindowTrans = RWindow(iWs);
+00117 
+00118     // Initialise the foreground window handle to demonstrate TransparentRegionL()
+00119         iFgndWinTransRegion = RWindow(iWs);
+00120         
+00121         // Create the CPeriodic object to generate periodic events
+00122         iPeriodicObject=CPeriodic::NewL(CActive::EPriorityUserInput);
+00123         
+00124     // Construct the event handler
+00125     iEventHandler = CEventHandler::NewL(iWs);   
+00126 
+00127         // Construct foreground and background windows
+00128         User::LeaveIfError(iBackgndWindow.Construct(iGroup, (TUint)&iBackgndWindow));
+00129         User::LeaveIfError(iForegndWindowTrans.Construct(iGroup, (TUint)&iForegndWindowTrans));
+00130         User::LeaveIfError(iFgndWinTransRegion.Construct(iGroup, (TUint)&iFgndWinTransRegion));
+00131 
+00132         iForegndWindowTrans.SetRequiredDisplayMode(EColor16MA); 
+00133         iFgndWinTransRegion.SetRequiredDisplayMode(EColor16MA); 
+00134         
+00135     // Set background window size
+00136     TSize bgRectSize(iScr->SizeInPixels().iWidth/2,iScr->SizeInPixels().iHeight);
+00137     iBackgndWindow.SetExtent(TPoint(),bgRectSize);
+00138     iBackgndWindow.Activate();
+00139 
+00140     // Set the size of the foreground window to span the upper half of the background window
+00141     TSize fgRectSize(iScr->SizeInPixels().iWidth/2,iScr->SizeInPixels().iHeight/2);
+00142     iForegndWindowTrans.SetExtent(TPoint(),fgRectSize);
+00143     //Enable the use of alpha channel to vary foreground window's transparency
+00144     User::LeaveIfError(iForegndWindowTrans.SetTransparencyAlphaChannel());
+00145     iForegndWindowTrans.Activate();
+00146     
+00147     // Set the size of the foreground window to overlap the bottom half of the background window
+00148     iFgndWinTransRegion.SetExtent(TPoint(0, iScr->SizeInPixels().iHeight/2),fgRectSize);
+00149 
+00150     //Enable the use of alpha channel to vary foreground window's transparency
+00151     User::LeaveIfError(iFgndWinTransRegion.SetTransparencyAlphaChannel()); 
+00152     iFgndWinTransRegion.Activate();
+00153     
+00154     TRect circleRect(TPoint(80,50), TSize(170, 170));   
+00155     //Draw the background window using the colour specified by the second parameter 
+00156     //and draw a circle on top of it with the colour specified by the third parameter. 
+00157     _LIT(KBackGrndWindow, "Background window");
+00158     DrawWindow(iBackgndWindow, TRgb(234,234,236), TRgb(0,255,0), circleRect , KBackGrndWindow);
+00159     
+00160     //issue request to the event handler. 
+00161     iEventHandler->IssueRequest();
+00162         }
+00163 
+00171 void CTransparentUtil::DrawWindow(RWindow& aWindow, TRgb aColor1, TRgb aColor2, TRect aRect, const TDesC& aText)
+00172         {
+00173         aWindow.Invalidate();
+00174         aWindow.BeginRedraw();
+00175         iGc->Activate(aWindow);
+00176 
+00177         iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+00178         iGc->SetPenStyle(CGraphicsContext::ENullPen);
+00179         iGc->SetBrushColor(aColor1);
+00180         iGc->Clear();
+00181         iGc->SetBrushColor(aColor2);
+00182         iGc->DrawEllipse(aRect);
+00183     iGc->UseFont(iEikonEnv->NormalFont());
+00184     iGc->DrawText(aText, TPoint(10, aWindow.Size().iHeight/2 + 5));
+00185         iGc->Deactivate();
+00186         aWindow.EndRedraw();
+00187         iWs.Flush();
+00188         }
+00189 
+00197 void CTransparentUtil::TransparencyVarianceL()
+00198         { 
+00199         //Clear the foreground windows to the selected colour. 
+00200         ClearWindow(iWs, iForegndWindowTrans, iGc, TRgb::Gray16(10));
+00201               
+00202         // Issue request to the active scheduler after receiving the event.
+00203          if((iPeriodicObject->IsActive()))
+00204              {       
+00205              iPeriodicObject->Cancel();
+00206              }
+00207      iPeriodicObject->Start(0,KDelay,TCallBack(CallDoChangeTransparencyL,this));
+00208         }
+00209 
+00217 void CTransparentUtil::ClearWindow(RWsSession& aSession, RWindow& aWindow, CWindowGc* aGc, TRgb aColor)
+00218         {
+00219         aWindow.Invalidate();
+00220         aWindow.BeginRedraw();
+00221         aGc->Activate(aWindow);
+00222         aGc->SetBrushColor(aColor);
+00223         aGc->Clear();
+00224         aGc->Deactivate();
+00225         aWindow.EndRedraw();
+00226         aSession.Flush();
+00227         }
+00228 
+00234 TBool CTransparentUtil::DoChangeTransparencyL()
+00235         {
+00236         //iAlphaValue is the alpha value and the foreground window is redrawn to show 
+00237         //periodic transparency change. 
+00238         iForegndWindowTrans.SetBackgroundColor( TRgb(255,0, 0, iAlphaValue));
+00239 
+00240         TRect drawEllipse(TPoint(170, 45), TSize(65, 45));
+00241         _LIT(KForeGrndWindowforTrans, "Foreground window for Vary Tra...");
+00242         DrawWindow(iForegndWindowTrans, TRgb(255,0,0,iAlphaValue), TRgb(100,100,100, iAlphaValue), drawEllipse, KForeGrndWindowforTrans);
+00243 
+00244         iAlphaValue += 20;
+00245         if (iAlphaValue < 255)
+00246                 {
+00247                 return ETrue;
+00248                 }
+00249         else
+00250                 {
+00251                 iAlphaValue=0;
+00252                 iPeriodicObject->Cancel();
+00253                 return EFalse;
+00254                 }
+00255         }
+00256 
+00263 void CTransparentUtil::TransparentRegionL()
+00264         {   
+00265     //iBoolVisible is a boolean variable used to toggle the visibility of foreground
+00266     //window on TransparentRegionL().. button press
+00267     if(iBoolVisible)
+00268         {
+00269         iFgndWinTransRegion.SetVisible(EFalse);
+00270         iBoolVisible = EFalse; 
+00271         iWs.Flush();
+00272         }
+00273     else
+00274         {  
+00275         iFgndWinTransRegion.SetVisible(ETrue);       
+00276         
+00277         //set background colour of the foreground window as blue and alpha value as 50. 
+00278         iFgndWinTransRegion.SetBackgroundColor(TRgb(0, 0 , 255 , 50));
+00279     
+00280         //create a rectsize which is half the size of the foreground window. 
+00281         TSize rectsize1(iScr->SizeInPixels().iWidth/2,iScr->SizeInPixels().iHeight/4);
+00282         TRect chopRect1(TPoint(0, iScr->SizeInPixels().iHeight/4), rectsize1);
+00283         
+00284         //Take a region which is the lower half of the foreground window. 
+00285         iRegion = TRegionFix<2>(chopRect1);
+00286         //Use SetTransparentRegion() to keep only the region specified by iRegion as transparent.
+00287         iFgndWinTransRegion.SetTransparentRegion(iRegion);
+00288     
+00289         //Invalidate and begin redraw on the opaque region of the foreground window. 
+00290         TRect chopRect2(TPoint(0, 0), rectsize1);
+00291         //Draw a circle on the opaque region of the foreground window. 
+00292         TRect circleRect2(TPoint(60,20), TSize(40, 40));
+00293         _LIT(KOpqRegion, "Opaque region of the transparent window");
+00294         DrawWindowRegion(iFgndWinTransRegion, TRgb(255, 255, 0), TRgb(100, 100, 0), chopRect2, circleRect2, KOpqRegion, TPoint(10, 15)); 
+00295         
+00296         //Invalidate and begin redraw on the transparent region of the foreground window. 
+00297         TRect circleRect3(TPoint(110,80), TSize(40, 40));
+00298         _LIT(KTransRegion, "Transparent region of the transparent window");
+00299         DrawWindowRegion(iFgndWinTransRegion, TRgb(0, 0 , 255 , 50), TRgb(255,0,0, 100), chopRect1, circleRect3, KTransRegion, TPoint(10, 75)); 
+00300         iBoolVisible = ETrue; 
+00301         }
+00302         }
+00303 
+00314 void CTransparentUtil::DrawWindowRegion(RWindow& aWindow, TRgb aColor1, TRgb aColor2, TRect aChopRect, TRect aRect, const TDesC& aText, const TPoint& aPoint)
+00315     {
+00316     aWindow.Invalidate(aChopRect);
+00317     aWindow.BeginRedraw(aChopRect);
+00318     iGc->Activate(aWindow);
+00319 
+00320     iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+00321     iGc->SetPenStyle(CGraphicsContext::ENullPen);
+00322 
+00323     iGc->SetBrushColor(aColor1);
+00324     iGc->Clear();
+00325         
+00326     iGc->SetBrushColor(aColor2);
+00327     iGc->DrawEllipse(aRect);
+00328     iGc->SetBrushColor(TRgb(0, 0, 0)); 
+00329     iGc->UseFont(iEikonEnv->NormalFont());
+00330     iGc->DrawText(aText, aPoint);
+00331     iGc->Deactivate();
+00332     aWindow.EndRedraw();
+00333     iWs.Flush();
+00334     }
+

Generated on Thu Jan 21 10:32:58 2010 for TB10.1 Example Applications by  + +doxygen 1.5.3
+ +