uiresources_pub/skins_api/inc/AknsDrawUtils.h
changeset 0 05e9090e2422
equal deleted inserted replaced
-1:000000000000 0:05e9090e2422
       
     1 /*
       
     2 * Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Defines a public static class AknsDrawUtils and related 
       
    15 *                constants.
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 #ifndef AKNSDRAWUTILS_H
       
    21 #define AKNSDRAWUTILS_H
       
    22 
       
    23 // INCLUDES
       
    24 #include <AknsUtils.h>
       
    25 
       
    26 // CONSTANTS
       
    27 
       
    28 /**
       
    29 * Default value for drawing parameters.
       
    30 *
       
    31 * @since 2.0
       
    32 */
       
    33 static const TInt KAknsDrawParamDefault                 = 0x0;
       
    34 
       
    35 /**
       
    36 * Drawing parameter that limits processing of layout levels to the first one.
       
    37 * This can be used to temporarily disable secondary layout levels.
       
    38 *
       
    39 * @since 2.0
       
    40 */
       
    41 static const TInt KAknsDrawParamLimitToFirstLevel       = 0x1;
       
    42 
       
    43 /**
       
    44 * Drawing parameter that suspends clearing under images. Only the first
       
    45 * layout level is affected.
       
    46 *
       
    47 * @since 2.0
       
    48 */
       
    49 static const TInt KAknsDrawParamNoClearUnderImage       = 0x2;
       
    50 
       
    51 /**
       
    52 * Drawing parameter that causes the layouts and bitmaps to be prepared,
       
    53 * but no actual drawing takes place.
       
    54 *
       
    55 * @since 2.8
       
    56 */
       
    57 static const TInt KAknsDrawParamPrepareOnly             = 0x04;
       
    58 
       
    59 /**
       
    60 * Drawing parameter that draws only the RGB channel of data.
       
    61 *
       
    62 * @since 3.0
       
    63 */
       
    64 static const TInt KAknsDrawParamRGBOnly                 = 0x8;
       
    65 
       
    66 /**
       
    67 * Drawing parameter that draws only the alpha channel of data. If the data
       
    68 * is unmasked, the result is undefined.
       
    69 *
       
    70 * @since 3.0
       
    71 */
       
    72 static const TInt KAknsSDMAlphaOnly                     = 0x10;
       
    73 /**
       
    74 * Drawing parameter that allows empty SCALABLEITEMS to use
       
    75 * the parent bitmap directly
       
    76 *
       
    77 * @since 3.0
       
    78 */
       
    79 static const TInt KAknsDrawParamChained                     = 0x20;
       
    80 
       
    81 /**
       
    82 * Forces drawing the bottom level in chain to use RGBOnly. Bottom level is the
       
    83 * first drawn level, visually the bottom most level.
       
    84 *
       
    85 * @since 3.0
       
    86 */
       
    87 static const TInt KAknsDrawParamBottomLevelRGBOnly            = 0x40;
       
    88 
       
    89 /**
       
    90 * Ignores layer mask when drawing layers.
       
    91 *
       
    92 * @since 3.2
       
    93 */
       
    94 
       
    95 static const TInt KAknsDrawParamIgnoreLayerMask               = 0x80;
       
    96 
       
    97 /**
       
    98 * Direction, from where notes and queries slide to the screen.
       
    99 *
       
   100 * @since 3.1
       
   101 */
       
   102 enum TSlidingMode
       
   103     {
       
   104     /** Sliding is disabled either by skin or compile time */
       
   105     ESlidingDisabled = 0,
       
   106 
       
   107     /** Slide from the CBA side */
       
   108     ESlidingFromCBA,
       
   109 
       
   110     /** Slide from left */
       
   111     ESlidingFromLeft,
       
   112 
       
   113     /** Slide from topleft */
       
   114     ESlidingFromTopLeft, 
       
   115 
       
   116     /** Slide from top */
       
   117     ESlidingFromTop,
       
   118 
       
   119     /** Slide from topright */
       
   120     ESlidingFromTopRight, 
       
   121 
       
   122     /** Slide from right */
       
   123     ESlidingFromRight, 
       
   124 
       
   125     /** Slide from bottomright */
       
   126     ESlidingFromBottomRight, 
       
   127 
       
   128     /** Slide from bottom */
       
   129     ESlidingFromBottom, 
       
   130 
       
   131     /** Slide from bottomleft */
       
   132     ESlidingFromBottomLeft,
       
   133 
       
   134     /** Slide from random direction (any of the 8 directions) */
       
   135     ESlidingFromRandom
       
   136     };
       
   137 
       
   138 
       
   139 // FORWARD DECLARATIONS
       
   140 class MAknsSkinInstance;
       
   141 class MAknsControlContext;
       
   142 class CWindowGc;
       
   143 class CFbsBitGc;
       
   144 class CCoeControl;
       
   145 
       
   146 // CLASS DECLARATION
       
   147 
       
   148 /**
       
   149 * Static utility class to support Avkon Skins drawing operations.
       
   150 * AknsDrawUtils provides utility methods to perform skin-aware drawing
       
   151 * operations, such as background drawing.
       
   152 *
       
   153 * This is a public static class with exported functions.
       
   154 * The class is not intended for derivation outside the library.
       
   155 *
       
   156 * @lib AknSkins.lib
       
   157 *
       
   158 * @since 2.0
       
   159 */
       
   160 class AknsDrawUtils
       
   161     {
       
   162     public: // New functions        
       
   163 
       
   164         /**
       
   165         * Returns pointer to the current control context.
       
   166         * If aMop parameter is specified retrieves the nearest control context
       
   167         * in control hierarchy. If none is found (or @c NULL parameter was
       
   168         * given) returns @c NULL.
       
   169         *
       
   170         * @since 2.0
       
   171         *
       
   172         * @param aMop Object provider to be used to find the control context
       
   173         *   or @c NULL.
       
   174         *
       
   175         * @return Pointer to the nearest control context or @c NULL if none 
       
   176         *   was found.
       
   177         */
       
   178         IMPORT_C static MAknsControlContext* ControlContext( 
       
   179             const MObjectProvider* aMop );
       
   180 
       
   181         /**
       
   182         * Returns pointer to the control context of the parent of the given
       
   183         * control. The context possibly supplied by the control itself is ignored.
       
   184         *
       
   185         * @since 2.6
       
   186         *
       
   187         * @param aControl Pointer to CCoeControl or @c NULL.
       
   188         *
       
   189         * @return Pointer to the nearest control context of the parent control
       
   190         *   or @c NULL if none was found.
       
   191         */
       
   192         IMPORT_C static MAknsControlContext* ControlContextOfParent( 
       
   193             const CCoeControl* aControl );
       
   194 
       
   195         /**
       
   196         * Draws background with assumed origin.
       
   197         * Draws bacground to the specified rectangle. Origin is assumed
       
   198         * to be (0,0). This overload can not be used with parent absolute 
       
   199         * layouts.
       
   200         *
       
   201         * See @c DrawBackground for details on chained layouts.
       
   202         *
       
   203         * @since 2.0
       
   204         *
       
   205         * @param aInstance Pointer to skin instance as obtained from
       
   206         *   AknsUtils::SkinInstance(). If @c NULL rectangle is cleared
       
   207         *   without bitmap.
       
   208         *
       
   209         * @param aContext Control context to obtain context specific 
       
   210         *   information about background drawing. If @c NULL and skin
       
   211         *   instance was given, default parameters are used.
       
   212         *
       
   213         * @param aGc Graphics context to be used for drawing.
       
   214         *
       
   215         * @param aRect Rectangle to be drawn.
       
   216         *
       
   217         * @return ETrue if background was drawn with a bitmap, EFalse
       
   218         *   otherwise.
       
   219         */
       
   220         IMPORT_C static TBool Background( MAknsSkinInstance* aInstance,
       
   221             MAknsControlContext* aContext, CWindowGc& aGc, const TRect& aRect );
       
   222 
       
   223         /**
       
   224         * Draws background with proper origin.
       
   225         * Draws bacground to the specified rectangle. The origin is queried
       
   226         * from the control position list (if given using 
       
   227         * AknsUtils::RegisterControlPosition). If not found, the origin is
       
   228         * queried from the given control, which may result in a window server
       
   229         * flush.
       
   230         *
       
   231         * See @c DrawBackground for details on chained layouts.
       
   232         *
       
   233         * @since 2.0
       
   234         *
       
   235         * @param aInstance Pointer to skin instance as obtained from
       
   236         *   AknsUtils::SkinInstance(). If @c NULL rectangle is cleared
       
   237         *   without bitmap.
       
   238         *
       
   239         * @param aContext Control context to obtain context specific 
       
   240         *   information about background drawing. Must be specified, if
       
   241         *   aInstance is not @c NULL.
       
   242         *
       
   243         * @param aControl Control that knows the current window.
       
   244         *   Must be specified if parent absolute layout can be used,
       
   245         *   otherwise @c NULL may be given.
       
   246         *
       
   247         * @param aGc Graphics context to be used for drawing.
       
   248         *
       
   249         * @param aRect Rectangle to be drawn.
       
   250         *
       
   251         * @return ETrue if background was drawn with a bitmap, EFalse
       
   252         *   otherwise. Note that many scalable skins implicitly define
       
   253         *   background bitmaps for seemingly blank areas.
       
   254         */
       
   255         IMPORT_C static TBool Background( MAknsSkinInstance* aInstance,
       
   256             MAknsControlContext* aContext, const CCoeControl* aControl,
       
   257             CWindowGc& aGc, const TRect& aRect );
       
   258 
       
   259         /**
       
   260         * Draws background with proper origin and drawing parameters.
       
   261         * Draws bacground to the specified rectangle. The origin is queried
       
   262         * from the control position list (if given using 
       
   263         * AknsUtils::RegisterControlPosition). If not found, the origin is
       
   264         * queried from the given control, which may result in a window server
       
   265         * flush. Drawing parameters may be used to control drawing.
       
   266         *
       
   267         * See @c DrawBackground for details on chained layouts.
       
   268         *
       
   269         * @since 2.0
       
   270         *
       
   271         * @param aInstance Pointer to skin instance as obtained from
       
   272         *   AknsUtils::SkinInstance(). If @c NULL rectangle is cleared
       
   273         *   without bitmap.
       
   274         *
       
   275         * @param aContext Control context to obtain context specific 
       
   276         *   information about background drawing. Must be specified, if
       
   277         *   aInstance is not @c NULL.
       
   278         *
       
   279         * @param aControl Control that knows the current window.
       
   280         *   Must be specified if parent absolute layout can be used,
       
   281         *   otherwise @c NULL may be given.
       
   282         *
       
   283         * @param aGc Graphics context to be used for drawing.
       
   284         *
       
   285         * @param aRect Rectangle to be drawn.
       
   286         *
       
   287         * @param aDrawParam Bitwise combination of drawing parameters. 
       
   288         *   @c KAknsDrawParamDefault should be used if no special handling 
       
   289         *   is required.
       
   290         *
       
   291         * @return ETrue if background was drawn with a bitmap, EFalse
       
   292         *   otherwise. Note that many scalable skins implicitly define
       
   293         *   background bitmaps for seemingly blank areas.
       
   294         */
       
   295         IMPORT_C static TBool Background( MAknsSkinInstance* aInstance,
       
   296             MAknsControlContext* aContext, const CCoeControl* aControl,
       
   297             CWindowGc& aGc, const TRect& aRect, const TInt aDrawParam );
       
   298 
       
   299         /**
       
   300         * Draws background to the given graphics context.
       
   301         * The origin is queried from the control position list (if given using
       
   302         * AknsUtils::RegisterControlPosition). If not found, the origin is
       
   303         * queried from the given control, which may result in a window server
       
   304         * flush.
       
   305         *
       
   306         * If background contains multiple layers, they are drawn in the
       
   307         * sequence specified by the context. If multiple contexts are chained
       
   308         * (using @c SetParentContext), they are drawn in reverse order, i.e.
       
   309         * the context given as parameter to this method call is drawn last.
       
   310         *
       
   311         * Drawing parameter KAknsDrawParamNoClearUnderImage is automatically
       
   312         * assumed for all the chained contexts, except the deepest one.
       
   313         *
       
   314         * @since 2.0
       
   315         *
       
   316         * @param aInstance Pointer to skin instance as obtained from
       
   317         *   AknsUtils::SkinInstance(). If @c NULL rectangle is cleared
       
   318         *   without bitmap.
       
   319         *
       
   320         * @param aContext Control context to obtain context specific 
       
   321         *   information about background drawing. Must be specified, if
       
   322         *   aInstance is not @c NULL.
       
   323         *
       
   324         * @param aControl Control that knows the current window.
       
   325         *   Must be specified if parent absolute layout can be used,
       
   326         *   otherwise @c NULL may be given.
       
   327         *
       
   328         * @param aGc Graphics context to be used for drawing.
       
   329         *
       
   330         * @param aDstPos Destination position (top-left corner of the area
       
   331         *   to be drawn) in graphics context coordinate system.
       
   332         *
       
   333         * @param aControlRect Rectangle (in the control coordinate system) 
       
   334         *   to be drawn.
       
   335         *
       
   336         * @param aDrawParam Bitwise combination of drawing parameters. 
       
   337         *   @c KAknsDrawParamDefault should be used if no special handling 
       
   338         *   is required.
       
   339         *
       
   340         * @return ETrue if background was drawn with a bitmap, EFalse
       
   341         *   otherwise. Note that many scalable skins implicitly define
       
   342         *   background bitmaps for seemingly blank areas.
       
   343         */
       
   344         IMPORT_C static TBool DrawBackground( MAknsSkinInstance* aInstance,
       
   345             MAknsControlContext* aContext, const CCoeControl* aControl,
       
   346             CBitmapContext& aGc, const TPoint& aDstPos,
       
   347             const TRect& aControlRect, const TInt aDrawParam );
       
   348 
       
   349         /**
       
   350         * Draws background between rects.
       
   351         * Draws bacground between specified rectangles. Origin is assumed
       
   352         * to be (0,0).
       
   353         *
       
   354         * See @c DrawBackground for details on chained layouts.
       
   355         *
       
   356         * @since 2.0
       
   357         *
       
   358         * @param aInstance Pointer to skin instance as obtained from
       
   359         *   AknsUtils::SkinInstance(). If @c NULL rectangle is cleared
       
   360         *   without bitmap.
       
   361         *
       
   362         * @param aContext Control context to obtain context specific 
       
   363         *   information about background drawing. If @c NULL and skin
       
   364         *   instance was given, default parameters are used.
       
   365         *
       
   366         * @param aGc Graphics context to be used for drawing.
       
   367         *
       
   368         * @param aOuterRect Outer rectangle.
       
   369         *
       
   370         * @param aInnerRect Inner rectangle.
       
   371         *
       
   372         * @return ETrue if background was drawn with a bitmap, EFalse
       
   373         *   otherwise. Note that many scalable skins implicitly define
       
   374         *   background bitmaps for seemingly blank areas.
       
   375         */
       
   376         IMPORT_C static TBool BackgroundBetweenRects( 
       
   377             MAknsSkinInstance* aInstance,
       
   378             MAknsControlContext* aContext, CWindowGc& aGc, 
       
   379             const TRect& aOuterRect,const TRect& aInnerRect );
       
   380 
       
   381         /**
       
   382         * Draws background between rects.
       
   383         * Draws bacground between specified rectangles. 
       
   384         *
       
   385         * See @c DrawBackground for details on chained layouts.
       
   386         *
       
   387         * @since 2.0
       
   388         *
       
   389         * @param aInstance Pointer to skin instance as obtained from
       
   390         *   AknsUtils::SkinInstance(). If @c NULL rectangle is cleared
       
   391         *   without bitmap.
       
   392         *
       
   393         * @param aContext Control context to obtain context specific 
       
   394         *   information about background drawing. Must be specified if
       
   395         *   aInstance is not @c NULL.
       
   396         *
       
   397         * @param aControl Control that knows the current window.
       
   398         *   Must be specified if parent absolute layout can be used,
       
   399         *   otherwise @c NULL may be given.
       
   400         *
       
   401         * @param aGc Graphics context to be used for drawing.
       
   402         *
       
   403         * @param aOuterRect Outer rectangle.
       
   404         *
       
   405         * @param aInnerRect Inner rectangle.
       
   406         *
       
   407         * @return ETrue if background was drawn with a bitmap, EFalse
       
   408         *   otherwise. Note that many scalable skins implicitly define
       
   409         *   background bitmaps for seemingly blank areas.
       
   410         */
       
   411         IMPORT_C static TBool BackgroundBetweenRects( 
       
   412             MAknsSkinInstance* aInstance,
       
   413             MAknsControlContext* aContext, const CCoeControl* aControl, 
       
   414             CWindowGc& aGc, 
       
   415             const TRect& aOuterRect,const TRect& aInnerRect );
       
   416 
       
   417         /**
       
   418         * Draws background between rects.
       
   419         * Draws bacground between specified rectangles with drawing parameters. 
       
   420         *
       
   421         * @since 2.0
       
   422         *
       
   423         * @param aInstance Pointer to skin instance as obtained from
       
   424         *   AknsUtils::SkinInstance(). If @c NULL rectangle is cleared
       
   425         *   without bitmap.
       
   426         *
       
   427         * @param aContext Control context to obtain context specific 
       
   428         *   information about background drawing. Must be specified if
       
   429         *   aInstance is not @c NULL.
       
   430         *
       
   431         * @param aControl Control that knows the current window.
       
   432         *   Must be specified if parent absolute layout can be used,
       
   433         *   otherwise @c NULL may be given.
       
   434         *
       
   435         * @param aGc Graphics context to be used for drawing.
       
   436         *
       
   437         * @param aOuterRect Outer rectangle.
       
   438         *
       
   439         * @param aInnerRect Inner rectangle.
       
   440         *
       
   441         * @param aDrawParam Bitwise combination of drawing parameters. 
       
   442         *   @c KAknsDrawParamDefault should be used if no special handling 
       
   443         *   is required.
       
   444         *
       
   445         * @return ETrue if background was drawn with a bitmap, EFalse
       
   446         *   otherwise. Note that many scalable skins implicitly define
       
   447         *   background bitmaps for seemingly blank areas.
       
   448         */
       
   449         IMPORT_C static TBool BackgroundBetweenRects( 
       
   450             MAknsSkinInstance* aInstance,
       
   451             MAknsControlContext* aContext, const CCoeControl* aControl, 
       
   452             CWindowGc& aGc, 
       
   453             const TRect& aOuterRect, const TRect& aInnerRect, 
       
   454             const TInt aDrawParam );
       
   455 
       
   456         /**
       
   457         * Determines whether background drawing would be done with
       
   458         * a bitmap (deprecated).
       
   459         *
       
   460         * @param aInstance Pointer to skin instance. If @c NULL,
       
   461         *   method returns EFalse.
       
   462         *
       
   463         * @param aContext Control context, or @c NULL if no context 
       
   464         *   is used. Note that absence of control context affects
       
   465         *   the result.
       
   466         *
       
   467         * @return @c ETrue if background would be drawn with a bitmap,
       
   468         *   @c EFalse otherwise. If a scalable skin is currently active,
       
   469         *   the return value is undefined, and does not necessarily
       
   470         *   reflect the return value of the actual drawing operation.
       
   471         *
       
   472         * @deprecated This method is deprecated as of release 2.8.
       
   473         *   Use the return values of background drawing functions to
       
   474         *   determine whether the background was drawn with skinned
       
   475         *   content. The return value is always ETrue starting from
       
   476         *   rel 3.1
       
   477         */
       
   478         IMPORT_C static TBool HasBitmapBackground(
       
   479             MAknsSkinInstance* aInstance,
       
   480             MAknsControlContext* aContext );
       
   481 
       
   482         /**
       
   483         * Draws a cached image (with its attributes specified in the skin)
       
   484         * to the given rectangle.
       
   485         *
       
   486         * @param aInstance Pointer to the skin instance. If @c NULL,
       
   487         *   the method returns immediately.
       
   488         *
       
   489         * @param aGc Graphics context to be used for drawing.
       
   490         *
       
   491         * @param aRect Rectangle specifying the pane used for drawing. The
       
   492         *   image is laid out within the rectangle.
       
   493         *
       
   494         * @param aID Item ID of the image to be drawn.
       
   495         */
       
   496         IMPORT_C static void DrawCachedImage( MAknsSkinInstance* aInstance,
       
   497             CWindowGc& aGc, const TRect& aRect, const TAknsItemID& aID );
       
   498 
       
   499         /**
       
   500         * Draws a cached image (with its attributes specified in the skin)
       
   501         * to the given rectangle in an off-screen graphics context.
       
   502         *
       
   503         * @since 2.8
       
   504         *
       
   505         * @param aInstance Pointer to the skin instance. If @c NULL,
       
   506         *   the method returns immediately.
       
   507         *
       
   508         * @param aGc Bitmapped graphics context to be used for drawing.
       
   509         *
       
   510         * @param aRect Rectangle specifying the pane used for drawing. The
       
   511         *   image is laid out within the rectangle.
       
   512         *
       
   513         * @param aID Item ID of the image to be drawn.
       
   514         */
       
   515         IMPORT_C static void DrawCachedImage( MAknsSkinInstance* aInstance,
       
   516             CFbsBitGc& aGc, const TRect& aRect, const TAknsItemID& aID );
       
   517 
       
   518         /**
       
   519         * Draws a frame (with cached images) to the specified area.
       
   520         *
       
   521         * @param aInstance Pointer to the skin instance. If @c NULL, the 
       
   522         *   method returns EFalse.
       
   523         *
       
   524         * @param aGc Graphics context to be used for drawing.
       
   525         *
       
   526         * @param aOuterRect Outer rectangle of the frame. Frame elements
       
   527         *   will be drawn within this rectangle.
       
   528         *
       
   529         * @param aInnerRect Inner rectangle of the frame. Frame center 
       
   530         *   will be drawn within this rectangle.
       
   531         *
       
   532         * @param aFrameID Item ID of the entire frame.
       
   533         *
       
   534         * @param aCenterID Item ID of the center part of the frame. If
       
   535         *   @c KAknsIIDNone, no center will be drawn. If @c KAknsIIDDefault,
       
   536         *   the default value from the frame itself will be used. Other values,
       
   537         *   the item to be used for the center part. If the frame is 
       
   538         *   specified as 1 part graphics in the skin instead of 9 part
       
   539         *   graphics, this parameter has no effect.
       
   540         *
       
   541         * @return EFalse, if the frame was not drawn at all. ETrue, if the
       
   542         *   frame was (at least partially) drawn.
       
   543         */
       
   544         IMPORT_C static TBool DrawFrame( MAknsSkinInstance* aInstance,
       
   545             CWindowGc& aGc, const TRect& aOuterRect, const TRect& aInnerRect, 
       
   546             const TAknsItemID& aFrameID, const TAknsItemID& aCenterID );
       
   547 
       
   548         /**
       
   549         * Prepares the frame graphics for drawing. This function should be
       
   550         * called when the frame sizes are known and in places where Flushing
       
   551         * the Window server buffer will not cause flicker. For example, a
       
   552         * good place to call PrepareFrame() would be controls SizeChanged 
       
   553         * function. Altough its not mandatory to call PrepareFrame()
       
   554         * before DrawFrame(), it's highly recommended in order to avoid
       
   555         * unnecessary flushes in the middle of the actual drawing routine. 
       
   556         *
       
   557         * Note that the rect parameters must be exactly the same for
       
   558         * PrepareFrame and subsequent DrawFrame calls. Otherwise the 
       
   559         * DrawFrame functions will cause a flush, which leads
       
   560         * to flicker.
       
   561         *
       
   562         * @since 2.8
       
   563         *
       
   564         * @param aInstance Pointer to the skin instance. If @c NULL, the 
       
   565         *   method returns EFalse.
       
   566         *
       
   567         * @param aOuterRect Outer rectangle of the frame. Frame elements
       
   568         *   are scaled to this size.
       
   569         *
       
   570         * @param aInnerRect Inner rectangle of the frame. Frame center 
       
   571         *   is scaled to this size
       
   572         *
       
   573         * @param aFrameID Item ID of the entire frame.
       
   574         *
       
   575         * @param aCenterID Item ID of the center part of the frame. If
       
   576         *   @c KAknsIIDNone, no center part will be prepared.
       
   577         *   If @c KAknsIIDDefault, the default value from the frame
       
   578         *   itself will be used. Other values, the item to be used 
       
   579         *   for the center part. If the frame is specified as 1 part
       
   580         *   graphics in the skin instead of 9 part graphics, this
       
   581         *   parameter has no effect.
       
   582         *
       
   583         * @return EFalse, if were nothing to prepare. ETrue, if the
       
   584         *   frame was (at least partially) prepared.
       
   585         */
       
   586         IMPORT_C static TBool PrepareFrame( MAknsSkinInstance* aInstance,
       
   587             const TRect& aOuterRect, const TRect& aInnerRect, 
       
   588             const TAknsItemID& aFrameID, const TAknsItemID& aCenterID);
       
   589 
       
   590         /**
       
   591         * Draws a frame (with cached images) to the specified area
       
   592         * in an off-screen graphics context.
       
   593         *
       
   594         * @since 2.8
       
   595         *
       
   596         * @param aInstance Pointer to the skin instance. If @c NULL, the 
       
   597         *   method returns EFalse.
       
   598         *
       
   599         * @param aGc Bitmapped graphics context to be used for drawing.
       
   600         *
       
   601         * @param aOuterRect Outer rectangle of the frame. Frame elements
       
   602         *   will be drawn within this rectangle.
       
   603         *
       
   604         * @param aInnerRect Inner rectangle of the frame. Frame center 
       
   605         *   will be drawn within this rectangle.
       
   606         *
       
   607         * @param aFrameID Item ID of the entire frame.
       
   608         *
       
   609         * @param aCenterID Item ID of the center part of the frame. If
       
   610         *   @c KAknsIIDNone, no center will be drawn. If @c KAknsIIDDefault,
       
   611         *   the default value from the frame itself will be used. Other values,
       
   612         *   the item to be used for the center part. If unsure, specify
       
   613         *   @c KAknsIIDDefault. If the frame is specified as 1 part 
       
   614         *   graphics in the skin instead of 9 part graphics, this 
       
   615         *   parameter has no effect.
       
   616         *
       
   617         * @param aDrawParam Bitwise combination of drawing parameters. 
       
   618         *   @c KAknsDrawParamDefault should be used if no special handling 
       
   619         *   is required.
       
   620         *
       
   621         * @return EFalse, if the frame was not drawn at all. ETrue, if the
       
   622         *   frame was (at least partially) drawn.
       
   623         */
       
   624         IMPORT_C static TBool DrawFrame( MAknsSkinInstance* aInstance,
       
   625             CFbsBitGc& aGc, const TRect& aOuterRect, const TRect& aInnerRect, 
       
   626             const TAknsItemID& aFrameID, const TAknsItemID& aCenterID,
       
   627             const TInt aDrawParam );
       
   628 
       
   629         /**
       
   630         * Draws a frame (with cached images) to the specified area
       
   631         * in an off-screen graphics context.
       
   632         *
       
   633         * @since 2.8
       
   634         *
       
   635         * @param aInstance Pointer to the skin instance. If @c NULL, the 
       
   636         *   method returns EFalse.
       
   637         *
       
   638         * @param aGc Bitmapped graphics context to be used for drawing.
       
   639         *
       
   640         * @param aOuterRect Outer rectangle of the frame. Frame elements
       
   641         *   will be drawn within this rectangle.
       
   642         *
       
   643         * @param aInnerRect Inner rectangle of the frame. Frame center 
       
   644         *   will be drawn within this rectangle.
       
   645         *
       
   646         * @param aFrameID Item ID of the entire frame.
       
   647         *
       
   648         * @param aCenterID Item ID of the center part of the frame. If
       
   649         *   @c KAknsIIDNone, no center will be drawn. If @c KAknsIIDDefault,
       
   650         *   the default value from the frame itself will be used. Other values,
       
   651         *   the item to be used for the center part. If unsure, specifi
       
   652         *   @c KAknsIIDDefault. If the frame is specified as 1 part 
       
   653         *   graphics in the skin instead of 9 part graphics, this
       
   654         *   parameter has no effect.
       
   655         *
       
   656         * @return EFalse, if the frame was not drawn at all. ETrue, if the
       
   657         *   frame was (at least partially) drawn.
       
   658         */
       
   659         IMPORT_C static TBool DrawFrame( MAknsSkinInstance* aInstance,
       
   660             CFbsBitGc& aGc, const TRect& aOuterRect, const TRect& aInnerRect, 
       
   661             const TAknsItemID& aFrameID, const TAknsItemID& aCenterID );
       
   662 
       
   663         /**
       
   664         * Draws the specified part of the frame (with a cached image) to the
       
   665         * specified rectangle.
       
   666         *
       
   667         * @par Compatibility note:
       
   668         * Prior to Series 60 release 2.8, the entire outer rectangle could
       
   669         * be given as the rectangle of a corner part. Due to scalable UI
       
   670         * compatibility, this is no longer supported in release 2.8, and thus
       
   671         * the exact corner rectangle is required. This funtion may not
       
   672         * function correctly if the skin specifies the frame as 1 part
       
   673         * graphics.
       
   674         *
       
   675         * @param aInstance Pointer to the skin instance. If @c NULL, the 
       
   676         *   method returns @c EFalse.
       
   677         *
       
   678         * @param aGc Graphics context to be used for drawing.
       
   679         *
       
   680         * @param aRect Rectangle for drawing. This must be the rectangle
       
   681         *   of the specific part of the drawn that will be drawn, e.g.
       
   682         *   top-left corner rectangle if the top-left corner is being drawn.
       
   683         *
       
   684         * @param aFrameID Item ID of the entire frame.
       
   685         *
       
   686         * @param aFrameElement Element (index) of the frame element to
       
   687         *   be drawn.
       
   688         *
       
   689         * @return ETrue, if the element was drawn. EFalse otherwise.
       
   690         */
       
   691         IMPORT_C static TBool DrawFramePart( MAknsSkinInstance* aInstance,
       
   692             CWindowGc& aGc, const TRect& aRect, const TAknsItemID& aFrameID,
       
   693             const TAknsFrameElementIndex aFrameElement );
       
   694 
       
   695         /**
       
   696         * Returns a boolean value indicating whether list separator lines
       
   697         * should be drawn.
       
   698         *
       
   699         * This method checks:
       
   700         *  - The value of @c KAknsIIDPropertyListSeparatorLines property.
       
   701         *  - The presence of (non-scalable) column bitmaps.
       
   702         *       If found, @c EFalse is returned.
       
   703         *  - The presence of generic list background (non-scalable).
       
   704         *       If found, @c EFalse is returned.
       
   705         *
       
   706         * Note that the exact internal implementation of the checks is
       
   707         * subject to change.
       
   708         *
       
   709         * @since 2.8
       
   710         *
       
   711         * @param aInstance Pointer to the skin instance. If @c NULL, 
       
   712         *   the method returns @c ETrue.
       
   713         *
       
   714         * @return @c ETrue, if list separator lines should drawn. 
       
   715         *   @c EFalse, if list separator lines should not be drawn
       
   716         *   and, consequently, list column and slice bitmaps (if any) from the
       
   717         *   skin content should be drawn.
       
   718         */
       
   719         IMPORT_C static TBool IsListSeperatorLines(
       
   720             MAknsSkinInstance* aInstance );
       
   721 
       
   722         /**
       
   723         * Returns an enum value indicating the way notes and queries appear
       
   724         * to the screen (sliding animation)
       
   725         *
       
   726         * @since 3.1
       
   727         *
       
   728         * @param aInstance Pointer to the skin instance. If @c NULL, 
       
   729         *   the method returns @c ESlidingDisabled.
       
   730         *
       
   731         * @return @c Sliding mode from enumeration TSlidingMode
       
   732         */
       
   733         IMPORT_C static TSlidingMode SlidingMode(
       
   734             MAknsSkinInstance* aInstance );
       
   735 
       
   736     private: // Prohibited constructors and destructor
       
   737         
       
   738         // Construction prohibited (static class)
       
   739         AknsDrawUtils();
       
   740         // Destruction prohibited (static class)
       
   741         ~AknsDrawUtils();
       
   742     };
       
   743 
       
   744 #endif // AKNSDRAWUTILS_H
       
   745 
       
   746 // End of File