diff -r 000000000000 -r 2f259fa3e83a lafagnosticuifoundation/cone/tef/TConeTransparency.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lafagnosticuifoundation/cone/tef/TConeTransparency.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,229 @@ +// Copyright (c) 2008-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: +// Tests semi-transparent window owning control with background display properly when having a child window +// owning semi-transparent control. +// Creats a window application with two semi-transparent window owning parent controls both with background. +// A semi-transparent child window owning control is created for each parent control. One of the child control +// enables transparent property properly, the other does not. +// The child control which enables transparent property properly should not cause the background of parent control +// to redraw thus in all circumstance its parent control background drawing count should be less than the one doesn't +// enable transparent control with provided function. +// +// + +/** + @file + @internalComponent - Internal Symbian test code + @SYMTestCaseID UIF-Cone-TConeTransparency + @SYMPREQ 000 + @SYMTestCaseDesc + @SYMTestPriority Medium + @SYMTestStatus Implemented + @SYMTestActions + @SYMTestExpectedResults +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include "TConeTransparency.h" +#include "gdi.h" + +//From MCoeControlBackground, has a mutable iBackgroundDrawnCount to measure how many times the background is drawn +void CTransparencyParentControl::Draw(CWindowGc &aGc, const CCoeControl &/*aControl*/, const TRect &aRect) const + { + + aGc.SetClippingRect(aRect); + aGc.SetBrushStyle(CGraphicsContext::ESolidBrush); + aGc.SetBrushColor(TRgb(255,0,0,127)); + for(TInt i = 0; i < aRect.Width(); i+=10) + { + TRect stripe(aRect.iTl.iX + i, aRect.iTl.iY, aRect.iTl.iX + i+5, aRect.iBr.iY); + aGc.DrawRect(stripe); + } + aGc.CancelClippingRect(); + iBackgroundDrawnCount++; + } + +//Draw the control +void CTransparentControl::Draw(const TRect& aRect) const + { + + CWindowGc& gc=SystemGc(); + + TRect rc = Rect(); + + gc.SetClippingRect(aRect); + + gc.SetPenColor(TRgb(0,0,0,127)); + gc.SetBrushColor(TRgb(255,0,0,127)); + gc.SetBrushStyle(CGraphicsContext::ESolidBrush); + gc.DrawEllipse(rc); + gc.CancelClippingRect(); + + } + + +//Construct the main background control. A parent control with a child control +void CTransparencyParentControl::ConstructL(TBool aEnableTransparencyProperly) + { + CreateWindowL(); + TInt xPosOffset = 0; + if(aEnableTransparencyProperly) + xPosOffset = 300; + SetExtent(TPoint(20+xPosOffset ,20),TSize(200,200)); + SetBackground(this); + + iControl = new (ELeave) CTransparentControl(); + iControl->CreateWindowL(this); + iControl->SetExtent(TPoint(50,36),TSize(128,128)); + if(aEnableTransparencyProperly) + { + iControl->EnableWindowTransparency(); + } + else + { + iControl->Window().SetTransparencyAlphaChannel(); + iControl->Window().SetBackgroundColor(~0); + } + + iControl->ActivateL(); + + ActivateL(); + } + + +//Destruction of the main control content +CTransparencyParentControl::~CTransparencyParentControl() + { + delete iControl; + } + + +//Standard implementation +CTConeTransparencyAppUi::CTConeTransparencyAppUi(CTmsTestStep* aStep) : +CTestCoeAppUi(aStep) +{} + +//Destruction of the application +CTConeTransparencyAppUi::~CTConeTransparencyAppUi() + { + RemoveFromStack(iViewControl1); + delete iViewControl1; + RemoveFromStack(iViewControl2); + delete iViewControl2; + } + + +//Standard Implementation +void CTConeTransparencyAppUi::ConstructL() + { + CTestCoeAppUi::ConstructL(); + + iViewControl1=new(ELeave) CTransparencyParentControl(); + iViewControl1->ConstructL(EFalse); + iViewControl2=new(ELeave) CTransparencyParentControl(); + iViewControl2->ConstructL(ETrue); + AddToStackL(iViewControl1); + AddToStackL(iViewControl2); + + AutoTestManager().StartAutoTest(); + } + +//Standard Implementation +TKeyResponse CTConeTransparencyAppUi::HandleKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) + { + TKeyResponse ret=EKeyWasNotConsumed; + if (aType==EEventKey && aKeyEvent.iCode==CTRL('e')) + { + CBaActiveScheduler::Exit(); + ret=EKeyWasConsumed; + } + return ret; + } + +//The test case/steps, a proper semi-transparent window owning child control should not cause its parent +//window owning control's background to redraw +void CTConeTransparencyAppUi::RunTestStepL(TInt /*aStepNum*/) + { + SetTestStepID(_L("@SYMTestCaseID UIF-Cone-TConeTransparency")); + TInt firstViewBgDrawnCount = iViewControl1->BgDrawnCount(); + TInt secondViewBgDrawnCount = iViewControl2->BgDrawnCount(); + INFO_PRINTF2(_L("Background of left picture was drawn %i time(s)"), firstViewBgDrawnCount); + INFO_PRINTF2(_L("Background of right picture was drawn %i time(s)"), secondViewBgDrawnCount); + if(firstViewBgDrawnCount > secondViewBgDrawnCount) + AutoTestManager().FinishAllTestCases(CAutoTestManager::EPass); + else + { + INFO_PRINTF1(_L("Background of left picture was drawn fewer times than that of right, but shouldn't be.")); + AutoTestManager().FinishAllTestCases(CAutoTestManager::EFailed); + } + RecordTestResultL(); + CloseTMSGraphicsStep(); + } + + + +//Construct application +void CTConeTransparencyStep::ConstructAppL(CCoeEnv* aCoe) + { // runs inside a TRAP harness + aCoe->ConstructL(); + CTConeTransparencyAppUi* appUi= new (ELeave) CTConeTransparencyAppUi(this); + aCoe->SetAppUi(appUi); + appUi->ConstructL(); + + } + +//Default implementation +CTConeTransparencyStep::CTConeTransparencyStep() + { + SetTestStepName(KTConeTransparencyStep); + } + +//Default implementation +CTConeTransparencyStep::~CTConeTransparencyStep() + {} + +//Default implementation +TVerdict CTConeTransparencyStep::doTestStepL() // main function called by E32 + { + INFO_PRINTF1(_L("Test Started")); + + PreallocateHALBuffer(); + + __UHEAP_MARK; + CCoeEnv* coe=new(ELeave) CCoeEnv; + TRAPD(err,ConstructAppL(coe)); + + if (!err) + coe->ExecuteD(); + else + { + SetTestStepResult(EFail); + delete coe; + } + + REComSession::FinalClose(); + + __UHEAP_MARKEND; + + INFO_PRINTF1(_L("Test Finished")); + return TestStepResult(); + }