epoc32/include/mw/AknFontSpecification.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     1 /*
     2 * Copyright (c) 2002-2008 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: 
    15 *
    16 */
    17 
    18 
    19 
    20 #ifndef AKNFONTSPECIFICATION_H
    21 #define AKNFONTSPECIFICATION_H
    22 
    23 #include <gdi.h>
    24 #include <AknFontCategory.hrh>
    25 #include <babitflags.h>
    26 
    27 /**
    28 * Object representing the series 60 requirements for a font. It contains information
    29 * from the layout specification that fonts bound to the given font id should honor.
    30 * 
    31 * It formst the basis of the request to font provisioning to provide a suitable font
    32 *
    33 *  @lib FontUtils.lib
    34 *  @since 2.8
    35 *
    36 *  @internal
    37 */
    38 class TAknFontSpecification
    39     {
    40 public:
    41 
    42     enum TAknFontSpecificationUnits
    43         {
    44         EPixels = 0,
    45         ETwips
    46         };
    47 
    48 public:
    49     /**
    50     * Construct font specification from Font ID.
    51     *
    52     *@param aFontId     Series 60 font id from which to create a font.
    53     */
    54     IMPORT_C TAknFontSpecification( TInt aFontId );
    55 
    56     /**
    57     * Construct the font specifiation from Symbian OS TFontSpec and MGraphicsDeviceMap
    58     * The Symbian OS TFontSpec must be set in Twips.  The MGraphicsDeviceMap is used to convert to
    59     * pixels for the text pane height.
    60     *
    61     * Note that the units policy during and in effect at the end of this constructor is EPixels.
    62     * 
    63     * Note that the TTypeface part of the TFontSpec is lost in this construction
    64     *
    65     * @param aCategory      Series 60 Font category to use
    66     * @param aFontSpec      Provides the metrics and Style information to use for the match
    67     * @param aDeviceMap     Device map used to convert the aFontSpec's twips to pixels
    68     * 
    69     */
    70     IMPORT_C TAknFontSpecification(  
    71         TAknFontCategory aCategory, 
    72         const TFontSpec& aFontSpec, 
    73         const MGraphicsDeviceMap* aDeviceMap );
    74     
    75     /**
    76     * Sets the Series 60 font category.
    77     * 
    78     * @param aCategory  New category to set.
    79     */
    80     IMPORT_C void SetFontCategory( TAknFontCategory aCategory );
    81     
    82     /**
    83     * Series 60 Layout Specification font category: 
    84     *   Primary, Secondary, Title etc.
    85     *
    86     * @return   Series 60 font category
    87     */
    88     IMPORT_C TAknFontCategory FontCategory() const;
    89 
    90     /**
    91     * The requested height for a font. This represents the maximum vertical range that can be 
    92     * guraranteed to draw in the text pane.
    93     *
    94     * Note also that this value is the height requested by layout or the client, and might not correspond to 
    95     * the design height, ascent + descent, or max height reported by the attached font. See the APIs
    96     * CAknLayoutFont::TextPaneTopToBaseline and BaselineToTextPaneBottom. 
    97     *
    98     * If TextPaneHeightIsDesignHeight() is EFalse, then the font will be requested to fit entirely within
    99     * this range.  
   100     *
   101     * If TextPaneHeightIsDesignHeight() is set, then this value is passed to the font request as the font
   102     * design height, in which case the font may not render entirely within the "text pane height".
   103     * 
   104     * @param aNewHeight     Text pane height to be used by the font.
   105     */
   106     IMPORT_C void SetTextPaneHeight( TInt aNewHeight );
   107 
   108     /**
   109     * The requested height of the font. This represents the maximum vertical range that can be 
   110     * guaranteed to draw in the text pane.
   111     *
   112     * Note also that this value is the height requested by layout or the client, and may not correspond to 
   113     * the design height, ascent + descent, or max height reported by the attached font. See the APIs
   114     * CAknLayoutFont::TextPaneTopToBaseline and BaselineToTextPaneBottom. 
   115     * 
   116     * If TextPaneHeightIsDesignHeight() is EFalse, then the font is to be requested to fit entirely within
   117     * this range.  
   118     *
   119     * If TextPaneHeightIsDesignHeight() is set, then this value is passed to the font request as the font
   120     * design height, in which case the font may not render entirely within the "text pane height".
   121     *
   122     * Depending upon the value of TextPaneHeightIsInTwips(), the value returned is in Pixels or Twips. 
   123     * Note that calling SetTextPaneHeightIsInTwips() does not perform any conversion of the text pane height;
   124     * It retains its set value.
   125     * 
   126     * @return Requested text pane height.
   127     */
   128     IMPORT_C TInt TextPaneHeight() const;
   129        
   130     /**
   131     * Set the stoke weight to request using the Symbian OS stroke weight enumeration. 
   132     *
   133     * @aParam aWeight   The stroke weight. 
   134     */
   135     IMPORT_C void SetWeight( TFontStrokeWeight aWeight );
   136     
   137     /**
   138     * Sets the posture (e.g. upright, italic) of requested font using the Symbian OS enumeration.
   139     * @param aPostore   posture to request
   140     */
   141     IMPORT_C void SetPosture( TFontPosture aPosture );
   142     
   143     /**
   144     * Sets the policy to use in requesting the font height. Fonts may be requested either by "design height" (which is 
   145     * usually approximately the ascent + descent) or by maximum height.
   146     * If false, this setting means the number set by SetTextPaneHeight is intended to match
   147     * the font's maximum extent; all characters will fit within the text pane.
   148     * If true, then the value passed by SetTextPaneHeight will be used to request design height.
   149     *
   150     * This API has no effect if called on a TAknFontSpecification that has already been bound to a font
   151     *
   152     * The default value upon construction is EFalse.
   153     *
   154     * @param aTextPaneHeightIsDesignHeight  If EFalse, ensure that the font fits entirely
   155     *                                       within the text pane height
   156     *                                       If not EFalse, then the text pane height is treated as the font
   157     *                                       design height.
   158     */
   159     IMPORT_C void SetTextPaneHeightIsDesignHeight( TBool aTextPaneHeightIsDesignHeight );
   160     
   161     /**
   162     * Accessor API for the height policy.
   163     * 
   164     * @return   EFalse if text pane height is to be the maximum font extent.
   165     *           ETrue if text pane height is to be treated as the font's design height 
   166     */
   167     IMPORT_C TBool TextPaneIsDesignHeight() const;
   168 
   169     /**
   170     * Sets a flag indicating to font requests whether they should insist upon an exact match.
   171     * Whether a font match is treated as exact or not depends upon various things, including:
   172     *     - if a request is made via a generic font family or via a font family enumeration, then typeface is not tested for "exactness"
   173     *     - fonts may be forced to be rendered at certain sizes (within a small number of pixels). This still counts as an exact match
   174     * 
   175     * The default value upon construction is EFalse;
   176     *
   177     * @param aRequiresExactMatch       
   178     */
   179     IMPORT_C void SetExactMatchRequired ( TBool aRequiresExactMatch );
   180     
   181     /**
   182     * Accessor API for whether an exact match is required for the font (See SetExactMatchRequired() )
   183     *
   184     * @return   whether an exact match is required or not.
   185     */
   186     IMPORT_C TBool ExactMatchRequired() const;
   187 
   188     /**
   189     * Sets the units for the Text Pane Height APIs.  Note that calling this API does not 
   190     * result in the numerical value of the text pane height being recalculated. 
   191     * Upon construction, TAknFontSpecification objects store TextPaneHeight in pixels. 
   192     * If you then call SetUnits to Twips, you will also have to call SetTextPaneHeight to pass in the new
   193     * (twips) value. 
   194     *
   195     * @param aUnits
   196     */
   197     IMPORT_C void SetUnits( TAknFontSpecification::TAknFontSpecificationUnits aUnits );
   198 
   199     /**
   200     * Accessor API for the units being used.
   201     *
   202     * @return units currently being used.
   203     */
   204     IMPORT_C TAknFontSpecification::TAknFontSpecificationUnits Units() const;     
   205    
   206     /**
   207     * Accessor for the requested weight
   208     *
   209     * @return Symbian OS stroke weight enumeration (e.g. EStrokeWeightBold)
   210     */
   211     IMPORT_C TFontStrokeWeight Weight() const ;
   212     
   213     /**
   214     * Accessor for the requested posture
   215     *
   216     * @return Symbian OS font posture enumeration (e.g. EPostureItalic)
   217     */
   218     IMPORT_C TFontPosture Posture() const;
   219 
   220     /**
   221     * Accessor for the requested outline effect 
   222     *
   223     * @since 5.0
   224     *
   225     * @return ETrue iff outline font effect has been requested
   226     */
   227     IMPORT_C TBool IsOutlineEffectOn() const;
   228 
   229 private:
   230     void LoadAnyCDLFontInstanceL();
   231 
   232 private:
   233     TAknFontCategory iBaseFontCategory;
   234     TInt iTextPaneHeight;
   235     // Symbian OS Font Style object convenient for holding style info
   236     TFontStyle iRequiredStyle;
   237     TBitFlags iFlags;
   238     TInt iSpare2; 
   239     };
   240 
   241 #endif
   242 // End of File