--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/tauto/TAlphaChannel.CPP Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,1936 @@
+// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// An alpha channel test case.
+// Output different graphics primitives in each window using three graphics modes
+// for pen and brush : semi-transparent,transparent, opaque
+// Test also exercises anti-aliasing and fading for 16MA display mode
+// Moves sprite on the window. Tests a sprite functionality.
+// Creates RBackedUpWindow window and moves it over transparent window,
+// hides and shows it.
+// Moves windows on the screen, overlaps them
+// Actions:
+// Create a background window, and five foreground windows:
+// -transparent and semi-transparent
+// -transparent with transparency factor
+// -not transparent
+//
+//
+
+#include "TAlphaChannel.H"
+
+const TInt KWindowIndention = 2;
+const TInt KSizeKoeff = 15;
+
+
+LOCAL_D TPtrC ColumnName[]={
+ _L("Opaque"),
+ _L("Semi-transparent"),
+ _L("Transparent"),
+ _L(""),
+ _L(""),
+ _L(""),
+ };
+
+LOCAL_D TPtrC RowName[]={
+ _L("n"),
+ _L("and"),
+ _L("or"),
+ _L("xor"),
+ _L(""),
+ _L(""),
+ };
+
+
+//
+//
+CTAlphaChannel::CTAlphaChannel(CTestStep* aStep):
+ CTWsGraphicsBase(aStep), iArrWindow(8)
+ {
+ }
+
+CTAlphaChannel::~CTAlphaChannel()
+ {
+ delete iBitmap64K_1;
+ delete iBitmap16MA_1;
+ delete iBitmap64K_2;
+ delete iBitmap16MA_2;
+ delete iBitmap64K_3;
+ delete iBitmap16MA_3;
+
+ delete iBitmapMask;
+ delete iBitmapGray256Mask;
+
+ delete iBitmapContext64K_1;
+ delete iBitmapContext16MA_1;
+ delete iBitmapContext64K_2;
+ delete iBitmapContext16MA_2;
+ delete iBitmapContext64K_3;
+ delete iBitmapContext16MA_3;
+
+ delete iBitmapDevice64K_1;
+ delete iBitmapDevice16MA_1;
+ delete iBitmapDevice64K_2;
+ delete iBitmapDevice16MA_2;
+ delete iBitmapDevice64K_3;
+ delete iBitmapDevice16MA_3;
+
+ delete iBackgroundWindow;
+
+
+ iArrWindow.ResetAndDestroy();
+
+ if(iFont)
+ TheClient->iScreen->ReleaseFont(iFont);
+ if(iFont1)
+ TheClient->iScreen->ReleaseFont(iFont1);
+
+ BaseWin->SetVisible(ETrue);
+ TestWin->SetVisible(ETrue);
+ }
+
+void CTAlphaChannel::ConstructL()
+ {
+ const TInt KIndent = 10;
+ BaseWin->SetVisible(EFalse);
+ TestWin->SetVisible(EFalse);
+
+ iText = _L("This is a text");
+ iBrushStyle = CGraphicsContext::ESolidBrush;
+ iPenTable = KRgbBlack;
+
+ TSize screenSize=TheClient->iGroup->Size();
+ TInt winWidth=(screenSize.iWidth)-KIndent;
+ TInt winHeight=screenSize.iHeight-KIndent;
+ TDisplayMode dispMode = EColor64K;
+
+ //background opaque window
+ iBackgroundWindow = new (ELeave) CTWinAlpha();
+ iBackgroundWindow->SetUpL(TPoint(5,5),TSize(winWidth,winHeight),TheClient->iGroup,*TheClient->iGc, &dispMode);
+ RWindow *theWin = (RWindow*) (iBackgroundWindow->DrawableWin());
+ theWin->SetBackgroundColor(TRgb(255, 0, 0));
+ iBackgroundWindow->DrawNow();
+
+ iSizeForegroundWindow.iWidth = (winWidth - KWindowIndention * 4) / 5 ;
+ iSizeForegroundWindow.iHeight = winHeight;
+
+ CalculateSizePrimitives(iSizeForegroundWindow);
+
+ //-------------create bitmaps
+ //create 64K bitmap
+ iBitmap64K_1 = new (ELeave) CFbsBitmap ;
+ iBitmap64K_1->Create(iBitmapSize,EColor64K);
+ iBitmap64K_2 = new (ELeave) CFbsBitmap ;
+ iBitmap64K_2->Create(iBitmapSize,EColor64K);
+ iBitmap64K_3 = new (ELeave) CFbsBitmap ;
+ iBitmap64K_3->Create(iBitmapSize,EColor64K);
+ iBitmapDevice64K_1 = CFbsBitmapDevice::NewL(iBitmap64K_1);
+ iBitmapDevice64K_1->CreateContext(iBitmapContext64K_1);
+ iBitmapDevice64K_2 = CFbsBitmapDevice::NewL(iBitmap64K_2);
+ iBitmapDevice64K_2->CreateContext(iBitmapContext64K_2);
+ iBitmapDevice64K_3 = CFbsBitmapDevice::NewL(iBitmap64K_3);
+ iBitmapDevice64K_3->CreateContext(iBitmapContext64K_3);
+
+ //create 16MA bitmap
+ iBitmap16MA_1 = new (ELeave) CFbsBitmap ;
+ iBitmap16MA_1->Create(iBitmapSize, EColor16MA);
+ iBitmap16MA_2 = new (ELeave) CFbsBitmap ;
+ iBitmap16MA_2->Create(iBitmapSize, EColor16MA);
+ iBitmap16MA_3 = new (ELeave) CFbsBitmap ;
+ iBitmap16MA_3->Create(iBitmapSize, EColor16MA);
+
+ iBitmapDevice16MA_1 = CFbsBitmapDevice::NewL(iBitmap16MA_1);
+ iBitmapDevice16MA_1->CreateContext(iBitmapContext16MA_1);
+ iBitmapDevice16MA_2 = CFbsBitmapDevice::NewL(iBitmap16MA_2);
+ iBitmapDevice16MA_2->CreateContext(iBitmapContext16MA_2);
+ iBitmapDevice16MA_3 = CFbsBitmapDevice::NewL(iBitmap16MA_3);
+ iBitmapDevice16MA_3->CreateContext(iBitmapContext16MA_3);
+
+ //create mask bitmap
+ iBitmapMask = new (ELeave) CFbsBitmap ;
+ iBitmapMask->Create(iBitmapSize, EGray2);
+
+ CFbsBitmapDevice* theBitmapDevice = CFbsBitmapDevice::NewL(iBitmapMask);
+ CGraphicsContext* theBitmapContext = NULL;
+ theBitmapDevice->CreateContext(theBitmapContext);
+ TRect rect = TRect(iBitmapMask->SizeInPixels());
+ theBitmapContext->SetBrushColor(KRgbWhite);
+ theBitmapContext->SetPenColor(KRgbWhite);
+ theBitmapContext->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ theBitmapContext->DrawRect(rect);
+
+ rect.Shrink(4, 4);
+ theBitmapContext->SetBrushColor(KRgbBlack);
+ theBitmapContext->SetPenColor(KRgbBlack);
+ theBitmapContext->DrawEllipse(rect);
+ delete theBitmapContext;
+ delete theBitmapDevice;
+
+ //create 256gray bitmap mask
+ iBitmapGray256Mask = new (ELeave) CFbsBitmap;
+ iBitmapGray256Mask->Create(iBitmapSize, EGray256);
+ theBitmapDevice = CFbsBitmapDevice::NewL(iBitmapGray256Mask);
+ theBitmapDevice->CreateContext(theBitmapContext);
+
+ if(iBitmapSize != TSize(0, 0))
+ {
+ //fill bitmap with 256 gradation of gray
+ TInt theStep = 256 / iBitmapGray256Mask->SizeInPixels().iWidth;
+
+ for(TInt ii = 0; ii < iBitmapGray256Mask->SizeInPixels().iWidth; ii++)
+ {
+ TInt theSingleCol = theStep * ii;
+ TRgb theCol(theSingleCol, theSingleCol, theSingleCol);
+ theBitmapContext->SetBrushColor(theCol);
+ theBitmapContext->SetPenColor(theCol);
+ TPoint ptFrom(ii, 0);
+ TPoint ptTo(ii, iBitmapGray256Mask->SizeInPixels().iHeight);
+ theBitmapContext->DrawLine(ptFrom, ptTo);
+ }
+ }
+ delete theBitmapContext;
+ delete theBitmapDevice;
+ //--------------
+ TFontSpec fontSpec(KTestFontTypefaceName,600);
+
+ fontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
+ fontSpec.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
+
+ User::LeaveIfError(TheClient->iScreen->GetNearestFontToDesignHeightInTwips(iFont, fontSpec));
+
+ TFontSpec fontSpec1(KTestFontTypefaceName,100);
+ User::LeaveIfError(TheClient->iScreen->GetNearestFontToDesignHeightInTwips(iFont1, fontSpec1));
+ }
+
+void CTAlphaChannel::CalculateSizePrimitives(const TSize& aSize)
+ {
+ TInt theLen = aSize.iWidth / KSizeKoeff;
+
+ iBitmapSize = TSize(2 * theLen, 2 * theLen);
+ iRectangleSize = TSize(2 * theLen, 2 * theLen);
+ iEllipseSize = TSize(4 * theLen, 2 * theLen);
+ iTriangleSize = TSize(3 * theLen, 2 * theLen);
+ iFirstCellWidth = static_cast <TInt> (1.2 * theLen);
+ iFirstCellHeight = static_cast <TInt> (1.5 * theLen);
+ }
+
+void CTAlphaChannel::DrawOffscreenBitmapsL(const TRgb& /*aPen*/, const TRgb& aBrush,
+ CGraphicsContext* aBitmapContext64K, CGraphicsContext* aBitmapContext16MA,
+ CFbsBitmap* aBitmap64K, CFbsBitmap* aBitmap16MA)
+ {
+
+ if(aBitmapContext64K && aBitmap64K)
+ {
+ SEpocBitmapHeader header = aBitmap64K->Header();
+ TInt source_buffer_size = header.iBitmapSize / header.iSizeInPixels.iHeight * header.iBitsPerPixel ;
+ TUint8* buffer = new(ELeave) TUint8[source_buffer_size];
+ TPtr8 source_ptr(buffer, source_buffer_size, source_buffer_size);
+
+ TUint16* bufferCur = reinterpret_cast<TUint16*> (buffer);
+ TInt ii;
+ for(ii = 0; ii < header.iSizeInPixels.iWidth; ++ii)
+ {
+ *bufferCur = aBrush._Color64K();
+ bufferCur ++;
+ }
+
+ for(ii = 0; ii < header.iSizeInPixels.iHeight; ++ii)
+ {
+ aBitmap64K -> SetScanLine(source_ptr, ii);
+ }
+
+ delete [] buffer;
+ }
+
+ if(aBitmapContext16MA && aBitmap16MA)
+ {
+ SEpocBitmapHeader header = aBitmap16MA -> Header();
+ TInt source_buffer_size = header.iBitmapSize / header.iSizeInPixels.iHeight * header.iBitsPerPixel ;
+ TUint8* buffer = new(ELeave) TUint8[source_buffer_size];
+ TPtr8 source_ptr(buffer, source_buffer_size, source_buffer_size);
+
+ TUint32* bufferCur = reinterpret_cast<TUint32*> (buffer);
+ TInt ii;
+ for(ii = 0; ii < header.iSizeInPixels.iWidth; ++ii)
+ {
+ *bufferCur = aBrush._Color16MA();
+ bufferCur ++;
+ }
+
+ for(ii = 0; ii < header.iSizeInPixels.iHeight; ++ii)
+ {
+ aBitmap16MA -> SetScanLine(source_ptr, ii);
+ }
+
+ delete [] buffer;
+ }
+
+ }
+
+enum {EOpaque, ESemiTrans, ETrans};
+
+TRgb CTAlphaChannel::GetBrush(TInt aIndex) const
+ {
+ switch(aIndex)
+ {
+ case EOpaque:
+ return TRgb(0, 0, 255, 255);
+ case ESemiTrans:
+ return TRgb(0, 0, 255, 128);
+ case ETrans:
+ return TRgb(0, 0, 255, 0);
+ default : break;
+ }
+
+ return TRgb(0, 0, 255, 255);
+ }
+
+TRgb CTAlphaChannel::GetPen(TInt aIndex) const
+ {
+ switch(aIndex)
+ {
+ case EOpaque:
+ return TRgb(0, 0, 255, 255);
+ case ESemiTrans:
+ return TRgb(0, 0, 255, 128);
+ case ETrans:
+ return TRgb(0, 0, 255, 0);
+ default : break;
+ }
+
+ return TRgb(0, 0, 255, 255);
+ }
+
+CGraphicsContext::TDrawMode CTAlphaChannel::GetDrawMode(TInt /*aIndex*/) const
+ {
+ return CGraphicsContext::EDrawModePEN;
+ }
+
+enum {EAll64K, EAll16MA, EAllDifferent};// later may add EAll16M
+void CTAlphaChannel::SetDisplayModeConfiguration(TInt aConfig)
+ {
+ switch (aConfig)
+ {
+ case EAll64K:
+ if(iForegroundWindowOpaque)
+ iForegroundWindowOpaque->SetDisplayMode(EColor64K);
+ if(iForegroundWindowSemiTrans)
+ iForegroundWindowSemiTrans->SetDisplayMode(EColor64K);
+ if(iForegroundWindowTrans)
+ iForegroundWindowTrans->SetDisplayMode(EColor64K);
+ break;
+ case EAll16MA:
+ if(iForegroundWindowOpaque)
+ iForegroundWindowOpaque->SetDisplayMode(EColor16MA);
+ if(iForegroundWindowSemiTrans)
+ iForegroundWindowSemiTrans->SetDisplayMode(EColor16MA);
+ if(iForegroundWindowTrans)
+ iForegroundWindowTrans->SetDisplayMode(EColor16MA);
+ break;
+ case EAllDifferent:
+ if(iForegroundWindowOpaque)
+ iForegroundWindowOpaque->SetDisplayMode(EColor256);
+ if(iForegroundWindowSemiTrans)
+ iForegroundWindowSemiTrans->SetDisplayMode(EColor64K);
+ if(iForegroundWindowTrans)
+ iForegroundWindowTrans->SetDisplayMode(EColor16MA);
+ break;
+ }
+ }
+
+enum {ETiled, EOverlapping};
+
+void CTAlphaChannel::SetPositionConfiguration(TInt aConfig)
+ {
+ TSize screenSize=TheClient->iGroup->Size();
+ TInt winWidth=(screenSize.iWidth)-10;
+ TInt winHeight=screenSize.iHeight-10;
+ if (aConfig==ETiled)
+ {
+ if(iForegroundWindowOpaque)
+ iForegroundWindowOpaque->SetPos(TPoint(winWidth/5, 0));
+ if(iForegroundWindowSemiTrans)
+ iForegroundWindowSemiTrans->SetPos(TPoint(2*winWidth/5, 0));
+ if(iForegroundWindowTrans)
+ iForegroundWindowTrans->SetPos(TPoint(3*winWidth/5, 0));
+ }
+ else
+ {
+ if(iForegroundWindowOpaque)
+ iForegroundWindowOpaque->SetPos(TPoint(winWidth/3, -winHeight/3));
+ if(iForegroundWindowSemiTrans)
+ iForegroundWindowSemiTrans->SetPos(TPoint(2*winWidth/5, winHeight/3));
+ if(iForegroundWindowTrans)
+ iForegroundWindowTrans->SetPos(TPoint(winWidth/2, -winHeight/3));
+ }
+ if (iForegroundWindowBottom)
+ iForegroundWindowBottom->SetPos(TPoint(0, 0));
+ if (iForegroundWindowTop)
+ iForegroundWindowTop->SetPos(TPoint(4*winWidth/5, 0));
+ }
+
+enum {EVaryingTransparency, EVaryingColour};
+
+void CTAlphaChannel::SetColourConfiguration(TInt aConfig)
+ {
+ RWindow* win;
+ if (aConfig==EVaryingTransparency)
+ {
+ // red background, green foregrounds of varying transparency
+ win = (RWindow*)(iBackgroundWindow->DrawableWin());
+ win->SetBackgroundColor(TRgb(255,0,0,255));
+
+ if(iForegroundWindowOpaque)
+ iForegroundWindowOpaque->SetBackgroundColor(TRgb(0,255,0,255));
+ if(iForegroundWindowSemiTrans)
+ iForegroundWindowSemiTrans->SetBackgroundColor(TRgb(0,255,0,128));
+ if(iForegroundWindowTrans)
+ iForegroundWindowTrans->SetBackgroundColor(TRgb(0,255,0,0));
+ }
+ else
+ {
+ // white background, semi-transparent foregrounds in primary colours
+ win = (RWindow*)(iBackgroundWindow->DrawableWin());
+ win->SetBackgroundColor(TRgb(255,255,255,255));
+
+ if(iForegroundWindowOpaque)
+ iForegroundWindowOpaque->SetBackgroundColor(TRgb(255,0,0,128));
+ if(iForegroundWindowSemiTrans)
+ iForegroundWindowSemiTrans->SetBackgroundColor(TRgb(0,255,0,128));
+ if(iForegroundWindowTrans)
+ iForegroundWindowTrans->SetBackgroundColor(TRgb(0,0,255,128));
+ }
+ }
+
+void CTAlphaChannel::DoMoving()
+ {
+ TPoint pos;
+ for (TInt i = 0; i<20; i++)
+ {
+ if (iForegroundWindowBottom)
+ {
+ pos = iForegroundWindowBottom->Position();
+ pos += TPoint(1,5);
+ iForegroundWindowBottom->SetPos(pos);
+ }
+
+ if (iForegroundWindowOpaque)
+ {
+ pos = iForegroundWindowOpaque->Position();
+ pos += TPoint(1,5);
+ iForegroundWindowOpaque->SetPos(pos);
+ }
+
+ if (iForegroundWindowSemiTrans)
+ {
+ pos = iForegroundWindowSemiTrans->Position();
+ pos += TPoint(1,5);
+ iForegroundWindowSemiTrans->SetPos(pos);
+ }
+
+ if (iForegroundWindowTrans)
+ {
+ pos = iForegroundWindowTrans->Position();
+ pos += TPoint(1,5);
+ iForegroundWindowTrans->SetPos(pos);
+ }
+
+ if (iForegroundWindowTop)
+ {
+ pos = iForegroundWindowTop->Position();
+ pos += TPoint(1,5);
+ iForegroundWindowTop->SetPos(pos);
+ }
+
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(50000));
+ }
+
+ }
+
+void CTAlphaChannel::DoMoveBehind()
+ {
+ TPoint pos = iBackgroundWindow->Position();
+ for (TInt i = 0; i<20; i++)
+ {
+ pos += TPoint(0,5);
+ iBackgroundWindow->SetPos(pos);
+
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(50000));
+ }
+ iBackgroundWindow->SetPos(TPoint(5,5));
+ }
+
+void CTAlphaChannel::DoInvisibility()
+ {
+ RWindow* win;
+ if (iForegroundWindowBottom)
+ {
+ win = (RWindow*)(iForegroundWindowBottom->DrawableWin());
+ win->SetVisible(EFalse);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+
+ win->SetVisible(ETrue);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+ }
+ if (iForegroundWindowOpaque)
+ {
+ win = (RWindow*)(iForegroundWindowOpaque->DrawableWin());
+ win->SetVisible(EFalse);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+
+ win->SetVisible(ETrue);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+ }
+ if (iForegroundWindowSemiTrans)
+ {
+ win = (RWindow*)(iForegroundWindowSemiTrans->DrawableWin());
+ win->SetVisible(EFalse);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+
+ win->SetVisible(ETrue);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+ }
+ if (iForegroundWindowTrans)
+ {
+ win = (RWindow*)(iForegroundWindowTrans->DrawableWin());
+ win->SetVisible(EFalse);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+
+ win->SetVisible(ETrue);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+ }
+ if (iForegroundWindowTop)
+ {
+ win = (RWindow*)(iForegroundWindowTop->DrawableWin());
+ win->SetVisible(EFalse);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+
+ win->SetVisible(ETrue);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+ }
+ }
+
+/**
+ @SYMTestCaseID GRAPHICS-WSERV-0328
+
+ @SYMTestCaseDesc Testing a Fading.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions
+ Set fading parameters. Draw all graphics primitives and bitmaps with
+ various transparency .
+
+ @SYMTestExpectedResults
+ All windows should be drawn according their fading values.
+ */
+
+void CTAlphaChannel::TestFading()
+ {
+ iIsFading = ETrue;
+ iBlackFading = 0;
+ iWhiteFading = 128;
+ iText.Format(_L("Fading. %dX%d"), iBlackFading, iWhiteFading);
+ INFO_PRINTF1(iText);
+ DrawTestWindowsNow();
+
+ User::After(TTimeIntervalMicroSeconds32(1000000 * 1));
+ iIsFading = EFalse;
+ DrawTestWindowsNow();
+ iIsFading = ETrue;
+ iBlackFading = 128;
+ iWhiteFading = 255;
+ iText.Format(_L("Fading. %dX%d"), iBlackFading, iWhiteFading);
+ INFO_PRINTF1(iText);
+ DrawTestWindowsNow();
+
+ iIsFading = EFalse;
+ }
+
+/**
+ @SYMTestCaseID GRAPHICS-WSERV-0329
+
+ @SYMTestCaseDesc Tests moving of foreground windows.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions
+ Set fading parameters. Set position of foreground windows as tile .
+
+ @SYMTestExpectedResults
+ Foreground window has to be redrawn properly.
+ */
+
+void CTAlphaChannel::TestMoving()
+ {
+ SetPositionConfiguration(ETiled);
+ DoMoving();
+ SetPositionConfiguration(ETiled);
+ }
+
+/**
+ @SYMTestCaseID GRAPHICS-WSERV-0330
+
+ @SYMTestCaseDesc Tests moving of foreground windows.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions
+ Set fading parameters. Moves foreground windows over the screen .
+
+ @SYMTestExpectedResults
+ Foreground window has to be redrawn properly.
+ */
+
+
+void CTAlphaChannel::TestMovingOverlapping()
+ {
+ TPoint pos;
+
+ for (TInt i = 0; i < 20; i++)
+ {
+ if (iForegroundWindowOpaque)
+ {
+ pos = iForegroundWindowOpaque->Position();
+ pos += TPoint(3,0);
+ iForegroundWindowOpaque->SetPos(pos);
+ }
+ if (iForegroundWindowTrans)
+ {
+ pos = iForegroundWindowTrans->Position();
+ pos -= TPoint(3,0);
+ iForegroundWindowTrans->SetPos(pos);
+ }
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(50000));
+ }
+ }
+
+/**
+ @SYMTestCaseID GRAPHICS-WSERV-0331
+
+ @SYMTestCaseDesc Testing transparency factor for windows with alpha channel.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions
+ Sets background colour with various level of transparency .
+
+ @SYMTestExpectedResults
+ Foreground window must be redrawn properly.
+ */
+void CTAlphaChannel::TestChangingTransparencyFactor()
+ {
+ TInt i = 0;
+ while (i <= 255)
+ {
+ iForegroundWindowOpaque->SetBackgroundColor(TRgb(0,255,0,255-i));
+ iForegroundWindowTrans->SetBackgroundColor(TRgb(0,255,0,i));
+ iForegroundWindowOpaque->DrawNow();
+ iForegroundWindowTrans->DrawNow();
+ i+=15;
+ }
+ i=0;
+ while (i <= 255)
+ {
+ iForegroundWindowOpaque->SetBackgroundColor(TRgb(0,255,0,i));
+ iForegroundWindowTrans->SetBackgroundColor(TRgb(0,255,0,255-i));
+ iForegroundWindowOpaque->DrawNow();
+ iForegroundWindowTrans->DrawNow();
+ User::After(TTimeIntervalMicroSeconds32(50000));// 20 frames per second
+ i+=15;
+ }
+ }
+
+/**
+ @SYMTestCaseID GRAPHICS-WSERV-0332
+
+ @SYMTestCaseDesc Testing redrawing of foreground windows while their positions and
+ invisibility have been changed.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions
+ Sets position of the foreground windows as overlapping, tiled.
+ Change visability of semi transparent foreground window. .
+
+ @SYMTestExpectedResults
+ Foreground window must be redrawn properly.
+ */
+
+void CTAlphaChannel::TestInvisibility()
+ {
+ RWindow* win = (RWindow*)(iForegroundWindowSemiTrans->DrawableWin());
+ SetPositionConfiguration(EOverlapping);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+
+ win->SetVisible(EFalse);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+
+ win->SetVisible(ETrue);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+
+ SetPositionConfiguration(ETiled);
+
+ }
+
+/**
+ @SYMTestCaseID GRAPHICS-WSERV-0333
+
+ @SYMTestCaseDesc Testing redrawing of foreground windows after a
+ background window has been moved.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions
+ Sets position of the foreground windows as tiled.
+ Moves background window.
+
+ @SYMTestExpectedResults
+ Foreground windows must be redrawn properly.
+ */
+void CTAlphaChannel::TestMoveUnderneath()
+ {
+ SetPositionConfiguration(ETiled);
+ DoMoveBehind();
+ }
+/**
+ @SYMTestCaseID GRAPHICS-WSERV-0334
+
+ @SYMTestCaseDesc Testing redrawing of foreground windows after a
+ background window has been moved.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions
+ Sets different position of the foreground windows: tiled, overlapping.
+ Moves background window.
+
+ @SYMTestExpectedResults
+ Foreground windows has to be redrawn properly.
+ */
+
+void CTAlphaChannel::TestMoveBehindInvisible()
+ {
+ SetPositionConfiguration(ETiled);
+ RWindow* win;
+ win = (RWindow*)(iForegroundWindowOpaque->DrawableWin());
+ win->SetVisible(EFalse);
+ win = (RWindow*)(iForegroundWindowSemiTrans->DrawableWin());
+ win->SetVisible(EFalse);
+ win = (RWindow*)(iForegroundWindowTrans->DrawableWin());
+ win->SetVisible(EFalse);
+ TheClient->iWs.Flush();
+
+ DoMoveBehind();
+
+ SetPositionConfiguration(EOverlapping);
+ DoMoveBehind();
+
+ win = (RWindow*)(iForegroundWindowOpaque->DrawableWin());
+ win->SetVisible(ETrue);
+ win = (RWindow*)(iForegroundWindowSemiTrans->DrawableWin());
+ win->SetVisible(ETrue);
+ win = (RWindow*)(iForegroundWindowTrans->DrawableWin());
+ win->SetVisible(ETrue);
+ TheClient->iWs.Flush();
+ }
+/**
+ @SYMTestCaseID GRAPHICS-WSERV-0335
+
+ @SYMTestCaseDesc Testing redrawing of foreground windows.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions
+ Redraws background window
+
+ @SYMTestExpectedResults
+ Foreground windows should be redrawn properly, if background window
+ has been redrawn.
+ */
+void CTAlphaChannel::TestRedrawBehind()
+ {
+ TheClient->iWs.Flush();
+ iBackgroundWindow->iState += 1;
+ iBackgroundWindow->DrawNow();
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+ }
+/**
+ @SYMTestCaseID GRAPHICS-WSERV-0336
+
+ @SYMTestCaseDesc Testing transparency with RWsSprite class.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions
+ Creates RBackedUpWindow window and moves it over transparent window
+ appears and dissapears set up window as transparent
+
+ @SYMTestExpectedResults
+ Must work with transparent windows.
+ */
+
+void CTAlphaChannel::TestAnimationL()
+ {
+ for(TInt ii = 0; ii < iArrWindow.Count(); ii++)
+ {
+ iArrWindow[ii]->StartAnimationL();
+ }
+ }
+/**
+ @SYMTestCaseID GRAPHICS-WSERV-0337
+
+ @SYMTestCaseDesc Testing transparency with RBackedUpWindow window class.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions
+ Creates RBackedUpWindow window and moves it over transparent window
+ appears and dissapears set up transparent window as transparent
+
+ @SYMTestExpectedResults
+ Do not expect correct work of alpha channel with
+ RBackedUpWindow window class.
+*/
+void CTAlphaChannel::TestBackedWindowL()
+ {
+ for(TInt ii = 0; ii < iArrWindow.Count(); ii++)
+ {
+ iArrWindow[ii]->CreateBackedWindowL();
+ }
+ }
+
+/**
+ @SYMTestCaseID GRAPHICS-WSERV-0338
+
+ @SYMTestCaseDesc Implication of setting SetDrawOpaque on drawing with alpha channel.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions
+ Change graphic context to opaque and none opaque and rewdraw all test windows
+
+ @SYMTestExpectedResults
+ must not impact on output with alpha channel
+ */
+
+void CTAlphaChannel::TestEffectSetOpaque()
+ {
+ for(TInt ii = 0; ii < 3; ii++)
+ {
+
+ for(TInt ii = 0; ii < iArrWindow.Count(); ii++)
+ {
+ iArrWindow[ii]->SetDrawOpaque(EFalse);
+ }
+
+ DrawTestWindowsNow();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+
+ for(TInt jj = 0; jj < iArrWindow.Count(); jj++)
+ {
+ iArrWindow[jj]->SetDrawOpaque(ETrue);
+ }
+
+ DrawTestWindowsNow();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+ }
+ }
+
+/**
+ @SYMTestCaseID GRAPHICS-WSERV-0339
+
+ @SYMTestCaseDesc Redrawing of child windows with transparency.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions
+ Creates a few child windows with various levels of transparency.
+ Moves parent window over the screen.
+ @SYMTestExpectedResults
+ Child and parent windows must be redrawn properly
+ */
+
+void CTAlphaChannel::TestChildWindowL()
+ {
+ SetPositionConfiguration(ETiled);
+ SetColourConfiguration(EVaryingColour);
+ DrawTestWindowsNow(ETrue);
+ TDisplayMode mode = EColor64K;
+ CTWinAlphaForeground* childWin[] = {NULL, NULL, NULL, NULL, NULL};
+ if (iForegroundWindowBottom)
+ {
+ childWin[0] = CTWinAlphaForeground::NewL(*this, TPoint(0,0),TSize(50,50),iForegroundWindowBottom,*TheClient->iGc, &mode, TRgb(0, 255, 0,128), ENonTransparentAlpha);
+ childWin[0]->DrawNow();
+ }
+ if (iForegroundWindowOpaque)
+ {
+ childWin[1] = CTWinAlphaForeground::NewL(*this, TPoint(0,0),TSize(50,50),iForegroundWindowOpaque,*TheClient->iGc, &mode, TRgb(0, 255, 0,128), ETransparencyFactor);
+ childWin[1]->DrawNow();
+ }
+ if (iForegroundWindowSemiTrans)
+ {
+ childWin[2] = CTWinAlphaForeground::NewL(*this, TPoint(0,0),TSize(50,50),iForegroundWindowSemiTrans,*TheClient->iGc, &mode, TRgb(0, 255, 0,128), ETransparencyAlpha);
+ childWin[2]->DrawNow();
+ }
+ if (iForegroundWindowTrans)
+ {
+ childWin[3] = CTWinAlphaForeground::NewL(*this, TPoint(0,0),TSize(50,50),iForegroundWindowTrans,*TheClient->iGc, &mode, TRgb(0, 255, 0,128), ENonTransparentAlpha);
+ childWin[3]->DrawNow();
+ }
+ if (iForegroundWindowTop)
+ {
+ childWin[4] = CTWinAlphaForeground::NewL(*this, TPoint(0,0),TSize(50,50),iForegroundWindowTop,*TheClient->iGc, &mode, TRgb(0, 255, 0,128), ENonTransparentAlpha);
+ childWin[4]->DrawNow();
+ }
+ TheClient->iWs.Flush();
+
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+ DoMoving();
+
+ delete childWin[0];
+ delete childWin[1];
+ delete childWin[2];
+ delete childWin[3];
+ delete childWin[4];
+ }
+/**
+ @SYMTestCaseID GRAPHICS-WSERV-0340
+
+ @SYMTestCaseDesc Redrawing of multiple child windows with transparency.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions
+ Creates multiple child windows with various levels of transparency.
+ Moves parent windows over the screen.
+ @SYMTestExpectedResults
+ Child and parent windows must be redrawn properly
+ */
+
+void CTAlphaChannel::TestMultipleChildrenL()
+ {
+ SetPositionConfiguration(ETiled);
+ SetColourConfiguration(EVaryingColour);
+ TDisplayMode mode = EColor64K;
+ CTWinAlphaForeground* childWin[] = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
+ if (iForegroundWindowBottom)
+ {
+ childWin[0] = CTWinAlphaForeground::NewL(*this, TPoint(0,0),TSize(50,50),iForegroundWindowBottom,*TheClient->iGc, &mode, TRgb(255, 255, 255,128), ETransparencyFactor);
+ childWin[1] = CTWinAlphaForeground::NewL(*this, TPoint(20,20),TSize(50,50),childWin[0],*TheClient->iGc, &mode, TRgb(255, 255, 255,128), ENonTransparentAlpha);
+ childWin[0]->DrawNow();
+ childWin[1]->DrawNow();
+ }
+ if (iForegroundWindowOpaque)
+ {
+ childWin[4] = CTWinAlphaForeground::NewL(*this, TPoint(0,0),TSize(100,100),iForegroundWindowOpaque,*TheClient->iGc, &mode, TRgb(255, 255, 255,128), ETransparencyAlpha);
+ childWin[5] = CTWinAlphaForeground::NewL(*this, TPoint(20,80),TSize(50,50),iForegroundWindowOpaque,*TheClient->iGc, &mode, TRgb(255, 255, 255,128), ENonTransparentAlpha);
+ childWin[6] = CTWinAlphaForeground::NewL(*this, TPoint(20,20),TSize(60,60),childWin[4],*TheClient->iGc, &mode, TRgb(0, 255, 0,128), ENonTransparentAlpha);
+ childWin[7] = CTWinAlphaForeground::NewL(*this, TPoint(20,20),TSize(50,50),childWin[6],*TheClient->iGc, &mode, TRgb(0, 255, 0,128), ENonTransparentAlpha);
+ childWin[4]->DrawNow();
+ childWin[5]->DrawNow();
+ childWin[6]->DrawNow();
+ childWin[7]->DrawNow();
+ }
+ DrawTestWindowsNow(ETrue);
+
+ TestMoving();
+
+ delete childWin[0];
+ delete childWin[1];
+ delete childWin[2];
+ delete childWin[3];
+ delete childWin[4];
+ delete childWin[5];
+ delete childWin[6];
+ delete childWin[7];
+ }
+
+/**
+ @SYMTestCaseID GRAPHICS-WSERV-0341
+
+ @SYMTestCaseDesc Test transparent window which positioned under opaque.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions
+ Creates an opaque window on the topt of transparent windows.
+ Moves transparent windows over the screen.
+ @SYMTestExpectedResults
+ Transparent windows must be redrawn properly
+ */
+
+void CTAlphaChannel::TestTransparentMovingUnderOpaqueL()
+ {
+ SetColourConfiguration(EVaryingColour);
+ TDisplayMode mode = EColor64K;
+ CTWinAlphaForeground* win = CTWinAlphaForeground::NewL(*this, TPoint(0,100),TSize(600,40),TheClient->iGroup,*TheClient->iGc, &mode, TRgb(0, 255, 0,128), ENonTransparentAlpha);
+ win->DrawNow();
+
+ TestMoving();
+
+ delete win;
+ }
+/**
+ @SYMTestCaseID GRAPHICS-WSERV-0342
+
+ @SYMTestCaseDesc Changing orinary position of the foreground windows.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions
+ Set ordinal position of foreground windows.
+ @SYMTestExpectedResults
+ Foreground windows must be redrawn properly
+ */
+
+void CTAlphaChannel::TestSetOrdinalPosition()
+ {
+ SetColourConfiguration(EVaryingColour);
+ SetPositionConfiguration(EOverlapping);
+ DrawTestWindowsNow(ETrue);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+ RWindow* win;
+ for (TInt i=0; i<3; i++)
+ {
+ if (iForegroundWindowOpaque)
+ {
+ win = (RWindow*)(iForegroundWindowOpaque->DrawableWin());
+ win->SetOrdinalPosition(0);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+ }
+ if (iForegroundWindowSemiTrans)
+ {
+ win = (RWindow*)(iForegroundWindowSemiTrans->DrawableWin());
+ win->SetOrdinalPosition(0);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+ }
+ if (iForegroundWindowTrans)
+ {
+ win = (RWindow*)(iForegroundWindowTrans->DrawableWin());
+ win->SetOrdinalPosition(0);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(1000000));
+ }
+ }
+ }
+
+void CTAlphaChannel::RunTestCaseL(TInt aCurTestCase)
+ {
+ User::After(TTimeIntervalMicroSeconds32(1000000 * 2));
+
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
+ switch (aCurTestCase)
+ {
+ case 1:
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+ CreateForegroundWindowsL(iSizeForegroundWindow, EColor16MU);
+ break;
+ case 2:
+ {
+ CreateForegroundWindowsL(iSizeForegroundWindow, EColor64K);
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0339"));
+ TestChildWindowL();
+ ((CTAlphaChannelStep*)iStep)->RecordTestResultL();
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0340"));
+ TestMultipleChildrenL();
+ ((CTAlphaChannelStep*)iStep)->RecordTestResultL();
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0342"));
+ TestSetOrdinalPosition();
+ }
+ break;
+ case 3:
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0336"));
+ TestAnimationL();
+ case 4:
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0337"));
+ TestBackedWindowL();
+ break;
+ case 5:
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0338"));
+ TestEffectSetOpaque();
+ break;
+ case 6:
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+ iIsFading = EFalse;
+ DrawTestWindowsNow();
+ INFO_PRINTF1(_L("Anti-aliasing"));
+ iIsFading = EFalse;
+ iDrawText = ETrue;
+ DrawTestWindowsNow();
+ break;
+ case 7:
+ SetColourConfiguration(EVaryingColour);
+ SetPositionConfiguration(EOverlapping);
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0335"));
+ TestRedrawBehind();
+ ((CTAlphaChannelStep*)iStep)->RecordTestResultL();
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0329"));
+ TestMoving();
+ ((CTAlphaChannelStep*)iStep)->RecordTestResultL();
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0330"));
+ TestMovingOverlapping();
+ ((CTAlphaChannelStep*)iStep)->RecordTestResultL();
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0341"));
+ TestMoveBehindInvisible();
+ ((CTAlphaChannelStep*)iStep)->RecordTestResultL();
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0334"));
+ TestTransparentMovingUnderOpaqueL();
+ ((CTAlphaChannelStep*)iStep)->RecordTestResultL();
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0331"));
+ TestInvisibility();
+ ((CTAlphaChannelStep*)iStep)->RecordTestResultL();
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0332"));
+ TestChangingTransparencyFactor();
+ break;
+ case 8:
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0328"));
+ TestFading();
+ break;
+ case 9:
+ {
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+ iDrawText = EFalse;
+ SetDisplayModeConfiguration(EAll16MA);
+ }
+ break;
+ case 10:
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+ iIsFading = EFalse;
+ DrawTestWindowsNow();
+ INFO_PRINTF1(_L("Anti-aliasing"));
+ iIsFading = EFalse;
+ iDrawText = ETrue;
+ DrawTestWindowsNow();
+ break;
+ case 11:
+ SetColourConfiguration(EVaryingColour);
+ SetPositionConfiguration(EOverlapping);
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0333"));
+ TestMoveUnderneath();
+ ((CTAlphaChannelStep*)iStep)->RecordTestResultL();
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0335"));
+ TestRedrawBehind();
+ ((CTAlphaChannelStep*)iStep)->RecordTestResultL();
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0329"));
+ TestMoving();
+ ((CTAlphaChannelStep*)iStep)->RecordTestResultL();
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0332"));
+ TestInvisibility();
+ ((CTAlphaChannelStep*)iStep)->RecordTestResultL();
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0331"));
+ TestChangingTransparencyFactor();
+ break;
+ case 12:
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0328"));
+ TestFading();
+ break;
+ case 13:
+ SetDisplayModeConfiguration(EAllDifferent);
+ SetColourConfiguration(EVaryingColour);
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0333"));
+ TestMoveUnderneath();
+ ((CTAlphaChannelStep*)iStep)->RecordTestResultL();
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0335"));
+ TestRedrawBehind();
+ ((CTAlphaChannelStep*)iStep)->RecordTestResultL();
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0332"));
+ TestInvisibility();
+ ((CTAlphaChannelStep*)iStep)->RecordTestResultL();
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0329"));
+ TestMoving();
+ break;
+ case 14:
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0336"));
+ TestAnimationL();
+ break;
+ case 15:
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0337"));
+ TestBackedWindowL();
+ break;
+ case 16:
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0338"));
+ TestEffectSetOpaque();
+ break;
+ case 17:
+ ((CTAlphaChannelStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+ ((CTAlphaChannelStep*)iStep)->CloseTMSGraphicsStep();
+ TestComplete();
+ break;
+ }
+ ((CTAlphaChannelStep*)iStep)->RecordTestResultL();
+ }
+
+/** Calculate foreground windows margin and create them*/
+void CTAlphaChannel::CreateForegroundWindowsL(const TSize& aSize, TDisplayMode aMode)
+ {
+ TPoint pt = TPoint(5, 5);
+
+ //creating foreground windows
+ //bottom window
+ TDisplayMode dispMode = aMode;
+ iForegroundWindowBottom = CTWinAlphaForeground::NewL(*this, pt,aSize,TheClient->iGroup,*TheClient->iGc, &dispMode, TRgb(0, 255, 0,128), ETransparencyFactor);
+ iArrWindow.AppendL( iForegroundWindowBottom);
+
+ //dispMode = EColor16MA;
+ pt.iX += aSize.iWidth + KWindowIndention;
+ //opaque window
+ iForegroundWindowOpaque = CTWinAlphaForeground::NewL(*this, pt,aSize,TheClient->iGroup,*TheClient->iGc, &dispMode, TRgb(0, 255, 0, 255), ETransparencyAlpha);
+ iArrWindow.AppendL( iForegroundWindowOpaque);
+
+ pt.iX += aSize.iWidth + KWindowIndention;
+ //semi-transparent window
+ iForegroundWindowSemiTrans = CTWinAlphaForeground::NewL(*this, pt,aSize,TheClient->iGroup,*TheClient->iGc, &dispMode, TRgb(0, 255, 0, 128), ETransparencyAlpha);
+ iArrWindow.AppendL( iForegroundWindowSemiTrans);
+
+ //transparent window
+ pt.iX += aSize.iWidth + KWindowIndention;
+ iForegroundWindowTrans = CTWinAlphaForeground::NewL(*this, pt,aSize,TheClient->iGroup,*TheClient->iGc, &dispMode, TRgb(0, 255, 0, 0), ETransparencyAlpha);
+ iArrWindow.AppendL( iForegroundWindowTrans);
+
+ // top window
+ pt.iX += aSize.iWidth + KWindowIndention;
+ iForegroundWindowTop = CTWinAlphaForeground::NewL(*this, pt,aSize,TheClient->iGroup,*TheClient->iGc, &dispMode, TRgb(0, 255, 0,128), ENonTransparentAlpha);
+ iArrWindow.AppendL( iForegroundWindowTop);
+ }
+
+void CTAlphaChannel::DestroyForegroundWindows()
+ {
+ iArrWindow.ResetAndDestroy();
+ iForegroundWindowBottom = NULL;
+ iForegroundWindowOpaque = NULL;
+ iForegroundWindowSemiTrans = NULL;
+ iForegroundWindowTrans = NULL;
+ iForegroundWindowTop = NULL;
+ }
+
+/** Draw all foreground windows */
+void CTAlphaChannel::DrawTestWindowsNow(TBool aDrawBackgroundWin)
+ {
+ if(iBackgroundWindow && aDrawBackgroundWin)
+ {
+ iBackgroundWindow->DrawNow();
+ }
+
+ for(TInt ii = 0; ii < iArrWindow.Count(); ii++)
+ {
+ iArrWindow[ii]->DrawNow();
+ }
+ }
+
+//-------------
+
+CTWinAlphaForeground* CTWinAlphaForeground::NewL(CTAlphaChannel& aTest, TPoint aPos, TSize aSize, CTWinBase *aParent, CWindowGc &aGc, TDisplayMode *aMode, TRgb aCol, TInt aTransparencyType)
+ {
+ CTWinAlphaForeground* theWin = new(ELeave) CTWinAlphaForeground(aTest);
+
+ theWin->ConstructL(*aParent);
+ if (aMode)
+ theWin->SetDisplayMode(*aMode);
+ theWin->SetExtL(aPos, aSize);
+ theWin->AssignGC(aGc);
+ theWin->PrepareForDrawingL();
+
+ // for hardware testing only we create an additional bitmap
+#ifndef __WINS__
+ theWin->CreateBackgroundBitmapL(*aMode);
+#endif
+
+ RWindow* win = (RWindow*) (theWin->DrawableWin());
+ win->SetShadowHeight(0);
+ win->SetShadowDisabled(ETrue);
+ switch (aTransparencyType)
+ {
+ case ETransparencyFactor:
+ {
+ win->SetTransparencyFactor(aCol);
+ theWin->SetBackgroundColor(aCol);
+ }
+ break;
+ case ETransparencyAlpha:
+ win->SetTransparencyAlphaChannel();
+ // fall through into next case
+ case ENonTransparentAlpha:
+ default:
+ theWin->SetBackgroundColor(aCol);
+ break;
+ }
+
+ theWin->Activate();
+
+ return theWin;
+ }
+
+CTWinAlphaForeground::~CTWinAlphaForeground()
+ {
+ if(iPolygon)
+ {
+ iPolygon->Reset();
+ delete iPolygon;
+ }
+ delete iBitmapBackground;
+ delete iBitmapDeviceBackground;
+ delete iBitmapContextBackground;
+ }
+
+CTWinAlphaForeground::CTWinAlphaForeground(CTAlphaChannel& aTest)
+ : iTest(aTest)
+ {
+ }
+
+
+void CTWinAlphaForeground::SetDisplayMode(TDisplayMode aDisplayMode)
+ {
+ BaseWin()->SetRequiredDisplayMode(aDisplayMode);
+ switch (aDisplayMode)
+ {
+ case EColor256:
+ iTitle1 = _L("256");
+ break;
+ case EColor64K:
+ iTitle1 = _L("64K");
+ break;
+ case EColor16MU:
+ iTitle1 = _L("16MU");
+ break;
+ case EColor16MA:
+ iTitle1 = _L("16MA");
+ break;
+ case EColor16MAP:
+ iTitle1 = _L("16MAP");
+ break;
+ default:
+ iTitle1 = _L("");
+ break;
+ }
+ }
+
+void CTWinAlphaForeground::SetBackgroundColor(TRgb aRgb)
+ {
+ switch (aRgb.Alpha())
+ {
+ case 0:
+ iTitle2 = _L(" trans ");
+ break;
+ case 255:
+ iTitle2 = _L(" opaque ");
+ break;
+ case 128:
+ default:
+ iTitle2 = _L(" s-trans ");
+ break;
+ }
+ if (aRgb.Red())
+ iTitle2 += _L("R");
+ if (aRgb.Green())
+ iTitle2 += _L("G");
+ if (aRgb.Blue())
+ iTitle2 += _L("B");
+
+ iBackgroundColor = aRgb;
+ ((RWindow*) DrawableWin())->SetBackgroundColor(aRgb);
+ }
+
+void CTWinAlphaForeground::Draw()
+ {
+ CBitmapContext* theGc = TheClient->iGc;
+ ((CWindowGc*)theGc)->SetOpaque(iDrawOpaque);
+
+ if(iBitmapContextBackground)
+ {
+ //CGraphicsContext
+ theGc = iBitmapContextBackground;
+ CleanBackgroundBitmap();
+ }
+ if(iTest.iFont1)
+ theGc->UseFont(iTest.iFont1);
+
+
+ theGc->SetFaded(EFalse);
+ DrawTable(*theGc);
+
+ TInt numRows = sizeof(iRows) / sizeof(iRows[0]) ;
+
+ theGc->SetBrushStyle(iTest.iBrushStyle);
+ if(iTest.iFont && iTest.iDrawText)
+ {
+ theGc->DiscardFont();
+ theGc->UseFont(iTest.iFont);
+ }
+
+ theGc->SetFaded(iTest.iIsFading);
+
+ // the factor and offset are calculated as follows:
+ // iFadeMapFactor = iWhiteFading - iBlackFading;
+ // iFadeMapOffset = iBlackFading;
+
+ theGc->SetFadingParameters(iTest.iBlackFading, iTest.iWhiteFading); //black and white
+
+ for(TInt ii = 0; ii < numRows - 1; ii++)
+ {
+ theGc -> SetBrushStyle(iTest.iBrushStyle);
+
+ TRect theRect = TRect(iCol, iRows[ii], Size().iWidth, iRows[ii + 1]);
+
+ TRgb theBrush = iTest.GetBrush(ii);
+ TRgb thePen = iTest.GetPen(ii);
+
+ CGraphicsContext::TDrawMode theDrawMode = iTest.GetDrawMode(ii);
+
+ theGc->SetBrushColor(theBrush);
+ theGc->SetPenColor(thePen);
+ theGc->SetDrawMode(theDrawMode);
+
+ CGraphicsContext* theBitmapContext64K;
+ CGraphicsContext* theBitmapContext16MA;
+ CFbsBitmap* theBitmap64K;
+ CFbsBitmap* theBitmap16MA;
+
+ switch(ii)
+ {
+ case 0:
+ {
+ theBitmapContext64K = iTest.iBitmapContext64K_1;
+ theBitmapContext16MA = iTest.iBitmapContext16MA_1;
+ theBitmap64K = iTest.iBitmap64K_1;
+ theBitmap16MA = iTest.iBitmap16MA_1;
+ break;
+ }
+ case 1:
+ {
+ theBitmapContext64K = iTest.iBitmapContext64K_2;
+ theBitmapContext16MA = iTest.iBitmapContext16MA_2;
+ theBitmap64K = iTest.iBitmap64K_2;
+ theBitmap16MA = iTest.iBitmap16MA_2;
+ break;
+ }
+ default:
+ {
+ theBitmapContext64K = iTest.iBitmapContext64K_3;
+ theBitmapContext16MA = iTest.iBitmapContext16MA_3;
+ theBitmap64K = iTest.iBitmap64K_3;
+ theBitmap16MA = iTest.iBitmap16MA_3;
+ break;
+ }
+ }
+ if(iTest.iDrawText)
+ {
+ DrawTextInCell(*theGc, theRect);
+ }
+ else
+ {
+ TRAP_IGNORE(iTest.DrawOffscreenBitmapsL(thePen, theBrush, theBitmapContext64K,
+ theBitmapContext16MA, theBitmap64K, theBitmap16MA));
+ DrawPrimitivesInCell(*theGc, theRect, theBitmap64K, theBitmap16MA);
+ }
+ TheClient->iWs.Flush();
+ }
+
+ theGc->DiscardFont();
+
+ if(iBitmapContextBackground)
+ {
+ theGc = TheClient->iGc;
+ theGc->BitBlt(TPoint(0, 0), iBitmapBackground);
+ }
+ }
+
+void CTWinAlphaForeground::SetPoligonLocation(const TPoint &ptOffset)
+ {
+ TRect rect = TRect(iTest.iTriangleSize);
+ (*iPolygon)[0] = rect.iTl + ptOffset;
+ (*iPolygon)[1] = TPoint(rect.iTl.iX, rect.iBr.iY) + ptOffset;
+ (*iPolygon)[2] = rect.iBr + ptOffset;
+ }
+
+/** Define boundary of the table*/
+void CTWinAlphaForeground::CalculateTableMargin()
+ {
+ TInt numRows = sizeof(iRows) / sizeof(iRows[0]) ;
+ iRows[0] = iTest.iFirstCellHeight;
+ TInt theRowHeight = (Size().iHeight - iTest.iFirstCellHeight) / 3;
+ for(TInt ii = 1; ii < numRows; ii++)
+ {
+ iRows[ii] = iRows[ii-1] + theRowHeight;
+ }
+ }
+
+/** Draw a table which comprises 3 rows: for transparent, semi-transparent
+ and opaque output
+
+*/
+void CTWinAlphaForeground::DrawTable(CBitmapContext& aGc) const
+ {
+ TInt numRows = sizeof(iRows) / sizeof(iRows[0]) ;
+
+ aGc.SetPenColor(iTest.iPenTable);
+
+ for (TInt ii = 0; ii < numRows - 1; ii++)
+ {
+ TBuf<4> iBuf;
+ TPoint pt1 = TPoint(0, iRows[ii]);
+ TPoint pt2 = TPoint(Size().iWidth, iRows[ii]);
+
+ aGc.DrawLine(pt1, pt2);
+
+ if(iCol)
+ {
+ TPoint pt3 = TPoint(0, iRows[ii]) + TPoint(2,(iRows[1] - iRows[0]) / 2);
+ switch(ii)
+ {
+ case 0: iBuf = _L("o"); break;
+ case 1: iBuf = _L("s"); break;
+ case 2: iBuf = _L("t"); break;
+ default : iBuf = _L(""); break;
+ }
+ aGc.DrawText(iBuf, pt3);
+ }
+ }
+ if(iCol)
+ {
+ TPoint pt3 = TPoint(iCol, iRows[0]) + TPoint(1,-2);
+ TBuf<32> text = iTitle1;
+ text += iTitle2;
+ aGc.DrawText(text, pt3);
+
+ TPoint pt1 = TPoint(iCol, 0);
+ TPoint pt2 = TPoint(iCol, Size().iHeight);
+ aGc.DrawLine(pt1, pt2);
+ }
+
+ }
+
+/** Draw truetype font to check anti-aliasing*/
+void CTWinAlphaForeground::DrawTextInCell(CBitmapContext& aGc, const TRect& aRect)
+ {
+ TPoint pt(aRect.iTl.iX, aRect.iBr.iY);
+ pt += TPoint(2, -10);
+
+ aGc.DrawText(_L("ABCD"), pt);
+ }
+
+/** Draw graphics primitive in a cell:
+ rectangle, ellipse, triangle, a few lines, bitmaps
+
+ */
+void CTWinAlphaForeground::DrawPrimitivesInCell(CBitmapContext& aGc, const TRect& aRect,
+ CFbsBitmap* aBitmap64K, CFbsBitmap* aBitmap16MA)
+ {
+ TRect theCellRect = aRect;
+ theCellRect.Shrink(1, 1);
+
+ //rectangle
+ TRect rect = TRect(iTest.iRectangleSize);
+ rect.Move(theCellRect.iTl);
+ aGc.DrawRect(rect);
+
+ //ellipse
+ rect = TRect(iTest.iEllipseSize);
+ rect.Move(theCellRect.iTl + TPoint(iTest.iRectangleSize.iWidth + 5, 0));
+ aGc.DrawEllipse(rect);
+
+ //triangle
+ TPoint pt = TPoint(rect.iBr.iX, rect.iTl.iY) + TPoint(5, 0);
+ SetPoligonLocation(pt);
+ aGc.DrawPolygon(iPolygon);
+
+ //DrawLine
+ pt = pt + TPoint (((*iPolygon)[2]).iX - ((*iPolygon)[0]).iX, 0) + TPoint(5, 2);
+ rect = TRect(iTest.iTriangleSize);
+ rect.Move(pt);
+ aGc.DrawLine(rect.iTl, TPoint(rect.iTl.iX, rect.iBr.iY));
+ aGc.DrawLine(TPoint(rect.iTl.iX, rect.iBr.iY), rect.iBr);
+ aGc.DrawLine(rect.iBr, TPoint(rect.iBr.iX, rect.iTl.iY));
+ aGc.DrawLine(TPoint(rect.iBr.iX, rect.iTl.iY), rect.iTl);
+ aGc.DrawLine(rect.iTl, rect.iBr);
+ aGc.DrawLine(TPoint(rect.iBr.iX, rect.iTl.iY), TPoint(rect.iTl.iX, rect.iBr.iY));
+
+ //64K bitmap
+ aGc.SetBrushStyle(CGraphicsContext::ENullBrush);
+ pt = TPoint(theCellRect.iTl.iX, rect.iBr.iY) + TPoint(0, 5);
+ if(aBitmap64K)
+ {
+ aGc.BitBlt(pt, aBitmap64K);
+ pt = pt + TPoint( aBitmap64K->SizeInPixels().iWidth, 0) + TPoint(2, 0);
+
+ aGc.BitBltMasked(pt,
+ aBitmap64K, TRect(aBitmap64K->SizeInPixels()),
+ iTest.iBitmapGray256Mask, EFalse);
+ pt = pt + TPoint( aBitmap64K->SizeInPixels().iWidth, 0) + TPoint(2, 0);
+
+ aGc.BitBltMasked(pt,
+ aBitmap64K, TRect(aBitmap64K->SizeInPixels()),
+ iTest.iBitmapMask, EFalse);
+
+ pt = pt + TPoint( aBitmap64K->SizeInPixels().iWidth, 0) + TPoint(2, 0);
+ }
+
+ if(aBitmap16MA)
+ {
+ aGc.BitBlt(pt, aBitmap16MA);
+
+ pt = pt + TPoint( aBitmap16MA->SizeInPixels().iWidth, 0) + TPoint(2, 0);
+
+ aGc.BitBltMasked(pt,
+ aBitmap16MA, TRect(aBitmap16MA->SizeInPixels()),
+ iTest.iBitmapGray256Mask, EFalse);
+
+ pt = pt + TPoint( aBitmap16MA->SizeInPixels().iWidth, 0) + TPoint(2,0);
+
+ pt = pt + TPoint( 0, aBitmap16MA->SizeInPixels().iHeight);
+ }
+
+ pt.iX = aRect.iTl.iX + 2;
+ pt.iY = pt.iY + 18;
+
+ if(aBitmap64K)
+ {
+ TSize size = aBitmap64K->SizeInPixels();
+ TRect srcRect(TPoint(0,0),size);
+ size += TSize(5,5);
+ TRect destRect(pt - TPoint(0, 8), size);
+ aGc.DrawBitmap(destRect, aBitmap64K, srcRect);
+ pt = pt + TPoint( size.iWidth, 0) + TPoint(2, 0);
+
+#ifdef __WINS__
+ destRect.Move(TPoint(aBitmap64K->SizeInPixels().iWidth + 8, 0));
+ ((CWindowGc&) aGc).DrawBitmapMasked(destRect,
+ aBitmap64K, srcRect,
+ iTest.iBitmapGray256Mask, EFalse);
+ pt = pt + TPoint( aBitmap64K->SizeInPixels().iWidth, 0) + TPoint(2, 0);
+#endif
+ }
+
+ aGc.DrawText(iTest.iText, pt);
+
+#ifdef __WINS__
+ ((CWindowGc&) aGc).DrawTextVertical(iTest.iText, pt, ETrue);
+#endif
+ }
+
+/** calculate table's size and size of graphics primitieves */
+void CTWinAlphaForeground::PrepareForDrawingL()
+ {
+ iCol = iTest.iFirstCellWidth;
+
+ CalculateTableMargin();
+
+ //create triangle
+ iPolygon = new (ELeave) CArrayFixFlat<TPoint> (3);
+ TRect rect = TRect(iTest.iTriangleSize);
+ iPolygon->AppendL(rect.iTl);
+ iPolygon->AppendL(TPoint(rect.iTl.iX, rect.iBr.iY));
+ iPolygon->AppendL(rect.iBr);
+ }
+
+/** Bitmap is intended to use on target only*/
+void CTWinAlphaForeground::CreateBackgroundBitmapL(const TDisplayMode& aDispMode)
+ {
+ ASSERT(!iBitmapBackground);
+
+ TSize size = Size();
+
+ iBitmapBackground = new (ELeave) CFbsBitmap ;
+ iBitmapBackground->Create(size,aDispMode);
+
+ iBitmapDeviceBackground = CFbsBitmapDevice::NewL(iBitmapBackground);
+ CGraphicsContext *&theGc = (CGraphicsContext*&)iBitmapContextBackground;
+ iBitmapDeviceBackground->CreateContext(theGc);
+ }
+
+void CTWinAlphaForeground::CleanBackgroundBitmap()
+ {
+ ASSERT(iBitmapBackground);
+
+ TRect rect = TRect(iBitmapBackground->SizeInPixels());
+ iBitmapContextBackground->SetBrushColor(iBackgroundColor);
+ iBitmapContextBackground->SetPenColor(iBackgroundColor);
+ iBitmapContextBackground->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ iBitmapContextBackground->DrawRect(rect);
+ }
+
+void CTWinAlphaForeground::StartAnimationL()
+ {
+ __UHEAP_MARK;
+ RWsSprite theSprite;
+
+ RDrawableWindow *theWin = DrawableWin();
+
+ theSprite=RWsSprite(TheClient->iWs);
+ TPoint theSpritePos = TPoint(10, 10);
+ TInt theFlags = 0;
+ theSprite.Construct(*theWin, theSpritePos, theFlags);
+ TDisplayMode dispMode = EColor256;
+ //create a ball bitmap for animation
+ CFbsBitmap* theBitmapBall= new (ELeave) CFbsBitmap;
+ theBitmapBall->Create(TSize(32, 32), dispMode);
+ CFbsBitmapDevice* theBitmapDeviceBall = CFbsBitmapDevice::NewL(theBitmapBall);
+ CGraphicsContext* theBitmapContextBall = NULL;
+ theBitmapDeviceBall->CreateContext(theBitmapContextBall);
+ //draw a background
+ theBitmapContextBall->SetBrushColor(TRgb(128, 0, 255));
+ theBitmapContextBall->SetPenColor(TRgb(128, 0, 255));
+ theBitmapContextBall->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ theBitmapContextBall->DrawRect(theBitmapBall->SizeInPixels());
+
+ //create a ball's mask
+ CFbsBitmap* theBitmapMask= new (ELeave) CFbsBitmap;
+ theBitmapMask->Create(TSize(32, 32), dispMode);
+ CFbsBitmapDevice* theBitmapDeviceMask = CFbsBitmapDevice::NewL(theBitmapMask);
+ CGraphicsContext* theBitmapContextMask = NULL;
+ theBitmapDeviceMask->CreateContext(theBitmapContextMask);
+ //draw a mask
+ theBitmapContextMask->SetBrushColor(TRgb(0, 0, 0));
+ theBitmapContextMask->SetPenColor(TRgb(0, 0, 0));
+ theBitmapContextMask->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ theBitmapContextMask->DrawRect(theBitmapMask->SizeInPixels());
+
+ theBitmapContextMask->SetBrushColor(TRgb(255, 255, 255));
+ theBitmapContextMask->SetPenColor(TRgb(255, 255, 255));
+ TRect rect = TRect(theBitmapMask->SizeInPixels());
+ theBitmapContextMask->SetPenSize(TSize(6,6));
+ theBitmapContextMask->DrawLine(rect.iTl, rect.iBr);
+ theBitmapContextMask->DrawLine(TPoint(0, rect.iBr.iY), TPoint(rect.iBr.iX, 0));
+
+ //create a second ball's mask
+ CFbsBitmap* theBitmapMask1= new (ELeave) CFbsBitmap;
+ theBitmapMask1->Create(TSize(32, 32), dispMode);
+ CFbsBitmapDevice* theBitmapDeviceMask1 = CFbsBitmapDevice::NewL(theBitmapMask1);
+ CGraphicsContext* theBitmapContextMask1 = NULL;
+ theBitmapDeviceMask1->CreateContext(theBitmapContextMask1);
+ //draw a mask
+ theBitmapContextMask1->SetBrushColor(TRgb(0, 0, 0));
+ theBitmapContextMask1->SetPenColor(TRgb(0, 0, 0));
+ theBitmapContextMask1->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ theBitmapContextMask1->DrawRect(theBitmapMask1->SizeInPixels());
+
+ theBitmapContextMask1->SetBrushColor(TRgb(255, 255, 255));
+ theBitmapContextMask1->SetPenColor(TRgb(255, 255, 255));
+ rect = TRect(theBitmapMask1->SizeInPixels());
+ theBitmapContextMask1->SetPenSize(TSize(6,6));
+ theBitmapContextMask1->DrawLine(TPoint(rect.iBr.iX/2, 0), TPoint(rect.iBr.iX/2, rect.iBr.iY));
+ theBitmapContextMask1->DrawLine(TPoint(0, rect.iBr.iY/2), TPoint(rect.iBr.iX, rect.iBr.iY/2));
+
+
+ TSpriteMember theSpriteList;
+ theSpriteList.iBitmap = theBitmapBall;
+ theSpriteList.iMaskBitmap = theBitmapMask;
+ theSpriteList.iInvertMask = EFalse;
+ theSpriteList.iDrawMode = CGraphicsContext::EDrawModePEN;
+ theSpriteList.iOffset = TPoint(0, 0);
+ theSpriteList.iInterval = TTimeIntervalMicroSeconds32(100000);
+ theSprite.AppendMember(theSpriteList);
+
+ TSpriteMember theSpriteList1;
+ theSpriteList1.iBitmap = theBitmapBall;
+ theSpriteList1.iMaskBitmap = theBitmapMask1;
+ theSpriteList1.iInvertMask = EFalse;
+ theSpriteList1.iDrawMode = CGraphicsContext::EDrawModePEN;
+ theSpriteList1.iOffset = TPoint(0, 0);
+ theSpriteList1.iInterval = TTimeIntervalMicroSeconds32(100000);
+
+ theSprite.AppendMember(theSpriteList1);
+
+ theSprite.Activate();
+
+ for(TInt ii = 0; ii < 20; ii++)
+ {
+ theSpritePos += TPoint(3, 8);
+ theSprite.SetPosition(theSpritePos);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(50000));
+ }
+
+ for(TInt jj = 0; jj < 20; jj++)
+ {
+ theSpritePos -= TPoint(0, 8);
+ theSprite.SetPosition(theSpritePos);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(50000));
+ }
+
+ theSprite.Close();
+
+ delete theBitmapContextBall;
+ delete theBitmapDeviceBall;
+
+ delete theBitmapBall;
+
+ delete theBitmapMask;
+ delete theBitmapContextMask;
+ delete theBitmapDeviceMask;
+
+ delete theBitmapMask1;
+ delete theBitmapContextMask1;
+ delete theBitmapDeviceMask1;
+
+ __UHEAP_MARKEND;
+ }
+
+void CTWinAlphaForeground::CreateBackedWindowL()
+ {
+ RBackedUpWindow theBackedWindow(TheClient->iWs);
+ CleanupClosePushL(theBackedWindow);
+
+ TDisplayMode theDisplayMode = EColor16MA;
+
+ RWindow* theWin = (RWindow*) DrawableWin();
+
+ theBackedWindow.Construct(*theWin,theDisplayMode, ENullWsHandle);
+
+ TPoint pos =TPoint(10, 10);
+ TSize size = theWin->Size();
+ size.SetSize(size.iWidth / 5, size.iHeight/10);
+
+ theBackedWindow.SetExtentErr(pos, size);
+ theBackedWindow.SetOrdinalPosition(0);
+
+
+ //draw to backed window
+ TRgb color = TRgb(255, 0, 128);
+ TInt bitmapHandle = theBackedWindow.BitmapHandle();
+ CFbsBitmap bitmapWin;
+ bitmapWin.Duplicate(bitmapHandle);
+ //Leave poss here - theBackedWindow could leak
+ CFbsBitmapDevice* theBitmapDevice = CFbsBitmapDevice::NewL(&bitmapWin);
+ CGraphicsContext* theBitmapContext = NULL;
+ theBitmapDevice->CreateContext(theBitmapContext);
+ theBitmapContext->SetBrushColor(color);
+ theBitmapContext->SetPenColor(color);
+ theBitmapContext->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ theBitmapContext->DrawRect(TRect(bitmapWin.SizeInPixels()));
+
+ color = TRgb(0, 0, 0);
+ theBitmapContext->SetPenColor(color);
+ for(TInt kk = 0; kk < bitmapWin.SizeInPixels().iWidth; kk += 8)
+ {
+ theBitmapContext->DrawLine(TPoint(kk, 0), TPoint(kk, bitmapWin.SizeInPixels().iHeight));
+ }
+
+
+ theBackedWindow.Activate();
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(500000));
+
+ //hide the window
+ theBackedWindow.SetVisible(EFalse);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(500000));
+ theBackedWindow.SetVisible(ETrue);
+ TheClient->iWs.Flush();
+
+ for(TInt ii = 0; ii < 7; ii++)
+ {
+ User::After(TTimeIntervalMicroSeconds32(100000));
+ pos.iX += 5;
+ pos.iY += 15;
+
+ theBackedWindow.SetExtentErr(pos, size);
+ TheClient->iWs.Flush();
+ }
+
+ User::After(TTimeIntervalMicroSeconds32(500000));
+
+ //transparent color. don't expect it to work
+ pos.iX -= 5;
+ pos.iY -= 15;
+
+ theBackedWindow.SetExtentErr(pos, size);
+ color = TRgb(255, 255, 128, 128);
+ theBitmapContext->SetBrushColor(color);
+ theBitmapContext->SetPenColor(color);
+ theBitmapContext->DrawRect(TRect(bitmapWin.SizeInPixels()));
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(500000));
+
+ //semi-transparent color
+ pos.iX -= 5;
+ pos.iY -= 15;
+ theBackedWindow.SetExtentErr(pos, size);
+ color = TRgb(255, 255, 128, 255);
+ theBitmapContext->SetBrushColor(color);
+ theBitmapContext->SetPenColor(color);
+ TheClient->iWs.Flush();
+ User::After(TTimeIntervalMicroSeconds32(500000));
+
+
+ CleanupStack::PopAndDestroy(); //bitmapWin
+ delete theBitmapContext;
+ delete theBitmapDevice;
+
+ }
+
+
+//-------------------
+void CTWinAlpha::Draw()
+ {
+ CBitmapContext* theGc = TheClient->iGc;
+ TSize size = Size();
+
+ for(TInt ii = 0; ii < size.iHeight; ii += (20+iState))
+ {
+ theGc->DrawLine(TPoint(0, ii), TPoint(size.iWidth, ii));
+ }
+ }
+
+__WS_CONSTRUCT_STEP__(AlphaChannel)