home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 10 / ioProg_10.iso / soft / optima / hpp.z / WFONT.HPP < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-24  |  12.1 KB  |  434 lines

  1. /**********************************************************************
  2.  *
  3.  * wfont.cpp -- Generalized font support.
  4.  *
  5.  **********************************************************************/
  6.  
  7. #ifndef _WFONT_HPP_INCLUDED
  8. #define _WFONT_HPP_INCLUDED
  9.  
  10. #ifndef _WNO_PRAGMA_PUSH
  11. #pragma pack(push,4);
  12. #pragma enum int;
  13. #endif
  14.  
  15. #ifndef _WSTRING_HPP_INCLUDED
  16. #  include "wstring.hpp"
  17. #endif
  18. #ifndef _WCANVAS_HPP_INCLUDED
  19. #  include "wcanvas.hpp"
  20. #endif
  21.  
  22. //
  23. // Stock fonts -- These are system fonts that are always available.
  24. //
  25.  
  26. enum WFStockFont {
  27.     WFInheritedFont             = -1,
  28.     WFNullFont                  = 0,
  29.  
  30.     WFOEMFixedFont              = 10,
  31.     WFFirstStockFont = WFOEMFixedFont,
  32.  
  33.     WFAnsiFixedFont             = 11,
  34.     WFAnsiFont                  = 12,
  35.     WFSystemFont                = 13,
  36.     WFDeviceDefaultFont         = 14,
  37.     WFSystemFixedFont           = 16,
  38.     WFDefaultGUIFont            = 17,
  39.  
  40.     WFLastStockFontPlusOne,
  41.     WFLastStockFont = WFLastStockFontPlusOne - 1
  42. };
  43.  
  44. //
  45. // Boldness values
  46. //
  47.  
  48. enum WFBoldType {
  49.     WFUnknownBold               = 0,
  50.     WFThin                      = 100,
  51.     WFExtraLight                = 200,
  52.     WFLight                     = 300,
  53.     WFNormal                    = 400,
  54.     WFMedium                    = 500,
  55.     WFSemiBold                  = 600,
  56.     WFBold                      = 700,
  57.     WFExtraBold                 = 800,
  58.     WFHeavy                     = 900,
  59. };
  60.  
  61. //
  62. // Character sets
  63. //
  64.  
  65. enum WFCharSetType {
  66.     WFAnsiCharSet               = 0,
  67.     WFDefaultCharSet            = 1,
  68.     WFSymbolCharSet             = 2,
  69.     WFMacCharSet                = 77,
  70.     WFShiftJisCharSet           = 128,
  71.     WFHangeulCharSet            = 129,
  72.     WFJohabCharSet              = 130,
  73.     WFGB2312CharSet             = 134,
  74.     WFChineseBig5CharSet        = 136,
  75.     WFGreekCharSet              = 161,
  76.     WFTurkishCharSet            = 162,
  77.     WFHebrewCharSet             = 177,
  78.     WFArabicCharSet             = 178,
  79.     WFBalticCharSet             = 186,
  80.     WFRussianCharSet            = 204,
  81.     WFThaiCharSet               = 222,
  82.     WFEastEuropeCharSet         = 238,
  83.     WFOEMCharSet                = 255,
  84. };
  85.  
  86. //
  87. // Output precision
  88. //
  89.  
  90. enum WFOutPrecType {
  91.     WFOutDefault                = 0,
  92.     WFOutString                 = 1,
  93.     WFOutCharacter              = 2,
  94.     WFOutStroke                 = 3,
  95.     WFOutTrueType               = 4,
  96.     WFOutDevice                 = 5,
  97.     WFOutRaster                 = 6,
  98.     WFOutTrueTypeOnly           = 7,
  99.     WFOutOutline                = 8,
  100. };
  101.  
  102. //
  103. // Clipping precision
  104. //
  105.  
  106. enum WFClipPrecType {
  107.     WFClipDefault               = 0,
  108.     WFClipCharacter             = 1,
  109.     WFClipStroke                = 2,
  110.     WFClipMask                  = 0xf,
  111.     WFClipLHAngles              = (1<<4),
  112.     WFClipTrueTypeAlways        = (2<<4),
  113.     WFClipEmbedded              = (8<<4),
  114. };
  115.  
  116. //
  117. // Output quality
  118. //
  119.  
  120. enum WFQualityType {
  121.     WFDefaultQuality            = 0,
  122.     WFDraftQuality              = 1,
  123.     WFProofQuality              = 2,
  124. };
  125.  
  126. //
  127. // Font pitch
  128. //
  129.  
  130. enum WFPitchType {
  131.     WFDefaultPitch              = 0,
  132.     WFFixedPitch                = 1,
  133.     WFVariablePitch             = 2,
  134. };
  135.  
  136. //
  137. // Font family
  138. //
  139.  
  140. enum WFFamilyType {
  141.     WFDontCare                  = (0<<4),
  142.     WFRoman                     = (1<<4),
  143.     WFSwiss                     = (2<<4),
  144.     WFModern                    = (3<<4),
  145.     WFScript                    = (4<<4),
  146.     WFDecorative                = (5<<4),
  147. };
  148.  
  149. #ifdef UNICODE
  150.     typedef struct tagLOGFONTW WSystemLogicalFont;
  151. #else
  152.     typedef struct tagLOGFONTA WSystemLogicalFont;
  153. #endif
  154.  
  155. class WFontReference; // internal use only
  156.  
  157. //
  158. // WFont
  159. //
  160.  
  161. class WCMCLASS WFont : public WObject {
  162.     WDeclareSubclass( WFont, WObject );
  163.     
  164.     public:
  165.  
  166.         /************************************************************
  167.          * Constructors
  168.          ************************************************************/
  169.     
  170.         WFont( WFStockFont fontType=WFNullFont );
  171.         WFont( const WChar *fontDescription,
  172.                const WInfoCanvas *canvas=NULL );
  173.         WFont( const WString & fontDescription,
  174.                const WInfoCanvas *canvas=NULL );
  175.         WFont( const WFont &font );
  176.         WFont( WFontHandle handle, WBool deleteHandle=FALSE );
  177.         WFont( const WSystemLogicalFont *logicalFont, WInt pointsize=0,
  178.                const WInfoCanvas *canvas=NULL );
  179.         WFont( const WString & faceName, WInt pointsize,
  180.                const WInfoCanvas *canvas=NULL,
  181.                WInt cy=0, WInt cx=0, WInt escape=0, WInt orient=0,
  182.                WFBoldType weight=WFNormal, WBool ital=FALSE,
  183.                WBool under=FALSE, WBool strike=FALSE,
  184.                WFCharSetType charset=WFDefaultCharSet,
  185.                WFOutPrecType outprec=WFOutDefault,
  186.                WFClipPrecType clipprec=WFClipDefault,
  187.                WFQualityType qual = WFDefaultQuality,
  188.                WFPitchType ptch=WFDefaultPitch,
  189.                WFFamilyType fmly=WFDontCare );
  190.  
  191.         ~WFont();
  192.  
  193.         WFont& operator=( const WFont & f );
  194.         WFont& operator=( WFStockFont f );
  195.  
  196.         /*******************************************************************
  197.          * Properties
  198.          *******************************************************************/
  199.  
  200.         // Bold
  201.         //
  202.         //    Bold is defined as Weight >= WFBold.  Setting bold on sets
  203.         //    the weight to WFBold, setting it off sets it to WFNormal.
  204.  
  205.         WBool GetBold() const;
  206.         WBool SetBold( WBool on );
  207.  
  208.         // CharacterSet
  209.  
  210.         WFCharSetType GetCharacterSet() const;
  211.         WBool         SetCharacterSet( WFCharSetType characterSet );
  212.  
  213.         // ClipPrecision
  214.  
  215.         WFClipPrecType GetClipPrecision() const;
  216.         WBool          SetClipPrecision( WFClipPrecType clipPrecision );
  217.  
  218.         // FaceName
  219.  
  220.         WString GetFaceName() const;
  221.         WBool   SetFaceName( const WString & name );
  222.  
  223.         // Family
  224.  
  225.         WFFamilyType GetFamily() const;
  226.         WBool        SetFamily( WFFamilyType family );
  227.  
  228.         // Handle
  229.  
  230.         WFontHandle GetHandle( WBool noNullHandle=FALSE ) const;
  231.  
  232.         // Height
  233.  
  234.         WInt  GetHeight() const;
  235.  
  236.         // Italic
  237.  
  238.         WBool GetItalic() const;
  239.         WBool SetItalic( WBool on );
  240.  
  241.         // Name
  242.         //
  243.         //    Returns the full name (i.e. "8.Helv.Bold") of the font.
  244.         //    Use the FaceName property just for the face name.
  245.         //    The extended name includes information useful for
  246.         //    saving a font.
  247.  
  248.         WString GetName( WBool extended=FALSE ) const;
  249.         WBool   SetName( const WChar *name );
  250.  
  251.         // OutputPrecision
  252.  
  253.         WFOutPrecType GetOutputPrecision() const;
  254.         WBool         SetOutputPrecision( WFOutPrecType outputPrecision );
  255.  
  256.         // Pitch
  257.  
  258.         WFPitchType GetPitch() const;
  259.         WBool       SetPitch( WFPitchType pitch );
  260.  
  261.         // PointSize
  262.  
  263.         WInt  GetPointSize() const;
  264.         WBool SetPointSize( WInt pointSize );
  265.  
  266.         // Quality
  267.  
  268.         WFQualityType GetQuality() const;
  269.         WBool         SetQuality( WFQualityType quality );
  270.  
  271.         // Stock
  272.  
  273.         WBool GetStock() const;
  274.  
  275.         // StrikeOut
  276.  
  277.         WBool GetStrikeOut() const;
  278.         WBool SetStrikeOut( WBool on );
  279.  
  280.         // Underline
  281.  
  282.         WBool GetUnderline() const;
  283.         WBool SetUnderline( WBool on );
  284.  
  285.         // Valid
  286.         //
  287.         //    TRUE if font is defined.
  288.  
  289.         WBool GetValid() const;
  290.  
  291.         // Weight
  292.  
  293.         WInt  GetWeight() const;
  294.         WBool SetWeight( WInt weight );
  295.  
  296.         // Width
  297.         //
  298.         //    Calculates the average width of the font based on the
  299.         //    average width of the 52 upper and lowercase English
  300.         //    letters.
  301.  
  302.         WInt GetWidth() const;
  303.  
  304.         /*******************************************************************
  305.          * Methods
  306.          *******************************************************************/
  307.  
  308.         // Clear
  309.  
  310.         WBool Clear();
  311.  
  312.         // CopyToLogicalFont
  313.  
  314.         WBool CopyToLogicalFont( WSystemLogicalFont *copyInto );
  315.  
  316.         // Create
  317.         //
  318.         //    Create a font using a variety of methods....
  319.  
  320.         WBool Create( WFStockFont fontType=WFNullFont );
  321.         WBool Create( const WChar *fontDescription,
  322.                       const WInfoCanvas *canvas=NULL );
  323.         WBool Create( const WString & fontDescription,
  324.                       const WInfoCanvas *canvas=NULL );
  325.         WBool Create( const WFont &font );
  326.         WBool Create( WFontHandle handle, WBool deleteHandle=FALSE );
  327.         WBool Create( const WSystemLogicalFont *logicalFont, WInt pointsize=0,
  328.                       const WInfoCanvas *canvas=NULL );
  329.         WBool Create( const WString & faceName, WInt pointsize,
  330.                       const WInfoCanvas *canvas=NULL,
  331.                       WInt cy=0, WInt cx=0, WInt escape=0, WInt orient=0,
  332.                       WFBoldType weight=WFNormal, WBool ital=FALSE,
  333.                       WBool under=FALSE, WBool strike=FALSE,
  334.                       WFCharSetType charset=WFDefaultCharSet,
  335.                       WFOutPrecType outprec=WFOutDefault,
  336.                       WFClipPrecType clipprec=WFClipDefault,
  337.                       WFQualityType qual = WFDefaultQuality,
  338.                       WFPitchType ptch=WFDefaultPitch,
  339.                       WFFamilyType fmly=WFDontCare );
  340.  
  341.         // HorizDUToPixel
  342.         //
  343.         //     Convert horizontal dialog units into pixels based
  344.         //     on the font.
  345.  
  346.         WLong HorizDUToPixel( WLong dialogUnits ) const;
  347.  
  348.         // VertDUToPixel
  349.         //
  350.         //     Convert vertical dialog units into pixels based
  351.         //     on the font.
  352.  
  353.         WLong VertDUToPixel( WLong dialogUnits ) const;
  354.  
  355.         // PixelToHorizDU
  356.         //
  357.         //     Convert pixels into horizontal dialog units based
  358.         //     on the font.
  359.  
  360.         WLong PixelToHorizDU( WLong pixels ) const;
  361.  
  362.         // PixelToVertDU
  363.         //
  364.         //     Convert pixels into horizontal dialog units based
  365.         //     on the font.
  366.  
  367.         WLong PixelToVertDU( WLong pixels ) const;
  368.  
  369.         /*************************************************************
  370.          * Static Properties
  371.          *************************************************************/
  372.  
  373.         // DefaultGUIFont
  374.  
  375.         static const WFont & GetDefaultGUIFont();
  376.  
  377.         // InheritedFont
  378.  
  379.         static const WFont & GetInheritedFont();
  380.  
  381.         // NullFont
  382.  
  383.         static const WFont & GetNullFont();
  384.  
  385.         // SystemFont
  386.  
  387.         static const WFont & GetSystemFont();
  388.  
  389.         /************************************************************
  390.          * Static Methods
  391.          ************************************************************/
  392.  
  393.         // IsValidHandle
  394.         //
  395.         //     Returns TRUE if the given handle is valid.  Can
  396.         //     optionally specify whether or not a null handle
  397.         //     is "valid".
  398.  
  399.         static WBool IsValidHandle( WFontHandle handle,
  400.                                     WBool nullValid=FALSE );
  401.  
  402.         /*************************************************************
  403.          * Operator overloads
  404.          *************************************************************/
  405.  
  406.         int operator==( const WFont & f ) const;
  407.         int operator!=( const WFont & f ) const;
  408.  
  409.         /*************************************************************
  410.          * Private
  411.          *************************************************************/
  412.  
  413.     protected:
  414.         WBool PrepareForRead() const;
  415.         WBool PrepareForUpdate() const;
  416.  
  417.     private:
  418.         WFStockFont     _stockFont;
  419.         WFontReference *_fontReference;
  420. };
  421.  
  422. #ifdef _DEBUG
  423. #define W_ISFONTHANDLE(h) CHECKGDI(WFont::IsValidHandle((WFontHandle)h))
  424. #else
  425. #define W_ISFONTHANDLE(h)
  426. #endif
  427.  
  428. #ifndef _WNO_PRAGMA_PUSH
  429. #pragma enum pop;
  430. #pragma pack(pop);
  431. #endif
  432.  
  433. #endif // _WFONT_HPP_INCLUDED
  434.