diff -r 000000000000 -r 05e9090e2422 skins/AknSkins/rlplugininc/AknsRlEffectPluginMovingLayers.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/skins/AknSkins/rlplugininc/AknsRlEffectPluginMovingLayers.h Thu Dec 17 09:14:12 2009 +0200 @@ -0,0 +1,146 @@ +/* +* 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: Provides moving layer(s) functionality. +* +*/ + + +#ifndef AKNSRLEFFECTPLUGINMOVINGLAYERS_H +#define AKNSRLEFFECTPLUGINMOVINGLAYERS_H + +// INCLUDES +#include "AknsRlEffectPlugin.h" +#include + +// CONSTANTS + +// Effect plugin UID +const TInt KAknsRlEffectPluginMovingLayersUID = 0x1020762D; + +// Constants for parameter names +_LIT( KAknsRlEffectMovingLayersAX, "ax" ); +_LIT( KAknsRlEffectMovingLayersAY, "ay" ); +_LIT( KAknsRlEffectMovingLayersBX, "bx" ); +_LIT( KAknsRlEffectMovingLayersBY, "by" ); + +_LIT( KAknsRlEffectMovingLayersAXY, "axy" ); +_LIT( KAknsRlEffectMovingLayersBXY, "bxy" ); + +// CLASS DECLARATION + +/** +* Moving layers can use two input layers. Input layer A is used as a +* background. Input layer B is blended on A using input mask B. Input mask A is +* ignored. The origin of both input layers can be moved (results in tiling, +* seamless layer textures recommended). +* +* It is also possible to use input layer A only. +* +* @since 3.0 +*/ +class CAknsRlEffectPluginMovingLayers: + public CAknsRlEffectPlugin, + public MAknsRlEffect + { + public: // Constructors and destructor + + /** + * Default constructor. + * + * @since 3.0 + */ + CAknsRlEffectPluginMovingLayers(); + + /** + * Destructor. + * + * @since 3.0 + */ + virtual ~CAknsRlEffectPluginMovingLayers(); + + public: // Implementation of CAknsEffectPlugin + + TUid EffectUid() const; + MAknsRlEffect* Effect( const TInt aInterface ); + + public: // Implementation of MAknsRlEffect + + void InitializeL(); + void Release(); + + void ActivateL( MAknsRlEffectContext* aContext ); + void Deactivate(); + + /** + * Accepted named parameters: + * + * - "ax", integer, coordinate x of A's origin + * - "ay", integer, coordinate y of A's origin + * - "bx", integer, coordinate x of B's origin + * - "by", integer, coordinate y of B's origin + * + * Coordinate (ax, ay) defines the origin of input layer A on output. + * Coordinate (bx, by) defines the origin of input layer B on output. + * Coordinates are in pixels and allowed range is [MIN_INT, MAX_INT]. + * + * Alternatively you can use the next parameters: + * - "axy", descriptor, point (x, y) of A's origin + * - "bxy", descriptor, point (x, y) of B's origin + * + * Descriptor size must be at least 2, extra elements are ignored. First + * element is coordinate x, second element is coordinate y. Coordinates + * are in pixels and allowed range is full 16-bit ingeter. + */ + void SetParametersL( MAknsRlParameterIterator& aParameters ); + + /** + * Supported modes: + * - EColor64K -> EColor64K + * - EColor16MU -> EColor16MU + * - EGray256 -> EGray256 + * + * Masks are optional, mask A is always ignored. Target layer A is + * required. Target layer B is optional. Output layer mask is optional, + * cleared to white if exists. + */ + void GetCapabilities( TAknsRlEffectCaps& aCaps ); + + TInt Render( const TAknsRlRenderOpParam& aParam ); + + private: + TInt CreateTempBitmap( const CFbsBitmap& aBitmap ); + void DeleteTempBitmap(); + + private: + + MAknsRlEffectContext* iContext; + + TInt iAx; + TInt iAy; + TInt iBx; + TInt iBy; + + /** + * Temporary bitmap for cases where the target layer is the input layer + * -> input layer must be stored to a temporary bitmap. + */ + CFbsBitmap* iTempBitmap; + CFbsBitmapDevice* iTempDevice; + CFbsBitGc* iTempContext; + }; + +#endif // AKNSRLEFFECTPLUGINMOVINGLAYERS_H + +// End of File +