--- a/windowing/windowserver/tauto/tgc.cpp Fri Jun 11 14:58:47 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1864 +0,0 @@
-// Copyright (c) 2007-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:
-//
-
-/**
- @file
- @test
- @internalComponent - Internal Symbian test code
-*/
-#include "tgc.h"
-#include "RemoteGc.h"
-#include "CommandBuffer.h"
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
-#include "directgdigcwrapper.h"
-#include <graphics/directgdidriver.h>
-#include <graphics/sgutils.h>
-#include <graphics/wsdrawresource.h>
-#endif
-
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
-GLDEF_C void CopyImageToBitmapL(CFbsBitmap* aBitmap, const RSgImage& aImage, const TRect& aRect);
-GLDEF_C void CopyImageToDestination(TAny* aDataAddressDest, TInt aDataStrideDest, TDisplayMode aDisplayModeDest,
- TAny* aDataAddressSrc, TInt aDataStrideSrc, TDisplayMode aDisplayModeSrc, const TRect& aRect);
-GLDEF_C void CopyImageToDestination64K(TAny* aDataAddressDest, TInt aDataStrideDest, TDisplayMode aDisplayModeDest,
- TUint16* aDataAddressSrc, TInt aDataStrideSrc, const TRect& aRect);
-
-GLDEF_C void CopyImageToBitmapL(CFbsBitmap* aBitmap, const RSgImage& aImage, const TRect& aRect)
- {
- TSgImageInfo info;
- TInt res = aImage.GetInfo(info);
- if(res == KErrNone)
- {
- info.iUsage = ESgUsageNone;
- info.iCpuAccess = ESgCpuAccessReadOnly;
- RSgImage image;
- res = image.Create(info, aImage);
- if(res == KErrNone)
- {
- const TAny* dataAddressSrc = NULL;
- TInt dataStrideSrc = 0;
- res = image.MapReadOnly(dataAddressSrc, dataStrideSrc);
- if(res == KErrNone)
- {
- const TDisplayMode displayModeDest = aBitmap->DisplayMode();
- const TDisplayMode displayModeSrc = SgUtils::PixelFormatToDisplayMode(info.iPixelFormat);
- TUint32* dataAddressDest = aBitmap->DataAddress();
- const TInt dataStrideDest = aBitmap -> DataStride();
- TSize bitmapSize = aBitmap->SizeInPixels();
- TRect rect = aRect;
- TRect rectDest = info.iSizeInPixels;
- rect.Intersection(rectDest);
- if(rect.Height() > bitmapSize.iHeight)
- {
- rect.SetHeight(bitmapSize.iHeight);
- }
- if(rect.Width() > bitmapSize.iWidth)
- {
- rect.SetWidth(bitmapSize.iWidth);
- }
- CopyImageToDestination((TAny*)dataAddressDest, dataStrideDest, displayModeDest, (TAny*)dataAddressSrc,
- dataStrideSrc, displayModeSrc, rect);
-
- image.Unmap();
- }
- image.Close();
- }
- }
- }
-
-GLDEF_C void CopyImageToDestination(TAny* aDataAddressDest, TInt aDataStrideDest, TDisplayMode aDisplayModeDest,
- TAny* aDataAddressSrc, TInt aDataStrideSrc, TDisplayMode aDisplayModeSrc, const TRect& aRect)
- {
- if(aRect.IsEmpty())
- return;
-
- if((aDisplayModeDest == aDisplayModeSrc) && (aDataStrideSrc == aDataStrideDest))
- {
- Mem::Copy(aDataAddressDest, aDataAddressSrc, aDataStrideDest * aRect.Height());
- return;
- }
-
- switch(aDisplayModeSrc)
- {
- case EColor64K:
- {
- CopyImageToDestination64K(aDataAddressDest, aDataStrideDest, aDisplayModeDest,
- (TUint16*)aDataAddressSrc, aDataStrideSrc, aRect);
- break;
- }
- default:
- break;
- }
- }
-
-GLDEF_C void CopyImageToDestination64K(TAny* aDataAddressDest, TInt aDataStrideDest, TDisplayMode aDisplayModeDest,
- TUint16* aDataAddressSrc, TInt aDataStrideSrc, const TRect& aRect)
- {
- const TInt bppSrc = 2;
- const TInt width = aRect.Width();
- const TInt height = aRect.Height();
- const TInt dataStrideLengthSrc = aDataStrideSrc / bppSrc;
- TUint16* dataAddressSrc = aDataAddressSrc + aRect.iTl.iY * dataStrideLengthSrc + aRect.iTl.iX;
- const TUint16* dataAddressSrcEnd = dataAddressSrc + dataStrideLengthSrc * height;
-
- switch(aDisplayModeDest)
- {
- case EColor64K:
- {
- TUint16* dataAddressDest = static_cast<TUint16*> (aDataAddressDest);
- const TInt dataStrideLengthDest = aDataStrideDest / bppSrc;
- while(dataAddressSrcEnd > dataAddressSrc)
- {
- Mem::Copy(dataAddressDest, dataAddressSrc, width * bppSrc);
- dataAddressSrc += dataStrideLengthSrc;
- dataAddressDest += dataStrideLengthDest;
- }
- break;
- }
- case EColor16MU:
- {
- const TInt bppDest = 4;
- TUint32* dataAddressDest = static_cast<TUint32*> (aDataAddressDest);
- const TInt dataStrideLengthDest = aDataStrideDest / bppDest;
-
- while(dataAddressSrcEnd > dataAddressSrc)
- {
- const TUint16* dataAddressSrcLineEnd = dataAddressSrc + width;
- TUint32* dataAddressDestCur = dataAddressDest;
- TUint16* dataAddressSrcCur = dataAddressSrc;
-
- while(dataAddressSrcLineEnd > dataAddressSrcCur)
- {
- *dataAddressDestCur = TRgb::Color64K(*dataAddressSrcCur).Color16MU();
- dataAddressDestCur++;
- dataAddressSrcCur++;
- }
- dataAddressSrc += dataStrideLengthSrc;
- dataAddressDest += dataStrideLengthDest;
- }
- break;
- }
- case EGray4:
- {
- TUint8* dataAddressDest = static_cast<TUint8*> (aDataAddressDest);
- const TInt dataStrideLengthDest = aDataStrideDest;
-
- while(dataAddressSrcEnd > dataAddressSrc)
- {
- const TUint8* dataAddressDstLineEnd = dataAddressDest + aDataStrideDest;
- TUint8* dataAddressDestCur = dataAddressDest;
- TUint16* dataAddressSrcCur = dataAddressSrc;
-
- while(dataAddressDstLineEnd > dataAddressDestCur)
- {
- *dataAddressDestCur = 0;
- for(TInt index = 0; index < 8; index +=2)
- {
- TInt col = TRgb::Color64K(*dataAddressSrcCur).Gray4();
- col <<= index;
- *dataAddressDestCur |= col;
- dataAddressSrcCur++;
- }
- dataAddressDestCur++;
- }
- dataAddressSrc += dataStrideLengthSrc;
- dataAddressDest += dataStrideLengthDest;
- }
- break;
- }
- case EColor256:
- {
- TUint8* dataAddressDest = static_cast<TUint8*> (aDataAddressDest);
- const TInt dataStrideLengthDest = aDataStrideDest;
-
- while(dataAddressSrcEnd > dataAddressSrc)
- {
- const TUint8* dataAddressDstLineEnd = dataAddressDest + aDataStrideDest;
- TUint8* dataAddressDestCur = dataAddressDest;
- TUint16* dataAddressSrcCur = dataAddressSrc;
-
- while(dataAddressDstLineEnd > dataAddressDestCur)
- {
- *dataAddressDestCur = TRgb::Color64K(*dataAddressSrcCur).Color256();
- dataAddressSrcCur++;
- dataAddressDestCur++;
- }
- dataAddressSrc += dataStrideLengthSrc;
- dataAddressDest += dataStrideLengthDest;
- }
- break;
- }
- default:
- break;
- }
- }
-
-TDisplayMode DisplayModeFromPixelFormat(TUidPixelFormat aPixelFormat)
- {
- switch(aPixelFormat)
- {
- case EUidPixelFormatARGB_8888_PRE:
- return EColor16MAP;
- case EUidPixelFormatARGB_8888:
- return EColor16MA;
- case EUidPixelFormatRGB_565:
- return EColor64K;
- default:
- break;
- }
- return ENone;
- }
-
-TUidPixelFormat PixelFormatFromDisplayMode(TDisplayMode aDisplayMode)
- {
- switch (aDisplayMode)
- {
- case EGray2:
- case EGray4:
- case EGray16:
- case EGray256:
- case EColor16:
- case EColor256:
- case EColor16M:
- case EColor16MU:
- {
- return EUidPixelFormatXRGB_8888;
- }
- case EColor4K:
- {
- return EUidPixelFormatXRGB_4444;
- }
- case EColor64K:
- {
- return EUidPixelFormatRGB_565;
- }
- case EColor16MA:
- {
- return EUidPixelFormatARGB_8888;
- }
- case EColor16MAP:
- {
- return EUidPixelFormatARGB_8888_PRE;
- }
- default:
- {
- return EUidPixelFormatUnknown;
- }
- }
- }
-#endif
-
-CTGc::CTGc(CTestStep* aStep) : CTWsGraphicsBase(aStep)
- {
- }
-
-CTGc::~CTGc()
- {
- delete iTest;
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
- SgDriver::Close();
- CDirectGdiDriver *directGdiDriver = CDirectGdiDriver::Static();
- if(directGdiDriver)
- {
- directGdiDriver->Close();
- }
-#endif
- }
-
-void CTGc::ConstructL()
- {
- _LIT(KTestName,"GC Test");
- iTest=new(ELeave) CTestBase(KTestName,this);
-
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
- TInt err = CDirectGdiDriver::Open();
- User::LeaveIfError(err);
- err = SgDriver::Open();
- if(err != KErrNone)
- {
- CDirectGdiDriver *directGdiDriver = CDirectGdiDriver::Static();
- if(directGdiDriver)
- {
- directGdiDriver->Close();
- }
- User::Leave(err);
- }
-#endif
- }
-
-//Class derived from MWsGraphicResolver. Used for playing the commands from command buffer
-class CWSGraphicsRes: public CBase, public MWsGraphicResolver
- {
-public:
- void DrawWsGraphic(TInt /*aId*/, TBool /*aIsUid*/, const TRect& /*aRect*/, const TDesC8& /*aData*/) const
- {
- //Orveriding by giving empty implemention
- }
- };
-
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
-//
-//Class CDrawTextInContextTest
-//
-
-CDrawTextInContextTest::CDrawTextInContextTest(){}
-
-CDrawTextInContextTest::~CDrawTextInContextTest()
- {
- delete iRefBitmap;
- delete iRefDevice;
- delete iRefBitGc;
- delete iRemoteGc;
- iMsgBuf.Close();
- delete iCommandBuffer;
- delete iWsGraphicRes;
-
- TheClient->iScreen->ReleaseFont(iFont);
-
- delete iDirectGdiGcWrapper;
- if(iWrapperImageTarget)
- {
- iWrapperImageTarget->Close();
- }
- delete iWrapperImageTarget;
- iWrapperImage.Close();
- iWrapperImageCollection.Close();
- }
-
-void CDrawTextInContextTest::BaseConstructL()
- {
- //Initialise font settings
- TFontSpec fsp;
- fsp.iTypeface.iName=_L("Series 60 Sans");
- fsp.iHeight=430;
- User::LeaveIfError(TheClient->iScreen->GetNearestFontToDesignHeightInTwips((CFont*&)iFont,fsp));
-
- //Initialise TTextParameter
- iParam.iStart = 27;
- iParam.iEnd = 60;
-
- //Text to draw
- iText.Set(_L("This text will not be drawnK.,!\"\x00A3$%^&*()_+-=;'#:@~/<>? Latin This text will not be drawn"));
-
- //For reference bitmap
- iRefBitmap = new(ELeave) CFbsBitmap();
- User::LeaveIfError(iRefBitmap->Create(KBitmapSize, EColor64K));
- iRefDevice = CFbsBitmapDevice::NewL(iRefBitmap);
- User::LeaveIfError(iRefDevice->CreateContext(iRefBitGc));
-
- CDirectGdiDriver* theDGdiDriver = CDirectGdiDriver::Static();
- User::LeaveIfNull(theDGdiDriver);
-
- TSgImageInfo info;
- info.iUsage = ESgUsageDirectGdiTarget | ESgUsageDirectGdiSource | ESgUsageCompositionSource;
- info.iSizeInPixels = KBitmapSize;
- info.iPixelFormat = EUidPixelFormatRGB_565;
-
- TInt res = iWrapperImageCollection.Create(info, 1);
- User::LeaveIfError(res);
- res = iWrapperImageCollection.OpenImage(0, iWrapperImage);
- User::LeaveIfError(res);
- iWrapperImageTarget = new (ELeave) RDirectGdiImageTarget(*theDGdiDriver);
- res = iWrapperImageTarget->Create(iWrapperImage);
- User::LeaveIfError(res);
- iDirectGdiGcWrapper = CDirectGdiGcWrapper::NewL(*iWrapperImageTarget);
-
- //clean image-----------------
- CDirectGdiGcWrapper* directGdiGcWrapper = CDirectGdiGcWrapper::NewL(*iWrapperImageTarget);
- CleanupStack::PushL(directGdiGcWrapper);
-
- directGdiGcWrapper->SetDrawMode(MWsGraphicsContext::EDrawModeWriteAlpha);
- directGdiGcWrapper->SetBrushColor(KRgbWhite);
- directGdiGcWrapper->Clear();
-
- CleanupStack::PopAndDestroy(1, directGdiGcWrapper);
- //------------------
-
- //Used to record draw commands
- iRemoteGc = CRemoteGc::NewL(TheClient->iScreen);
-
- //Used to play recorded draw commands
- iCommandBuffer = CCommandBuffer::NewL();
-
- //Dummy class created required for CCommandBuffer::Play
- iWsGraphicRes = new (ELeave) CWSGraphicsRes();
-
- //Offset for CCommandBuffer::Play
- iOffset = TPoint(0,0);
-
- //Result of doing the test
- iHasPassedTest = EFalse;
- }
-
-void CDrawTextInContextTest::Test()
- {
- /* Create reference bitmap by drawing using bitgc */
- iRefBitGc->UseFont(iFont);
- DoDrawTextBitGc();
- iRefBitGc->DiscardFont();
-
- /* Drawing using CBitGcWrapper via CRemotGc*/
-
- //Capturing the commands in remote gc
- iRemoteGc->BeginDraw(KBitmapRect);
- iRemoteGc->UseFont(iFont);
- DoDrawTextRemoteGc();
- iRemoteGc->DiscardFont();
- iRemoteGc->EndDraw();
-
- //Externalize the captured commands from remote gc in to a buffer
- iRemoteGc->ExternalizeL(iMsgBuf, ETrue);
-
- //Internalize the buffer with captured commands (from CRemoteGC) in to CCommandBuffer
- iCommandBuffer->InternalizeL(iMsgBuf.Pckg());
-
- //Play the commands on test window using command buffer
- iCommandBuffer->Play(iOffset,&KBitmapRegion,KBitmapRect,*iWsGraphicRes,*iDirectGdiGcWrapper);
-
- //Test to see if the bitmap drawn to using CRemoteGc is the same as the reference bitmap
- CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
- CleanupStack::PushL(bitmap);
-
- TSgImageInfo info;
- iWrapperImage.GetInfo(info);
- TDisplayMode displayMode = DisplayModeFromPixelFormat(info.iPixelFormat);
- bitmap->Create(info.iSizeInPixels, displayMode);
- TRect rect(info.iSizeInPixels);
- CopyImageToBitmapL(bitmap, iWrapperImage, rect);
-
- iHasPassedTest = LossyCompareBitmap(*iRefBitmap, *bitmap, KBitmapRect, EFalse);
-
- CleanupStack::PopAndDestroy(bitmap);
- }
-
-TBool CDrawTextInContextTest::HasPassedTest()
- {
- return iHasPassedTest;
- }
-
-//
-// Class DrawTextInContextTestPoint
-//
-
-CDrawTextInContextTestPoint::CDrawTextInContextTestPoint(){}
-
-CDrawTextInContextTestPoint::~CDrawTextInContextTestPoint(){}
-
-CDrawTextInContextTestPoint* CDrawTextInContextTestPoint::NewL()
- {
- CDrawTextInContextTestPoint* self = new(ELeave) CDrawTextInContextTestPoint;
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self);
- return self;
- }
-
-void CDrawTextInContextTestPoint::ConstructL()
- {
- BaseConstructL();
- iPosition = TPoint(0,0);
- }
-
-void CDrawTextInContextTestPoint::DoDrawTextBitGc()
- {
- iRefBitGc->DrawText(iText,&iParam,iPosition);
- }
-
-void CDrawTextInContextTestPoint::DoDrawTextRemoteGc()
- {
- iRemoteGc->DrawText(iText,&iParam,iPosition);
- }
-
-//
-// Class DrawTextInContextTestBox
-//
-
-CDrawTextInContextTestBox::CDrawTextInContextTestBox(){}
-
-CDrawTextInContextTestBox::~CDrawTextInContextTestBox(){}
-
-CDrawTextInContextTestBox* CDrawTextInContextTestBox::NewL()
- {
- CDrawTextInContextTestBox* self = new(ELeave) CDrawTextInContextTestBox;
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self);
- return self;
- }
-
-void CDrawTextInContextTestBox::ConstructL()
- {
- BaseConstructL();
- iClipFillRect = TRect(10,50,640,120);
- iBaselineOffset = 40;
- iTTextAlign = CGraphicsContext::ELeft;
- }
-
-void CDrawTextInContextTestBox::DoDrawTextBitGc()
- {
- iRefBitGc->DrawText(iText,&iParam,iClipFillRect,iBaselineOffset,iTTextAlign);
- }
-
-void CDrawTextInContextTestBox::DoDrawTextRemoteGc()
- {
- iRemoteGc->DrawText(iText,&iParam,iClipFillRect,iBaselineOffset,iTTextAlign);
- }
-
-//
-// Class CDrawTextInContextTestPointVertical
-//
-
-CDrawTextInContextTestPointVertical::CDrawTextInContextTestPointVertical(){}
-
-CDrawTextInContextTestPointVertical::~CDrawTextInContextTestPointVertical(){}
-
-CDrawTextInContextTestPointVertical* CDrawTextInContextTestPointVertical::NewL()
- {
- CDrawTextInContextTestPointVertical* self = new(ELeave) CDrawTextInContextTestPointVertical;
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self);
- return self;
- }
-
-void CDrawTextInContextTestPointVertical::ConstructL()
- {
- BaseConstructL();
- iPosition = TPoint(0,0);
- iUp = EFalse;
- }
-
-void CDrawTextInContextTestPointVertical::DoDrawTextBitGc()
- {
- iRefBitGc->DrawTextVertical(iText,&iParam,iPosition,iUp);
- }
-
-void CDrawTextInContextTestPointVertical::DoDrawTextRemoteGc()
- {
- iRemoteGc->DrawTextVertical(iText,&iParam,iPosition,iUp);
- }
-
-//
-// Class CDrawTextInContextTestBoxVertical
-//
-
-CDrawTextInContextTestBoxVertical::CDrawTextInContextTestBoxVertical(){}
-
-CDrawTextInContextTestBoxVertical::~CDrawTextInContextTestBoxVertical(){}
-
-CDrawTextInContextTestBoxVertical* CDrawTextInContextTestBoxVertical::NewL()
- {
- CDrawTextInContextTestBoxVertical* self = new(ELeave) CDrawTextInContextTestBoxVertical;
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self);
- return self;
- }
-
-void CDrawTextInContextTestBoxVertical::ConstructL()
- {
- BaseConstructL();
- iClipFillRect = TRect(10,50,640,120);
- iBaselineOffset = 40;
- iUp = EFalse;
- iTTextAlign = CGraphicsContext::ELeft;
- }
-
-void CDrawTextInContextTestBoxVertical::DoDrawTextBitGc()
- {
- iRefBitGc->DrawTextVertical(iText,&iParam,iClipFillRect,iBaselineOffset,iUp,iTTextAlign);
- }
-
-void CDrawTextInContextTestBoxVertical::DoDrawTextRemoteGc()
- {
- iRemoteGc->DrawTextVertical(iText,&iParam,iClipFillRect,iBaselineOffset,iUp,iTTextAlign);
- }
-#endif //TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
-
-void CleanUpFont(TAny* aFont)
- {
- //Will be called in case of a leave to release the font
- CFont* font= static_cast<CFont*>(aFont);
- TheClient->iScreen->ReleaseFont(font);
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0437
-@SYMPREQ PREQ1543
-@SYMTestCaseDesc Draw text using CWindowGc and CRemoteGc with both outline and shadow
-effect on.
-@SYMTestPriority High
-@SYMTestStatus Implemented
-@SYMTestActions Create a font with both outline and shadow effects. Record the commands
-(like setting colours,drawing text etc) using CRemoteGc and play the recorded commands on a window. Use the same
-commands in CWindowGc and draw text on a different window
-@SYMTestExpectedResults Text drawn using CWindowGc and CRemoteGc should be same
-*/
-void CTGc::TestOutlineAndShadowL()
- {
- TRect sourceRect(0, 0, TestWin->Size().iWidth, TestWin->Size().iHeight);
- TRegionFix<1> clippingRegion(sourceRect);
-
- CWsScreenDevice* device = TheClient->iScreen;
-
- _LIT(KText,"Outline and shadow");
- TFontSpec fSpec(KTestFontTypefaceName,23);
- fSpec.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
- fSpec.iFontStyle.SetEffects(FontEffect::EDropShadow, ETrue);
- fSpec.iFontStyle.SetEffects(FontEffect::EOutline, ETrue);
-
- CFont *font;
- User::LeaveIfError(TheClient->iScreen->GetNearestFontToDesignHeightInPixels((CFont *&)font, fSpec));
- CleanupStack::PushL(TCleanupItem(CleanUpFont, font));
-
- CRemoteGc* remoteGc = CRemoteGc::NewL(device);
- CleanupStack::PushL(remoteGc);
- remoteGc->BeginDraw(sourceRect);
- //Capturing the commands in remote gc
- remoteGc->SetBrushColor(KRgbGreen);
- remoteGc->SetShadowColor(KRgbDarkRed);
- remoteGc->SetPenColor(KRgbBlack);
- remoteGc->UseFont(font);
- remoteGc->DrawText(KText, TPoint(2,40));
- remoteGc->DiscardFont();
- remoteGc->EndDraw();
-
- RWsGraphicMsgBuf msgBuf;
- CleanupClosePushL(msgBuf);
- //Externalize the captured commands from remote gc in to a buffer
- remoteGc->ExternalizeL(msgBuf, ETrue);
-
- CWSGraphicsRes* wsGrap = new (ELeave) CWSGraphicsRes();
- CleanupStack::PushL(wsGrap);
-
- CCommandBuffer* cmdBuf = CCommandBuffer::NewL();
- CleanupStack::PushL(cmdBuf);
- //Internalize the buffer with captured commands (from CRemoteGC)
- //in to CCommandBuffer
- cmdBuf->InternalizeL(msgBuf.Pckg());
-
- TestWin->Win()->Invalidate();
- TestWin->Win()->BeginRedraw();
- TheGc->Activate(*TestWin->Win());
- TheGc->Clear();
- //Play the commands on test window using command buffer
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
- cmdBuf->Play(TPoint(0, 0), &clippingRegion, sourceRect, TheClient->iWs, *TheGc);
-#else
- cmdBuf->Play(TPoint(),TRect(TestWin->Size()),*wsGrap,*TheGc);
-#endif
- TheGc->Deactivate();
- TestWin->Win()->EndRedraw();
-
- BaseWin->Win()->Invalidate();
- BaseWin->Win()->BeginRedraw();
- TheGc->Activate(*BaseWin->Win());
- TheGc->Clear();
- TheGc->SetBrushColor(KRgbGreen);
- TheGc->SetShadowColor(KRgbDarkRed);
- TheGc->SetPenColor(KRgbBlack);
- TheGc->UseFont(font);
- //Draw the text on base window using CWindowGC
- TheGc->DrawText(KText, TPoint(2, 40));
- TheGc->DiscardFont();
- TheGc->Deactivate();
- BaseWin->Win()->EndRedraw();
- TheClient->iWs.Finish();
- TheClient->WaitForRedrawsToFinish();
-
- //Check the text drawn on base and test windows.
- CheckRect(BaseWin, TestWin, TRect(0, 0, BaseWin->Size().iWidth, BaseWin->Size().iHeight), _L("CTGc::TestOutlineAndShadowL()"));
-
- CleanupStack::PopAndDestroy(4, remoteGc); //cmdBuf, wsGrap, msgBuf and remoteGc
- CleanupStack::Pop();//font
- TheClient->iScreen->ReleaseFont(font);
- }
-
-void CTGc::TestGcClipRectOrigin_DrawContent(TestWindow& aWindow, TBool bActivateBeforeRedraw /*= ETrue*/)
- {
- TSize winSize = aWindow.Size();
- TPoint gcOrigin(winSize.iWidth >> 3, winSize.iWidth >> 3);
- TRect gcClipRect(0, 0, (winSize.iWidth * 3) >> 2, (winSize.iHeight * 3) >> 2);
- TRect ellipseRect(gcClipRect);
- // Shrink the ellipse for better visibility and to fit well within the clip area.
- ellipseRect.Shrink(3, 3);
- TSize penSize(1, 1);
-
- aWindow.Win()->SetBackgroundColor(KRgbGreen);
- aWindow.ClearWin();
- aWindow.Win()->Invalidate();
-
- if(!bActivateBeforeRedraw)
- {
- aWindow.Win()->BeginRedraw();
- }
-
- TheGc->Activate(*(aWindow.Win()));
- TheGc->SetOrigin(gcOrigin);
- TheGc->SetClippingRect(gcClipRect);
-
- if(bActivateBeforeRedraw)
- {
- aWindow.Win()->BeginRedraw();
- }
-
- TheGc->SetBrushColor(KRgbDarkRed);
- TheGc->SetPenColor(KRgbDarkRed);
- TheGc->SetPenSize(penSize);
- TheGc->SetPenStyle(CGraphicsContext::ESolidPen);
- TheGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- TheGc->DrawEllipse(ellipseRect);
- TheGc->SetBrushStyle(CGraphicsContext::ENullBrush);
- TheGc->SetPenColor(KRgbYellow);
- TheGc->SetPenStyle(CGraphicsContext::EDashedPen);
- TheGc->DrawRect(gcClipRect);
-
- aWindow.Win()->EndRedraw();
- TheGc->Deactivate();
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0471
-@SYMTestCaseDesc This test is to verify that the GC correctly applies the clip rect and
- origin attributes irrespective of whether the GC is activated on the
- window before or after the BeginRedraw.
-@SYMDEF PDEF120091
-@SYMTestPriority High
-@SYMTestStatus Implemented
-@SYMTestActions The test has following steps:
- 1. For the Test window follow the steps:
- A. Activate the GC on Test window.
- B. Set the Origin of the GC to centre of the window.
- C. Set the Clipping rectangle of the GC to half the size of the window.
- D. In the BeginDraw and EndDraw call bracket perform the following:
- a. Draw an ellipse with the rectangle smaller by 5 pixels than the clip rectangle.
- b. Draw a rectangle that is size of the clip rectangle.
- E. Deactivate the GC.
- 2. For the Base window follow the steps:
- A. In the BeginDraw and EndDraw call bracket perform the following:
- a. Activate the GC on Base window.
- b. Set the Origin of the GC to centre of the window.
- c. Set the Clipping rectangle of the GC to half the size of the window.
- d. Draw an ellipse with the rectangle smaller by 5 pixels than the clip rectangle.
- e. Draw a rectangle that is size of the clip rectangle.
- f. Deactivate the GC.
- 3. Compare Test and Base window.
-@SYMTestExpectedResults Both the Test and Base window should have the complete
- non-clipped ellipse completely encapsulated within the rectangle.
-*/
-void CTGc::TestGcClipRectOrigin()
- {
- TestGcClipRectOrigin_DrawContent(*BaseWin, EFalse);
- TestGcClipRectOrigin_DrawContent(*TestWin, ETrue);
-
- TheClient->Flush();
-
- CheckRect(BaseWin, TestWin, TRect(0, 0, BaseWin->Size().iWidth, BaseWin->Size().iHeight), _L("CTGc::TestGcClipRectOriginL()"));
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0469
-@SYMDEF INC116406
-@SYMTestCaseDesc Try playback on MWsGraphicsContext and CWindowGc to check that the background colour is
-set correctly.
-@SYMTestPriority High
-@SYMTestStatus Implemented
-@SYMTestActions
-@SYMTestExpectedResults Text drawn using CWindowGc should use the background colour of
-the window, and MWsGraphicsContext should use transparent white.
-*/
-void CTGc::TestResetWithBackgroundColorL()
- {
- const TRect KSourceRect(0, 0, TestWin->Size().iWidth, TestWin->Size().iHeight);
- const TRegionFix<1> KClippingRegion(KSourceRect);
-
- CWsScreenDevice* device = TheClient->iScreen;
-
- CRemoteGc* remoteGc = CRemoteGc::NewL(device);
- CleanupStack::PushL(remoteGc);
-
- //note this remote GC has not been activated on any window
- remoteGc->BeginDraw(KSourceRect);
-
- //Draw the commands in remote gc
- remoteGc->SetBrushColor(KRgbGreen); //nothing green is seen in this test
-
- remoteGc->Reset(); //This resets the brush colour to the background colour of the window
- //where playback is, in the case of playing back to a window
- //however with a CFbsBitGc the color is transparent white, as there is no window.
- remoteGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- remoteGc->SetDrawMode(CGraphicsContext::EDrawModeWriteAlpha);
- remoteGc->DrawRect(KSourceRect);
- remoteGc->EndDraw();
-
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
- CDirectGdiDriver* theDGdiDriver = CDirectGdiDriver::Static();
- User::LeaveIfNull(theDGdiDriver);
-
- TSgImageInfo info;
- info.iUsage = ESgUsageDirectGdiTarget | ESgUsageCompositionSource;
- info.iSizeInPixels = TSize(TestWin->Size().iWidth, TestWin->Size().iHeight);
- info.iPixelFormat = EUidPixelFormatXRGB_8888;//among display modes with alpha channel only pre-multiply alpha is supported in directGDI currently
-
- RSgImageCollection imageCollection;
- CleanupClosePushL(imageCollection);
- TInt res = imageCollection.Create(info, 1);
- User::LeaveIfError(res);
- RSgImage image;
- CleanupClosePushL(image);
- res = imageCollection.OpenImage(0, image);
- User::LeaveIfError(res);
- RDirectGdiImageTarget imageTarget(*theDGdiDriver);
- CleanupClosePushL(imageTarget);
- res = imageTarget.Create(image);
- User::LeaveIfError(res);
-#endif
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- //create a bitmap
- CFbsBitmap *bitmap = new (ELeave) CFbsBitmap();
- User::LeaveIfError(bitmap->Create(TSize(TestWin->Size().iWidth, TestWin->Size().iHeight), EColor16MA));
- CleanupStack::PushL(bitmap);
-
- CFbsBitmapDevice *fbsDevice = CFbsBitmapDevice::NewL(bitmap);
- CleanupStack::PushL(fbsDevice);
-#endif
-
- //prepare the command buffer for playback
- RWsGraphicMsgBuf msgBuf;
- CleanupClosePushL(msgBuf);
-
- //Externalize the captured commands from remote gc in to a buffer
- remoteGc->ExternalizeL(msgBuf, ETrue);
-
- CWSGraphicsRes* wsGrap = new (ELeave) CWSGraphicsRes();
- CleanupStack::PushL(wsGrap);
-
- CCommandBuffer* cmdBuf = CCommandBuffer::NewL();
- CleanupStack::PushL(cmdBuf);
- cmdBuf->InternalizeL(msgBuf.Pckg());
-
- TRgb color;
- TRgb testColor(KRgbWhite);
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
- CDirectGdiGcWrapper* directGdiGcWrapper=CDirectGdiGcWrapper::NewL(imageTarget);
- CleanupStack::PushL(directGdiGcWrapper);
- cmdBuf->Play(TPoint(),&KClippingRegion,KSourceRect,*wsGrap,*directGdiGcWrapper);
-
- //check that the background has been cleared to transparent white.
- image.GetInfo(info);
- info.iUsage = ESgUsageNone;
- info.iCpuAccess = ESgCpuAccessReadOnly;
- RSgImage image1;
- CleanupClosePushL(image1);
- res = image1.Create(info, image);
- const TAny* data;
- TInt stride = 0;
- res = image1.MapReadOnly(data, stride);
- User::LeaveIfError(res);
- TPoint pixel(10,10);
- TInt offset = pixel.iY * stride + pixel.iX * 4;
- TAny* non_const_data = const_cast <TAny*> (data);
- TUint8* pointData = static_cast <TUint8*> (non_const_data) + offset;
- color = *(reinterpret_cast <TRgb*> (pointData));
- image1.Unmap();
-#endif
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- CFbsBitGc* fbsBitGc=NULL;
- User::LeaveIfError(fbsDevice->CreateContext(fbsBitGc));
- CleanupStack::PushL(fbsBitGc);
- fbsBitGc->Activate(fbsDevice);
- cmdBuf->Play(TPoint(0, 0), KSourceRect, *wsGrap, *fbsBitGc);
- bitmap->GetPixel(color, TPoint(10,10));
- testColor.SetAlpha(0);
-#endif
- iStep->TEST(color==testColor);
-
- //now test drawing to a window to ensure that the brush colour is
- //the window background colour
-
- //display a blue window
- BaseWin->Win()->SetBackgroundColor(KRgbBlue);
- BaseWin->Win()->Invalidate();
- BaseWin->Win()->BeginRedraw();
- TheGc->Activate(*BaseWin->Win());
- TheGc->Clear();
- TheGc->Deactivate();
- BaseWin->Win()->EndRedraw();
- TheClient->iWs.Finish();
- TheClient->WaitForRedrawsToFinish();
-
- //start drawing the display commands with a green background
-
- BaseWin->Win()->SetBackgroundColor(KRgbYellow);
- BaseWin->Win()->Invalidate();
- BaseWin->Win()->BeginRedraw();
- TheGc->Activate(*BaseWin->Win());
-
- //Play the commands on test window using command buffer
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
- cmdBuf->Play(TPoint(0, 0), &KClippingRegion, KSourceRect, TheClient->iWs, *TheGc);
-#else
- cmdBuf->Play(TPoint(0, 0), KSourceRect, *wsGrap, *TheGc);
-#endif
-
- TheGc->Deactivate();
- BaseWin->Win()->EndRedraw();
- TheClient->iWs.Finish();
- TheClient->WaitForRedrawsToFinish();
-
- //check that the background has been cleared to yellow, using brush colour
- TPoint position = BaseWin->Win()->InquireOffset(*TheClient->iGroup->WinTreeNode());
- position.iX+=10;
- position.iY+=10;
- TheClient->iScreen->GetPixel(color, position);
- iStep->TEST(color==KRgbYellow);
-
- BaseWin->Win()->SetBackgroundColor(KRgbGreen); //set back to original backgroundcolor
-
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
- CleanupStack::PopAndDestroy(9, remoteGc);
-#else
- CleanupStack::PopAndDestroy(7, remoteGc);
-#endif
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0481
-@SYMPREQ 1841
-@SYMTestCaseDesc Create font and graphics with various effect effects. Record the commands
-(like setting colours,drawing text etc) using CRemoteGc and play the recorded commands on a window. Use the same
-commands in CWindowGc and draw text on a different window
-@SYMTestPriority Medium
-@SYMTestStatus Implemented
-@SYMTestActions
-@SYMTestExpectedResults Text/graphics drawn using CWindowGc and CRemoteGc should be same
-*/
-void CTGc::TestCommandBufferL()
- {
- CWsScreenDevice* device = TheClient->iScreen;
-
- _LIT(KBuffText,"Command Buffer");
- TFontSpec fSpec(KTestFontTypefaceName,23);
- fSpec.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
- fSpec.iFontStyle.SetEffects(FontEffect::EDropShadow, ETrue);
- fSpec.iFontStyle.SetEffects(FontEffect::EOutline, ETrue);
-
- CFont *font;
- User::LeaveIfError(TheClient->iScreen->GetNearestFontToDesignHeightInPixels((CFont *&)font, fSpec));
- CleanupStack::PushL(TCleanupItem(CleanUpFont, font));
-
- CRemoteGc* remoteGc = CRemoteGc::NewL(device);
- CleanupStack::PushL(remoteGc);
-
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
- //-------create image---------
- CDirectGdiDriver* theDGdiDriver = CDirectGdiDriver::Static();
- User::LeaveIfNull(theDGdiDriver);
- const TSize KImageSize = TSize(2, 2);
- TSgImageInfo info;
- info.iUsage = ESgUsageWindowGcSource;
- info.iSizeInPixels = KImageSize;
- info.iPixelFormat = EUidPixelFormatRGB_565;
- info.iShareable = ETrue;
- const TInt stride = KImageSize.iWidth * 2;
- TUint8* buf = (TUint8*) (User::AllocL(KImageSize.iHeight * stride));
- CleanupStack::PushL(buf);
- TUint16* bufCur = ((TUint16*)buf);
- *bufCur = KRgbRed.Color64K();
- *(bufCur + 1) = KRgbRed.Color64K();
- *(bufCur + 2) = KRgbRed.Color64K();
- *(bufCur + 3) = KRgbRed.Color64K();
-
- RSgImage image;
- TInt res = image.Create(info, buf, stride);
- User::LeaveIfError(res);
- CleanupClosePushL(image);
- RWsDrawableSource drawableSource(TheClient->iWs);
- res = drawableSource.Create(image, TheClient->iScreen->GetScreenNumber());
- if(res == KErrNotSupported)
- {
- INFO_PRINTF1(_L("The current screen is not supports drawable source. This test case terminates now."));
- CleanupStack::PopAndDestroy(3, remoteGc);
- CleanupStack::Pop();//font
- TheClient->iScreen->ReleaseFont(font);
- return;
- }
- User::LeaveIfError(res);
- CleanupClosePushL(drawableSource);
- //-------end create image---------
-#endif
- remoteGc->ResetCommandBuffer();
- remoteGc->BeginDraw(TRect(0, 0, TestWin->Size().iWidth, TestWin->Size().iHeight));
- //Capturing the commands in remote gc
- remoteGc->Clear();
- remoteGc->DrawRect(TRect(10,10,30,30));
- remoteGc->Clear(TRect(10,10,11,11));
- remoteGc->CopyRect(TPoint(5,5), TRect(25,25,30,30));
- CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
- CFbsBitmap* bitmapMask = new (ELeave) CFbsBitmap;
- User::LeaveIfError(bitmap->Load(_L("Z:\\WSTEST\\WSAUTOTEST.MBM"), EMbmWsautotestCircles24b));
- User::LeaveIfError(bitmapMask->Load(_L("Z:\\WSTEST\\WSAUTOTEST.MBM"), EMbmWsautotestCircles_mask2b));
- remoteGc->BitBlt(TPoint(100,100), bitmap);
- remoteGc->BitBlt(TPoint(0,0), bitmap, TRect(0,0,1,1));
- remoteGc->BitBltMasked(TPoint(0,5), bitmap, TRect(0,0,1,1), bitmapMask, EFalse);
- CWsBitmap* bitmapWs = new (ELeave) CWsBitmap(TheClient->iWs);
- CWsBitmap* bitmapWsMask = new (ELeave) CWsBitmap(TheClient->iWs);
- User::LeaveIfError(bitmapWs->Load(_L("Z:\\WSTEST\\TEST.MBM"), 0));
- remoteGc->BitBlt(TPoint(110,110), bitmapWs);
- remoteGc->BitBlt(TPoint(5,0), bitmapWs, TRect(0,0,1,1));
- remoteGc->BitBltMasked(TPoint(10,0), bitmap, TRect(0,0,1,1), bitmapWsMask, EFalse);
- remoteGc->SetFadingParameters(128,128);
- remoteGc->SetFaded(EFalse);
- remoteGc->AlphaBlendBitmaps(TPoint(2,2), bitmap, TRect(0,0,1,1), bitmapMask, TPoint(2,2));
- remoteGc->AlphaBlendBitmaps(TPoint(3,3), bitmapWs, TRect(0,0,1,1), bitmapWsMask, TPoint(2,2));
- remoteGc->SetOrigin(TPoint(0,30));
- remoteGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
- remoteGc->SetClippingRect(TRect(0,0,10,10));
- remoteGc->SetPenStyle(CGraphicsContext::ESolidPen);
- remoteGc->SetPenSize(TSize(1,2));
- remoteGc->UseBrushPattern(bitmap);
- remoteGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- remoteGc->SetBrushOrigin(TPoint(0,0));
- remoteGc->DrawPie(TRect(0,0,15,15),TPoint(0,8),TPoint(15,8));
- remoteGc->CancelClippingRect();
- remoteGc->DiscardBrushPattern();
- remoteGc->CancelClippingRegion();
- remoteGc->Reset();
- remoteGc->SetOrigin(TPoint(0,0));
- remoteGc->SetUnderlineStyle(EUnderlineOff);
- remoteGc->SetStrikethroughStyle(EStrikethroughOff);
- remoteGc->SetWordJustification(1,2);
- remoteGc->SetCharJustification(1,2);
- remoteGc->UseFont(font);
- remoteGc->DrawText(KBuffText,TRect(50,0,100,50),10,CGraphicsContext::ELeft,0);
- remoteGc->DrawTextVertical(KBuffText,TPoint(170,20),EFalse);
- remoteGc->DrawTextVertical(KBuffText,TRect(120,20,150,100),5,EFalse,CGraphicsContext::ELeft,0);
- remoteGc->MoveTo(TPoint(25,150));
- remoteGc->MoveBy(TPoint(5,5));
- remoteGc->DrawLineTo(TPoint(35,160));
- remoteGc->DrawLine(TPoint(35,160),TPoint(25,150));
- remoteGc->DrawLineBy(TPoint(15,6));
- remoteGc->Plot(TPoint(5,5));
- remoteGc->DrawArc(TRect(0,80,10,90),TPoint(0,85),TPoint(10,85));
- remoteGc->DrawEllipse(TRect(0,90,10,100));
- remoteGc->DrawRoundRect(TRect(30,80,50,100),TSize(5,5));
- remoteGc->DrawBitmap(TPoint(150,150),bitmap);
- remoteGc->DrawBitmap(TRect(160,160,170,170), bitmap);
- remoteGc->DrawBitmap(TRect(175,175,180,180), bitmap, TRect(0,5,5,10));
- remoteGc->DrawBitmapMasked(TRect(185,185,190,190), bitmap, TRect(0,50,5,55),bitmapMask,EFalse);
- remoteGc->DrawBitmapMasked(TRect(195,195,200,200), bitmapWs, TRect(0,50,5,55),bitmapWsMask,EFalse);
- CArrayFixFlat<TPoint>* polyPoints = new(ELeave) CArrayFixFlat<TPoint>(3); //CArrayFixFlat
- CleanupStack::PushL(polyPoints);
- TRect rect (200,0,200,100);
- polyPoints->AppendL(rect.iTl);
- polyPoints->AppendL(rect.Center());
- polyPoints->AppendL(TPoint(rect.iBr.iX, rect.iTl.iY));
- remoteGc->DrawPolyLine(polyPoints);
- remoteGc->DrawPolyLine(&polyPoints->At(0), 3);
- remoteGc->DrawPolygon(polyPoints, CGraphicsContext::EWinding);
- remoteGc->DrawPolygon(&polyPoints->At(0), 3, CGraphicsContext::EAlternate);
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
- MWsDrawResource* dr = static_cast<MWsDrawResource*>(remoteGc->Interface(KMWsDrawResourceInterfaceUid));
- if(dr)
- dr->DrawResource(TPoint(30, 40), drawableSource);
-#endif
- RRegion region;
- remoteGc->SetClippingRegion(region);
- remoteGc->DiscardFont();
- remoteGc->EndDraw();
-
- RWsGraphicMsgBuf msgBuf;
- CleanupClosePushL(msgBuf);
- //Externalize the captured commands from remote gc in to a buffer
- remoteGc->ExternalizeL(msgBuf, EFalse);
-
- CCommandBuffer* cmdBuf = CCommandBuffer::NewL();
- CleanupStack::PushL(cmdBuf);
- const CCommandBuffer* testCmdBuf = CCommandBuffer::NewL();
- if(cmdBuf->IsIdentical(*testCmdBuf)==EFalse)
- {
- User::Panic(_L("TestCommandBufferL"), KErrGeneral);
- }
- delete testCmdBuf;
- //Internalize the buffer with captured commands (from CRemoteGC)
- //in to CCommandBuffer
- cmdBuf->InternalizeL(msgBuf.Pckg());
-
- TheGc->Activate(*TestWin->Win());
- TestWin->Win()->Invalidate();
-
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- /*
- * Make sure anything that can leave is done outside the
- * BeginRedraw/EndRedraw bracket.
- */
- CWSGraphicsRes* wsGrap=new(ELeave) CWSGraphicsRes();
- CleanupStack::PushL(wsGrap);
-#endif
- /*
- * Note we need to still do BeginRedraw/EndRedraw for the TestWin Window
- * even though the CRemoteGc we are going to Play into TestWin already has
- * BeginRedraw/EndRedraw commands issued into it. Those commands just allow
- * for replacement of draw ops already in the CRemoteGc to be replaced by
- * new draw ops covering the same area. The BeginRedraw/EndRedraws never
- * get Play()'ed into TestWin.
- */
- TestWin->Win()->BeginRedraw();
- TheGc->Clear();
- //Play the commands on test window using command buffer
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
- cmdBuf->Play(TPoint(), NULL, TRect(TestWin->Size()), TheClient->iWs, *TheGc);
-#endif
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- cmdBuf->Play(TPoint(),TRect(TestWin->Size()),*wsGrap,*TheGc);
- CleanupStack::PopAndDestroy(wsGrap);
-#endif
- TheGc->Deactivate();
- TestWin->Win()->EndRedraw();
- remoteGc->ResetCommandBuffer();
- BaseWin->Win()->Invalidate();
- BaseWin->Win()->BeginRedraw();
- TheGc->Activate(*BaseWin->Win());
- TheGc->Clear();
- TheGc->DrawRect(TRect(10,10,30,30));
- TheGc->Clear(TRect(10,10,11,11));
- TheGc->CopyRect(TPoint(5,5), TRect(25,25,30,30));
- TheGc->BitBlt(TPoint(100,100), bitmap);
- TheGc->BitBlt(TPoint(0,0), bitmap, TRect(0,0,1,1));
- TheGc->BitBltMasked(TPoint(0,5), bitmap, TRect(0,0,1,1), bitmapMask, EFalse);
- TheGc->BitBlt(TPoint(110,110), bitmapWs);
- TheGc->BitBlt(TPoint(5,0), bitmapWs, TRect(0,0,1,1));
- TheGc->BitBltMasked(TPoint(10,0), bitmap, TRect(0,0,1,1), bitmapWsMask, EFalse);
- TheGc->SetFadingParameters(128,128);
- TheGc->SetFaded(EFalse);
- TheGc->AlphaBlendBitmaps(TPoint(2,2), bitmap, TRect(0,0,1,1), bitmapMask, TPoint(2,2));
- TheGc->AlphaBlendBitmaps(TPoint(3,3), bitmapWs, TRect(0,0,1,1), bitmapWsMask, TPoint(2,2));
- TheGc->SetOrigin(TPoint(0,30));
- TheGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
- TheGc->SetClippingRect(TRect(0,0,10,10));
- TheGc->SetPenStyle(CGraphicsContext::ESolidPen);
- TheGc->SetPenSize(TSize(1,2));
- TheGc->UseBrushPattern(bitmap);
- TheGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- TheGc->SetBrushOrigin(TPoint(0,0));
- TheGc->DrawPie(TRect(0,0,15,15),TPoint(0,8),TPoint(15,8));
- TheGc->CancelClippingRect();
- TheGc->DiscardBrushPattern();
- TheGc->CancelClippingRegion();
- TheGc->Reset();
- TheGc->SetOrigin(TPoint(0,0));
- TheGc->SetUnderlineStyle(EUnderlineOff);
- TheGc->SetStrikethroughStyle(EStrikethroughOff);
- TheGc->SetWordJustification(1,2);
- TheGc->SetCharJustification(1,2);
- TheGc->UseFont(font);
- TheGc->DrawText(KBuffText,TRect(50,0,100,50),10,CGraphicsContext::ELeft,0);
- TheGc->DrawTextVertical(KBuffText,TPoint(170,20),EFalse);
- TheGc->DrawTextVertical(KBuffText,TRect(120,20,150,100),5,EFalse,CGraphicsContext::ELeft,0);
- TheGc->MoveTo(TPoint(25,150));
- TheGc->MoveBy(TPoint(5,5));
- TheGc->DrawLineTo(TPoint(35,160));
- TheGc->DrawLine(TPoint(35,160),TPoint(25,150));
- TheGc->DrawLineBy(TPoint(15,6));
- TheGc->Plot(TPoint(5,5));
- TheGc->DrawArc(TRect(0,80,10,90),TPoint(0,85),TPoint(10,85));
- TheGc->DrawEllipse(TRect(0,90,10,100));
- TheGc->DrawRoundRect(TRect(30,80,50,100),TSize(5,5));
- TheGc->DrawBitmap(TPoint(150,150),bitmap);
- TheGc->DrawBitmap(TRect(160,160,170,170), bitmap);
- TheGc->DrawBitmap(TRect(175,175,180,180), bitmap, TRect(0,5,5,10));
- TheGc->DrawBitmapMasked(TRect(185,185,190,190), bitmap, TRect(0,50,5,55),bitmapMask,EFalse);
- TheGc->DrawBitmapMasked(TRect(195,195,200,200), bitmapWs, TRect(0,50,5,55),bitmapWsMask,EFalse);
- TheGc->DrawPolyLine(polyPoints);
- TheGc->DrawPolyLine(&polyPoints->At(0), 3);
- TheGc->DrawPolygon(polyPoints, CGraphicsContext::EWinding);
- TheGc->DrawPolygon(&polyPoints->At(0), 3, CGraphicsContext::EAlternate);
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
- TheGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- TheGc->SetBrushColor(KRgbRed);
- TheGc->SetPenColor(KRgbRed);
- TheGc->DrawRect(TRect(30, 40, 32, 42));
-#endif
- TheGc->DiscardFont();
- TheGc->Deactivate();
- BaseWin->Win()->EndRedraw();
- TheClient->Flush();
- TheClient->WaitForRedrawsToFinish();
-
- //Check the text drawn on base and test windows.
- TBool err = CheckRect(BaseWin, TestWin, TRect(0, 0, BaseWin->Size().iWidth, BaseWin->Size().iHeight), _L("CTGc::TestCommandBufferL()"));
- if (err)
- {
- INFO_PRINTF1(_L("The CheckRect function returned error."));
- }
- delete bitmap;
- INFO_PRINTF1(_L("bitmap deleted."));
- delete bitmapMask;
- INFO_PRINTF1(_L("bitmapMask deleted."));
- delete bitmapWs;
- INFO_PRINTF1(_L("bitmapWs deleted."));
- delete bitmapWsMask;
- INFO_PRINTF1(_L("bitmapWsMask deleted."));
-
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
- CleanupStack::PopAndDestroy(7, remoteGc);
-#else
- CleanupStack::PopAndDestroy(4, remoteGc);
-#endif
- CleanupStack::Pop();//font
- INFO_PRINTF1(_L("CleanupStack popped."));
- TheClient->iScreen->ReleaseFont(font);
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0482
-@SYMPREQ 1841
-@SYMTestCaseDesc Play empty command buffer.
-@SYMTestPriority Medium
-@SYMTestStatus Implemented
-@SYMTestActions
-@SYMTestExpectedResults return KErrEof error
-*/
-void CTGc::TestEmptyCommandBufferL()
- {
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- CWSGraphicsRes* wsGrap = new (ELeave) CWSGraphicsRes();
- CleanupStack::PushL(wsGrap);
-#endif
-
- CCommandBuffer* cmdBuf = CCommandBuffer::NewL();
- CleanupStack::PushL(cmdBuf);
-
- TheGc->Activate(*TestWin->Win());
- TheGc->Clear();
- //Play the commands on test window using command buffer
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- TInt err = cmdBuf->Play(TPoint(),TRect(TestWin->Size()),*wsGrap,*TheGc);
-#else
- TInt err = cmdBuf->Play(TPoint(),NULL,TRect(TestWin->Size()),TheClient->iWs,*TheGc);
-#endif
- if(err!=KErrEof)
- {
- User::Panic(_L("TestEmptyCommandBufferL"), KErrGeneral);
- }
- TheGc->Deactivate();
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
- CleanupStack::PopAndDestroy(2, wsGrap); //cmdBuf, wsGrap, msgBuf and remoteGc
-#else
- CleanupStack::PopAndDestroy(cmdBuf);
-#endif
- }
-
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0486
-@SYMPREQ PREQ2095
-@SYMTestCaseDesc Draw text using CWindowGc and CRemoteGc with both outline and shadow
-effect on.
-@SYMTestPriority High
-@SYMTestStatus Implemented
-@SYMTestActions Create a font with both outline and shadow effects, also use ClippingRect
-and ClippingRegion. Record the commands using CRemoteGc and play the recorded commands on a
-bitmap using MWsGraphicsContext. Use the same commands in CWindowGc and draw text on a
-different window
-@SYMTestExpectedResults Text drawn using CWindowGc and CRemoteGc(MWsGraphicsContext) should be same
-*/
-void CTGc::TestCRemoteGcAndMWsGraphicsContextClippingRectL()
- {
- const TRect KTestRect(0, 0, TestWin->Size().iWidth, TestWin->Size().iHeight);
- const TRegionFix<1> KTestRegion(KTestRect);
- const TRect KClippingRect1(5, 5, TestWin->Size().iWidth-10, 90);
- const TRegionFix<1> KClippingRegion(KClippingRect1);
- const TRect KClippingRect2(15, 15, TestWin->Size().iWidth-10, TestWin->Size().iHeight-10);
-
- CWsScreenDevice* device = TheClient->iScreen;
- /*
- * On hardware, the first screen runs in 64K colors, but the second screen (TV OUT)
- * cannot run in this mode, it instead falls back to 16M colors. We need to ensure
- * that we use matching color depths for our off-screen bitmaps so that accuracy is
- * not lost since we compare bitmaps from the screen versus off-screen.
- */
- const TDisplayMode displayMode = device->DisplayMode();
-
- _LIT(KText,"RemoteGc & MWsGraphicsContext");
- TFontSpec fSpec(KTestFontTypefaceName,23);
- fSpec.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
- fSpec.iFontStyle.SetEffects(FontEffect::EDropShadow, ETrue);
- fSpec.iFontStyle.SetEffects(FontEffect::EOutline, ETrue);
-
- CFont *font;
- User::LeaveIfError(TheClient->iScreen->GetNearestFontToDesignHeightInPixels((CFont *&)font, fSpec));
- CleanupStack::PushL(TCleanupItem(CleanUpFont, font));
-
- //Record the commands using CRemoteGc
- CRemoteGc* remoteGc = CRemoteGc::NewL(device);
- CleanupStack::PushL(remoteGc);
- remoteGc->BeginDraw(KTestRect);
- //fill background with white
- remoteGc->SetPenStyle(CFbsBitGc::ENullPen);
- remoteGc->SetBrushStyle(CFbsBitGc::ESolidBrush);
- remoteGc->SetBrushColor(KRgbWhite);
- remoteGc->DrawRect(TRect(TPoint(0,0), TestWin->Size()));
- remoteGc->SetPenStyle(CFbsBitGc::ESolidPen);
- //Capturing the commands in remote gc
- remoteGc->SetClippingRect(KClippingRect2);
- remoteGc->SetClippingRegion(KClippingRegion);
- remoteGc->SetBrushStyle(CFbsBitGc::ESolidBrush);
- remoteGc->SetBrushColor(TRgb(0,150,150));
- remoteGc->DrawRect(TRect(TPoint(0,0), TSize(160,60)));
- remoteGc->SetBrushColor(TRgb(150,100,150));
- remoteGc->DrawRect(TRect(TPoint(0,60), TSize(160,60)));
- remoteGc->SetBrushColor(KRgbGreen);
- remoteGc->SetShadowColor(KRgbDarkRed);
- remoteGc->SetPenColor(KRgbBlack);
- remoteGc->UseFont(font);
- remoteGc->DrawText(KText, TPoint(2,40));
- remoteGc->DiscardFont();
- remoteGc->EndDraw();
-
- RWsGraphicMsgBuf msgBuf;
- CleanupClosePushL(msgBuf);
- //Externalize the captured commands from remote gc in to a buffer
- remoteGc->ExternalizeL(msgBuf, ETrue);
-
- CCommandBuffer* cmdBuf = CCommandBuffer::NewL();
- CleanupStack::PushL(cmdBuf);
- //Internalize the buffer with captured commands (from CRemoteGC)
- //in to CCommandBuffer
- cmdBuf->InternalizeL(msgBuf.Pckg());
-
- CDirectGdiDriver* theDGdiDriver = CDirectGdiDriver::Static();
- User::LeaveIfNull(theDGdiDriver);
-
- TSgImageInfo info;
- info.iUsage = ESgUsageDirectGdiTarget | ESgUsageDirectGdiSource | ESgUsageCompositionSource;
- info.iSizeInPixels = TestWin->Size();
- info.iPixelFormat = PixelFormatFromDisplayMode(displayMode);
-
- RSgImageCollection imageCollection;
- CleanupClosePushL(imageCollection);
- TInt res = imageCollection.Create(info, 1);
- User::LeaveIfError(res);
- RSgImage image;
- CleanupClosePushL(image);
- res = imageCollection.OpenImage(0, image);
- User::LeaveIfError(res);
- RDirectGdiImageTarget imageTarget(*theDGdiDriver);
- CleanupClosePushL(imageTarget);
-
- res = imageTarget.Create(image);
- User::LeaveIfError(res);
-
- CDirectGdiGcWrapper* directGdiGcWrapper = CDirectGdiGcWrapper::NewL(imageTarget);
- CleanupStack::PushL(directGdiGcWrapper);
-
- //Dummy class created
- CWSGraphicsRes* wsGrap = new (ELeave) CWSGraphicsRes();
- CleanupStack::PushL(wsGrap);
-
- //Play the commands on test window using command buffer
- cmdBuf->Play(TPoint(),&KTestRegion,KTestRect,*wsGrap,*directGdiGcWrapper);
-
- //Set window back to same as test bitmap background
- BaseWin->Win()->SetBackgroundColor(KRgbWhite);
-
- BaseWin->Win()->Invalidate();
- BaseWin->Win()->BeginRedraw();
- TheGc->Activate(*BaseWin->Win());
- TheGc->Clear();
- TheGc->SetClippingRect(KClippingRect2);
- TheGc->SetClippingRegion(KClippingRegion);
- TheGc->SetBrushStyle(CFbsBitGc::ESolidBrush);
- TheGc->SetBrushColor(TRgb(0,150,150));
- TheGc->DrawRect(TRect(TPoint(0,0), TSize(160,60)));
- TheGc->SetBrushColor(TRgb(150,100,150));
- TheGc->DrawRect(TRect(TPoint(0,60), TSize(160,60)));
- TheGc->SetBrushColor(KRgbGreen);
- TheGc->SetShadowColor(KRgbDarkRed);
- TheGc->SetPenColor(KRgbBlack);
- TheGc->UseFont(font);
- //Draw the text on base window using CWindowGC
- TheGc->DrawText(KText, TPoint(2, 40));
- TheGc->DiscardFont();
- TheGc->Deactivate();
- BaseWin->Win()->EndRedraw();
- TheClient->iWs.Finish();
- TheClient->WaitForRedrawsToFinish();
-
- //Create a bitmap and then copy the screen to it
- TRect rc(TRect(BaseWin->Win()->AbsPosition(), BaseWin->Win()->Size()));
- CFbsBitmap *screenBitmap = new (ELeave) CFbsBitmap();
- User::LeaveIfError(screenBitmap->Create(rc.Size(), displayMode));
- CleanupStack::PushL(screenBitmap);
- TheClient->iScreen->CopyScreenToBitmap(screenBitmap, rc);
-
- CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
- CleanupStack::PushL(bitmap);
-
- image.GetInfo(info);
- bitmap->Create(info.iSizeInPixels, displayMode);
- TRect rect(info.iSizeInPixels);
- CopyImageToBitmapL(bitmap, image, rect);
-
- //Test to see if the bitmap drawn to using CRemoteGc is the same as the screen copy bitmap
- TInt differentPixels = 0;
- res = LossyCompareBitmapRecord(*bitmap, *screenBitmap, KTestRect, EFalse, differentPixels, Logger());
- if (differentPixels != 0)
- {
- INFO_PRINTF2(_L(" Pixels different %d"), differentPixels);
- }
- TEST(res);
- CleanupStack::PopAndDestroy(10, remoteGc); //screenBitmap, imageCollection, image, imageTarget, directGdiGcWrapper, cmdBuf, wsGrap, msgBuf, remoteGc, bitmap
- CleanupStack::Pop();//font
- TheClient->iScreen->ReleaseFont(font);
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0487
-@SYMPREQ PREQ2095
-@SYMTestCaseDesc Draw text using CRemoteGc and DrawText(const TDesC&,const TTextParameters*,const TPoint&)
-@SYMTestPriority High
-@SYMTestStatus Implemented
-@SYMTestActions Create a font. Draw text to a bitmap with the font using CFbsBitGc::DrawText. Draw text with the font using CFbsBitGc::DrawText.
-Record the same DrawText commands using CRemoteGc and play the recorded commands on a
-bitmap using MWsGraphicsContext. Compare the two bitmaps.
-@SYMTestExpectedResults Text drawn using CFbsBitGc and CRemoteGc(MWsGraphicsContext) should be the same
-*/
-void CTGc::TestCRemoteGcDrawTextInContextPointL()
- {
- CDrawTextInContextTestPoint* test = CDrawTextInContextTestPoint::NewL();
- CleanupStack::PushL(test);
- test->Test();
- TEST(test->HasPassedTest());
- CleanupStack::PopAndDestroy(); //test
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0488
-@SYMPREQ PREQ2095
-@SYMTestCaseDesc Draw text using CRemoteGc and DrawText(const TDesC&,const TTextParameters*,const TRect&,TInt,TTextAlign,TInt)
-@SYMTestPriority High
-@SYMTestStatus Implemented
-@SYMTestActions Create a font. Draw text to a bitmap with the font using CFbsBitGc::DrawText. Draw text with the font using CFbsBitGc::DrawText.
-Record the same DrawText commands using CRemoteGc and play the recorded commands on a
-bitmap using MWsGraphicsContext. Compare the two bitmaps.
-@SYMTestExpectedResults Text drawn using CFbsBitGc and CRemoteGc(MWsGraphicsContext) should be the same
-*/
-void CTGc::TestCRemoteGcDrawTextInContextBoxL()
- {
- CDrawTextInContextTestBox* test = CDrawTextInContextTestBox::NewL();
- CleanupStack::PushL(test);
- test->Test();
- TEST(test->HasPassedTest());
- CleanupStack::PopAndDestroy(); //test
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0489
-@SYMPREQ PREQ2095
-@SYMTestCaseDesc Draw text using CRemoteGc and DrawTextVertical(const TDesC&,const TTextParameters*,const TPoint&)
-@SYMTestPriority High
-@SYMTestStatus Implemented
-@SYMTestActions Create a font. Draw text to a bitmap with the font using CFbsBitGc::DrawTextVertical. Draw text with the font using CFbsBitGc::DrawText.
-Record the same DrawText commands using CRemoteGc and play the recorded commands on a
-bitmap using MWsGraphicsContext. Compare the two bitmaps.
-@SYMTestExpectedResults Text drawn using CFbsBitGc and CRemoteGc(MWsGraphicsContext) should be the same
-*/
-void CTGc::TestCRemoteGcDrawTextInContextPointVerticalL()
- {
- CDrawTextInContextTestPointVertical* test = CDrawTextInContextTestPointVertical::NewL();
- CleanupStack::PushL(test);
- test->Test();
- TEST(test->HasPassedTest());
- CleanupStack::PopAndDestroy(); //test
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0490
-@SYMPREQ PREQ2095
-@SYMTestCaseDesc Draw text using CRemoteGc and DrawTextVertical(const TDesC&,const TTextParameters*,const TRect&,TInt,TTextAlign,TInt)
-@SYMTestPriority High
-@SYMTestStatus Implemented
-@SYMTestActions Create a font. Draw text to a bitmap with the font using CFbsBitGc::DrawTextVertical. Draw text with the font using CFbsBitGc::DrawText.
-Record the same DrawText commands using CRemoteGc and play the recorded commands on a
-bitmap using MWsGraphicsContext. Compare the two bitmaps.
-@SYMTestExpectedResults Text drawn using CFbsBitGc and CRemoteGc(MWsGraphicsContext) should be the same
-*/
-void CTGc::TestCRemoteGcDrawTextInContextBoxVerticalL()
- {
- CDrawTextInContextTestBoxVertical* test = CDrawTextInContextTestBoxVertical::NewL();
- CleanupStack::PushL(test);
- test->Test();
- TEST(test->HasPassedTest());
- CleanupStack::PopAndDestroy(); //test
- }
-#endif //TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0494
-@SYMDEF DEF131255
-@SYMTestCaseDesc Negative test to show that using SetBrushStyle() will not panic WServ with different
- brush bitmaps.
-@SYMTestPriority High
-@SYMTestStatus Implemented
-@SYMTestActions Four seperate panic situations are tested:
- 1)
- Create a regular CFbsBitmap, set as brush pattern, and set brush style to EPatternedBrush.
- Draw a line to force the playback to occur.
- Call Finish on the GC.
- Destroy the brush bitmap.
- 2)
- Create a regular CFbsBitmap, set as brush pattern, and set brush style to EPatternedBrush.
- Draw a line to force the playback to occur.
- Destroy the brush bitmap.
- Call Finish on the GC.
- 3+4)
- Create an extended bitmap, set as the brush pattern, and set the brush style to EPatternedBrush.
- Draw a line to force the playback to occur.
- Set the brush bitmap and style again.
- Call Finish on the GC.
- Destroy the brush bitmap.
-@SYMTestExpectedResults The calls to SetBrushStyle() should not cause WServ to panic when Finish() is called.
-*/
-void CTGc::TestGcSetBrushPatternL()
- {
- // Extended bitmap test data.
- const TUint8 KTestData[] = "TEST DATA";
- const TInt KTestDataSize = sizeof(KTestData);
- const TUid KTestExtendedBitmapUid = TUid::Uid(0xFFFFFFFF);
-
- // First try using a regular bitmap as the brush pattern.
- BaseWin->Win()->Invalidate();
- BaseWin->Win()->BeginRedraw();
- TheGc->Activate(*BaseWin->Win());
- CFbsBitmap* bitmapRegular = new (ELeave) CFbsBitmap;
- CleanupStack::PushL(bitmapRegular);
- TInt res = bitmapRegular->Create(TSize(10,10), EColor64K);
- TEST(res == KErrNone);
- //Record the commands using CWindowGc.
- TheGc->UseBrushPattern(bitmapRegular);
- TheGc->SetBrushStyle(CGraphicsContext::EPatternedBrush);
- // DrawLine() is only used here to force playback of the commands.
- TheGc->DrawLine(TPoint(0,0), TPoint(1,1));
- TheGc->Deactivate();
- BaseWin->Win()->EndRedraw();
- TheClient->iWs.Finish();
- CleanupStack::PopAndDestroy(1, bitmapRegular);
-
- // Secondly, try using a regular bitmap as the brush pattern, but deleting the bitmap
- // before calling Finish().
- BaseWin->Win()->Invalidate();
- BaseWin->Win()->BeginRedraw();
- TheGc->Activate(*BaseWin->Win());
- bitmapRegular = new (ELeave) CFbsBitmap;
- CleanupStack::PushL(bitmapRegular);
- res = bitmapRegular->Create(TSize(10,10), EColor64K);
- TEST(res == KErrNone);
- //Record the commands using CWindowGc.
- TheGc->UseBrushPattern(bitmapRegular);
- TheGc->SetBrushStyle(CGraphicsContext::EPatternedBrush);
- TheGc->DrawLine(TPoint(0,0), TPoint(1,1));
- CleanupStack::PopAndDestroy(1, bitmapRegular);
- TheGc->Deactivate();
- BaseWin->Win()->EndRedraw();
- TheClient->iWs.Finish();
-
- // Thirdly, try using an extended bitmap (which is unsupported by DirectGDI) as
- // the brush pattern.
- BaseWin->Win()->Invalidate();
- BaseWin->Win()->BeginRedraw();
- TheGc->Activate(*BaseWin->Win());
- // Create a dummy extended bitmap to use as a brush bitmap.
- // This is unsupported by the default implementation of DirectGDI.
- CFbsBitmap* bitmapExtended = new (ELeave) CFbsBitmap;
- CleanupStack::PushL(bitmapExtended);
- res = bitmapExtended->CreateExtendedBitmap(TSize(10,10), EColor64K, KTestExtendedBitmapUid, KTestData, KTestDataSize);
- TEST(res == KErrNone);
- //Record the commands using CWindowGc.
- TheGc->UseBrushPattern(bitmapExtended);
- TheGc->SetBrushStyle(CGraphicsContext::EPatternedBrush);
- TheGc->DrawLine(TPoint(0,0), TPoint(100,100));
- TheGc->UseBrushPattern(bitmapExtended);
- // Forth, do it twice so that we test the state commands and the drawops commands.
- TheGc->SetBrushStyle(CGraphicsContext::EPatternedBrush);
- TheGc->DrawLine(TPoint(0,0), TPoint(100,100));
- TheGc->Deactivate();
- BaseWin->Win()->EndRedraw();
- TheClient->iWs.Finish();
- CleanupStack::PopAndDestroy(1, bitmapExtended);
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0576
-@SYMDEF
-@SYMTestCaseDesc Checks window server is still able to draw a bitmap, even after the client has released its handle to the bitmap.
-@SYMTestPriority High
-@SYMTestStatus Implemented
-@SYMTestActions - Draw the bitmap to TestWin (keeping the window hidden)
- - Delete the bitmap
- - Show TestWin to cause it to be drawn on screen (after the bitmap has been deleted)
- - Draw the same bitmap (same image, different bitmap object instance) to BaseWin
- - Compare contents of TestWin with BaseWin
-@SYMTestExpectedResults TestWin and BaseWin should both show the bitmap.
-*/
-void CTGc::TestGcDeleteBitmap1L()
- {
- CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
- CleanupStack::PushL(bitmap);
- TInt ret = bitmap->Load(TEST_BITMAP_NAME,0);
- TEST(ret == KErrNone);
-
- // send drawing to hidden window
- TestWin->SetVisible(EFalse);
- TestWin->Win()->Invalidate();
- TestWin->Win()->BeginRedraw();
- TheGc->Activate(*TestWin->Win());
- TheGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- TheGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
- TheGc->SetBrushColor(TRgb(255, 0, 0));
- TheGc->Clear();
- TheGc->BitBlt(TPoint(0,0), bitmap);
- CleanupStack::PopAndDestroy(bitmap); // before the bitmap is actually deleted, WsFbsDestroyCallBack flushes the command buffer to ensure the bitmap is duplicated in the window server thread
- bitmap = NULL;
- TheGc->Deactivate();
- TestWin->Win()->EndRedraw();
- TheClient->iWs.Flush(); // calling Flush rather than Finish, as we don't need to wait for any drawing to happen (as the window is currently hidden)
-
- // make window visible (forcing it to draw)
- TestWin->SetVisible(ETrue);
- TheClient->iWs.Finish(); // ensure the bitmap has been drawn on test win
-
- // window server should have duplicated the bitmap when the BitBlt was added to the redraw store, so drawing
- // the window now (by making it visible above) should display the bitmap on screen, even
- // though we've deleted it in this thread
-
- // now create the bitmap again, and draw it to the base win (for comparison with test win)
- bitmap = new (ELeave) CFbsBitmap;
- CleanupStack::PushL(bitmap);
- ret = bitmap->Load(TEST_BITMAP_NAME,0);
- TEST(ret == KErrNone);
- BaseWin->SetVisible(ETrue);
- BaseWin->Win()->Invalidate();
- BaseWin->Win()->BeginRedraw();
- TheGc->Activate(*BaseWin->Win());
- TheGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- TheGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
- TheGc->SetBrushColor(TRgb(255, 0, 0));
- TheGc->Clear();
- TheGc->BitBlt(TPoint(0,0), bitmap);
- TheGc->Deactivate();
- BaseWin->Win()->EndRedraw();
- TheClient->iWs.Finish(); // ensure the bitmap has been drawn on base win
-
- CleanupStack::PopAndDestroy(bitmap);
-
- // the test bitmap should be shown in both base win and test win, so we now check that the
- // contents of base win and test win are the same
- CheckRect(BaseWin, TestWin, TRect(0, 0, BaseWin->Size().iWidth, BaseWin->Size().iHeight), _L("CTGc::TestGcDeleteBitmap1L()"));
- }
-
-/**
-@SYMTestCaseID GRAPHICS-WSERV-0577
-@SYMDEF
-@SYMTestCaseDesc Check window server is still able to use a bitmap required by window drawing, even
- after the client has released its handle to the bitmap. Also check window server
- releases the bitmap, when it's no longer used by window drawing.
-@SYMTestPriority High
-@SYMTestStatus Implemented
-@SYMTestActions - Clean BaseWin and TestWin from content that has been left over from previous test
- - Draw test bitmap to TestWin
- - Delete the bitmap
- - Using a different bitmap object instance, duplicate bitmap (the bitmap is still used by window drawing)
- - Delete the bitmap
- - Draw new content to TestWin, so that previously drawn bitmap is covered
- - Duplicate bitmap (the bitmap is no longer used by window drawing)
-@SYMTestExpectedResults Bitmap duplication succeeds, when the bitmap used by window drawing, whereas
- bitmap duplication fails, when the bitmap is no longer used by window drawing.
-*/
-void CTGc::TestGcDeleteBitmap2L()
- {
- //send new drawing to test and base windows, in order to cover
- //any content has been left on them (through previous test)
- BaseWin->SetVisible(ETrue);
- BaseWin->Win()->Invalidate();
- BaseWin->Win()->BeginRedraw();
- TheGc->Activate(*BaseWin->Win());
- TheGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- TheGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
- TheGc->SetBrushColor(TRgb(0, 0, 255));
- TheGc->Clear();
- TheGc->Deactivate();
- BaseWin->Win()->EndRedraw();
-
- TestWin->SetVisible(ETrue);
- TestWin->Win()->Invalidate();
- TestWin->Win()->BeginRedraw();
- TheGc->Activate(*TestWin->Win());
- TheGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- TheGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
- TheGc->SetBrushColor(TRgb(0, 0, 255));
- TheGc->Clear();
- TheGc->Deactivate();
- TestWin->Win()->EndRedraw();
-
- TheClient->iWs.Flush();
- TheClient->iWs.Finish();
-
- //load test bitmap
- CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
- CleanupStack::PushL(bitmap);
- TInt ret = bitmap->Load(_L("Z:\\WSTEST\\TESTCIRCLES.MBM"),0);
- TEST(ret == KErrNone);
- TInt bitmapHandle = bitmap->Handle();
-
- //send bitmap drawing to test window
- TestWin->Win()->Invalidate();
- TestWin->Win()->BeginRedraw();
- TheGc->Activate(*TestWin->Win());
- TheGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- TheGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
- TheGc->SetBrushColor(TRgb(0, 255, 0));
- TheGc->Clear();
- TheGc->BitBlt(TPoint(0,0), bitmap);
- TheGc->Deactivate();
- TestWin->Win()->EndRedraw();
-
- CleanupStack::PopAndDestroy(bitmap);
-
- TheClient->iWs.Flush();
- TheClient->iWs.Finish();
-
- //using a new bitmap object instance check that wserv can still duplicate test bitmap (even though
- //the initial bitmap object is deleted) , since there is a window segment using it
- bitmap = new (ELeave) CFbsBitmap;
- CleanupStack::PushL(bitmap);
- ret = bitmap->Duplicate(bitmapHandle);
- TEST(ret == KErrNone);
- CleanupStack::PopAndDestroy(bitmap);
-
- //send new drawing to test window, in order to cover the bitmap that was previously drawn
- TestWin->Win()->Invalidate();
- TestWin->Win()->BeginRedraw();
- TheGc->Activate(*TestWin->Win());
- TheGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- TheGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
- TheGc->SetBrushColor(TRgb(0, 0, 255));
- TheGc->Clear();
- TheGc->Deactivate();
- TestWin->Win()->EndRedraw();
-
- TheClient->iWs.Flush();
- TheClient->iWs.Finish();
-
- //check that wserv can't duplicate test bitmap, since no window segment uses it any more
- bitmap = new (ELeave) CFbsBitmap;
- CleanupStack::PushL(bitmap);
- ret = bitmap->Duplicate(bitmapHandle);
- TEST(ret != KErrNone);
- CleanupStack::PopAndDestroy(bitmap);
- }
-
-void CTGc::RunTestCaseL(TInt /*aCurTestCase*/)
- {
- ((CTGcStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
- switch(++iTest->iState)
- {
- case 1:
- ((CTGcStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0437"));
- iTest->LogSubTest(_L("CRemoteGc&CWindowGc, outline and shadow text"));
- TestOutlineAndShadowL();
- break;
- case 2:
- ((CTGcStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0471"));
- iTest->LogSubTest(_L("Test GC clip rect and origin attributes."));
- TestGcClipRectOrigin();
- break;
- case 3:
- ((CTGcStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0469"));
- iTest->LogSubTest(_L("CRemoteGc&CWindowGc, reset with background colour"));
- TestResetWithBackgroundColorL();
- break;
- case 4:
- ((CTGcStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0481"));
- iTest->LogSubTest(_L("CRemoteGc&CCommandBuffer, coverage tests"));
- TestCommandBufferL();
- break;
- case 5:
- ((CTGcStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0482"));
- iTest->LogSubTest(_L("CCommandBuffer, coverage tests"));
- TestEmptyCommandBufferL();
- break;
- case 6:
- ((CTGcStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0494"));
- iTest->LogSubTest(_L("CWindowGc, Brush Pattern test"));
- TestGcSetBrushPatternL();
- break;
- case 7:
- ((CTGcStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0576"));
- iTest->LogSubTest(_L("CWindowGc, delete bitmap 1"));
- TestGcDeleteBitmap1L();
- break;
- case 8:
- ((CTGcStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0577"));
- iTest->LogSubTest(_L("CWindowGc, delete bitmap 2"));
- TestGcDeleteBitmap2L();
- break;
-#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
- case 9:
- ((CTGcStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0471"));
- iTest->LogSubTest(_L("Test GC clip rect and origin attributes."));
- TestGcClipRectOrigin();
- break;
- case 10:
- ((CTGcStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0469"));
- iTest->LogSubTest(_L("CRemoteGc&CWindowGc, reset with background colour"));
- TestResetWithBackgroundColorL();
- break;
- case 11:
- ((CTGcStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0486"));
- iTest->LogSubTest(_L("CRemoteGc&MWsGraphicsContext, clipping rect test"));
- TestCRemoteGcAndMWsGraphicsContextClippingRectL();
- break;
- case 12:
- ((CTGcStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0487"));
- iTest->LogSubTest(_L("CRemoteGc, DrawTextInContext Position test"));
- TestCRemoteGcDrawTextInContextPointL();
- break;
- case 13:
- ((CTGcStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0488"));
- iTest->LogSubTest(_L("CRemoteGc, DrawTextInContext ClipRect test"));
- TestCRemoteGcDrawTextInContextBoxL();
- break;
- case 14:
- ((CTGcStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0489"));
- iTest->LogSubTest(_L("CRemoteGc, DrawTextInContext Pos Vertical test"));
- TestCRemoteGcDrawTextInContextPointVerticalL();
- break;
- case 15:
- ((CTGcStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0490"));
- iTest->LogSubTest(_L("CRemoteGc, DrawTextInContext ClipRect Vert test"));
- TestCRemoteGcDrawTextInContextBoxVerticalL();
- break;
-#endif //TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
- default:
- ((CTGcStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
- ((CTGcStep*)iStep)->CloseTMSGraphicsStep();
- TestComplete();
- break;
- }
- ((CTGcStep*)iStep)->RecordTestResultL();
- }
-
-__CONSTRUCT_STEP__(Gc)