skins/AknSkins/rlplugininc/AknsRlEffectUtil.h
changeset 0 05e9090e2422
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/AknSkins/rlplugininc/AknsRlEffectUtil.h	Thu Dec 17 09:14:12 2009 +0200
@@ -0,0 +1,170 @@
+/*
+* Copyright (c) 2004-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:  Utility class for effects.
+*
+*/
+
+
+#ifndef AKNSRLEFFECTUTIL_H
+#define AKNSRLEFFECTUTIL_H
+
+// CONSTANTS
+const TUint32 KAknsRlMaskA8888 = 0xFF000000;
+const TUint32 KAknsRlMaskR8888 = 0x00FF0000;
+const TUint32 KAknsRlMaskG8888 = 0x0000FF00;
+const TUint32 KAknsRlMaskB8888 = 0x000000FF;
+
+const TUint16 KAknsRlMaskA565 = 0x0000;
+const TUint16 KAknsRlMaskR565 = 0xF800;
+const TUint16 KAknsRlMaskG565 = 0x07E0;
+const TUint16 KAknsRlMaskB565 = 0x001F;
+
+/**
+* Porter-Duff alpha blend modes (modes None, A, B dropped because they
+* are pointless).
+*/
+enum TAknsRlAlphaBlendMode
+    {
+    EAknsRlAlphaBlendAOverB = 0,
+    EAknsRlAlphaBlendBOverA = 1,
+    EAknsRlAlphaBlendAInB   = 2,
+    EAknsRlAlphaBlendBInA   = 3,
+    EAknsRlAlphaBlendAOutB  = 4,
+    EAknsRlAlphaBlendBOutA  = 5,
+    EAknsRlAlphaBlendAAtopB = 6,
+    EAknsRlAlphaBlendBAtopA = 7,
+    EAknsRlAlphaBlendAXorB  = 8
+    };
+
+/**
+* Channel blend modes.
+*/
+enum TAknsRlChannelBlendMode
+    {
+    EAknsRlChannelBlendNormal       = 0,
+    EAknsRlChannelBlendDarken       = 1,
+    EAknsRlChannelBlendLighten      = 2,
+    EAknsRlChannelBlendMultiply     = 3,
+    EAknsRlChannelBlendScreen       = 4,
+    EAknsRlChannelBlendOverlay      = 5,
+    EAknsRlChannelBlendHardLight    = 6,
+    EAknsRlChannelBlendSoftLight    = 7,
+    EAknsRlChannelBlendDifference   = 8,
+    EAknsRlChannelBlendDodge        = 9,
+    EAknsRlChannelBlendBurn         = 10
+    };
+
+// CLASS DECLARATION(S)
+
+//----------------------------------------------------------------------------
+/**
+* A dummy template for accessing rgb color channels.
+*/
+template <class T, TInt x, TInt r, TInt g, TInt b>
+class AknsRlRgb
+    {
+    protected:
+        inline AknsRlRgb() {} // Trivial, inlined here
+    };
+
+//----------------------------------------------------------------------------
+/**
+* Explicit specialization for 32-bit XRGB (8888) color
+*/
+template <>
+class AknsRlRgb<TUint32, 8,8,8,8>
+    {
+    public:
+    static inline TUint8 R8( const TUint32 aVal );
+    static inline TUint8 G8( const TUint32 aVal );
+    static inline TUint8 B8( const TUint32 aVal );
+    static inline void SetRgb8( TUint32* aIn, const TUint8 aR,
+                                const TUint8 aG, const TUint8 aB );
+    static inline void SetRgb8LessG( TUint32* aIn, const TUint aR,
+                                     const TUint aG, const TUint aB );
+    };
+
+//----------------------------------------------------------------------------
+/**
+* Explicit specialization for 16-bit RGB (565) color
+*/
+template <>
+class AknsRlRgb<TUint16, 0,5,6,5>
+    {
+    public:
+    static inline TUint8 R8( const TUint16 aVal );
+    static inline TUint8 G8( const TUint16 aVal );
+    static inline TUint8 B8( const TUint16 aVal );
+    static inline void SetRgb8( TUint16* aIn, const TUint8 aR,
+                                const TUint8 aG, const TUint8 aB );
+    static inline void SetRgb8LessG( TUint16* aIn, const TUint aR,
+                                     const TUint aG, const TUint aB );
+    };
+
+//----------------------------------------------------------------------------
+/**
+* Collection of shared utilities.
+*/
+class AknsRlUtil
+    {
+    public:
+        /**
+        * Grayscales the provided color.
+        * @param aR Red value, in range [0, 255]
+        * @param aG Green value, in range [0, 255]
+        * @param aB Blue value, in range [0, 255]
+        * @return The grayscale shade
+        */
+        static inline TUint8 Grayscale( const TUint8 aR,
+                                        const TUint8 aG,
+                                        const TUint8 aB );
+
+        /**
+        * @return maximum of (aA, aB)
+        */
+        static inline TInt Max( TInt aA, TInt aB );
+
+        /**
+        * @return minimum of (aA, aB)
+        */
+        static inline TInt Min( TInt aA, TInt aB);
+
+        /**
+        * Searches the median value of the provided array. Optimal median
+        * search medhod used, see reference:
+        * Nicolas Devillard: Fast Median Search: an ANSI C implementation,
+        * July 1998
+        */
+        static TUint8 Median9( TUint8 aArray[9] );
+    };
+
+//----------------------------------------------------------------------------
+/**
+* Channel blending implementation.
+*/
+class AknsRlChannelBlend
+    {
+    public:
+
+    static TUint8 Blend( const TAknsRlChannelBlendMode aMode,
+                         const TInt aFactor,
+                         const TUint8 aA,
+                         const TUint8 aB );
+    };
+
+// INLINED MEMBERS
+#include "AknsRlEffectUtil.inl"
+
+#endif // AKNSRLEFFECTUTIL_H
+