uiacceltk/hitchcock/coretoolkit/src/HuiSkin.cpp
changeset 0 15bf7259bb7c
child 7 88b23e2e82e1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/coretoolkit/src/HuiSkin.cpp	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,273 @@
+/*
+* Copyright (c) 2006-2007 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:   Implementation of CHuiSkin. CHuiSkin is the abstract base 
+*                class of skins.
+*
+*/
+
+
+
+#include "uiacceltk/HuiSkin.h"  // Class definition
+#include "uiacceltk/HuiEnv.h"
+#include "uiacceltk/HuiStatic.h"
+#include "HuiRenderPlugin.h"
+#include "uiacceltk/HuiTexture.h"
+#include "uiacceltk/HuiGc.h"
+#include "uiacceltk/HuiUtil.h"
+#include "uiacceltk/HuiPanic.h"
+#include "uiacceltk/HuiDisplay.h" 
+
+CHuiSkin::CHuiSkin(CHuiEnv& aEnv)
+        : iEnv(aEnv)
+    {
+    }
+
+
+CHuiSkin::~CHuiSkin()
+    {
+    delete iShadowTexture;
+    delete iLineTexture;
+    delete iGlyphShadowTexture;
+    iGc = NULL;
+    }
+
+
+EXPORT_C THuiSkinOrientation CHuiSkin::Orientation() const
+    {
+    TSize screenSize = HuiUtil::ScreenSize();
+    if(screenSize.iWidth > screenSize.iHeight)
+        {
+        return EHuiSkinOrientationLandscape;
+        }
+    return EHuiSkinOrientationPortrait;
+    }
+
+
+EXPORT_C THuiSkinLocation CHuiSkin::Location(THuiSkinElement /*aElement*/)
+    {
+    // The default skin has no opinion on element locations.
+    return EHuiSkinLocationNone;
+    }
+
+
+EXPORT_C void CHuiSkin::NotifyDisplaySizeChangedL()
+    {
+    for(TInt i=0;i<iEnv.DisplayCount();i++)
+    	{
+    	(iEnv.Display(i)).SetDirty();	
+    	}
+    }
+
+
+EXPORT_C void CHuiSkin::SetContext(CHuiGc& aGc)
+    {
+    iGc = &aGc;
+    }
+
+
+EXPORT_C CHuiGc& CHuiSkin::Context() const
+    {
+    __ASSERT_ALWAYS(iGc != NULL,
+                    THuiPanic::Panic(THuiPanic::ESkinHasNoGraphicsContext));
+    return *iGc;
+    }
+
+EXPORT_C const CHuiTexture& CHuiSkin::TextureL(TInt aSkinTextureId)
+    {
+    return TextureL(aSkinTextureId, EFalse /* don't force prepare */);
+    }
+
+
+const CHuiTexture& CHuiSkin::TextureL(TInt aSkinTextureId, TBool aForcedPrepare)
+    {
+    TBool prepare = aForcedPrepare;
+    
+    switch(aSkinTextureId)
+        {
+        // Default background skin texture implementation only returns blank texture.
+        case EHuiSkinBackgroundTexture:
+            return iEnv.TextureManager().BlankTexture();
+
+        // Return shadow texture. Create if necessary.
+        case EHuiSkinShadowTexture:
+            if(!iShadowTexture)
+                {
+                iShadowTexture = CHuiTexture::NewL();
+                iShadowTexture->iContentObservers.AppendL(*this);
+                prepare = ETrue;
+                }
+            if(prepare)
+                {
+                PrepareShadowTextureL(*iShadowTexture);
+                }
+            return *iShadowTexture;
+
+        // Return glyph shadow texture. Create if necessary.
+        case EHuiSkinGlyphShadowTexture:
+            if(!iGlyphShadowTexture)
+                {
+                iGlyphShadowTexture = CHuiTexture::NewL();
+                iGlyphShadowTexture->iContentObservers.AppendL(*this);
+                prepare = ETrue;
+                }
+            if(prepare)
+                {
+                PrepareGlyphShadowTextureL(*iGlyphShadowTexture);
+                }
+            return *iGlyphShadowTexture;
+
+        // Return line texture. Create if necessary.
+        case EHuiSkinLineTexture:
+            if(!iLineTexture)
+                {
+                iLineTexture = CHuiTexture::NewL();
+                iLineTexture->iContentObservers.AppendL(*this);
+                prepare = ETrue;
+                }
+            if(prepare)
+                {
+                PrepareLineTextureL(*iLineTexture);
+                }
+            return *iLineTexture;
+
+        // Specified skin texture id is not supported.
+        default:
+            HUI_DEBUG1(_L("CHuiSkin::TextureL() - Skin texture id: %i not supported."), aSkinTextureId);
+            User::Leave(KErrNotSupported);
+            break;
+        }
+
+    // Never reached
+    return iEnv.TextureManager().BlankTexture();
+    }
+
+
+EXPORT_C void CHuiSkin::ReleaseTexture(TInt aSkinTextureResource)
+    {   
+    switch(aSkinTextureResource)
+        {
+        case EHuiSkinShadowTexture:
+            delete iShadowTexture;
+            iShadowTexture = NULL;
+            break;
+
+        case EHuiSkinGlyphShadowTexture:
+            delete iGlyphShadowTexture;
+            iGlyphShadowTexture = NULL;
+            break;
+
+        case EHuiSkinLineTexture:
+            delete iLineTexture;
+            iLineTexture = NULL;
+            break;
+
+        default:
+            break;
+        }
+    }
+
+
+EXPORT_C TInt CHuiSkin::GetTexture(TInt aSkinTextureId, const CHuiTexture*& aOutTexture)
+    {
+    // Try to access the texture.
+    TRAPD(err, aOutTexture = &TextureL(aSkinTextureId));
+
+    if(err != KErrNone)
+        {
+        // If texture creation failed set out texture to blank texture
+        aOutTexture = &iEnv.TextureManager().BlankTexture();
+        }
+
+    return err;
+    }
+
+
+void CHuiSkin::PrepareShadowTextureL(CHuiTexture& aTexture)
+    {
+    aTexture.GenerateBlobL(TSize(16, 16));
+    }
+
+
+void CHuiSkin::PrepareGlyphShadowTextureL(CHuiTexture& /*aTexture*/) 
+    {
+    }
+
+
+void CHuiSkin::PrepareLineTextureL(CHuiTexture& aTexture)
+    {
+    const TUint8 lineData[2 * 16 * 4] =
+        {
+          0,   0,   0, 0,          0,   0,   0,  0,
+          0,   0, 128, 0*8/10,       0,   0, 128, 0*8/10,
+          0,   0, 128, 8*8/10,       0,   0, 128, 8*8/10,
+          0,   0, 128, 16*8/10,      0,   0, 128, 16*8/10,
+          0,   0, 128, 32*8/10,      0,   0, 128, 32*8/10,
+         64,  64, 128, 64*8/10,     64,  64, 128, 64*8/10,
+        128, 128, 192, 128,      128, 128, 192, 128,
+        255, 255, 255, 255,      255, 255, 255, 255,
+        255, 255, 255, 255,      255, 255, 255, 255,
+        128, 128, 192, 128,      128, 128, 192, 128,
+         64,  64, 128, 64*8/10,     64,  64, 128, 64*8/10,
+          0,   0, 128, 32*8/10,      0,   0, 128, 32*8/10,
+          0,   0, 128, 16*8/10,      0,   0, 128, 16*8/10,
+          0,   0, 128, 8*8/10,       0,   0, 128,  8*8/10,
+          0,   0, 128, 0*8/10,       0,   0, 128,  0*8/10,
+          0,   0,   0, 0,          0,   0,   0,  0
+
+        };
+
+    aTexture.UploadL(EHuiTextureFormatRgba8888, TSize(2, 16), lineData);
+    }
+
+
+EXPORT_C void CHuiSkin::TextureContentUploaded(CHuiTexture& /*aTexture*/)
+    {
+    HUI_DEBUG(_L("CHuiSkin::TextureContentUploaded() - Called."));
+    }
+    
+
+EXPORT_C void CHuiSkin::TextureContentReleased(CHuiTexture& /*aTexture*/)
+    {
+    HUI_DEBUG(_L("CHuiSkin::TextureContentReleased() - Called."));
+    }
+
+
+EXPORT_C void CHuiSkin::RestoreTextureContentL(CHuiTexture& aTexture)
+    {
+    HUI_DEBUG(_L("CHuiSkin::RestoreTextureContentL() - Called."));
+      
+    // Restore the textures that existed prior to release.
+    if(&aTexture == iShadowTexture)
+        {
+        TextureL(EHuiSkinShadowTexture, ETrue);
+        }
+    else if(&aTexture == iGlyphShadowTexture)
+        {
+        TextureL(EHuiSkinGlyphShadowTexture, ETrue);
+        }
+    else if(&aTexture == iLineTexture)
+        {
+        TextureL(EHuiSkinLineTexture, ETrue);
+        }
+    else
+        {
+        // for PC lint
+        }
+    }
+
+void CHuiSkin::SkinExtension(const TUid& /*aExtensionUid*/, TAny** /*aExtensionParameters*/)
+    {
+    
+    }
+