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) 2003-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 "TTransptAnim.h"
struct FrameSet
{
TRgb* iFrames;
const TInt iFrameCount;
FrameSet(TRgb* aFrames, const TInt aFrameCount)
: iFrames(aFrames),
iFrameCount(aFrameCount)
{
}
};
TRgb FrameSequenceAlpha[]=
{ TRgb(255, 0, 0, 50), TRgb(0, 255, 0, 70), TRgb(0, 0, 255, 100), TRgb(255, 255, 0, 150), TRgb(0, 255, 255, 200) };
TRgb FrameSequenceNoAlpha[] =
{ TRgb(255, 0, 0), TRgb(0, 255, 0), TRgb(0, 0, 255), TRgb(255, 255, 0), TRgb(0, 255, 255) };
FrameSet frameSetAlpha(FrameSequenceAlpha, sizeof(FrameSequenceAlpha)/sizeof(TRgb));
FrameSet frameSetNoAlpha(FrameSequenceNoAlpha, sizeof(FrameSequenceNoAlpha)/sizeof(TRgb));
FrameSet TestFrameSets[] =
{
frameSetAlpha, frameSetNoAlpha
};
static const TInt FRAME_DELAY = 2000000;
static const TInt DRAW_LINE_ANIMATION = 36;
static const TBool ALPHATRANSPARENCY_ON = ETrue;
static const TInt ALPHA_FRAMESET = 0;
//*****************************************************************************
CTTestCase* CTTransparentAnim::CreateTestCaseL(CTTransparentAnim* aTransAnim, TInt aTestCaseId)
{
CTTestCase* testCase = aTransAnim->GetCurrent();
if (!testCase)
{
switch (aTestCaseId)
{
case GraphicsWServ0483 :
testCase = CTGraphicsWServ0483::NewL();
break;
}
}
return testCase;
}
//*****************************************************************************
CTTransparentAnim::CTTransparentAnim(CTestStep* aStep)
: CTWsGraphicsBase(aStep), iCurrentTestCase(NULL)
{}
CTTransparentAnim::~CTTransparentAnim()
{
TheClient->iWs.SetAutoFlush(EFalse);
}
void CTTransparentAnim::ConstructL()
{
TheClient->iWs.SetAutoFlush(ETrue);
}
void CTTransparentAnim::RunTestCaseL(TInt)
{
((CTTransparentAnimStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0483"));
CTTestCase* testCase = CTTransparentAnim::CreateTestCaseL(this, iTest->iState);
if (!testCase)
{
TestComplete();
return ;
}
TInt err = KErrNone;
if (!testCase->IsAlreadyRunning())
{
SetCurrent(testCase);
iTest->LogSubTest(testCase->TestCaseName());
TRAP(err, testCase->StartL());
testCase->SetError(err);
}
if (testCase->IsComplete() || err != KErrNone)
{
((CTTransparentAnimStep*)iStep)->RecordTestResultL();
((CTTransparentAnimStep*)iStep)->CloseTMSGraphicsStep();
if (testCase->HasFailed())
{
INFO_PRINTF3(_L("ErrorStatus - Expected: %d, Actual: %d"), ETrue, EFalse);
}
++iTest->iState;
SetCurrent(NULL);
delete testCase;
}
else
{
// Prevent test harness from repeatedly running the test case too quickly.
User::After(TTimeIntervalMicroSeconds32(FRAME_DELAY));
}
}
void CTTransparentAnim::SetCurrent(CTTestCase* aTestCase)
{
iCurrentTestCase = aTestCase;
}
CTTestCase* CTTransparentAnim::GetCurrent()
{
return iCurrentTestCase;
}
//*****************************************************************************
CTTAnimation::CTTAnimation(CTWin* aWin, TInt aDrawArg)
: iWin(aWin), iFrameCount(0), iCurrentFrameSet(0), iIsComplete(EFalse), iDrawArg(aDrawArg)
{
iAnimDll = RAnimDll(TheClient->iWs);
iAnimDll.Load(KAnimDLLName);
iDrawAnim = RTestAnim(iAnimDll);
iDrawAnim.Construct(*iWin->BaseWin(), EAnimTypeTrans, TPckgBuf<TRect>(aWin->Size()));
}
CTTAnimation::~CTTAnimation()
{
iDrawAnim.Close();
iAnimDll.Close();
delete iWin;
}
void CTTAnimation::StartL()
{
iAnimTimer.ConstructL();
iAnimTimer.Start(FRAME_DELAY, TCallBack(CTTAnimation::NextFrame,this));
}
TBool CTTAnimation::IsComplete()
{
return iIsComplete;
}
void CTTAnimation::SetCurrentFrameSet(TInt aFrameSet)
{
iCurrentFrameSet = aFrameSet;
}
CTWin* CTTAnimation::GetWindow()
{
return iWin;
}
void CTTAnimation::Attach(MAnimationObserver* aObserver)
{
iObserver = aObserver;
}
TInt CTTAnimation::NextFrame(TAny* aAnim)
{
STATIC_CAST(CTTAnimation*,aAnim)->NextFrame();
return KErrNone;
}
void CTTAnimation::NextFrame()
{
TRgb Color;
TPckgBuf<TFrameData> paramsPckg;
if (iFrameCount == TestFrameSets[iCurrentFrameSet].iFrameCount)
{
iIsComplete = ETrue;
iObserver->Update(this);
return ;
}
Color = TestFrameSets[iCurrentFrameSet].iFrames[iFrameCount++];
paramsPckg().draw = iDrawArg;
paramsPckg().color = Color;
iDrawAnim.Command(EADllNextFrame, paramsPckg);
iAnimTimer.Start(FRAME_DELAY, TCallBack(CTTAnimation::NextFrame,this));
}
//*****************************************************************************
CTransAnimTimer::CTransAnimTimer()
: CTimer(EPriorityStandard)
{}
CTransAnimTimer::~CTransAnimTimer()
{}
void CTransAnimTimer::ConstructL()
{
CTimer::ConstructL();
CActiveScheduler::Add(this);
}
void CTransAnimTimer::RunL()
{
iCallBack.CallBack();
}
void CTransAnimTimer::Start(TTimeIntervalMicroSeconds32 aInterval,TCallBack aCallBack)
{
iCallBack = aCallBack;
After(aInterval);
}
//*****************************************************************************
CTTestCase::CTTestCase()
: iError(KErrNone), iIsComplete(EFalse), iIsRunning(EFalse)
{}
TBool CTTestCase::IsAlreadyRunning()
{
return iIsRunning;
}
void CTTestCase::Update(CTTAnimation* aAnim)
{
iIsComplete = aAnim->IsComplete();
}
TBool CTTestCase::IsComplete()
{
return iIsComplete;
}
void CTTestCase::StartL()
{
if (!iIsRunning)
{
RunTestCaseL();
iIsRunning = ETrue;
}
}
TBool CTTestCase::HasFailed()
{
TBool ret = EFalse;
if (iError != KErrNone)
{
ret = ETrue;
}
return ret;
}
void CTTestCase::SetIsCompleted(TBool aIsComplete)
{
iIsComplete = aIsComplete;
}
void CTTestCase::SetError(TInt aError)
{
iError = aError;
}
//*********************** New Test Case Classes go here************************
/**
* @SYMTestCaseID GRAPHICS-WSERV-0483
*
* @SYMTestCaseDesc There are two animations running, one attached to a transparent
* window using SetTransparencyAlphaChannel and a second animation with a non-transparent
* window. The animations draw a line and then change the color of the line in subsequent
* frames. After the last frame the alpha channel for the first animation is set to
* opaque and then compared with the second animation to make certain that no artifacts
* are present.
*
* @SYMTestPriority High
*
* @SYMTestStatus Implemented
*
* @SYMTestActions An anim is attached with a Transparent window.
* The anim draws several frames using WSERV's Anim animation functionality.
*
* @SYMTestExpectedResults Both animations draw a line and then change it's color, the first
* animation doing it in a tranparent window and the second doing it in a non-transparent window.
**/
CTGraphicsWServ0483* CTGraphicsWServ0483::NewL()
{
CTGraphicsWServ0483* testCase = new(ELeave) CTGraphicsWServ0483();
CleanupStack::PushL(testCase);
testCase->ConstructL();
CleanupStack::Pop();
return testCase;
}
CTGraphicsWServ0483::~CTGraphicsWServ0483()
{
delete iAnim;
delete iCheckAnim;
}
void CTGraphicsWServ0483::ConstructL()
{
iAnim = new(ELeave) CTTAnimation(CTAnimWin<ALPHATRANSPARENCY_ON>::NewL(
BaseWin->GetBorderWin()->Position(),
BaseWin->GetBorderWin()->Size()), DRAW_LINE_ANIMATION);
iCheckAnim = new(ELeave) CTTAnimation(CTAnimWin<>::NewL(
TestWin->GetBorderWin()->Position(),
TestWin->GetBorderWin()->Size()), DRAW_LINE_ANIMATION);
TheClient->WaitForRedrawsToFinish();
}
void CTGraphicsWServ0483::RunTestCaseL()
{
iAnim->Attach(this);
iCheckAnim->Attach(this);
iAnim->SetCurrentFrameSet(ALPHA_FRAMESET);
iAnim->StartL();
iCheckAnim->SetCurrentFrameSet(ALPHA_FRAMESET);
iCheckAnim->StartL();
}
void CTGraphicsWServ0483::Update(CTTAnimation*)
{
if (iAnim->IsComplete() && iCheckAnim->IsComplete())
{
TRgb bgColor(150, 150, 150, 255);
iAnim->GetWindow()->Win()->SetBackgroundColor(bgColor);
iAnim->GetWindow()->Win()->Invalidate();
TheClient->iWs.Finish();
TheClient->WaitForRedrawsToFinish();
if (!DoCheckRect(iAnim->GetWindow(), iCheckAnim->GetWindow()))
{
SetError(KErrGeneral);
}
SetIsCompleted(ETrue);
}
}
TPtrC CTGraphicsWServ0483::TestCaseName()
{
_LIT(KTransparentAlphaChannelAnimationTest, "Transparent Anim Test");
return TPtrC(KTransparentAlphaChannelAnimationTest);
}
__WS_CONSTRUCT_STEP__(TransparentAnim)