--- /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;
+ }