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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: glfont.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:50:04  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.17
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_OPENGL___GL_FONT__HPP
  10. #define GUI_OPENGL___GL_FONT__HPP
  11. /*  $Id: glfont.hpp,v 1000.1 2004/06/01 19:50:04 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.  *    CGlFont   -- base class for OpenGL fonts
  40.  *    CGlutFont -- GLUT based bitmap fonts
  41.  */
  42. #include <corelib/ncbiobj.hpp>
  43. #include <gui/opengl.h>
  44. #include <gui/opengl/glcolor.hpp>
  45. #include <map>
  46. #include <FL/Enumerations.H>
  47. /** @addtogroup GUI_OPENGL
  48.  *
  49.  * @{
  50.  */
  51. BEGIN_NCBI_SCOPE
  52. //
  53. // Interface class for all OpenGL fonts.
  54. //
  55. class IGlFont : public CObject
  56. {
  57. public:
  58.     // text truncation types
  59.     enum ETruncate {
  60.         // do not attempt any kind of truncation
  61.         eTruncate_None,
  62.         // simply chop the string without providing any details
  63.         eTruncate_Empty,
  64.         // truncate and append an ellipsis
  65.         eTruncate_Ellipsis
  66.     };
  67.     // metric types
  68.     enum EMetric {
  69.         // return the height of a capital letter
  70.         eMetric_CharHeight,
  71.         // return the height of all possible character, including
  72.         // ascents and descents
  73.         eMetric_FullCharHeight,
  74.         // return the widths of all characters
  75.         eMetric_AvgCharWidth,
  76.         // return the maximum width of all characters
  77.         eMetric_MaxCharWidth,
  78.         // return the length of a given string without the final advance
  79.         // (this is the entire space taken up by only this string)
  80.         eMetric_TextWidth,
  81.         // return the length of a given string with the final advance
  82.         eMetric_FullTextWidth
  83.     };
  84.     // must provide default ctor - copy ctor is private
  85.     IGlFont(void) {}
  86.     // destructor
  87.     virtual ~IGlFont(void) {}
  88.     // Print the appropriate text on the screen.  This function uses the
  89.     // current raster position.
  90.     virtual void TextOut(const char* text) const = 0;
  91.     // Print some text on the screen.  This function uses a specified
  92.     // raster position.
  93.     virtual void TextOut(float x, float y, const char* text) const = 0;
  94.     // Output text into a given rectangle using a particular alignment.
  95.     // The alignment is a bitmask of FLTK's Fl_Align enums.  The only
  96.     // distinction is that text is *always* inside
  97.     virtual void TextOut(float x, float y, float w, float h, const char* text,
  98.                          int       align = FL_ALIGN_CENTER,
  99.                          ETruncate trunc = eTruncate_Ellipsis) const = 0;
  100.     // Determine how much space a piece of text will occupy.  This
  101.     // is intended *not* to include the final advance!
  102.     virtual float TextWidth (const char* text) const = 0;
  103.     // determine the text height
  104.     virtual float TextHeight(void) const = 0;
  105.     // query the font for certain metrics
  106.     virtual float GetMetric(EMetric     metric,
  107.                             const char* text = NULL,
  108.                             int         len = -1) const = 0;
  109. private:
  110.     // prohibit
  111.     IGlFont(const IGlFont&);
  112.     IGlFont& operator= (const IGlFont&);
  113. };
  114. //
  115. // Utility class for managing font encoding / interception in feedback mode
  116. //
  117. class CGlFeedbackFont
  118. {
  119. public:
  120.     enum
  121.     {
  122.         eBeginText = 0xBAAB,
  123.         eEndText = 0xCBBC,
  124.         ePosition = 0xFCEB,
  125.         eColor = 0xEFBA
  126.     };
  127.     union FPackChar
  128.     {
  129.         float f;
  130.         char c[4];
  131.     };
  132.     static vector<float> EncodeText(GLfloat pos[4],
  133.                                     const CGlColor& color,
  134.                                     const char* text,
  135.                                     size_t length);
  136.     static vector<float> EncodeText(GLfloat pos[4],
  137.                                     const CGlColor& color,
  138.                                     const string& text);
  139.     static void DecodeText(const vector<float>& textbuf,
  140.                            GLfloat* pos,
  141.                            GLfloat* color,
  142.                            string& text);
  143. };
  144. END_NCBI_SCOPE
  145. /* @} */
  146. /*
  147.  * ===========================================================================
  148.  * $Log: glfont.hpp,v $
  149.  * Revision 1000.1  2004/06/01 19:50:04  gouriano
  150.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.17
  151.  *
  152.  * Revision 1.17  2004/05/11 18:54:22  dicuccio
  153.  * Added doxygne modules info
  154.  *
  155.  * Revision 1.16  2003/10/02 13:36:21  dicuccio
  156.  * Made IGlFont::TextOut(...) variant pure virtual
  157.  *
  158.  * Revision 1.15  2003/09/29 15:13:16  dicuccio
  159.  * iLots of documentation clean-ups.  Changed some of the GetMetric() enums to
  160.  * more clearly describe the metric.  Added ability for GetMetric() to supply text
  161.  * widths
  162.  *
  163.  * Revision 1.14  2003/09/25 17:44:33  dicuccio
  164.  * Added API for checking font metrics (only height is supported)
  165.  *
  166.  * Revision 1.13  2003/09/17 16:17:46  dicuccio
  167.  * Removed CGlutFont.  Added enumerated type in IGlFont for indicating text
  168.  * truncation mechanisms
  169.  *
  170.  * Revision 1.12  2003/08/28 19:28:28  dicuccio
  171.  * Made TextOut() functions const; made display lists in CGlBitmapFont mutable
  172.  *
  173.  * Revision 1.11  2003/08/22 15:56:15  dicuccio
  174.  * Inherit from CObject
  175.  *
  176.  * Revision 1.10  2003/08/21 12:14:24  dicuccio
  177.  * Added #include for <gui/opengl.h
  178.  *
  179.  * Revision 1.9  2003/08/18 19:25:34  dicuccio
  180.  * Changed CGlFont to IGlFont - true interface class.
  181.  *
  182.  * Revision 1.8  2003/05/13 22:07:18  meric
  183.  * Replace static constants with enums
  184.  *
  185.  * Revision 1.7  2003/05/13 19:23:58  dicuccio
  186.  * Added CGlFeedbackFont - traps font output in feedback mode, for converting
  187.  * bitmap -> vector fonts in printing (Peter Meric)
  188.  *
  189.  * Revision 1.6  2003/03/25 17:06:55  dicuccio
  190.  * Changed glut.h --> glut.H to make FLTK happy
  191.  *
  192.  * Revision 1.5  2003/01/13 13:11:42  dicuccio
  193.  * Namespace clean-up.  Retired namespace gui -> converted to namespace ncbi.
  194.  * Moved all FLUID-generated code into namespace ncbi.
  195.  *
  196.  * Revision 1.4  2002/12/19 18:13:03  dicuccio
  197.  * Added export specifiers for Win32.
  198.  *
  199.  * Revision 1.3  2002/11/07 18:24:46  dicuccio
  200.  * Minor #ifdef changes.  Created macro to wrap dumping of OpenGL state.
  201.  *
  202.  * Revision 1.2  2002/11/05 19:52:01  dicuccio
  203.  * Implemented CGlutFont::EFont as well as 'tors for CGlFont
  204.  *
  205.  * Revision 1.1  2002/11/04 20:05:37  dicuccio
  206.  * Initial revision
  207.  *
  208.  * ===========================================================================
  209.  */
  210. #endif  // GUI_OPENGL___GL_FONT__HPP