diff -r 000000000000 -r 1fb32624e06b textrendering/textformatting/test/src/TBitmapDoc.cpp --- /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; + }