camerauis/activepalette/Inc/ActivePalette2Styler.h
branchRCL_3
changeset 24 bac7acad7cb3
parent 0 1ddebce53859
--- /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