Merge 1. Pull in cpp files in the performance enhanced Khronos RI OVG files which are newly added. I've ignored platform-specific cpp files for linux, macosx, and null operating systems because this local solution has its own platform glue (i.e. facility to target Bitmaps but no full windowing support). I've ignored sfEGLInterface.cpp because this is used as a bridge to go from EGL to Nokia's Platsim which offers an EGL service. That's not relevant to this implementation because this is ARM side code, not Intel side. I just left a comment to sfEGLInterface.cpp in case we need to pick up this later on. The current code compiles on winscw. Prior to this fix, the code works on winscw, and can launch the SVG tiger (tiger.exe). That takes about 20 seconds to render. I hope to always be able to show this icon on each commit, and the plan is for the render time to reduce with this series of submissions. On this commit, the tiger renders ok in 20 seconds.
/*
* Copyright (c) 2005-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:
*
*/
/**
@test
@internalComponent
v
This contains CT_DataFbsBitmap
*/
// User includes
#include "T_DataFbsBitmap.h"
#include "T_GraphicsUtil.h"
// EPOC includes
#include <graphics\bitmapuid.h>
/*@{*/
/// Parameters
_LIT(KAlways, "always");
_LIT(KBitmapId, "bitmap_id");
_LIT(KBuffLength, "buff_length");
_LIT(KDitherOffsetX, "dither_offset_x");
_LIT(KDitherOffsetY, "dither_offset_y");
_LIT(KExpectedBool, "expected_bool");
_LIT(KExpectedInt, "expected_int");
_LIT(KFbsBitmapName, "fbs_bitmap_name");
_LIT(KFileName, "file_name");
_LIT(KFileOffset, "file_offset");
_LIT(KHeight, "height");
_LIT(KHandle, "handle");
_LIT(KWidth, "width");
_LIT(KLength, "length");
_LIT(KNullExpected, "null_expected");
_LIT(KDevice, "device");
_LIT(KNumberOfSources, "number_of_sources");
_LIT(KPixels, "pixels");
_LIT(KPointX, "point_x");
_LIT(KPointY, "point_y");
_LIT(KRectTlX, "rect_tl_x");
_LIT(KRectTlY, "rect_tl_y");
_LIT(KRectBrX, "rect_br_x");
_LIT(KRectBrY, "rect_br_y");
_LIT(KScanLineCoord, "scan_line_coord");
_LIT(KSourceFileName0, "source_file_name_0"); // we don't need more than 3 sources for our test anyway.
_LIT(KSourceFileName1, "source_file_name_1"); // So that this solution is ok
_LIT(KSourceFileName2, "source_file_name_2");
_LIT(KSourceBitmapId0, "source_bitmap_id_0");
_LIT(KSourceBitmapId1, "source_bitmap_id_1");
_LIT(KSourceBitmapId2, "source_bitmap_id_2");
_LIT(KShareIfLoaded, "share_if_loaded");
_LIT(KTwips, "twips");
_LIT(KUseDitherOffset, "use_dither_offset");
_LIT(KUseRFile, "use_rfile");
_LIT(KUseClosedRFile, "use_closed_rfile");
_LIT(KUseClosedStream, "use_closed_stream");
_LIT(KUseRequestStatus, "use_request_status");
_LIT(KUid, "uid");
_LIT(KPalette, "palette");
_LIT(KModifiable, "modifiable");
_LIT(KEntries, "entries");
_LIT(KRed, "red");
_LIT(KGreen, "green");
_LIT(KBlue, "blue");
_LIT(KDisplayMode, "displaymode");
_LIT(KBitmapfileCompressionScheme, "bitmap_compression_scheme");
/// Commands
_LIT(KCmdDisown, "disown");
_LIT(KCmdNew, "new");
_LIT(KCmdDestructor, "~");
_LIT(KCmdCompress, "Compress");
_LIT(KCmdCompressInBackground, "CompressInBackground");
_LIT(KCmdCreate, "Create");
_LIT(KCmdCreateHardwareBitmap, "CreateHardwareBitmap");
_LIT(KCmdDataAddress, "DataAddress");
_LIT(KCmdDataStride, "DataStride");
_LIT(KCmdDisplayMode, "DisplayMode");
_LIT(KCmdDuplicate, "Duplicate");
_LIT(KCmdExternalizeL, "ExternalizeL");
_LIT(KCmdExternalizeRectangleL, "ExternalizeRectangleL");
_LIT(KCmdGetPalette, "GetPalette");
_LIT(KCmdGetPixel, "GetPixel");
_LIT(KCmdGetScanLine, "GetScanLine");
_LIT(KCmdGetVerticalScanLine, "GetVerticalScanLine");
_LIT(KCmdHandle, "Handle");
_LIT(KCmdHardwareBitmapHandle, "HardwareBitmapHandle");
_LIT(KCmdHeader, "Header");
_LIT(KCmdHorizontalPixelsToTwips, "HorizontalPixelsToTwips");
_LIT(KCmdHorizontalTwipsToPixels, "HorizontalTwipsToPixels");
_LIT(KCmdInitialDisplayMode, "InitialDisplayMode");
_LIT(KCmdInternalizeL, "InternalizeL");
_LIT(KCmdIsCompressedInRAM, "IsCompressedInRAM");
_LIT(KCmdIsFileInRom, "IsFileInRom");
_LIT(KCmdIsLargeBitmap, "IsLargeBitmap");
_LIT(KCmdIsMonochrome, "IsMonochrome");
_LIT(KCmdIsRomBitmap, "IsRomBitmap");
_LIT(KCmdLoad, "Load");
_LIT(KCmdLoadAndCompress, "LoadAndCompress");
_LIT(KCmdLockHeap, "LockHeap");
_LIT(KCmdLockHeapLC, "LockHeapLC");
_LIT(KCmdPaletteAttributes, "PaletteAttributes");
_LIT(KCmdReset, "Reset");
_LIT(KCmdResize, "Resize");
_LIT(KCmdSave, "Save");
_LIT(KCmdScanLineLength, "ScanLineLength");
_LIT(KCmdSetDisplayMode, "SetDisplayMode");
_LIT(KCmdSetPalette, "SetPalette");
_LIT(KCmdSetRomBitmapL, "SetRomBitmapL");
_LIT(KCmdSetScanLine, "SetScanLine");
_LIT(KCmdSetSizeInTwips, "SetSizeInTwips");
_LIT(KCmdSizeInPixels, "SizeInPixels");
_LIT(KCmdSizeInTwips, "SizeInTwips");
_LIT(KCmdStoreL, "StoreL");
_LIT(KCmdSwapWidthAndHeight, "SwapWidthAndHeight");
_LIT(KCmdUnlockHeap, "UnlockHeap");
_LIT(KCmdVerticalPixelsToTwips, "VerticalPixelsToTwips");
_LIT(KCmdVerticalTwipsToPixels, "VerticalTwipsToPixels");
//?? SetRomBitmapL
// Begin
// End
// GetDecompressionBuffer
// GetAllBitmapHandles
/*@}*/
/**
* Two phase constructor
*/
CT_DataFbsBitmap* CT_DataFbsBitmap::NewL()
{
CT_DataFbsBitmap* ret = new (ELeave) CT_DataFbsBitmap();
CleanupStack::PushL(ret);
ret->ConstructL();
CleanupStack::Pop(ret);
return ret;
}
/**
* Protected constructor. First phase construction
*/
CT_DataFbsBitmap::CT_DataFbsBitmap()
: CDataWrapperBase()
, iFbsBitmap(NULL)
, iDisplayMode(ENone)
, iPopWhenUnlocking(EFalse)
, iCompressFailed(EFalse)
, iActiveCompressInBackground(NULL)
{
}
/**
* Protected constructor. Second phase construction
*/
void CT_DataFbsBitmap::ConstructL()
{
iActiveCompressInBackground=CActiveCallback::NewL(*this);
}
/**
* Destructor.
*/
CT_DataFbsBitmap::~CT_DataFbsBitmap()
{
DestroyData();
delete iActiveCompressInBackground;
iActiveCompressInBackground=NULL;
}
/**
* Contains cleanup implementation
*/
void CT_DataFbsBitmap::DestroyData()
{
delete iFbsBitmap;
iFbsBitmap=NULL;
}
/**
* Return a pointer to the object that the data wraps
*
* @return pointer to the object that the data wraps
*/
TAny* CT_DataFbsBitmap::GetObject()
{
return iFbsBitmap;
}
void CT_DataFbsBitmap::SetObjectL(TAny* aAny)
{
DestroyData();
iFbsBitmap=static_cast<CFbsBitmap*> (aAny);
}
void CT_DataFbsBitmap::DisownObjectL()
{
iFbsBitmap=NULL;
}
CFbsBitmap* CT_DataFbsBitmap::GetFbsBitmap() const
{
return iFbsBitmap;
}
/**
* Process a command read from the ini file
*
* @param aDataWrapper test step requiring command to be processed
* @param aCommand the command to process
* @param aSection the entry in the ini file requiring the command to be processed
*
* @return ETrue if the command is processed
*/
TBool CT_DataFbsBitmap::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
{
TBool retVal = ETrue;
if (aCommand == KCmdNew)
{
DoCmdNewL();
}
else if (aCommand == KCmdDestructor)
{
DoCmdDestructor();
}
else if (aCommand == KCmdCompress)
{
DoCmdCompress(aSection);
}
else if (aCommand == KCmdCompressInBackground)
{
DoCmdCompressInBackground(aSection, aAsyncErrorIndex);
}
else if (aCommand == KCmdCreate)
{
DoCmdCreate(aSection);
}
else if (aCommand == KCmdCreateHardwareBitmap)
{
DoCmdCreateHardwareBitmap(aSection);
}
else if (aCommand == KCmdDataAddress)
{
DoCmdDataAddress(aSection);
}
else if (aCommand == KCmdDataStride)
{
DoCmdDataStride(aSection);
}
else if (aCommand == KCmdDisplayMode)
{
DoCmdDisplayMode(aSection);
}
else if (aCommand == KCmdDuplicate)
{
DoCmdDuplicateL(aSection);
}
else if (aCommand == KCmdExternalizeL)
{
DoCmdExternalizeL(aSection);
}
else if (aCommand == KCmdExternalizeRectangleL)
{
DoCmdExternalizeRectangleL(aSection);
}
else if (aCommand == KCmdGetPalette)
{
DoCmdGetPaletteL(aSection);
}
else if (aCommand == KCmdGetPixel)
{
DoCmdGetPixel(aSection);
}
else if (aCommand == KCmdGetScanLine)
{
DoCmdGetScanLineL(aSection);
}
else if (aCommand == KCmdGetVerticalScanLine)
{
DoCmdGetVerticalScanLineL(aSection);
}
else if (aCommand == KCmdHandle)
{
DoCmdHandle(aSection);
}
else if (aCommand == KCmdHardwareBitmapHandle)
{
DoCmdHardwareBitmapHandle(aSection);
}
else if (aCommand == KCmdHeader)
{
DoCmdHeader();
}
else if (aCommand == KCmdHorizontalPixelsToTwips)
{
DoCmdHorizontalPixelsToTwips(aSection);
}
else if (aCommand == KCmdHorizontalTwipsToPixels)
{
DoCmdHorizontalTwipsToPixels(aSection);
}
else if (aCommand == KCmdInitialDisplayMode)
{
DoCmdInitialDisplayMode(aSection);
}
else if (aCommand == KCmdInternalizeL)
{
DoCmdInternalizeL(aSection);
}
else if (aCommand == KCmdIsCompressedInRAM)
{
DoCmdIsCompressedInRAM(aSection);
}
else if (aCommand == KCmdIsFileInRom)
{
DoCmdIsFileInRom(aSection);
}
else if (aCommand == KCmdIsLargeBitmap)
{
DoCmdIsLargeBitmap(aSection);
}
else if (aCommand == KCmdIsMonochrome)
{
DoCmdIsMonochrome(aSection);
}
else if (aCommand == KCmdIsRomBitmap)
{
DoCmdIsRomBitmap(aSection);
}
else if (aCommand == KCmdLoad)
{
DoCmdLoadL(aSection);
}
else if (aCommand == KCmdLoadAndCompress)
{
DoCmdLoadAndCompressL(aSection);
}
else if (aCommand == KCmdLockHeap)
{
DoCmdLockHeap(aSection);
}
else if (aCommand == KCmdLockHeapLC)
{
DoCmdLockHeapLC(aSection);
}
else if (aCommand == KCmdPaletteAttributes)
{
DoCmdPaletteAttributes(aSection);
}
else if (aCommand == KCmdReset)
{
DoCmdReset();
}
else if (aCommand == KCmdResize)
{
DoCmdResize(aSection);
}
else if (aCommand == KCmdSave)
{
DoCmdSave(aSection);
}
else if (aCommand == KCmdScanLineLength)
{
DoCmdScanLineLength(aSection);
}
else if (aCommand == KCmdSetDisplayMode)
{
DoCmdSetDisplayMode(aSection);
}
else if (aCommand == KCmdSetPalette)
{
DoCmdSetPaletteL(aSection);
}
else if (aCommand == KCmdSetRomBitmapL)
{
DoCmdSetRomBitmapL(aSection);
}
else if (aCommand == KCmdSetScanLine)
{
DoCmdSetScanLineL(aSection);
}
else if (aCommand == KCmdSetSizeInTwips)
{
DoCmdSetSizeInTwipsL(aSection);
}
else if (aCommand == KCmdSizeInPixels)
{
DoCmdSizeInPixels(aSection);
}
else if (aCommand == KCmdSizeInTwips)
{
DoCmdSizeInTwips(aSection);
}
else if (aCommand == KCmdStoreL)
{
DoCmdStoreL(aSection);
}
else if (aCommand == KCmdSwapWidthAndHeight)
{
DoCmdSwapWidthAndHeight();
}
else if (aCommand == KCmdUnlockHeap)
{
DoCmdUnlockHeapL(aSection);
}
else if (aCommand == KCmdVerticalPixelsToTwips)
{
DoCmdVerticalPixelsToTwips(aSection);
}
else if (aCommand == KCmdVerticalTwipsToPixels)
{
DoCmdVerticalTwipsToPixels(aSection);
}
else if (aCommand == KCmdDisown)
{
DisownObjectL();
}
else
{
retVal=EFalse;
}
return retVal;
}
/** Creates new CFbsBitmap class instance */
void CT_DataFbsBitmap::DoCmdNewL()
{
INFO_PRINTF1(_L("Creates new CFbsBitmap class instance"));
// cleanup if already created
DestroyData();
iFbsBitmap=new (ELeave) CFbsBitmap();
}
/** Calls static CFbsBitmap destructor */
void CT_DataFbsBitmap::DoCmdDestructor()
{
DestroyData();
}
/** Calls CFbsBitmap::Compress() */
void CT_DataFbsBitmap::DoCmdCompress(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::Compress()"));
TInt err=KErrNone;
TBitmapfileCompressionScheme compressionScheme;
if ( CT_GraphicsUtil::ReadBitmapfileCompressionScheme(*this, aSection, KBitmapfileCompressionScheme(), compressionScheme) )
{
err=GetFbsBitmap()->Compress(compressionScheme);
}
else
{
// call Compress()
err=GetFbsBitmap()->Compress();
}
// check error code
if ( err!=KErrNone )
{
ERR_PRINTF2(_L("Compress error: %d"), err);
SetError(err);
iCompressFailed = ETrue;
}
else
{
iCompressFailed = EFalse;
};
}
/** Calls CFbsBitmap::CompressInBackground() */
void CT_DataFbsBitmap::DoCmdCompressInBackground(const TDesC& aSection, const TInt aAsyncErrorIndex)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::CompressInBackground()"));
// get a flag if to use requset status from parameters
TBool useRequestStatus = EFalse;
GetBoolFromConfig(aSection, KUseRequestStatus(), useRequestStatus);
TBitmapfileCompressionScheme compressionScheme;
TBool hasCompressionScheme=CT_GraphicsUtil::ReadBitmapfileCompressionScheme(*this, aSection, KBitmapfileCompressionScheme(), compressionScheme);
// call CompressInBackground()
if ( useRequestStatus )
{
if ( hasCompressionScheme )
{
GetFbsBitmap()->CompressInBackground(iActiveCompressInBackground->iStatus, compressionScheme);
}
else
{
GetFbsBitmap()->CompressInBackground(iActiveCompressInBackground->iStatus);
}
iActiveCompressInBackground->Activate(aAsyncErrorIndex);
IncOutstanding();
}
else
{
TInt err = KErrNone;
if ( hasCompressionScheme )
{
err=GetFbsBitmap()->CompressInBackground(compressionScheme);
}
else
{
err=GetFbsBitmap()->CompressInBackground();
}
// check error code
if ( err != KErrNone )
{
ERR_PRINTF2(_L("Compress in background error: %d"), err);
SetError(err);
iCompressFailed = ETrue;
}
else
{
iCompressFailed = EFalse;
}
}
}
/** Calls CFbsBitmap::Create() */
void CT_DataFbsBitmap::DoCmdCreate(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::Create()"));
// get size height from parameters
TInt height;
if(!GetIntFromConfig(aSection, KHeight(), height))
{
ERR_PRINTF2(_L("No %S"), &KHeight());
SetBlockResult(EFail);
}
// get size width from parameters
TInt width;
if(!GetIntFromConfig(aSection, KWidth(), width))
{
ERR_PRINTF2(_L("No %S"), &KWidth());
SetBlockResult(EFail);
}
// get display mode from parameters
TDisplayMode displayMode;
if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
{
ERR_PRINTF1(_L("No display mode"));
SetBlockResult(EFail);
}
else
{
// call Create()
TInt err = GetFbsBitmap()->Create(TSize(width, height), displayMode);
// check error code
if (err != KErrNone)
{
ERR_PRINTF2(_L("Creation error: %d"), err);
SetError(err);
}
}
}
/** Calls CFbsBitmap::CreateHardwareBitmap() */
void CT_DataFbsBitmap::DoCmdCreateHardwareBitmap(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::CreateHardwareBitmap()"));
// get size height from parameters
TInt height;
if(!GetIntFromConfig(aSection, KHeight(), height))
{
ERR_PRINTF2(_L("No %S"), &KHeight());
SetBlockResult(EFail);
}
// get size width from parameters
TInt width;
if(!GetIntFromConfig(aSection, KWidth(), width))
{
ERR_PRINTF2(_L("No %S"), &KWidth());
SetBlockResult(EFail);
}
// get display mode from parameters
TDisplayMode displayMode;
if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
{
ERR_PRINTF1(_L("No display mode"));
SetBlockResult(EFail);
}
// get application uid from parameters
TInt uidInt;
if(!GetIntFromConfig(aSection, KUid(), uidInt))
{
ERR_PRINTF2(_L("No %S"), &KUid());
SetBlockResult(EFail);
}
// call Create()
TInt err = GetFbsBitmap()->CreateHardwareBitmap(TSize(width, height), displayMode, TUid::Uid(uidInt));
// check error code
if ( err != KErrNone )
{
ERR_PRINTF2(_L("Hardware bitmap creation error: %d"), err);
SetError(err);
}
}
/** Calls CFbsBitmap::DataAddress() locking and unlocking heap by defined in parameters means */
void CT_DataFbsBitmap::DoCmdDataAddress(const TDesC& aSection)
{
// call DataAddress()
TUint32* address=GetFbsBitmap()->DataAddress();
INFO_PRINTF2(_L("DataAddress %d"), address);
// validate returned value if needed
TInt expectedValue;
if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
{
if (expectedValue != (TInt)address)
{
ERR_PRINTF1(_L("The returned value is not as expected"));
SetBlockResult(EFail);
}
}
}
/** Calls CFbsBitmap::DataStride() */
void CT_DataFbsBitmap::DoCmdDataStride(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::DataStride()"));
// call DataStride()
TInt value = GetFbsBitmap()->DataStride();
INFO_PRINTF2(_L("Data stride: %d"), value);
// validate returned value if needed
TInt expectedValue;
if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
{
if (expectedValue != value)
{
ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, value);
SetBlockResult(EFail);
}
}
// check the value is not NULL
if (value <= 0)
{
ERR_PRINTF2(_L("The data stride is not expected zero or less, value: %d"), value);
SetBlockResult(EFail);
}
}
/** Checks CFbsBitmap::DisplayMode() value */
void CT_DataFbsBitmap::DoCmdDisplayMode(const TDesC& aSection)
{
INFO_PRINTF1(_L("Checks CFbsBitmap::DisplayMode() value"));
// call DisplayMode()
iDisplayMode=GetFbsBitmap()->DisplayMode();
INFO_PRINTF2(_L("Display Mode %d"), iDisplayMode);
// get display mode from parameters
TDisplayMode expectedValue;
if ( CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), expectedValue) )
{
// check value against NULL
if ( iDisplayMode!=expectedValue )
{
ERR_PRINTF3(_L("The value is not as expected! expected: %d, actual: %d"), expectedValue, iDisplayMode);
SetBlockResult(EFail);
}
}
}
/** Calls CFbsBitmap::Duplicate() */
void CT_DataFbsBitmap::DoCmdDuplicateL(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::Duplicate()"));
TInt handle=GetHandle();
TPtrC objectName;
if ( GetStringFromConfig(aSection, KFbsBitmapName(), objectName) )
{
CDataWrapperBase* wrapper=static_cast<CDataWrapperBase*>(GetDataWrapperL(objectName));
handle=wrapper->GetHandle();
}
else
{
GetIntFromConfig(aSection, KHandle(), handle);
}
// call Duplicate()
TInt err = GetFbsBitmap()->Duplicate(handle);
if (err != KErrNone)
{
ERR_PRINTF2(_L("Duplicate error: %d"), err);
SetError(err);
}
}
/** Calls CFbsBitmap::ExternalizeL() */
void CT_DataFbsBitmap::DoCmdExternalizeL(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::ExternalizeL()"));
ExternalizeImplL(aSection, TRect(), EFalse);
}
/** Calls CFbsBitmap::ExternalizeRectangleL() */
void CT_DataFbsBitmap::DoCmdExternalizeRectangleL(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::ExternalizeRectangleL()"));
// get rectangle top left x-coordinate from parameters
TInt tlx;
if(!GetIntFromConfig(aSection, KRectTlX(), tlx))
{
ERR_PRINTF2(_L("No %S"), &KRectTlX());
SetBlockResult(EFail);
}
// get rectangle top left x-coordinate from parameters
TInt tly;
if(!GetIntFromConfig(aSection, KRectTlY(), tly))
{
ERR_PRINTF2(_L("No %S"), &KRectTlY());
SetBlockResult(EFail);
}
// get rectangle top left x-coordinate from parameters
TInt brx;
if(!GetIntFromConfig(aSection, KRectBrX(), brx))
{
ERR_PRINTF2(_L("No %S"), &KRectBrX());
SetBlockResult(EFail);
}
// get rectangle top left x-coordinate from parameters
TInt bry;
if(!GetIntFromConfig(aSection, KRectBrY(), bry))
{
ERR_PRINTF2(_L("No %S"), &KRectBrY());
SetBlockResult(EFail);
}
ExternalizeImplL(aSection, TRect(tlx, tly, brx, bry), ETrue);
}
/** Calls CFbsBitmap::GetPalette() */
void CT_DataFbsBitmap::DoCmdGetPaletteL(const TDesC& aSection)
{
// call GetPalette()
CPalette* palette = NULL;
TInt err = GetFbsBitmap()->GetPalette(palette);
INFO_PRINTF2(_L("Calls CFbsBitmap::GetPalette() %d"), palette);
// check error code
if (err != KErrNone)
{
ERR_PRINTF2(_L("GetPalette error: %d"), err);
SetError(err);
}
else
{
// Verify palette
CPalette* expectedPalette = NULL;
if ( CT_GraphicsUtil::GetPaletteL(*this, aSection, KPalette(), expectedPalette) )
{
if ( palette != expectedPalette )
{
ERR_PRINTF3(_L("GetPalette palette %d not the expected palette %d"), palette, expectedPalette);
SetBlockResult(EFail);
}
}
}
}
/** Calls CFbsBitmap::GetPixel() */
void CT_DataFbsBitmap::DoCmdGetPixel(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::GetPixel()"));
// get point x-coordinate from parameters
TInt pointX;
if(!GetIntFromConfig(aSection, KPointX(), pointX))
{
ERR_PRINTF2(_L("No %S"), &KPointX());
SetBlockResult(EFail);
}
// get point y-coordinate from parameters
TInt pointY;
if(!GetIntFromConfig(aSection, KPointY(), pointY))
{
ERR_PRINTF2(_L("No %S"), &KPointY());
SetBlockResult(EFail);
}
// call GetPixel()
TRgb color;
GetFbsBitmap()->GetPixel(color, TPoint(pointX, pointY));
INFO_PRINTF2(_L("Red %d"), color.Red());
INFO_PRINTF2(_L("Green %d"), color.Green());
INFO_PRINTF2(_L("Blue %d"), color.Blue());
TInt actual;
TInt expected;
if(GetIntFromConfig(aSection, KRed(), expected))
{
actual=color.Red();
if ( expected != actual )
{
ERR_PRINTF3(_L("Expected Red %d does not match actual %d"), expected, actual);
SetBlockResult(EFail);
}
}
if(GetIntFromConfig(aSection, KGreen(), expected))
{
actual=color.Green();
if ( expected != actual )
{
ERR_PRINTF3(_L("Expected Green %d does not match actual %d"), expected, actual);
SetBlockResult(EFail);
}
}
if(GetIntFromConfig(aSection, KBlue(), expected))
{
actual=color.Blue();
if ( expected != actual )
{
ERR_PRINTF3(_L("Expected Blue %d does not match actual %d"), expected, actual);
SetBlockResult(EFail);
}
}
}
/** Calls CFbsBitmap::GetScanLine() */
void CT_DataFbsBitmap::DoCmdGetScanLineL(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::GetScanLine()"));
TBool dataOk=ETrue;
// get point x coordinate from parameters
TInt pointX = 0;
if(!GetIntFromConfig(aSection, KPointX(), pointX))
{
ERR_PRINTF2(_L("No %S"), &KPointX());
SetBlockResult(EFail);
dataOk=EFalse;
}
// get point y coordinate from parameters
TInt pointY = 0;
if(!GetIntFromConfig(aSection, KPointY(), pointY))
{
ERR_PRINTF2(_L("No %S"), &KPointY());
SetBlockResult(EFail);
dataOk=EFalse;
}
// get length from parameters
TInt length = 0;
if(!GetIntFromConfig(aSection, KLength(), length))
{
ERR_PRINTF2(_L("No %S"), &KLength());
SetBlockResult(EFail);
dataOk=EFalse;
}
// get buffer length from parameters
TInt buffLength = 0;
if(!GetIntFromConfig(aSection, KBuffLength(), buffLength))
{
ERR_PRINTF2(_L("No %S"), &KBuffLength());
SetBlockResult(EFail);
dataOk=EFalse;
}
// get display mode from parameters
TDisplayMode displayMode;
if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
{
ERR_PRINTF1(_L("No display mode"));
SetBlockResult(EFail);
dataOk=EFalse;
}
if ( dataOk )
{
// call GetScanLine()
TUint8* buffer = new (ELeave) TUint8[buffLength];
TPtr8 scanline(buffer, buffLength, buffLength);
GetFbsBitmap()->GetScanLine(scanline, TPoint(pointX, pointY), length, displayMode);
delete [] buffer;
}
}
/** Calls CFbsBitmap::GetVerticalScanLine() */
void CT_DataFbsBitmap::DoCmdGetVerticalScanLineL(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::GetVerticalScanLine()"));
TBool dataOk=ETrue;
// get point x coordinate from parameters
TInt pointX = 0;
if(!GetIntFromConfig(aSection, KPointX(), pointX))
{
ERR_PRINTF2(_L("No %S"), &KPointX());
SetBlockResult(EFail);
dataOk=EFalse;
}
// get if to use dither offset flag from parameters
TBool useDitherOffset = EFalse;
if(!GetBoolFromConfig(aSection, KUseDitherOffset(), useDitherOffset))
{
ERR_PRINTF2(_L("No %S"), &KUseDitherOffset());
SetBlockResult(EFail);
dataOk=EFalse;
}
// get dither offset x coordinate from parameters
TInt ditherOffsetX = 0;
if(useDitherOffset && !GetIntFromConfig(aSection, KDitherOffsetX(), ditherOffsetX))
{
ERR_PRINTF2(_L("No %S"), &KDitherOffsetX());
SetBlockResult(EFail);
dataOk=EFalse;
}
// get dither offset y coordinate from parameters
TInt ditherOffsetY = 0;
if(useDitherOffset && !GetIntFromConfig(aSection, KDitherOffsetY(), ditherOffsetY))
{
ERR_PRINTF2(_L("No %S"), &KDitherOffsetY());
SetBlockResult(EFail);
dataOk=EFalse;
}
// get buffer length from parameters
TInt buffLength = 0;
if(!GetIntFromConfig(aSection, KBuffLength(), buffLength))
{
ERR_PRINTF2(_L("No %S"), &KBuffLength());
SetBlockResult(EFail);
dataOk=EFalse;
}
// get display mode from parameters
TDisplayMode displayMode;
if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
{
ERR_PRINTF1(_L("No display mode"));
SetBlockResult(EFail);
dataOk=EFalse;
}
if ( dataOk )
{
// call GetVerticalScanLine()
TUint8* buffer = new (ELeave) TUint8[buffLength];
TPtr8 scanline(buffer, buffLength, buffLength);
if (useDitherOffset)
{
GetFbsBitmap()->GetVerticalScanLine(scanline, pointX, displayMode);
}
else
{
GetFbsBitmap()->GetVerticalScanLine(scanline, pointX, TPoint(ditherOffsetX, ditherOffsetY), displayMode);
}
delete [] buffer;
}
}
/** Calls CFbsBitmap::Handle() */
void CT_DataFbsBitmap::DoCmdHandle(const TDesC& aSection)
{
// call Handle()
TInt handle=GetFbsBitmap()->Handle();
INFO_PRINTF2(_L("Calls CFbsBitmap::Handle() %d"), handle);
SetHandle(handle);
// validate returned value if needed
TInt expectedValue;
if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
{
if (expectedValue != handle)
{
ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, handle);
SetBlockResult(EFail);
}
}
}
/** Checks CFbsBitmap::HardwareBitmapHandle() */
void CT_DataFbsBitmap::DoCmdHardwareBitmapHandle(const TDesC& aSection)
{
// call HardwareBitmapHandle()
TInt handle=GetFbsBitmap()->HardwareBitmapHandle();
INFO_PRINTF2(_L("CFbsBitmap::HardwareBitmapHandle() %d"), handle);
SetHandle(handle);
// get if null expected flag from parameters
TBool nullExpected = EFalse;
if ( GetBoolFromConfig(aSection, KNullExpected(), nullExpected) )
{
// check value againts NULL
if ( (handle == NULL) != nullExpected )
{
ERR_PRINTF2(_L("The value is not as expected! value: %d"), handle);
SetBlockResult(EFail);
}
}
}
/** Calls CFbsBitmap::Header() */
void CT_DataFbsBitmap::DoCmdHeader()
{
INFO_PRINTF1(_L("Calls CFbsBitmap::Header()"));
// call Header()
SEpocBitmapHeader header=GetFbsBitmap()->Header();
INFO_PRINTF2(_L("Header iBitmapSize &d"), header.iBitmapSize);
INFO_PRINTF2(_L("Header iBitsPerPixel &d"), header.iBitsPerPixel);
INFO_PRINTF2(_L("Header iColor &d"), header.iColor);
INFO_PRINTF2(_L("Header iCompression &d"), header.iCompression);
INFO_PRINTF2(_L("Header iPaletteEntries &d"), header.iPaletteEntries);
INFO_PRINTF3(_L("Header iSizeInPixels &d %d"), header.iSizeInPixels.iWidth, header.iSizeInPixels.iHeight);
INFO_PRINTF3(_L("Header iSizeInTwips &d %d"), header.iSizeInTwips.iWidth, header.iSizeInTwips.iHeight);
INFO_PRINTF2(_L("Header iStructSize &d"), header.iStructSize);
}
/** Calls CFbsBitmap::HorizontalPixelsToTwips() */
void CT_DataFbsBitmap::DoCmdHorizontalPixelsToTwips(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::HorizontalPixelsToTwips()"));
// get pixels from parameters
TInt pixels;
if(!GetIntFromConfig(aSection, KPixels(), pixels))
{
ERR_PRINTF2(_L("No %S"), &KPixels());
SetBlockResult(EFail);
}
// call HorizontalPixelsToTwips()
TInt value = GetFbsBitmap()->HorizontalPixelsToTwips(pixels);
INFO_PRINTF2(_L("Twips: %d"), value);
// validate returned value if needed
TInt expectedValue;
if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
{
if (expectedValue != value)
{
ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, value);
SetBlockResult(EFail);
}
}
}
/** Calls CFbsBitmap::HorizontalTwipsToPixels() */
void CT_DataFbsBitmap::DoCmdHorizontalTwipsToPixels(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::HorizontalTwipsToPixels()"));
// get twips from parameters
TInt twips;
if(!GetIntFromConfig(aSection, KTwips(), twips))
{
ERR_PRINTF2(_L("No %S"), &KTwips());
SetBlockResult(EFail);
}
// call HorizontalTwipsToPixels()
TInt value = GetFbsBitmap()->HorizontalTwipsToPixels(twips);
INFO_PRINTF2(_L("Pixels: %d"), value);
// validate returned value if needed
TInt expectedValue;
if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
{
if (expectedValue != value)
{
ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, value);
SetBlockResult(EFail);
}
}
}
/** Checks CFbsBitmap::InitialDisplayMode() value */
void CT_DataFbsBitmap::DoCmdInitialDisplayMode(const TDesC& aSection)
{
INFO_PRINTF1(_L("Checks CFbsBitmap::InitialDisplayMode() value"));
// call InitialDisplayMode()
TInt actualValue = GetFbsBitmap()->InitialDisplayMode();
INFO_PRINTF2(_L("Initial Display Mode %d"), actualValue);
// get display mode from parameters
TDisplayMode expectedValue;
if ( CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), expectedValue) )
{
// check value againts NULL
if (actualValue != expectedValue)
{
ERR_PRINTF3(_L("The value is not as expected! expecyed: %d, actual: %d"), expectedValue, actualValue);
SetBlockResult(EFail);
}
}
}
/** Calls CFbsBitmap::InternalizeL() */
void CT_DataFbsBitmap::DoCmdInternalizeL(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::InternalizeL()"));
// get file name from parameters
TPtrC fileName;
if (!GetStringFromConfig(aSection, KFileName(), fileName))
{
ERR_PRINTF2(_L("No %S"), &KFileName());
SetBlockResult(EFail);
}
// get a flag if to use closed stream from parameters
TBool useClosedStream = EFalse;
if(!GetBoolFromConfig(aSection, KUseClosedStream(), useClosedStream))
{
ERR_PRINTF2(_L("No %S"), &KUseClosedStream());
SetBlockResult(EFail);
}
// ReadStore creation
CDirectFileStore* readstore = CDirectFileStore::OpenL(FileServer(), fileName, EFileStream | EFileRead);
CleanupStack::PushL(readstore);
TInt popCount=1;
TStreamId headerid = readstore->Root();
RStoreReadStream readstrm;
// close stream if defined by parameters
if (!useClosedStream)
{
readstrm.OpenL(*readstore, headerid);
CleanupClosePushL(readstrm);
popCount=2;
}
// call InternalizeL()
TRAPD(err, GetFbsBitmap()->InternalizeL(readstrm));
if (err != KErrNone)
{
ERR_PRINTF2(_L("Internalize error: %d"), err);
SetError(err);
}
// cleanup
CleanupStack::PopAndDestroy(popCount, readstore);
}
/** Calls CFbsBitmap::IsCompressedInRAM() to check againt expected value */
void CT_DataFbsBitmap::DoCmdIsCompressedInRAM(const TDesC& aSection)
{
// call IsCompressedInRAM() to get actual value
TBool actualValue = GetFbsBitmap()->IsCompressedInRAM();
INFO_PRINTF2(_L("CFbsBitmap::IsCompressedInRAM() %d"), actualValue);
// get expected value from parameters
TBool expectedValue = EFalse;
if ( GetBoolFromConfig(aSection, KExpectedBool(), expectedValue) )
{
if (actualValue != expectedValue)
{
ERR_PRINTF3(_L("Expected value doesn't match to actual! expected: %d, actual: %d"), expectedValue, actualValue);
if (!iCompressFailed)
{
SetBlockResult(EFail);
};
}
}
}
/** Calls CFbsBitmap::IsFileInRom() and check against expectation */
void CT_DataFbsBitmap::DoCmdIsFileInRom(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::IsFileInRom() and check against expectation"));
// get file name from parameters
TPtrC fileName;
if ( !GetStringFromConfig(aSection, KFileName(), fileName) )
{
ERR_PRINTF2(_L("No %S"), &KFileName());
SetBlockResult(EFail);
}
// get flag if use RFile instance in Save() call from parameters
TBool useRFile = EFalse;
GetBoolFromConfig(aSection, KUseRFile(), useRFile);
TInt err = KErrNone;
TBool isFileInRom = EFalse;
TUint32* addressInRom = NULL;
if (useRFile)
{
// open rfile
RFile file;
err = file.Open(FileServer(), fileName, EFileShareReadersOnly);
// check if failed to open file
if ( err != KErrNone )
{
ERR_PRINTF2(_L("File open error: %d"), err);
SetBlockResult(EFail);
}
else
{
// call IsFileInRom()
isFileInRom = CFbsBitmap::IsFileInRom(file, addressInRom);
// close rfile
file.Close();
}
}
else
{
isFileInRom = CFbsBitmap::IsFileInRom(fileName, addressInRom);
}
// get expected value if is in ROM from parameters
TBool expectedIsFileInRom = EFalse;
if ( GetBoolFromConfig(aSection, KExpectedBool(), expectedIsFileInRom) )
{
// check the expectation
if (expectedIsFileInRom != isFileInRom)
{
ERR_PRINTF3(_L("The value is not as expected! expected: %d, actual: %d"), expectedIsFileInRom, isFileInRom);
SetBlockResult(EFail);
}
}
// check that address is not null if in rom
if ( isFileInRom && addressInRom == NULL )
{
ERR_PRINTF1(_L("The file is in ROM but returned address is NULL"));
SetBlockResult(EFail);
}
}
/** Calls CFbsBitmap::IsLargeBitmap() */
void CT_DataFbsBitmap::DoCmdIsLargeBitmap(const TDesC& aSection)
{
// call IsLargeBitmap()
TBool value = GetFbsBitmap()->IsLargeBitmap();
INFO_PRINTF2(_L("Is large bitmap: %d"), value);
// validate returned value if needed
TBool expectedBool;
if(GetIntFromConfig(aSection, KExpectedBool(), expectedBool))
{
if (expectedBool != value)
{
ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedBool, value);
SetBlockResult(EFail);
}
}
}
/** Calls CFbsBitmap::IsMonochrome() */
void CT_DataFbsBitmap::DoCmdIsMonochrome(const TDesC& aSection)
{
// call IsMonochrome()
TBool value = GetFbsBitmap()->IsMonochrome();
INFO_PRINTF2(_L("Is monochrome: %d"), value);
// validate returned value if needed
TBool expectedBool;
if(GetIntFromConfig(aSection, KExpectedBool(), expectedBool))
{
if (expectedBool != value)
{
ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedBool, value);
SetBlockResult(EFail);
}
}
}
/** Calls CFbsBitmap::IsRomBitmap() and check against expectation */
void CT_DataFbsBitmap::DoCmdIsRomBitmap(const TDesC& aSection)
{
// call IsRomBitmap()
TBool actualValue = GetFbsBitmap()->IsRomBitmap();
INFO_PRINTF2(_L("CFbsBitmap::IsRomBitmap() %d"), actualValue);
// get expected value if is in ROM from parameters
TBool expectedIsRomBitmap = EFalse;
if ( GetBoolFromConfig(aSection, KExpectedBool(), expectedIsRomBitmap) )
{
// check the expectation
if (expectedIsRomBitmap != actualValue)
{
ERR_PRINTF3(_L("The value is not as expected! expected: %d, actual: %d"), expectedIsRomBitmap, actualValue);
SetBlockResult(EFail);
}
}
}
/** CFbsBitmap::Load() Call */
void CT_DataFbsBitmap::DoCmdLoadL(const TDesC& aSection)
{
INFO_PRINTF1(_L("CFbsBitmap::Load() Call"));
LoadOrLoadAndCompressL(aSection, EFalse);
}
/** CFbsBitmap::LoadAndCompress() Call */
void CT_DataFbsBitmap::DoCmdLoadAndCompressL(const TDesC& aSection)
{
INFO_PRINTF1(_L("CFbsBitmap::LoadAndCompress() Call"));
LoadOrLoadAndCompressL(aSection, ETrue);
}
/** Calls static CFbsBitmap destructor */
void CT_DataFbsBitmap::DoCmdLockHeap(const TDesC& aSection)
{
TBool always=EFalse;
GetBoolFromConfig(aSection, KAlways(), always);
GetFbsBitmap()->LockHeap(always);
}
/** Calls static CFbsBitmap destructor */
void CT_DataFbsBitmap::DoCmdLockHeapLC(const TDesC& aSection)
{
TBool always=EFalse;
GetBoolFromConfig(aSection, KAlways(), always);
GetFbsBitmap()->LockHeapLC(always);
iPopWhenUnlocking=ETrue;
}
/** Calls CFbsBitmap::PaletteAttributes() */
void CT_DataFbsBitmap::DoCmdPaletteAttributes(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::PaletteAttributes()"));
// call PaletteAttributes()
TBool modifiable;
TInt entries;
GetFbsBitmap()->PaletteAttributes(modifiable, entries);
INFO_PRINTF3(_L("Modifiable: %d, Number of entries: %d"), modifiable, entries);
// validate returned value if needed
TBool expectedModifiable;
if(GetBoolFromConfig(aSection, KModifiable(), expectedModifiable))
{
if (expectedModifiable != modifiable)
{
ERR_PRINTF3(_L("The returned modifaiable value is not as expected, expected: %d, actual: %d"), expectedModifiable, modifiable);
SetBlockResult(EFail);
}
}
// validate returned value if needed
TBool expectedEntries;
if(GetIntFromConfig(aSection, KEntries(), expectedEntries))
{
if (expectedEntries != entries)
{
ERR_PRINTF3(_L("The returned modifaiable value is not as expected, expected: %d, actual: %d"), expectedEntries, entries);
SetBlockResult(EFail);
}
}
}
/** Calls CFbsBitmap::Reset() */
void CT_DataFbsBitmap::DoCmdReset()
{
INFO_PRINTF1(_L("Calls CFbsBitmap::Reset()"));
// call Reset()
GetFbsBitmap()->Reset();
}
/** Calls CFbsBitmap::Resize() */
void CT_DataFbsBitmap::DoCmdResize(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::Resize()"));
// get size height from parameters
TInt height;
if(!GetIntFromConfig(aSection, KHeight(), height))
{
ERR_PRINTF2(_L("No %S"), &KHeight());
SetBlockResult(EFail);
}
// get size width from parameters
TInt width;
if(!GetIntFromConfig(aSection, KWidth(), width))
{
ERR_PRINTF2(_L("No %S"), &KWidth());
SetBlockResult(EFail);
}
// call Resize()
TInt err = GetFbsBitmap()->Resize(TSize(width, height));
// check error code
if (err != KErrNone)
{
ERR_PRINTF2(_L("Resize error: %d"), err);
SetError(err);
}
}
/** Calls CFbsBitmap::Save() */
void CT_DataFbsBitmap::DoCmdSave(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::Save()"));
// get file name from parameters
TPtrC fileName;
if (!GetStringFromConfig(aSection, KFileName(), fileName))
{
ERR_PRINTF2(_L("No %S"), &KFileName());
SetBlockResult(EFail);
}
// get flag if use RFile instance in Save() call from parameters
TBool useRFile = EFalse;
if(!GetBoolFromConfig(aSection, KUseRFile(), useRFile))
{
ERR_PRINTF2(_L("No %S"), &KUseRFile());
SetBlockResult(EFail);
}
// get flag if use RFile instance in Load() call from parameters
TBool useClosedRFile = EFalse;
if(GetBoolFromConfig(aSection, KUseClosedRFile(), useClosedRFile))
{
if (useClosedRFile && !useRFile)
{
ERR_PRINTF3(_L("Cannot use %S parameter if %S is not set to TRUE"), &KUseClosedRFile(), &KUseRFile());
SetBlockResult(EFail);
}
}
TInt err = KErrNone;
if (useRFile)
{
// required to allow file handle to be adopted by another process
FileServer().ShareProtected();
// open or create rfile
RFile file;
if (!useClosedRFile)
{
err = file.Open(FileServer(), fileName, EFileWrite);
if (err == KErrNotFound)
{
err = file.Create(FileServer(), fileName, EFileWrite);
// check if failed to create file
if (err != KErrNone)
{
ERR_PRINTF2(_L("File create error: %d"), err);
SetBlockResult(EFail);
}
}
else if (err != KErrNone)
{
// if failed to open file
ERR_PRINTF2(_L("File open error: %d"), err);
SetBlockResult(EFail);
}
}
// call Save()
err = GetFbsBitmap()->Save(file);
// close rfile
file.Close();
}
else
{
err = GetFbsBitmap()->Save(fileName);
}
// check error code
if (err != KErrNone)
{
ERR_PRINTF2(_L("Save error: %d"), err);
SetError(err);
}
}
/** Calls CFbsBitmap::ScanLineLength() */
void CT_DataFbsBitmap::DoCmdScanLineLength(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::ScanLineLength()"));
// get length from parameters
TInt length = 0;
if(!GetIntFromConfig(aSection, KLength(), length))
{
ERR_PRINTF2(_L("No %S"), &KLength());
SetBlockResult(EFail);
}
// get display mode from parameters
TDisplayMode displayMode;
if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
{
ERR_PRINTF1(_L("No display mode"));
SetBlockResult(EFail);
}
else
{
TInt actualValue = CFbsBitmap::ScanLineLength(length, displayMode);
INFO_PRINTF2(_L("CFbsBitmap::ScanLineLength() %d"), actualValue);
TInt expectedValue = 0;
if ( GetIntFromConfig(aSection, KExpectedInt(), expectedValue) )
{
if (actualValue != expectedValue)
{
ERR_PRINTF3(_L("Expected value doesn't match to actual! expected: %d, actual: %d"), expectedValue, actualValue);
SetBlockResult(EFail);
}
}
}
}
/** Calls CFbsBitmap::SetDisplayMode() */
void CT_DataFbsBitmap::DoCmdSetDisplayMode(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::SetDisplayMode()"));
// get display mode from parameters
TDisplayMode displayMode;
if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
{
ERR_PRINTF1(_L("No display mode"));
SetBlockResult(EFail);
}
else
{
// call SetDisplayMode()
TInt err = GetFbsBitmap()->SetDisplayMode(displayMode);
// check error code
if (err != KErrNone)
{
ERR_PRINTF2(_L("Set display mode error: %d"), err);
SetError(err);
}
}
}
/** Calls CFbsBitmap::SetPalette() by previously created palette */
void CT_DataFbsBitmap::DoCmdSetPaletteL(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::SetPalette() by previously created palette"));
// get CPalette object passed as a parameter
CPalette* palette = NULL;
CT_GraphicsUtil::GetPaletteL(*this, aSection, KPalette(), palette);
// call SetPalette()
GetFbsBitmap()->SetPalette(palette);
}
/** Calls CFbsBitmap::SetRomBitmapL() by another bitmap */
void CT_DataFbsBitmap::DoCmdSetRomBitmapL(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::SetRomBitmapL() by another bitmap"));
// get fbsBitmap passed as a parameter
CFbsBitmap* otherFbsBitmap=NULL;
CT_GraphicsUtil::GetFbsBitmapL(*this, aSection, KFbsBitmapName(), otherFbsBitmap);
// get romPointer. If the bitmap is ROM bitmap then Handle() returns ROM pointer
CBitwiseBitmap* bitmapRomAddress=NULL;
if ( otherFbsBitmap!=NULL )
{
bitmapRomAddress=REINTERPRET_CAST(CBitwiseBitmap*, otherFbsBitmap->Handle());
}
// call SetRomBitmapL()
TInt bitmapSizeInBytes=0;
TRAPD(err, GetFbsBitmap()->SetRomBitmapL(bitmapRomAddress, bitmapSizeInBytes));
// check error code
if (err != KErrNone)
{
ERR_PRINTF2(_L("Set ROM bitmap error: %d"), err);
SetError(err);
}
}
/** Calls CFbsBitmap::SetScanLine() */
void CT_DataFbsBitmap::DoCmdSetScanLineL(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::SetScanLine()"));
// get scanline coordinate from parameters
TInt coordinate = 0;
if(!GetIntFromConfig(aSection, KScanLineCoord(), coordinate))
{
ERR_PRINTF2(_L("No %S"), &KScanLineCoord());
SetBlockResult(EFail);
}
// get file name from parameters
TPtrC fileName;
if (!GetStringFromConfig(aSection, KFileName(), fileName))
{
ERR_PRINTF2(_L("No %S"), &KFileName());
SetBlockResult(EFail);
}
// open file
RFile file;
User::LeaveIfError(file.Open(FileServer(), fileName, EFileRead | EFileShareAny));
CleanupClosePushL(file);
// get size
TInt size = 0;
User::LeaveIfError(file.Size(size));
// read file
HBufC8* fileDataBuff = HBufC8::NewLC(size);
TPtr8 fileData = fileDataBuff->Des();
User::LeaveIfError(file.Read(fileData));
GetFbsBitmap()->SetScanLine(fileData, coordinate);
CleanupStack::PopAndDestroy(2, &file); // fileDataBuff, file
}
/** Calls CFbsBitmap::SetSizeInTwips() by size parameter */
void CT_DataFbsBitmap::DoCmdSetSizeInTwipsL(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::SetSizeInTwips()"));
// get if to NULL device pointer flag from parameters
TPtrC device;
if ( GetStringFromConfig(aSection, KDevice(), device) )
{
CFbsBitmapDevice* bitmapDevice=static_cast<CFbsBitmapDevice*>(GetDataObjectL(device));
GetFbsBitmap()->SetSizeInTwips(bitmapDevice);
}
else
{
// get size height from parameters
TInt height;
if(!GetIntFromConfig(aSection, KHeight(), height))
{
ERR_PRINTF2(_L("No %S"), &KHeight());
SetBlockResult(EFail);
}
// get size width from parameters
TInt width;
if(!GetIntFromConfig(aSection, KWidth(), width))
{
ERR_PRINTF2(_L("No %S"), &KWidth());
SetBlockResult(EFail);
}
// call SetSizeInTwips()
GetFbsBitmap()->SetSizeInTwips(TSize(width, height));
}
}
/** Calls CFbsBitmap::SizeInPixels() and checks the size */
void CT_DataFbsBitmap::DoCmdSizeInPixels(const TDesC& aSection)
{
// call SizeInTwips()
TSize actualSize = GetFbsBitmap()->SizeInPixels();
INFO_PRINTF3(_L("CFbsBitmap::SizeInPixels() height %d, width %d"), actualSize.iHeight, actualSize.iWidth);
// get size height from parameters
TInt height;
if ( GetIntFromConfig(aSection, KHeight(), height) )
{
if ( actualSize.iHeight != height )
{
ERR_PRINTF3(_L("Height mismatch expected: %d, actual: %d"), height, actualSize.iHeight);
SetBlockResult(EFail);
}
}
// get size width from parameters
TInt width;
if ( GetIntFromConfig(aSection, KWidth(), width) )
{
// check that value is as expected
if ( actualSize.iWidth != width )
{
ERR_PRINTF3(_L("Width mismatch expected: %d, actual: %d"), width, actualSize.iWidth);
SetBlockResult(EFail);
}
}
}
/** Calls CFbsBitmap::SizeInTwips() and compares the result with expected */
void CT_DataFbsBitmap::DoCmdSizeInTwips(const TDesC& aSection)
{
// call SizeInTwips()
TSize actualSize = GetFbsBitmap()->SizeInTwips();
INFO_PRINTF3(_L("CFbsBitmap::SizeInTwips() height %d, width %d"), actualSize.iHeight, actualSize.iWidth);
// get size height from parameters
TInt height;
if ( GetIntFromConfig(aSection, KHeight(), height) )
{
if ( actualSize.iHeight != height )
{
ERR_PRINTF3(_L("Height mismatch expected: %d, actual: %d"), height, actualSize.iHeight);
SetBlockResult(EFail);
}
}
// get size width from parameters
TInt width;
if ( GetIntFromConfig(aSection, KWidth(), width) )
{
// check that value is as expected
if ( actualSize.iWidth != width )
{
ERR_PRINTF3(_L("Width mismatch expected: %d, actual: %d"), width, actualSize.iWidth);
SetBlockResult(EFail);
}
}
}
/** Calls CFbsBitmap::StoreL() */
void CT_DataFbsBitmap::DoCmdStoreL(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::StoreL()"));
TInt numberOfFiles = 0;
TInt numberOfBitmapIds = 0;
TPtrC sourceFileName1;
TPtrC sourceFileName2;
TInt sourceBitmapId0 = -1;
TInt sourceBitmapId1 = -1;
TInt sourceBitmapId2 = -1;
// get file name from parameters
TPtrC fileName;
if (!GetStringFromConfig(aSection, KFileName(), fileName))
{
ERR_PRINTF2(_L("No %S"), &KFileName());
SetBlockResult(EFail);
}
// get flag if use RFile instance in Save() call from parameters
TBool useRFile = EFalse;
if(!GetBoolFromConfig(aSection, KUseRFile(), useRFile))
{
ERR_PRINTF2(_L("No %S"), &KUseRFile());
SetBlockResult(EFail);
}
// get flag if use RFile instance in Load() call from parameters
TBool useClosedRFile = EFalse;
if(GetBoolFromConfig(aSection, KUseClosedRFile(), useClosedRFile))
{
if (useClosedRFile && !useRFile)
{
ERR_PRINTF3(_L("Cannot use %S parameter if %S is not set to TRUE"), &KUseClosedRFile(), &KUseRFile());
SetBlockResult(EFail);
}
}
// get up to 3 source file names from parameters
TPtrC sourceFileName0;
if (GetStringFromConfig(aSection, KSourceFileName0(), sourceFileName0))
{
numberOfFiles++;
if (GetStringFromConfig(aSection, KSourceFileName1(), sourceFileName1))
{
numberOfFiles++;
if (GetStringFromConfig(aSection, KSourceFileName2(), sourceFileName2))
{
numberOfFiles++;
}
}
}
// get up to 3 source bitmap ids from parameters
if (GetIntFromConfig(aSection, KSourceBitmapId0(), sourceBitmapId0))
{
numberOfBitmapIds++;
if (GetIntFromConfig(aSection, KSourceBitmapId1(), sourceBitmapId1))
{
numberOfBitmapIds++;
if (GetIntFromConfig(aSection, KSourceBitmapId2(), sourceBitmapId2))
{
numberOfBitmapIds++;
}
}
}
// get number of sources argument from parameters
TInt numberOfSources;
if(!GetIntFromConfig(aSection, KNumberOfSources(), numberOfSources))
{
ERR_PRINTF2(_L("No %S"), &KNumberOfSources());
SetBlockResult(EFail);
}
// create array of file names
TFileName** sourceFiles = new (ELeave) TFileName*[numberOfFiles];
CleanupStack::PushL(sourceFiles);
if (numberOfFiles > 0) sourceFiles[0] = new (ELeave) TFileName(sourceFileName0);
if (numberOfFiles > 1) sourceFiles[1] = new (ELeave) TFileName(sourceFileName1);
if (numberOfFiles > 2) sourceFiles[2] = new (ELeave) TFileName(sourceFileName2);
// create array of bitmap ids
TInt32* bitmapIds = new (ELeave) TInt32[numberOfBitmapIds];
CleanupStack::PushL(bitmapIds);
if (numberOfBitmapIds > 0) bitmapIds[0] = sourceBitmapId0;
if (numberOfBitmapIds > 1) bitmapIds[1] = sourceBitmapId1;
if (numberOfBitmapIds > 2) bitmapIds[2] = sourceBitmapId2;
TInt err = KErrNone;
if (useRFile)
{
// required to allow file handle to be adopted by another process
FileServer().ShareProtected();
// open rfile
TBool openSuccess = EFalse;
RFile file;
err = file.Open(FileServer(), fileName, EFileWrite);
// check if ok, if not fount => try to create new file
if (err == KErrNone)
{
openSuccess = ETrue;
}
else if (err == KErrNotFound)
{
INFO_PRINTF1(_L("File doesn't exist, trying to create it."));
err = file.Create(FileServer(), fileName, EFileWrite);
// check if failed to create file
if (err == KErrNone)
{
openSuccess = ETrue;
}
else
{
ERR_PRINTF2(_L("File create error: %d"), err);
SetBlockResult(EFail);
}
}
else
{
ERR_PRINTF2(_L("File open error: %d"), err);
SetBlockResult(EFail);
}
// if ok => do store
if (openSuccess)
{
// if we use invalid RFile handle in our test
if (useClosedRFile)
{
file.Close();
}
// call StoreL()
TRAP(err, CFbsBitmap::StoreL(file, numberOfSources, (const TDesC**) sourceFiles, bitmapIds));
// check error code
if (err != KErrNone)
{
ERR_PRINTF2(_L("Store error: %d"), err);
SetError(err);
}
// close rfile
file.Close();
}
}
else
{
// call StoreL()
TRAP(err, CFbsBitmap::StoreL(fileName, numberOfSources, (const TDesC**) sourceFiles, bitmapIds));
// check error code
if (err != KErrNone)
{
ERR_PRINTF2(_L("Store error: %d"), err);
SetError(err);
}
}
// Iterate over the file name pointer array and cleanup
for (TInt i = 0; i < numberOfFiles; ++i)
{
delete sourceFiles[i];
}
// Cleanup the arrays allocated on the heap
CleanupStack::PopAndDestroy(2, sourceFiles);
}
/** Calls CFbsBitmap::SwapWidthAndHeight() */
void CT_DataFbsBitmap::DoCmdSwapWidthAndHeight()
{
INFO_PRINTF1(_L("Calls CFbsBitmap::SwapWidthAndHeight()"));
// call SwapWidthAndHeight()
TInt err = GetFbsBitmap()->SwapWidthAndHeight();
// check error code
if (err != KErrNone)
{
ERR_PRINTF2(_L("Swap width and height error: %d"), err);
SetError(err);
}
}
/** Calls static CFbsBitmap destructor */
void CT_DataFbsBitmap::DoCmdUnlockHeapL(const TDesC& aSection)
{
CFbsBitmap* bitmap=NULL;
if ( CT_GraphicsUtil::GetFbsBitmapL(*this, aSection, KFbsBitmapName(), bitmap) )
{
CFbsBitmap::UnlockHeap(bitmap);
}
else
{
TBool always=EFalse;
GetBoolFromConfig(aSection, KAlways(), always);
GetFbsBitmap()->UnlockHeap(always);
}
if ( iPopWhenUnlocking )
{
iPopWhenUnlocking=EFalse;
CleanupStack::Pop();
}
}
/** Calls CFbsBitmap::VerticalPixelsToTwips() */
void CT_DataFbsBitmap::DoCmdVerticalPixelsToTwips(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::VerticalPixelsToTwips()"));
// get pixels from parameters
TInt pixels;
if(!GetIntFromConfig(aSection, KPixels(), pixels))
{
ERR_PRINTF2(_L("No %S"), &KPixels());
SetBlockResult(EFail);
}
// call VerticalPixelsToTwips()
TInt value = GetFbsBitmap()->VerticalPixelsToTwips(pixels);
INFO_PRINTF2(_L("Twips: %d"), value);
// validate returned value if needed
TInt expectedValue;
if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
{
if (expectedValue != value)
{
ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, value);
SetBlockResult(EFail);
}
}
}
/** Calls CFbsBitmap::VerticalTwipsToPixels() */
void CT_DataFbsBitmap::DoCmdVerticalTwipsToPixels(const TDesC& aSection)
{
INFO_PRINTF1(_L("Calls CFbsBitmap::VerticalTwipsToPixels()"));
// get twips from parameters
TInt twips;
if(!GetIntFromConfig(aSection, KTwips(), twips))
{
ERR_PRINTF2(_L("No %S"), &KTwips());
SetBlockResult(EFail);
}
// call VerticalTwipsToPixels()
TInt value = GetFbsBitmap()->VerticalTwipsToPixels(twips);
INFO_PRINTF2(_L("Pixels: %d"), value);
// validate returned value if needed
TInt expectedValue;
if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
{
if (expectedValue != value)
{
ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, value);
SetBlockResult(EFail);
}
}
}
/** Calls CFbsBitmap::ExternalizeL() or CFbsBitmap::ExternalizeRectangleL(). Used by DoCmdExternalize() and DoCmdExternalizeRectangle() methods */
void CT_DataFbsBitmap::ExternalizeImplL(const TDesC& aSection, const TRect& aRect, TBool aUseRect)
{
// get file name from parameters
TPtrC fileName;
if (!GetStringFromConfig(aSection, KFileName(), fileName))
{
ERR_PRINTF2(_L("No %S"), &KFileName());
SetBlockResult(EFail);
}
// get a flag if to use closed stream from parameters
TBool useClosedStream = EFalse;
if(!GetBoolFromConfig(aSection, KUseClosedStream(), useClosedStream))
{
ERR_PRINTF2(_L("No %S"), &KUseClosedStream());
SetBlockResult(EFail);
}
// create write store
CDirectFileStore* writestore = CDirectFileStore::ReplaceL(FileServer(), fileName, EFileStream | EFileWrite);
CleanupStack::PushL(writestore);
TInt popCount=1;
TUidType uidtype(KDirectFileStoreLayoutUid, KMultiBitmapFileImageUid);
writestore->SetTypeL(uidtype);
// create write stream
RStoreWriteStream writestrm;
// close stream set by parameters
if (!useClosedStream)
{
TStreamId headerid=writestrm.CreateL(*writestore);
CleanupClosePushL(writestrm);
++popCount;
writestore->SetRootL(headerid);
}
if (aUseRect)
{
// call ExternalizeRectangleL()
TRAPD(err, GetFbsBitmap()->ExternalizeRectangleL(writestrm, aRect));
if (err != KErrNone)
{
ERR_PRINTF2(_L("Externalize rectangle error: %d"), err);
SetError(err);
}
}
else
{
// call ExternalizaL()
TRAPD(err, GetFbsBitmap()->ExternalizeL(writestrm));
if (err != KErrNone)
{
ERR_PRINTF2(_L("Externalize error: %d"), err);
SetError(err);
}
}
// cleanup
CleanupStack::PopAndDestroy(popCount, writestore);
}
/** Calls CFbsBitmap::Load() or CFbsBitmap::LoadAndCompress(). Used by DoCmdLoad() and DoCmdLoadAndCompress() methods */
void CT_DataFbsBitmap::LoadOrLoadAndCompressL(const TDesC& aSection, TBool aCompress)
{
// get bitmap id from parameters
TInt bitmapId;
if(!GetIntFromConfig(aSection, KBitmapId(), bitmapId))
{
ERR_PRINTF2(_L("No %S"), &KBitmapId());
SetBlockResult(EFail);
}
// get file name from parameters
TPtrC fileName;
if (!GetStringFromConfig(aSection, KFileName(), fileName))
{
ERR_PRINTF2(_L("No %S"), &KFileName());
SetBlockResult(EFail);
}
// get file offset from parameters
TInt fileOffset;
TBool useOffset = GetIntFromConfig(aSection, KFileOffset(), fileOffset);
// get share if loaded from parameters
TBool shareIfLoaded = EFalse;
GetBoolFromConfig(aSection, KShareIfLoaded(), shareIfLoaded);
// get flag if use RFile instance in Load() call from parameters
TBool useRFile = EFalse;
GetBoolFromConfig(aSection, KUseRFile(), useRFile);
// get flag if use RFile instance in Load() call from parameters
TBool useClosedRFile = EFalse;
GetBoolFromConfig(aSection, KUseClosedRFile(), useClosedRFile);
if (useClosedRFile && !useRFile)
{
ERR_PRINTF3(_L("Cannot use %S parameter if %S is not set to TRUE"), &KUseClosedRFile(), &KUseRFile());
SetBlockResult(EFail);
}
// load bitmap
TInt err = KErrNone;
if (useRFile)
{
// required to allow file handle to be adopted by another process
FileServer().ShareProtected();
// open rfile
RFile file;
// if we use invalid RFile handle in our test
if (!useClosedRFile)
{
User::LeaveIfError(file.Open(FileServer(), fileName, EFileShareReadersOnly));
CleanupClosePushL(file);
}
// do load
if (aCompress)
{
if (useOffset)
{
err = GetFbsBitmap()->LoadAndCompress(file, bitmapId, shareIfLoaded, fileOffset);
}
else
{
err = GetFbsBitmap()->LoadAndCompress(file, bitmapId, shareIfLoaded);
}
}
else
{
if (useOffset)
{
err = GetFbsBitmap()->Load(file, bitmapId, shareIfLoaded, fileOffset);
}
else
{
err = GetFbsBitmap()->Load(file, bitmapId, shareIfLoaded);
}
}
if (!useClosedRFile)
{
CleanupStack::PopAndDestroy(&file);
}
}
else
{
if (aCompress)
{
if (useOffset)
{
err = GetFbsBitmap()->LoadAndCompress(fileName, bitmapId, shareIfLoaded, fileOffset);
}
else
{
err = GetFbsBitmap()->LoadAndCompress(fileName, bitmapId, shareIfLoaded);
}
}
else
{
if (useOffset)
{
err = GetFbsBitmap()->Load(fileName, bitmapId, shareIfLoaded, fileOffset);
}
else
{
err = GetFbsBitmap()->Load(fileName, bitmapId, shareIfLoaded);
}
}
}
// check error code
if (err != KErrNone)
{
ERR_PRINTF2(_L("Load error: %d"), err);
SetError(err);
}
}
/**
Virtual RunL - Called on completion of an asynchronous command
@see MTPActiveCallback
@param aActive Active Object that RunL has been called on
@pre N/A
@post N/A
@leave system wide error code
*/
void CT_DataFbsBitmap::RunL(CActive* aActive, const TInt aIndex)
{
if ( aActive==iActiveCompressInBackground )
{
RunCompressInBackground(aIndex);
}
else
{
ERR_PRINTF1(_L("Stray signal"));
SetBlockResult(EFail);
}
DecOutstanding();
}
/**
Virtual DoCancel - Request to cancel the asynchronous command
@see - MTPActiveCallback
@param aActive Active Object that DoCancel has been called on
@pre - N/A
@post - N/A
@leave system wide error code
*/
void CT_DataFbsBitmap::DoCancel(CActive* aActive, const TInt aIndex)
{
if ( aActive==iActiveCompressInBackground )
{
DoCancelCompressInBackground(aIndex);
}
else
{
ERR_PRINTF1(_L("Stray signal"));
SetBlockResult(EFail);
}
DecOutstanding();
}
void CT_DataFbsBitmap::RunCompressInBackground(const TInt aIndex)
{
TInt err=iActiveCompressInBackground->iStatus.Int();
INFO_PRINTF2(_L("RunCompressInBackground %d"), err);
if ( err!=KErrNone )
{
ERR_PRINTF2(_L("RunL Error %d"), err);
SetAsyncError(aIndex, err);
}
}
void CT_DataFbsBitmap::DoCancelCompressInBackground(const TInt /*aIndex*/)
{
}