uiacceltk/hitchcock/ServerCore/Src/alfwindowbuffer.cpp
changeset 0 15bf7259bb7c
--- /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 <fbs.h>
+#include <bitdev.h>
+#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;
+    }