diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/ServerCore/Src/alfwindowbuffer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfwindowbuffer.cpp Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,244 @@ +/* +* Copyright (c) 2008 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: ?Description +* +*/ + + + +#include +#include +#include "alfwindowbuffer.h" + +// --------------------------------------------------------------------------- +// TAlfWindowBufferData class declaration +// --------------------------------------------------------------------------- +// +class CAlfWindowBuffer::TAlfWindowBufferData + { + public: + TSize iSize; + TInt iFormat; + TUint iStride; + TAny* iBufferPtr; + CFbsBitmap* iTemp; // RnD enablers + }; + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +EXPORT_C CAlfWindowBuffer* CAlfWindowBuffer::NewL( const TSize& aSize, + TInt aBufferFormat, + TUint aStrideInBytes, + TAny* aPtr) + { + CAlfWindowBuffer* self = new (ELeave) CAlfWindowBuffer; + CleanupStack::PushL(self); + self->ConstructL(aSize, aBufferFormat, aStrideInBytes, aPtr); + CleanupStack::Pop(); + return self; + } + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +// +EXPORT_C CAlfWindowBuffer::~CAlfWindowBuffer() + { + if (iData) + { + delete iData->iTemp; + delete iData; + } + } + +// --------------------------------------------------------------------------- +// Size +// --------------------------------------------------------------------------- +// +EXPORT_C TSize CAlfWindowBuffer::Size() const + { + if (iData) + { + return iData->iSize; + } + return TSize(0,0); + } + +// --------------------------------------------------------------------------- +// Format +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CAlfWindowBuffer::Format() const + { + if (iData) + { + return EColor16MA; + //return iData->iFormat; + } + return 0; + } + +// --------------------------------------------------------------------------- +// Stride +// --------------------------------------------------------------------------- +// +EXPORT_C TUint CAlfWindowBuffer::Stride() const + { + if (iData) + { + return iData->iTemp->DataStride(); + //return iData->iStride; + } + return 0; + } + +// --------------------------------------------------------------------------- +// BufferPtr +// --------------------------------------------------------------------------- +// +EXPORT_C TAny* CAlfWindowBuffer::BufferPtr() const + { + if (iData) + { + return iData->iTemp->DataAddress(); // currently safe... + //return iData->iBufferPtr; + } + return NULL; + } + +// --------------------------------------------------------------------------- +// SetSize +// --------------------------------------------------------------------------- +// +EXPORT_C void CAlfWindowBuffer::SetSize(const TSize& aSize) + { + iData->iSize = aSize; + //RnD + iData->iTemp->Resize(aSize); + } + +// --------------------------------------------------------------------------- +// SetFormat +// --------------------------------------------------------------------------- +// +EXPORT_C void CAlfWindowBuffer::SetFormat(TInt aBufferFormat) + { + iData->iFormat = aBufferFormat; + } + +// --------------------------------------------------------------------------- +// SetStride +// --------------------------------------------------------------------------- +// +EXPORT_C void CAlfWindowBuffer::SetStride(TUint aStrideInBytes) + { + iData->iStride = aStrideInBytes; + } + +// --------------------------------------------------------------------------- +// SetBufferPtr +// --------------------------------------------------------------------------- +// +EXPORT_C void CAlfWindowBuffer::SetBufferPtr(TAny* aPtr) const + { + iData->iBufferPtr = aPtr; + } + +// --------------------------------------------------------------------------- +// constructor +// --------------------------------------------------------------------------- +// +CAlfWindowBuffer::CAlfWindowBuffer() + { + } + +// --------------------------------------------------------------------------- +// ConstructL +// --------------------------------------------------------------------------- +// +void CAlfWindowBuffer::ConstructL(const TSize& aSize, TInt aBufferFormat, TUint aStride, TAny* aPtr) + { + iData = new (ELeave)TAlfWindowBufferData; + memset(iData,0,sizeof(TAlfWindowBufferData)); + iData->iBufferPtr = aPtr; + iData->iFormat = aBufferFormat; + iData->iSize = aSize; + iData->iStride = aStride; + // RnD + iData->iTemp = new (ELeave) CFbsBitmap(); + User::LeaveIfError(iData->iTemp->Create(aSize, EColor16MA)); + } + + +// --------------------------------------------------------------------------- +// ConstructL +// --------------------------------------------------------------------------- +// +CAlfWindowBuffer* CAlfWindowBuffer::CreateCopyL(TBool aCopyContents ) + { + CAlfWindowBuffer* copy = CAlfWindowBuffer::NewL( iData->iSize, + iData->iFormat, + iData->iStride, + iData->iBufferPtr); + + + if (aCopyContents) + { + // Todo: memcopy would be likely faster and this works for bmp only.. + CleanupStack::PushL(copy); + CFbsBitmapDevice* bd = CFbsBitmapDevice::NewL( copy->Bmp() ); + CleanupStack::PushL(bd); + CFbsBitGc * gc = 0; + User::LeaveIfError(bd->CreateContext( gc )); + gc->BitBlt(TPoint(0,0), Bmp()); + delete gc; + CleanupStack::PopAndDestroy(2); + } + + + + return copy; + } + + + +// --------------------------------------------------------------------------- +// Handle +// --------------------------------------------------------------------------- +// +TInt CAlfWindowBuffer::Handle() + { + if (iData && iData->iTemp) + { + return iData->iTemp->Handle(); + } + + return 0; + } + +// --------------------------------------------------------------------------- +// Bmp +// --------------------------------------------------------------------------- +// +CFbsBitmap* CAlfWindowBuffer::Bmp() + { + if (iData && iData->iTemp) + { + return iData->iTemp; + } + + return 0; + }