textrendering/textformatting/test/src/TBitmapDoc.cpp
changeset 0 1fb32624e06b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textrendering/textformatting/test/src/TBitmapDoc.cpp	Tue Feb 02 02:02:46 2010 +0200
@@ -0,0 +1,234 @@
+/*
+* 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
+* @internalComponent 
+*
+*/
+
+
+#include "TBitmapDoc.h"
+
+EXPORT_C CTestBitmapFile* CTestBitmapFile::NewLC(const TRect& aDisplayRect, TCharFormat aCharFormat)
+    {
+    CTestBitmapFile* retVal = new(ELeave)CTestBitmapFile();
+    CleanupStack::PushL(retVal);
+    retVal->iDisplayRect = aDisplayRect;
+    retVal->iCharFormat = aCharFormat;
+    retVal->ConstructL();
+    return retVal;
+    }
+
+CTestBitmapFile::CTestBitmapFile()
+:CActive(CActive::EPriorityStandard), iSaveUtil(0), iCharFormat(_L("NewTimes"),300)
+    {
+    }
+
+void CTestBitmapFile::ConstructL()
+	{
+	//create bitmap from rectangle
+	const TInt twipFactor = 10;
+	iBitmap = new(ELeave)CFbsBitmap;
+	CleanupStack::PushL(iBitmap);
+	iBitmap->Create(iDisplayRect.Size(),EColor16);
+	iBitmap->SetSizeInTwips(TSize(iDisplayRect.iBr.iX * twipFactor, iDisplayRect.iBr.iY * twipFactor));
+
+	//create bitmap device from bitmap
+	iDevice = CFbsBitmapDevice::NewL(iBitmap);
+	CleanupStack::PushL(iDevice);
+
+	//create rich text document model using a test font
+	iParaFormat = CParaFormat::NewLC();
+	iParaFormatLayer = CParaFormatLayer::NewL(iParaFormat,iParaFormatMask);
+	CleanupStack::PushL(iParaFormatLayer);
+	iCharFormatMask.SetAll(); //needed otherwise no font gets set
+	iCharFormatLayer = CCharFormatLayer::NewL(iCharFormat,iCharFormatMask);
+	CleanupStack::PushL(iCharFormatLayer);
+	iDocModel = CRichText::NewL(iParaFormatLayer,iCharFormatLayer);
+	CleanupStack::PushL(iDocModel);
+
+	//create text layout from document model and rectangle
+	iLayout = CTextLayout::NewL(iDocModel, iDisplayRect.Width());
+	CleanupStack::PushL(iLayout);
+	
+	//create text view from layout, rectangle and device
+	iView = CTextView::NewL(iLayout, iDisplayRect, iDevice, iDevice, 0, 0, 0);
+	CleanupStack::PushL(iView);
+	
+ 	//Initialise text content
+	iView->SetDocPosL(0);         //seem to need this otherwise
+ 	iView->HandleGlobalChangeL(); //not all text is displayed
+
+	//set up file server
+	User::LeaveIfError(iFs.Connect());
+	CleanupClosePushL(iFs);
+
+	CActiveScheduler::Add(this);
+
+	CleanupStack::Pop(9,iBitmap);
+	}
+
+void CTestBitmapFile::Delete(void* aObj)
+    {
+    if(aObj)
+    	{
+    	delete aObj;
+	    aObj = NULL;
+    	}
+    }
+
+EXPORT_C CTestBitmapFile::~CTestBitmapFile()
+    {
+    Delete(iSaveUtil);
+    Delete(iView);
+    Delete(iLayout);
+    Delete(iDocModel);
+    Delete(iCharFormatLayer);
+    Delete(iParaFormatLayer);
+    Delete(iParaFormat);
+    Delete(iDevice);
+    Delete(iBitmap);
+    iFs.Close();
+    }
+
+EXPORT_C TBool CTestBitmapFile::CompareL(const TDes8& aData)
+    {
+    __ASSERT_ALWAYS(!IsActive(),User::Invariant());
+	HBufC8* buf = NULL;
+    // create a CImageEncoder to create a bitmap descriptor
+    if(iSaveUtil)
+    	{
+    	delete iSaveUtil;
+		iSaveUtil = NULL;
+    	}
+    iSaveUtil = CImageEncoder::DataNewL(buf, CImageEncoder::EOptionNone, KImageTypeBMPUid);
+    // start reading the bitmap: RunL called when complete
+    iSaveUtil->Convert(&iStatus, *iBitmap);
+    SetActive();
+    CActiveScheduler::Start();
+    TBool ret = aData.CompareC(buf->Des()) == 0;
+    if (buf)
+    	{
+    	delete buf;
+    	buf = NULL;
+    	}
+    return ret;
+    }
+
+// This was used to create the bitmap files for comparison - not used in actual testing
+EXPORT_C void CTestBitmapFile::SaveFileL(const TDesC& aFileName)
+    {
+    __ASSERT_ALWAYS(!IsActive(),User::Invariant());
+    // create a CImageEncoder to save the bitmap to the specified file in the specified format
+    if(iSaveUtil)
+    	{
+    	delete iSaveUtil;
+		iSaveUtil = NULL;
+    	}
+    iSaveUtil = CImageEncoder::FileNewL(iFs, aFileName, CImageEncoder::EOptionNone, KImageTypeBMPUid);
+    // start saving the bitmap: RunL called when complete
+    iSaveUtil->Convert(&iStatus, *iBitmap);
+    SetActive();
+    CActiveScheduler::Start();
+    }
+
+EXPORT_C void CTestBitmapFile::AppendL(const TDesC& aString)
+	{
+	iDocModel->InsertL(iDocModel->DocumentLength(),aString);
+	}
+
+EXPORT_C void CTestBitmapFile::AppendL(CPicture* aPic)
+	{
+	TPictureHeader header;
+   	header.iPicture=aPic;
+ 		
+	//CRichText::InsertL (iDocModel) takes ownership of the picture via TPictureHeader
+	TInt docLength = iDocModel->DocumentLength();
+	iDocModel->InsertL(docLength,header);
+ 	iView->FormatTextL();
+	CFbsBitGc* gc = CFbsBitGc::NewL();
+	iDevice->CreateContext(gc);
+	iView->DrawL(iDisplayRect, *gc);
+	iView->SetDocPosL(docLength+1, EFalse);
+ 	}
+
+void CTestBitmapFile::RunL()
+    {
+    CActiveScheduler::Stop();
+    }
+     
+void CTestBitmapFile::DoCancel()
+    {
+    // Cancel everything possible
+    if (iSaveUtil) iSaveUtil->Cancel();
+    }
+
+EXPORT_C CTestBitmapZipFileExtractor* CTestBitmapZipFileExtractor::NewLC(const TDesC& aZipFile)
+	{
+	CTestBitmapZipFileExtractor* retVal = new(ELeave)CTestBitmapZipFileExtractor;
+	CleanupStack::PushL(retVal);
+	retVal->ConstructL(aZipFile);
+	return retVal;
+	}
+	
+void CTestBitmapZipFileExtractor::ConstructL(const TDesC& aZipFile)
+	{
+	User::LeaveIfError(iFs.Connect());
+	iZipFile = CZipFile::NewL(iFs,aZipFile);
+	}
+
+CTestBitmapZipFileExtractor::CTestBitmapZipFileExtractor():iBuf(0)
+	{
+	}
+
+EXPORT_C CTestBitmapZipFileExtractor::~CTestBitmapZipFileExtractor()
+    {
+    if(iZipFile)
+    	{
+    	delete iZipFile;
+		iZipFile = NULL;
+    	}
+	if(iBuf)
+		{
+		delete iBuf;
+		iBuf = NULL;
+		}
+	iFs.Close();
+    }
+    
+EXPORT_C TPtr8 CTestBitmapZipFileExtractor::BitmapFileL(const TDesC& aFilename)
+	{
+	//Get a pointer to the bitmap data (member) from the zip file
+	CZipFileMember* member = iZipFile->MemberL(aFilename);
+	CleanupStack::PushL(member);
+	User::LeaveIfNull(member);
+	//Get the bitmap data as a filestream
+	RZipFileMemberReaderStream* fileStream;
+	iZipFile->GetInputStreamL(member,fileStream);
+	CleanupStack::PushL(fileStream);
+	TUint32 usize = member->UncompressedSize();
+	if(iBuf)
+		{
+		delete iBuf;
+		iBuf = NULL;
+		}
+	iBuf = HBufC8::New(usize);
+	CleanupStack::PushL(iBuf);
+	//Convert the filestream to a descriptor
+	TPtr8 ptr = iBuf->Des();
+	User::LeaveIfError(fileStream->Read(ptr,usize));
+	CleanupStack::Pop(iBuf);
+	CleanupStack::PopAndDestroy(2,member);
+	return ptr;
+	}