rfont.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:8k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * rfont.h
  3.  *
  4.  * Realised font description
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: rfont.h,v $
  30.  * Revision 1.17  1999/03/10 03:49:53  robertj
  31.  * More documentation adjustments.
  32.  *
  33.  * Revision 1.16  1999/03/09 08:01:49  robertj
  34.  * Changed comments for doc++ support (more to come).
  35.  *
  36.  * Revision 1.15  1999/02/16 08:08:46  robertj
  37.  * MSVC 6.0 compatibility changes.
  38.  *
  39.  * Revision 1.14  1998/09/23 06:28:52  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.13  1995/03/14 12:42:27  robertj
  43.  * Updated documentation to use HTML codes.
  44.  *
  45.  * Revision 1.12  1995/01/22  00:30:41  robertj
  46.  * Changed semantics of GetSize() and GetHeight() more in line with X definitions.
  47.  *
  48.  * Revision 1.11  1995/01/14  06:19:33  robertj
  49.  * Documentation
  50.  *
  51.  * Revision 1.10  1995/01/07  04:39:42  robertj
  52.  * Redesigned font enumeration code and changed font styles.
  53.  *
  54.  * Revision 1.9  1994/12/14  11:17:12  robertj
  55.  * Changed PDIMENSION to be unsigned causing untold number of changes.
  56.  *
  57.  * Revision 1.8  1994/08/23  11:32:52  robertj
  58.  * Oops
  59.  *
  60.  * Revision 1.7  1994/08/22  00:46:48  robertj
  61.  * Added pragma fro GNU C++ compiler.
  62.  *
  63.  * Revision 1.6  1994/07/02  03:03:49  robertj
  64.  * Changed device resolution to be protected.
  65.  *
  66.  * Revision 1.5  1994/06/25  11:55:15  robertj
  67.  * Unix version synchronisation.
  68.  *
  69.  * Revision 1.4  1994/03/07  07:38:19  robertj
  70.  * Major enhancementsacross the board.
  71.  *
  72.  * Revision 1.3  1994/01/03  04:42:23  robertj
  73.  * Mass changes to common container classes and interactors etc etc etc.
  74.  *
  75.  * Revision 1.2  1993/07/14  12:49:16  robertj
  76.  * Fixed RCS keywords.
  77.  *
  78.  */
  79. #define _PREALFONT
  80. #ifdef __GNUC__
  81. #pragma interface
  82. #endif
  83. class PCanvas;
  84. /**A class representing the attributes of a text font that is representable
  85.    on a Ref{PCanvas}.
  86.    
  87.    A canvas is always associated with a particular {it device}. This may be
  88.    the screen as in Ref{PInteractorCanvas} or a printer as in
  89.    Ref{PPrinterCanvas}. A particular device will only be able to render
  90.    certain fonts, eg a screen device would only be able to display fonts that
  91.    were installed on the system. A printer would typically only be able to
  92.    render fonts that are built into it.
  93.    The original Ref{PFont} only has enough information for a request to the
  94.    device of a font. Once a font is realised, more detailed information about
  95.    the exact font metrics is available. 
  96.    Note all sizes (height, width etc) for fonts are in printers points
  97.    (1/72 inch).
  98.  */
  99. class PRealFont : public PFont
  100. {
  101.   PCLASSINFO(PRealFont, PFont);
  102.   public:
  103.    /**Create a real font for the canvas from the specified font request
  104.        information. If no canvas is specified then the screen device is used,
  105.        ie via a Ref{PInteractorCanvas}. If no font information is provided
  106.        then the system font returned by Ref{PApplication::GetSystemFont()}
  107.        is used.
  108.      */
  109.     PRealFont();
  110.     PRealFont(
  111.       const PFont & font    /// Font request information to realise.
  112.     );
  113.     PRealFont(
  114.       PCanvas & canvas,     /// Canvas on which to realise the font.
  115.       const PFont & font    /// Font request information to realise.
  116.     );
  117.   /**@name New functions for class */
  118.    /**Get the height of font. This is the distance from the characters on one
  119.        line and the characters on the next line of text.
  120.        
  121.        The {it height} is the {it ascent} plus the {it descent} and the
  122.        {it leading}.
  123.     
  124.        @return
  125.        height of the real font.
  126.      */
  127.     virtual PDIMENSION GetHeight(
  128.       BOOL inPixels = FALSE   /// Whether returned in pixels or printer points.
  129.     ) const;
  130.    /**Get the average width of the characters in the font.
  131.        @return
  132.        average width of the real font.
  133.      */
  134.     virtual PDIMENSION GetAvgWidth(
  135.       BOOL inPixels = FALSE   /// Whether returned in pixels or printer points.
  136.     ) const;
  137.    /**Get the width of the widest character in the font.
  138.     
  139.        @return
  140.        maximum width of the real font.
  141.      */
  142.     virtual PDIMENSION GetMaxWidth(
  143.       BOOL inPixels = FALSE   /// Whether returned in pixels or printer points.
  144.     ) const;
  145.    /**Get the ascent, height of characters above the line they sit on.
  146.     
  147.        The {it height} is the {it ascent} plus the {it descent}. The
  148.        {it size} is the {it height} plus the {it leading}.
  149.     
  150.        @return
  151.        ascent of the real font.
  152.      */
  153.     virtual PDIMENSION GetAscent(
  154.       BOOL inPixels = FALSE   /// Whether returned in pixels or printer points.
  155.     ) const;
  156.    /**Get the descent, height of characters below the line thet sit on. This
  157.        would apply to characters such as 'g' or 'q' for instance.
  158.        The {it height} is the {it ascent} plus the {it descent}. The
  159.        {it size} is the {it height} plus the {it leading}.
  160.     
  161.        @return
  162.        descent of the real font.
  163.      */
  164.     virtual PDIMENSION GetDescent(
  165.       BOOL inPixels = FALSE   /// Whether returned in pixels or printer points.
  166.     ) const;
  167.    /**Get the recommended distance between lines in consecutive lines of
  168.        text all in this font.
  169.     
  170.        The {it height} is the {it ascent} plus the {it descent}. The
  171.        {it size} is the {it height} plus the {it leading}.
  172.     
  173.        @return
  174.        leading of the real font.
  175.      */
  176.     virtual PDIMENSION GetLeading(
  177.       BOOL inPixels = FALSE   /// Whether returned in pixels or printer points.
  178.     ) const;
  179.    /**Convert a horizontal dimension from printer points (1/72 inch) to
  180.        pixels of the device the font was realised for.
  181.        
  182.        @return
  183.        converted dimension.
  184.      */
  185.     PDIMENSION PointsToPixelsX(
  186.       PDIMENSION x    /// Horizontal dimension to convert.
  187.     ) const;
  188.    /**Convert a vertical dimension from printer points (1/72 inch) to pixels
  189.        of the device the font was realised for.
  190.        
  191.        @return
  192.        converted dimension.
  193.      */
  194.     PDIMENSION PointsToPixelsY(
  195.       PDIMENSION y    /// Vertical dimension to convert.
  196.     ) const;
  197.     
  198.    /**Convert a horizontal dimension from pixels of the device the font was
  199.        realised for to printer points (1/72 inch).
  200.        
  201.        @return
  202.        converted dimension.
  203.      */
  204.     PDIMENSION PixelsToPointsX(
  205.       PDIMENSION x    /// Horizontal dimension to convert.
  206.     ) const;
  207.    /**Convert a vertical dimension from pixels of the device the font was
  208.        realised for to printer points (1/72 inch).
  209.        @return
  210.        converted dimension.
  211.      */
  212.     PDIMENSION PixelsToPointsY(
  213.       PDIMENSION y    /// Vertical dimension to convert.
  214.     ) const;
  215.     
  216.   protected:
  217.   // Member variables
  218.     /** Device resolution of the canvas for printer point conversion functions. */
  219.     PDIMENSION deviceResX, deviceResY;
  220. #ifdef DOC_PLUS_PLUS
  221. };
  222. #endif
  223. // Class declaration continued in platform specific header file ///////////////