Fix def files so that the implementation agnostic interface definition has no non-standards defined entry points, and change the eglrefimpl specific implementation to place its private entry points high up in the ordinal order space in the implementation region, not the standards based entrypoints region.
// Copyright (c) 1995-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 <w32stdgraphic.h>
// bitmap to load for comparison
#define MY_TEST_BITMAP _L("Z:\\WSTEST\\MYTEST.MBM")
const TUint32 ENullWsHandle=0xFFFFFFFF;
const TInt KErrTestExeFailure = -666;
// class to check if a shared CWsGraphic can be drawn correctly
class CWsGraphicShareBase : public CBase
{
public:
CWsGraphicShareBase();
~CWsGraphicShareBase();
void ConstructL();
void DoTestDrawGraphicCompareL(TPtrC aShare);
private :
void Test(TInt aCondition);
private :
TInt iScreenNumber;
CWindowGc *iGc;
RWsSession iWs;
RWindowGroup *iGroupWin;
CWsScreenDevice *iScreen;
RWindow *iWin;
};
CWsGraphicShareBase::CWsGraphicShareBase()
{
iScreenNumber = 0;
}
CWsGraphicShareBase::~CWsGraphicShareBase()
{
iWin->Close();
delete iWin;
delete iScreen;
delete iGc;
delete iGroupWin;
iWs.Close();
}
void CWsGraphicShareBase::ConstructL()
{
User::LeaveIfError(iWs.Connect());
iScreen=new(ELeave) CWsScreenDevice(iWs);
User::LeaveIfError(iScreen->Construct(iScreenNumber));
iGc=new(ELeave) CWindowGc(iScreen);
User::LeaveIfError(iGc->Construct());
iGroupWin=new(ELeave) RWindowGroup(iWs);
iGroupWin->Construct(1);
iWin=new(ELeave) RWindow(iWs);
iWin->Construct(*iGroupWin,ENullWsHandle);
iWin->SetRequiredDisplayMode(EColor256);
iWin->SetExtent(TPoint(0,0),iScreen->SizeInPixels());
iWin->Activate();
iWin->BeginRedraw();
iWin->EndRedraw();
iWs.Flush();
}
// Checks that the shared graphic is drawn or not. This is done by creating a new graphic in this process
// which looks the same as the shared graphic. The new graphic is then drawn to the screen followed by an
// attempt to draw the shared graphic. The two graphics are then compared. In cases where the shared graphic
// should be drawn the two graphics should compare exactly. In cases where the shared graphic should not be
// drawn the comparison will fail.
void CWsGraphicShareBase::DoTestDrawGraphicCompareL(TPtrC aShare)
{
// UID of the shared graphic
TUid uid1 = {0x12000021};
TWsGraphicId twsGraphicId1(uid1);
_LIT8(KTestData,"HelloWorld");
CFbsBitmap bitmap1;
CFbsBitmap mask1;
TSize screenSize = iScreen->SizeInPixels();
User::LeaveIfError(bitmap1.Load(MY_TEST_BITMAP,0));
mask1.Create(bitmap1.SizeInPixels(),iScreen->DisplayMode());
CWsGraphicBitmap* bTest = CWsGraphicBitmap::NewL(&bitmap1,&mask1);
// divide the screen into two equal rectangles
TRect position1(0,0,screenSize.iWidth/2,screenSize.iHeight);
TRect position2(screenSize.iWidth/2,0,screenSize.iWidth,screenSize.iHeight);
// draw the new graphic and attempt to draw the shared graphic
iGc->Activate(*iWin);
iWin->Invalidate();
iWin->BeginRedraw();
iGc->Clear(position1);
iGc->Clear(position2);
iGc->DrawWsGraphic(bTest->Id(),position1,KTestData);
iGc->DrawWsGraphic(twsGraphicId1.Uid(),position2,KTestData);
iGc->Deactivate();
iWin->EndRedraw();
iWs.Flush();
iWs.Finish();
// compare the graphic in both positions
if (aShare==_L("false"))
Test(!iScreen->RectCompare(position1,position2));
else
Test(iScreen->RectCompare(position1,position2));
delete bTest;
}
// Failures are written to WSERV.log
void CWsGraphicShareBase::Test(TInt aCondition)
{
if(!aCondition)
{
TLogMessageText buf;
_LIT(Fail,"AUTO Failed in WsGraphics Test : DrawSharedGraphic");
buf.Format(Fail);
iWs.LogMessage(buf);
iWs.Flush();
RProcess().Terminate(KErrTestExeFailure); // terminate this process immediately. Expect TWsGraph test step (TAutoServer.exe) to capture this
}
}
void MainL()
{
// read the argument from the command line of whether the graphic should be shared or not
TBuf<256> commandLine;
User::CommandLine(commandLine);
TLex lex(commandLine);
TPtrC toShare = lex.NextToken();
CActiveScheduler* activeScheduler=new(ELeave) CActiveScheduler;
CActiveScheduler::Install(activeScheduler);
CleanupStack::PushL(activeScheduler);
CWsGraphicShareBase testBase;
testBase.ConstructL();
testBase.DoTestDrawGraphicCompareL(toShare);
CleanupStack::PopAndDestroy(activeScheduler);
}
GLDEF_C TInt E32Main()
{
CTrapCleanup* cleanUpStack=CTrapCleanup::New();
if(cleanUpStack==NULL)
{
return KErrNoMemory;
}
TRAP_IGNORE(MainL())
delete cleanUpStack;
return(KErrNone);
}