--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10TextureManager.cpp Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,176 @@
+/*
+* Copyright (c) 2006-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 "HuiVg10TextureManager.h" // Class definition
+#include "HuiVg10TextureProcessor.h"
+
+
+CHuiVg10TextureManager* CHuiVg10TextureManager::NewL(CHuiEnv& aEnv)
+ {
+ CHuiVg10TextureManager* self = CHuiVg10TextureManager::NewLC(aEnv);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+CHuiVg10TextureManager* CHuiVg10TextureManager::NewLC(CHuiEnv& aEnv)
+ {
+ CHuiVg10TextureManager* self = new (ELeave) CHuiVg10TextureManager(aEnv);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+
+CHuiVg10TextureManager::CHuiVg10TextureManager(CHuiEnv& aEnv)
+ : CHuiTextureManager(aEnv)
+ {
+ }
+
+
+void CHuiVg10TextureManager::ConstructL()
+ {
+ CHuiTextureManager::BaseConstructL();
+
+ // Create a texture processor.
+ CHuiVg10TextureProcessor* proc = CHuiVg10TextureProcessor::NewL(Env());
+ SetProcessor(proc); // ownership to base class
+
+ iBitmap16MA = new (ELeave) CFbsBitmap;
+ iBitmap16MA->Create(TSize(1,1), EColor16MA);
+ iBitmap16MU = new (ELeave) CFbsBitmap;
+ iBitmap16MU->Create(TSize(1,1), EColor16MU);
+ iBitmap64K = new (ELeave) CFbsBitmap;
+ iBitmap64K->Create(TSize(1,1), EColor64K);
+ iBitmap256Gray = new (ELeave) CFbsBitmap;
+ iBitmap256Gray->Create(TSize(1,1), EGray256);
+
+ iBitmapDevice16MA = CFbsBitmapDevice::NewL(iBitmap16MA);
+ iBitmapDevice16MU = CFbsBitmapDevice::NewL(iBitmap16MU);
+ iBitmapDevice64K = CFbsBitmapDevice::NewL(iBitmap64K);
+ iBitmapDevice256Gray = CFbsBitmapDevice::NewL(iBitmap256Gray);
+ }
+
+
+CHuiVg10TextureManager::~CHuiVg10TextureManager()
+ {
+ delete iBitmap16MA;
+ delete iBitmap16MU;
+ delete iBitmap64K;
+ delete iBitmap256Gray;
+ delete iBitmapDevice16MA;
+ delete iBitmapDevice16MU;
+ delete iBitmapDevice64K;
+ delete iBitmapDevice256Gray;
+ delete iBitGc16MA;
+ delete iBitGc16MU;
+ delete iBitGc64K;
+ delete iBitGc256Gray;
+ }
+
+CFbsBitmap& CHuiVg10TextureManager::ConvertBitmapL(const CFbsBitmap& aBitmap, TDisplayMode aDisplayMode, TBitmapCopyMode aCopyMode, TSize aNewSize)
+ {
+ TSize newSize = aBitmap.SizeInPixels();
+ if (aNewSize != TSize(0,0))
+ {
+ newSize = aNewSize;
+ }
+
+ // Select the correct Colormode bitmap & device
+ CFbsBitmap* bitmap = NULL;
+ CFbsBitmapDevice* bitmapDevice = NULL;
+ CFbsBitGc* bitGc = NULL;
+ // This is needed for storing the possibly recreated bitGc to a member variable
+ CFbsBitGc** bitGcMemberPtr = NULL;
+ switch(aDisplayMode)
+ {
+ case EColor16MA:
+ bitmap = iBitmap16MA;
+ bitmapDevice = iBitmapDevice16MA;
+ bitGc = iBitGc16MA;
+ bitGcMemberPtr = &iBitGc16MA;
+ break;
+ case EColor16MU:
+ bitmap = iBitmap16MU;
+ bitmapDevice = iBitmapDevice16MU;
+ bitGc = iBitGc16MU;
+ bitGcMemberPtr = &iBitGc16MU;
+ break;
+ case EColor64K:
+ bitmap = iBitmap64K;
+ bitmapDevice = iBitmapDevice64K;
+ bitGc = iBitGc64K;
+ bitGcMemberPtr = &iBitGc64K;
+ break;
+ case EGray256:
+ bitmap = iBitmap256Gray;
+ bitmapDevice = iBitmapDevice256Gray;
+ bitGc = iBitGc256Gray;
+ bitGcMemberPtr = &iBitGc256Gray;
+ break;
+ default:
+ // Not supported! Implement more cases if needed, otherwise this'll leave
+ User::Leave(KErrNotSupported);
+ break;
+ }
+
+ // No conversion required?
+ if ( aCopyMode == EAllowDuplication && aBitmap.DisplayMode() == aDisplayMode &&
+ !aBitmap.IsCompressedInRAM() && newSize == aBitmap.SizeInPixels() )
+ {
+ // If the bitmap's color mode was already correct & sizes matched,
+ // and bmp isn't rombitmap, no conversion was required and we can return
+ // the same bitmap that was given as a parameter
+ CFbsBitmap& bmp = const_cast<CFbsBitmap&>(aBitmap);
+ return bmp;
+ }
+
+ // If needed, Resize the bitmap & bitmapDevice to correct dimensions,
+ // instead of recreating them always
+ if (newSize != bitmap->SizeInPixels() || !bitGc)
+ {
+ // Try to resize the bitmap & bmpDevice, leave, if e.g. out of memory
+ User::LeaveIfError(bitmap->Resize(newSize));
+
+ delete bitGc;
+ bitGc = 0;
+ *bitGcMemberPtr = 0;
+
+ User::LeaveIfError(bitmapDevice->Resize(newSize));
+
+ // The BitGc has to be created every time separately
+ User::LeaveIfError(bitmapDevice->CreateContext(bitGc));
+ // Store the newly created context to a correct member variable
+ *bitGcMemberPtr = bitGc;
+ }
+
+ if (aDisplayMode == EColor16MA && bitGc)
+ {
+ bitGc->SetDrawMode(CGraphicsContext::EDrawModeWriteAlpha);
+ }
+
+ if (bitGc)
+ {
+ bitGc->BitBlt(TPoint(0, 0), &aBitmap);
+ }
+ return *bitmap;
+ }
+
+// End of file
+