glbitmapfont.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:10k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: glbitmapfont.hpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/06/01 19:49:23  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.15
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_OPENGL___GLBITMAPFONT__HPP
  10. #define GUI_OPENGL___GLBITMAPFONT__HPP
  11. /*  $Id: glbitmapfont.hpp,v 1000.3 2004/06/01 19:49:23 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Authors:  Mike DiCuccio
  37.  *
  38.  * File Description:
  39.  *
  40.  */
  41. #include <gui/opengl/glfont.hpp>
  42. /** @addtogroup GUI_OPENGL
  43.  *
  44.  * @{
  45.  */
  46. BEGIN_NCBI_SCOPE
  47. class CGlDisplayList;
  48. //
  49. // Stand-in for GLUT fonts.  This uses glBitmap directly.
  50. //
  51. class NCBI_GUIOPENGL_EXPORT CGlBitmapFont : public IGlFont
  52. {
  53. public:
  54.     enum EFontSize {
  55.         eFontSize_6  = 0x01,
  56.         eFontSize_8  = 0x02,
  57.         eFontSize_10 = 0x03,
  58.         eFontSize_12 = 0x04,
  59.         eFontSize_14 = 0x05,
  60.         eFontSize_16 = 0x06,
  61.         eFontSize_18 = 0x07,
  62.         eFontSize_20 = 0x08,
  63.         eFontSize_24 = 0x09
  64.     };
  65.     enum EFontFace {
  66.         eFontFace_Bitmap     = 0x0100,
  67.         eFontFace_Helvetica  = 0x0200,
  68.         eFontFace_Lucida     = 0x0300,
  69.         eFontFace_Courier    = 0x0400,
  70.         eFontFace_Clean      = 0x0500,
  71.         eFontFace_Fixed      = 0x0600,
  72.         eFontFace_TimesRoman = 0x0700
  73.     };
  74.     enum EFont {
  75.         // fixed size fonts
  76.         // here, size doesn't map 1:1
  77.         eBitmap5x7   = eFontFace_Bitmap | eFontSize_8,
  78.         eBitmap8x13  = eFontFace_Bitmap | eFontSize_12,
  79.         eBitmap9x15  = eFontFace_Bitmap | eFontSize_14,
  80.         eBitmap10x20 = eFontFace_Bitmap | eFontSize_18,
  81.         eBitmap12x24 = eFontFace_Bitmap | eFontSize_24,
  82.         // helvetica
  83.         eHelvetica6  = eFontFace_Helvetica | eFontSize_6,
  84.         eHelvetica8  = eFontFace_Helvetica | eFontSize_8,
  85.         eHelvetica10 = eFontFace_Helvetica | eFontSize_10,
  86.         eHelvetica12 = eFontFace_Helvetica | eFontSize_12,
  87.         eHelvetica14 = eFontFace_Helvetica | eFontSize_14,
  88.         eHelvetica18 = eFontFace_Helvetica | eFontSize_18,
  89.         eHelvetica20 = eFontFace_Helvetica | eFontSize_20,
  90.         eHelvetica24 = eFontFace_Helvetica | eFontSize_24,
  91.         // lucida
  92.         eLucida6  = eFontFace_Lucida | eFontSize_6,
  93.         eLucida8  = eFontFace_Lucida | eFontSize_8,
  94.         eLucida10 = eFontFace_Lucida | eFontSize_10,
  95.         eLucida12 = eFontFace_Lucida | eFontSize_12,
  96.         eLucida14 = eFontFace_Lucida | eFontSize_14,
  97.         eLucida18 = eFontFace_Lucida | eFontSize_18,
  98.         eLucida20 = eFontFace_Lucida | eFontSize_20,
  99.         eLucida24 = eFontFace_Lucida | eFontSize_24,
  100.         // courier
  101.         eCourier6  = eFontFace_Courier | eFontSize_6,
  102.         eCourier8  = eFontFace_Courier | eFontSize_8,
  103.         eCourier10 = eFontFace_Courier | eFontSize_10,
  104.         eCourier12 = eFontFace_Courier | eFontSize_12,
  105.         eCourier14 = eFontFace_Courier | eFontSize_14,
  106.         eCourier18 = eFontFace_Courier | eFontSize_18,
  107.         eCourier20 = eFontFace_Courier | eFontSize_20,
  108.         eCourier24 = eFontFace_Courier | eFontSize_24,
  109.         // clean
  110.         eClean6  = eFontFace_Clean | eFontSize_6,
  111.         eClean8  = eFontFace_Clean | eFontSize_8,
  112.         eClean10 = eFontFace_Clean | eFontSize_10,
  113.         eClean12 = eFontFace_Clean | eFontSize_12,
  114.         eClean14 = eFontFace_Clean | eFontSize_14,
  115.         eClean18 = eFontFace_Clean | eFontSize_18,
  116.         eClean20 = eFontFace_Clean | eFontSize_20,
  117.         eClean24 = eFontFace_Clean | eFontSize_24,
  118.         // fixed
  119.         eFixed6  = eFontFace_Fixed | eFontSize_6,
  120.         eFixed8  = eFontFace_Fixed | eFontSize_8,
  121.         eFixed10 = eFontFace_Fixed | eFontSize_10,
  122.         eFixed12 = eFontFace_Fixed | eFontSize_12,
  123.         eFixed14 = eFontFace_Fixed | eFontSize_14,
  124.         eFixed18 = eFontFace_Fixed | eFontSize_18,
  125.         eFixed20 = eFontFace_Fixed | eFontSize_20,
  126.         eFixed24 = eFontFace_Fixed | eFontSize_24,
  127.         // Times Roman
  128.         eTimesRoman6  = eFontFace_TimesRoman | eFontSize_6,
  129.         eTimesRoman8  = eFontFace_TimesRoman | eFontSize_8,
  130.         eTimesRoman10 = eFontFace_TimesRoman | eFontSize_10,
  131.         eTimesRoman12 = eFontFace_TimesRoman | eFontSize_12,
  132.         eTimesRoman14 = eFontFace_TimesRoman | eFontSize_14,
  133.         eTimesRoman18 = eFontFace_TimesRoman | eFontSize_18,
  134.         eTimesRoman20 = eFontFace_TimesRoman | eFontSize_20,
  135.         eTimesRoman24 = eFontFace_TimesRoman | eFontSize_24
  136.     };
  137.     // default constructor.  This creates a font for the 8x13 bitmap font
  138.     // face
  139.     CGlBitmapFont(void);
  140.     // create a bitmap font with a particular face in mind
  141.     CGlBitmapFont(EFont font);
  142.     // destructor
  143.     ~CGlBitmapFont();
  144.     // set the font to one of the predefined options
  145.     void SetFont    (EFont font);
  146.     void SetFontFace(EFontFace face);
  147.     void SetFontSize(EFontSize size);
  148.     // Dump some text somewhere
  149.     virtual void TextOut(const char* text) const;
  150.     virtual void TextOut(float x, float y, const char* text) const;
  151.     // Output text into a given rectangle using a particular alignment.
  152.     // The alignment is a bitmask of FLTK's Fl_Align enums.  The only
  153.     // distinction is that text is *always* inside
  154.     void TextOut(float x, float y, float w, float h, const char* text,
  155.                  int align = FL_ALIGN_CENTER,
  156.                  ETruncate trunc = eTruncate_Ellipsis) const;
  157.     string Truncate(const char*, float w, ETruncate trunc = eTruncate_Ellipsis) const;
  158.     string Truncate(const string& str, float w, ETruncate trunc = eTruncate_Ellipsis) const;
  159.     
  160.     /// prints array of characters in positions (x + i*dx, y + i*dy) where
  161.     /// "i" is index of a character in the given string
  162.     void    ArrayTextOut(float x, float y, float dx, float dy, const char* text, 
  163.                          float scale_x = 1.0f, float scale_y = 1.0f) const;
  164.     // Determine how much space a piece of text will occupy
  165.     virtual float TextWidth (const char* text) const;
  166.     virtual float TextWidth (const char* text, int n) const;
  167.     virtual float TextHeight(void) const;
  168.     // generic metric retrieval
  169.     virtual float GetMetric(EMetric metric,
  170.                             const char* text_start = NULL,
  171.                             int len = -1) const;
  172. private:
  173.     // The font we're rendering
  174.     EFont m_Font;
  175.     // precomputed font height
  176.     float m_FontHeight;
  177.     // a set of display lists, one for each character
  178.     mutable CRef<CGlDisplayList> m_Chars[256];
  179.     // Truncate a string for display.  This returns the maximum
  180.     // number of characters that can fit into the given width.  If the
  181.     // parameter 'str' is not null, the string will be filled out with
  182.     // the truncated text.
  183.     int x_Truncate(const char* text, float w, ETruncate trunc,
  184.                    string* str = NULL) const;
  185.     // prohibit
  186.     CGlBitmapFont(const CGlBitmapFont&);
  187.     CGlBitmapFont& operator= (const CGlBitmapFont&);
  188. };
  189. /// temporary placed here, later should be moved to the appropriate location
  190. class NCBI_GUIOPENGL_EXPORT CTextUtils
  191. {
  192. public:
  193.     static string   FormatSeparatedNumber(int number, bool b_postfix = false);
  194.     
  195.     /// returns number of characters in symbolic representation of the given
  196.     /// number including non-digit separators ( 1,234 )
  197.     static int      GetCharsCount(int number);
  198. };
  199. END_NCBI_SCOPE
  200. /* @} */
  201. /*
  202.  * ===========================================================================
  203.  * $Log: glbitmapfont.hpp,v $
  204.  * Revision 1000.3  2004/06/01 19:49:23  gouriano
  205.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.15
  206.  *
  207.  * Revision 1.15  2004/05/21 12:44:37  dicuccio
  208.  * Added new font faces
  209.  *
  210.  * Revision 1.14  2004/05/11 18:54:22  dicuccio
  211.  * Added doxygne modules info
  212.  *
  213.  * Revision 1.13  2004/04/20 14:08:37  rsmith
  214.  * trailing commas at the ends of lists are non-standard and give warnings on some platforms.
  215.  *
  216.  * Revision 1.12  2004/03/12 15:28:49  dicuccio
  217.  * Cleaned up non-uniqueness in enums
  218.  *
  219.  * Revision 1.11  2004/03/11 17:17:26  dicuccio
  220.  * Separated font face from font size
  221.  *
  222.  * Revision 1.10  2004/03/03 15:04:47  yazhuk
  223.  * Fixed comments
  224.  *
  225.  * Revision 1.9  2003/11/17 21:02:36  yazhuk
  226.  * Refactored Truncate(), added ArrayTextOut(),
  227.  * renamed GetDigitsCount() to GetCharsCount()
  228.  *
  229.  * Revision 1.8  2003/10/29 22:26:54  yazhuk
  230.  * Added CTextUtils class
  231.  *
  232.  * Revision 1.7  2003/10/09 17:59:06  lebedev
  233.  * Truncate method made public
  234.  *
  235.  * Revision 1.6  2003/09/29 15:11:48  dicuccio
  236.  * Fleshed out GetMetric() API to include text width
  237.  *
  238.  * Revision 1.5  2003/09/25 17:44:33  dicuccio
  239.  * Added API for checking font metrics (only height is supported)
  240.  *
  241.  * Revision 1.4  2003/09/17 16:18:51  dicuccio
  242.  * Added new API for text placement - aligned / truncated text within a defined
  243.  * rectangle
  244.  *
  245.  * Revision 1.3  2003/08/28 19:28:28  dicuccio
  246.  * Made TextOut() functions const; made display lists in CGlBitmapFont mutable
  247.  *
  248.  * Revision 1.2  2003/08/22 15:55:59  dicuccio
  249.  * Added display lists to font renderer.  Altered order of fonts in enum to match
  250.  * use as array index
  251.  *
  252.  * Revision 1.1  2003/08/18 19:25:44  dicuccio
  253.  * initial revision
  254.  *
  255.  * ===========================================================================
  256.  */
  257. #endif  // GUI_OPENGL___GLBITMAPFONT__HPP