diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/transparent__util_8cpp-source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/transparent__util_8cpp-source.html Tue Mar 30 11:56:28 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,275 +0,0 @@ - -
-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 } -