--- /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 <e32std.h>
+#include <e32base.h>
+
+// 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