lafagnosticuifoundation/cone/tef/TConeTransparency.cpp
changeset 0 2f259fa3e83a
--- /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 <coeaui.h>
+#include <coemain.h>
+#include <coedef.h>
+#include <coesndpy.h>
+#include <basched.h>
+#include <bassnd.h>
+#include <coeccntx.h>
+#include <ecom/ecom.h>
+#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();
+	}