transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
/*
* 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*/)
{
}