diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/activepalette/Inc/ActivePalette2Styler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/activepalette/Inc/ActivePalette2Styler.h Wed Sep 01 12:30:54 2010 +0100 @@ -0,0 +1,366 @@ +/* +* Copyright (c) 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: Active Palette Styler* +*/ + + +/** + * @file ActivePalette2Styler.h + * Active Palette Styler + */ + +#ifndef _ACTIVE_PALETTE_2_STYLER_H +#define _ACTIVE_PALETTE_2_STYLER_H + +#include +#include + +// Forward declarations +class CFbsBitmap; +class CFbsBitmapDevice; +class CFbsBitGc; +class CBitmapContext; +class CFont; + +/** + * Used to apply different rendering styles to the 2D Active Palette. + * Can not be directly instantiated: used as a base for further sub-classing + */ +class CActivePalette2Styler : public CBase + { + public: + + /** + * Draw the entire background for the item, and the supplied item on top + * @param aScreenPos The screen index of the item + * @param aIcon The item's icon + * @param aMask The item's mask + * @param aOffsetFrame The offset frame, in case of item-scrolling + * @param aOffsetTotal Total number of offset frames, in case of item-scrolling + */ + virtual void DrawItem(TInt aScreenPos, CFbsBitmap* aIcon, CFbsBitmap* aMask, TInt aOffsetFrame, TInt aOffsetTotal) = 0; + + /** + * Draw the between-item gap following the item at aScreenPos + * @param aScreenPos The screen index of the item + * @param aOffsetFrame The offset frame, in case of item-scrolling + * @param aOffsetTotal Total number of offset frames, in case of item-scrolling + */ + virtual void DrawGap(TInt aScreenPos, TInt aOffsetFrame, TInt aOffsetTotal) = 0; + + /** + * Update only the area covered by the item graphic with an animation frame + * @param aScreenPos The screen index of the item + * @param aIcon The item's icon + * @param aMask The item's mask + */ + virtual void AnimItem(TInt aScreenPos, CFbsBitmap* aIcon, CFbsBitmap* aMask) = 0; + + /** + * Draws the top section of the AP, with optional arrow + * @param aShowArrow Whether to display the scroll indicator + */ + virtual void DrawTopScrollArrowSection(TBool aShowArrow) = 0; + + /** + * Draws the bottom section of the AP, with optional arrow + * @param aShowArrow Whether to display the scroll indicator + */ + virtual void DrawBottomScrollArrowSection(TBool aShowArrow) = 0; + + /** + * Draw the focus ring + * @param aScreenPos The screen index of the item + * @param aOffsetFrame The offset frame, in case of focus-moving + * @param aOffsetTotal Total number of offset frames, in case of focus-moving + */ + void DrawFocusRing(TInt aScreenPos, TInt aOffsetFrame, TInt aOffsetTotal); + + /** + * Render a new tooltip to the buffer + * @param aText The tooltip text + * @return The total width of the tooltip, in pixels + */ + virtual TInt DrawTooltip(TDesC* aText); + + /** + * Sets the number of items shown on-screen + * @param aItems The new number of items + */ + void SetNumberOfItemsL(TInt aItems); + + /** + * The current size of the entire active palette + * @return Size of the active palette, in pixels + */ + TSize Size() const; + + /** + * Give the current "dirty" rect, i.e. the minimal rectangle that contains all updated regions + * since previous ClearDirtyRect + * @return Dirty rect + * @see ClearDirtyRect() + */ + TRect DirtyRect(); + + /** + * Resets the dirty rect + * @see DirtyRect() + */ + void ClearDirtyRect(); + + /** + * Blits the current AP buffer to the supplied context + * @param aGc The context to blit to + * @param aPos Where to blit to (the top-left corner of the AP) + * @param aClippingRect The portion of the AP to blit + */ + void BlitPalette(CBitmapContext* aGc, TPoint aPos, TRect aClippingRect) const; + + /** + * Blits the current tooltip buffer to the supplied context + * @param aGc The context to blit to + * @param aPos Where to blit to (the top-left corner of the tooltip) + * @param aClippingRect The portion of the tooltip to blit + */ + virtual void BlitTooltip(CBitmapContext* aGc, const TPoint& aPos, TRect aClippingRect); + + /** + * Blits the current tooltip to the supplied context. + * Phase of the tooltip is given and also the total number of phases. + * The effect of these depends on the styler, but e.g. the phase could + * determine the degree of visibility for the tooltip. + * @param aGc The context to blit to + * @param aPos Where to blit to (the top-left corner of the tooltip) + * @param aCurrentPhase The phase of the tooltip. + * @param aTotalPhases The amount of tooltip phases in total. + */ + virtual void BlitTooltip( CBitmapContext* aGc, const TPoint& aPos, TInt aCurrentPhase, TInt aTotalPhases ); + + /** + * Where the tooltip should appear, relative to the position of the AP + * @param aScreenPos The on-screen index of the item the tooltip is for + * @return The Y-offset of the tooltip + */ + TInt TootipYOffset(TInt aScreenPos); + + /** + * The total size of the rendered tooltip + * @return The total size of the rendered tooltip + */ + TSize TooltipSize(); + + /** + * Destructor + */ + ~CActivePalette2Styler(); + + protected: + + /** + * Constructor + */ + CActivePalette2Styler(); + + /** + * Second-phase leaving constructor + */ + virtual void ConstructL(); + + /** + * Add a rectangle to the current dirty rectangle + * @param aNewRect The rect to add + */ + void AddToDirtyRect(TRect aNewRect); + + /** + * General-purpose graphic-blitting method + * @param aPos Where to blit to + * @param aGraphicGc The context for the foreground + * @param aMaskGc The context for the mask + * @param aGraphic The image to blit + * @param aGraphicMask The mask for the image + * @param aMaskGraphic Whether to mask the image when blitting to aGraphicGc. + * @param aMaskMask Whether to mask the mask when blitting to aMaskGc. Mask is applied to itself. + */ + void BlitGraphic(TPoint aPos, CBitmapContext* aGraphicGc, CBitmapContext* aMaskGc, CFbsBitmap* aGraphic, CFbsBitmap* aGraphicMask, TBool aMaskGraphic, TBool aMaskMask); + + /** + * Blits a graphic to the centre of a given area + * @param aArea The area to blit inside + * @param aGraphicGc The context for the foreground + * @param aMaskGc The context for the mask + * @param aGraphic The image to blit + * @param aGraphicMask The mask for the image + * @param aMaskGraphic Whether to mask the image when blitting to aGraphicGc. + * @param aMaskMask Whether to mask the mask when blitting to aMaskGc. Mask is applied to itself. + */ + void CentreGraphic(TRect aArea, CBitmapContext* aGraphicGc, CBitmapContext* aMaskGc, CFbsBitmap* aGraphic, CFbsBitmap* aGraphicMask, TBool aMaskGraphic, TBool aMaskMask); + + /** + * The mask to use for the tooltip nose + * @return The mask to use for the tooltip nose + */ + virtual TInt TooltipNoseMaskId(); + + /** + * The mask to use for the tooltip body + * @return The mask to use for the tooltip body + */ + virtual TInt TooltipBodyMaskId(); + + /** + * The rectangle of the top section, relative to the top-left of the AP + * @return The top section area + */ + inline TRect TopSectionRect(); + + /** + * The rectangle of the bottom section, relative to the top-left of the AP + * @return The bottom section area + */ + inline TRect BottomSectionRect(); + + /** + * The rectangle of the given item number, relative to the top-left of the AP + * @param aScreenPos The screen index of the item + * @param aOffsetFrame The offset frame, in case of item-scrolling + * @param aOffsetTotal Total number of offset frames, in case of item-scrolling + * @return The item area + */ + inline TRect ItemRect(TInt aScreenPos, TInt aOffsetFrame = 0, TInt aOffsetTotal = 1); + + /** + * The rectangle of the gap following the given item number, relative to the top-left of the AP + * @param aScreenPos The screen index of the item + * @param aOffsetFrame The offset frame, in case of item-scrolling + * @param aOffsetTotal Total number of offset frames, in case of item-scrolling + * @return The gap area + */ + inline TRect GapRect(TInt aScreenPos, TInt aOffsetFrame = 0, TInt aOffsetTotal = 1); + + /** + * Allocate the tooltip draw buffers + */ + virtual void AllocateTooltipBufL(void); + + /** + * Release the tooltip draw buffers + */ + virtual void ReleaseTooltipBuf(void); + + private: + + /** + * Renders the complete tooltip + * @param aText The tooltip text + */ + void RenderTooltip(TDesC* aText); + + /** + * Allocate all the AP draw buffers + */ + void AllocateDrawBufL(void); + + /** + * Release the AP draw buffers + */ + void ReleaseDrawBuf(void); + + protected: + + /// The draw buffer bitmap. Owned + CFbsBitmap* iDrawBufBitmap; + /// The draw buffer device. Owned + CFbsBitmapDevice* iDrawBufDevice; + /// The draw buffer context. Owned + CBitmapContext* iDrawBufContext; + + /// The draw buffer mask bitmap. Owned + CFbsBitmap* iDrawBufMaskBitmap; + /// The draw buffer mask device. Owned + CFbsBitmapDevice* iDrawBufMaskDevice; + /// The draw buffer mask context. Owned + CBitmapContext* iDrawBufMaskContext; + + /// Tooltip buffer bitmap. Owned + CFbsBitmap* iTooltipBufBitmap; + /// Tooltip buffer device. Owned + CFbsBitmapDevice* iTooltipBufDevice; + /// Tooltip buffer context. Owned + CBitmapContext* iTooltipBufContext; + + /// Tooltip mask buffer bitmap. Owned + CFbsBitmap* iTooltipBufMaskBitmap; + /// Tooltip mask buffer device. Owned + CFbsBitmapDevice* iTooltipBufMaskDevice; + /// Tooltip mask buffer context. Owned + CBitmapContext* iTooltipBufMaskContext; + + /// Number of items on-screen + TInt iNumItems; + /// Number of gaps inbetweeen the items + TInt iNumGaps; + + /// Current dirty rectangle + TRect iDirtyRect; + /// Whether the dirty rect has yet been written to + TBool iDirtyRectExists; + + /// The font used for the tooltip text. Not owned. + const CFont* iFont; + + /// The width of the tooltip text alone + TInt iTextWidth; + + /// The up-arrow bitmap. Owned + CFbsBitmap* iScrollUpIcon; + /// The up-arrow bitmap mask. Owned + CFbsBitmap* iScrollUpIconMask; + + /// The down-arrow bitmap. Owned + CFbsBitmap* iScrollDownIcon; + /// The down-arrow bitmap mask. Owned + CFbsBitmap* iScrollDownIconMask; + + /// The focus-ring bitmap. Owned + CFbsBitmap* iFocusRing; + /// The focus-ring bitmap mask. Owned + CFbsBitmap* iFocusRingMask; + + /// The tooltip-nose bitmap. Owned + CFbsBitmap* iTooltipNose; + /// The tooltip-nose bitmap mask. Owned + CFbsBitmap* iTooltipNoseMask; + /// The tooltip-body bitmap. Owned + CFbsBitmap* iTooltipBody; + /// The tooltip-body bitmap mask. Owned + CFbsBitmap* iTooltipBodyMask; + + /// The top-section bitmap. Owned + CFbsBitmap* iAPTopSection; + /// The item background bitmap. Owned + CFbsBitmap* iAPItem; + /// The gap bitmap. Owned + CFbsBitmap* iAPGap; + /// The bottom-section bitmap. Owned + CFbsBitmap* iAPBottomSection; + + /// The current rectangle that encompasses only the items + TRect iItemsRect; + }; + +#include "ActivePalette2Styler.inl" + +#endif // #ifdef _ACTIVE_PALETTE_2_STYLER_H