GL Studio C++ Runtime API
gls_text_box.h
Go to the documentation of this file.
1 /*! \file
2  \brief The disti::GlsTextBox class.
3 
4  \par Copyright Information
5 
6  Copyright (c) 2017 by The DiSTI Corporation.<br>
7  11301 Corporate Blvd; Suite 100<br>
8  Orlando, Florida 32817<br>
9  USA<br>
10  <br>
11  All rights reserved.<br>
12 
13  This Software contains proprietary trade secrets of DiSTI and may not be
14 reproduced, in whole or part, in any form, or by any means of electronic,
15 mechanical, or otherwise, without the written permission of DiSTI. Said
16 permission may be derived through the purchase of applicable DiSTI product
17 licenses which detail the distribution rights of this content and any
18 Derivative Works based on this or other copyrighted DiSTI Software.
19 
20  NO WARRANTY. THE SOFTWARE IS PROVIDED "AS-IS," WITHOUT WARRANTY OF ANY KIND,
21 AND ANY USE OF THIS SOFTWARE PRODUCT IS AT YOUR OWN RISK. TO THE MAXIMUM EXTENT
22 PERMITTED BY APPLICABLE LAW, DISTI AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES
23 AND CONDITIONS, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
24 IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND/OR FITNESS FOR A
25 PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT, WITH REGARD TO THE SOFTWARE.
26 
27  LIMITATION OF LIABILITY. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW,
28 IN NO EVENT SHALL DISTI OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
29 INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION,
30 DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
31 INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR
32 INABILITY TO USE THE SOFTWARE, EVEN IF DISTI HAS BEEN ADVISED OF THE POSSIBILITY
33 OF SUCH DAMAGES. DISTI'S ENTIRE LIABILITY AND YOUR EXCLUSIVE REMEDY SHALL NOT
34 EXCEED FIVE DOLLARS (US$5.00).
35 
36  The aforementioned terms and restrictions are governed by the laws of the
37 State of Florida and the United States of America.
38 
39 */
40 #ifndef _GLS_TEXT_BOX_H
41 #define _GLS_TEXT_BOX_H
42 
43 //////////////////// Provides support for creating DLLs ////////////////////////
44 #if( defined( GLSGEN_EXPORT_GLSTEXTBOX ) || defined( GLSGEN_IMPORT_GLSTEXTBOX ) || defined( GLSGEN_GLSTEXTBOX_EXPORT_GENERATED ) || defined( GLS_IMPORT_GENERATED ) ) \
45  && defined( _MSC_VER )
46 # if defined( GLSGEN_EXPORT_GLSTEXTBOX ) || defined( GLSGEN_GLSTEXTBOX_EXPORT_GENERATED )
47 # define GLSGEN_GLSTEXTBOX_EXPORT __declspec( dllexport )
48 # else
49 # define GLSGEN_GLSTEXTBOX_EXPORT __declspec( dllimport )
50 # endif
51 #else
52 # define GLSGEN_GLSTEXTBOX_EXPORT
53 #endif
54 ///////////////////////////////////////////////////////////////////////////////
55 
56 #include "gls_gl.h"
57 #include <string>
58 
59 #include "gls_cpp_lang_support.h"
60 #include "gls_text.h"
61 #include "unhide_globals.h"
62 
63 #ifdef GLES
64 # include "gls_quad_storage.h"
65 # include "gls_state_manager.h"
66 #endif
67 
68 #define LIB_BASE_NAME "gls_text_box"
69 #include "gls_auto_lib.h"
70 #undef LIB_BASE_NAME
71 
72 //===========================================================================
73 // BEGIN NAMESPACE
74 //===========================================================================
75 namespace disti
76 {
77 #ifdef GLES
78 // Forward Declaration
79 class GlsGloFileAttribute;
80 #endif
81 
82 //===========================================================================
83 /**
84 * The GlsTextBox
85 */
86 class GlsTextBox : public GlsText
87 {
88 protected:
90  void DrawText();
91 
92 #ifdef GLES
93  GlsQuadListVC_3D _backgrounds;
94  GlsQuadListVCT_2D _shadows;
95  GlsQuadListVC_3D _shadowLines;
96  GlsQuadListVCT_2D _characters;
97  GlsQuadListVC_3D _lines;
98 
99  void PopulateQuadStorage();
100 #endif
101 
102 public:
103  typedef GlsText _BaseClass;
104 
105  friend class GlsTextBoxEditor;
106 
107  /** Class Constructor. */
108  GLSGEN_GLSTEXTBOX_EXPORT GlsTextBox();
109  GLSGEN_GLSTEXTBOX_EXPORT GlsTextBox( const GlsTextBox& that, const bool generateNames );
110 
111  /** Class Constructor. */
112  virtual GLSGEN_GLSTEXTBOX_EXPORT ~GlsTextBox();
113 
114  // Need to declare using all base class methods that we overload
115  using _BaseClass::Baseline;
116  using _BaseClass::BgColor;
118  using _BaseClass::CellWidth;
119  using _BaseClass::Char;
120  using _BaseClass::CharAttr;
123  using _BaseClass::Erase;
124  using _BaseClass::FauxBold;
125  using _BaseClass::Inverse;
127  using _BaseClass::String;
128  using _BaseClass::TextColor;
129  using _BaseClass::Underline;
130 
131  /* See base class */
132  virtual GLSGEN_GLSTEXTBOX_EXPORT void SetAvailableAttributes( unsigned int value );
133 
134  /* Peform any necessary non-draw calculations like resizing
135  * the grid.
136  * \param time The time since the start of program execution
137  */
138  virtual GLSGEN_GLSTEXTBOX_EXPORT void Calculate( double time );
139 
140  /* See base class */
141  virtual GLSGEN_GLSTEXTBOX_EXPORT DisplayObject* CloneObject( bool generateNames = false );
142 
143  /* See base class */
144  virtual GLSGEN_GLSTEXTBOX_EXPORT void CopyGeometry( DisplayObject* src );
145 
146  /* See base class */
147  virtual GLSGEN_GLSTEXTBOX_EXPORT void CopyProperties( DisplayObject* src );
148 
149  /* See base class */
150  virtual GLSGEN_GLSTEXTBOX_EXPORT void Draw( void );
151 
152 #ifndef GLES
153  /* See base class */
154  virtual GLSGEN_GLSTEXTBOX_EXPORT InterfaceListType* GetCppInterfaceDescription(
155  InterfaceListType* addToThisList = NULL );
156 
157  /* See base class */
158  virtual GLSGEN_GLSTEXTBOX_EXPORT void GetCppInterfaceDescriptionFree(
159  InterfaceListType* array );
160 #endif
161 
162 #ifdef GLES
163  /* See base class */
164  virtual GLSGEN_GLSTEXTBOX_EXPORT void PreDraw( const OpenGLMatrices& current, Culler& culler );
165 #endif
166 
167  /* See base class */
168  virtual GLSGEN_GLSTEXTBOX_EXPORT void SetVertices( unsigned int nPoints, Vertex* vertices );
169 
170  /* See base class */
171  virtual GLSGEN_GLSTEXTBOX_EXPORT void Initialize();
172 
173  /* Unhides base class implementation. */
174  using _BaseClass::Scale;
175 
176  /**
177  We need to know the Max number of lines/rows possible to display, we
178  may run out of characters to print/display before we hit the max
179  number of lines though.
180  \return A value between Zero and INT_MAX, representing the max lines/rows to draw
181  \pre The TextBox object has been initialized
182  \post The value of max lines returned to the caller
183  */
184  virtual GLSGEN_GLSTEXTBOX_EXPORT unsigned int MaxLinesToDraw( void );
185 
186  /* See base class */
187  virtual GLSGEN_GLSTEXTBOX_EXPORT void Scale( float px, float py, float pz, Vertex* anchor, int handleBar );
188 
189  // Different text justifications.
190  enum Align_t
191  {
192  ALIGN_CENTER,
193  ALIGN_TOP,
194  ALIGN_BOTTOM
195  };
196 
197  /** Set the vertical justification for this text object
198  * \param justification The justification mode (TOP, BOTTOM, CENTER)
199  */
200  GLSGEN_GLSTEXTBOX_EXPORT void VerticalAlignment( Align_t justification );
201 
202  /** Get the vertical justification for this text object
203  * \return vertical justification
204  */
205  virtual Align_t VerticalAlignment() const
206  {
207  return _verticalAlignment;
208  }
209 
210  //-----------------------------------------------------------------------
211  //-----------------------------------------------------------------------
212  // Routines for compatbility with TextDisplay.gls
213  //-----------------------------------------------------------------------
214  //-----------------------------------------------------------------------
215 
216  /** Clears all of the characters and resets the attributes of all
217  * characters (TextDisplay compatability method)
218  * \deprecated use Erase instead
219  */
220  GLSGEN_GLSTEXTBOX_EXPORT void Clear( void )
221  {
222  Erase();
223  }
224 
225  /** Clears all of the characters. Does NOT reset the attributes
226  * of the characters (TextDisplay compatability method)
227  * \deprecated
228  */
229  GLSGEN_GLSTEXTBOX_EXPORT void ClearChars( void )
230  {
231  _text.erase();
232  SetRebuild();
233  }
234 
235  /** SetColor() meaning has changed, now use TextColor */
236 
237  /** Print a string into this text object starting at index 0 and proceeding Left
238  * to right Wraps at newline characters. Does not change the color or any
239  * other modes. Replaces the entire string.
240  * (TextDisplay compatability method)
241  * \param s The string to print
242  * \deprecated use String instead
243  */
244  GLSGEN_GLSTEXTBOX_EXPORT void SetString( const char* s )
245  {
246  _needToRebuild = true;
247  String( s );
248  }
249 
250  /** Print a string into this text object
251  * to right. Wraps at newline characters. Does not change the color or any
252  * other modes. Replaces the entire string.
253  * \param format printf style varargs formatting string.
254  */
255  GLSGEN_GLSTEXTBOX_EXPORT void VaString( const char* format, ... );
256 
257  /* Undocumented.
258  * This method is used to calculate the lines of the text box and is likely to change in future releases.
259  */
260  GLSGEN_GLSTEXTBOX_EXPORT void NextLineInfo( const unsigned int currentStringIndex,
261  unsigned int* lineEndIndex,
262  unsigned int* nextLineStringIndex,
263  float* startXpixels,
264  float* lineLengthPixels );
265 
266  /* Undocumented.
267  * This method is used to calculate the lines of the text box and may change in future releases.
268  */
269  GLSGEN_GLSTEXTBOX_EXPORT unsigned int GetLineCount();
270 
271  /** Sets tab space multiplier, 1.0 == same as specified in font */
272  GLSGEN_GLSTEXTBOX_EXPORT void TabSpacing( float );
273 
274  /** Returns the current tab space multiplier
275  * \return the current tab space multiplier
276  */
277  GLSGEN_GLSTEXTBOX_EXPORT float TabSpacing();
278 
279  /** Determine if the text direction is set to left->right or right->left
280  * \return true if if the text direction is set to left->right else false for right->left
281  */
282  GLSGEN_GLSTEXTBOX_EXPORT bool LeftToRight( void );
283 
284  /** Set the text direction
285  * \param leftToRight true for left->right else false for right->left
286  */
287  GLSGEN_GLSTEXTBOX_EXPORT void LeftToRight( bool leftToRight );
288 
289 protected:
290 #ifdef GLES
291  /** Set a single attribute from the GLO file.
292  * \param data The attribute to set and its associated data.
293  */
294  virtual GLSGEN_GLSTEXTBOX_EXPORT void SetFromGloData( GlsGloFileAttribute& data );
295 #endif
296 
297  /*
298  * Allocate a text buffer of the appropriate size for this grid and output snprintf style format
299  * into the buffer
300  * \param format snprintf style format spec
301  * \param args arguments for sprintf style formatting
302  * \return formatted textbuffer ( must be deleted by caller )
303  */
304  GLSGEN_GLSTEXTBOX_EXPORT char* FormatVarArgList( const char* format, va_list args );
305 
306  /* true -> grid will draw characters using "per character attributes" else
307  * false -> all characters will be drawn using the first character's attribute
308  * NOTE: This defaults to false and automatically enables to true if the user calls
309  * a method that requires per character attributes
310  */
311  bool _perCharAttribs;
312 
313  /*
314  * Enable per character attribute drawing for this grid
315  */
316  GLSGEN_GLSTEXTBOX_EXPORT void EnablePerCharAttribs( void )
317  {
318  if( !_perCharAttribs )
319  {
320  _perCharAttribs = true;
321  SetRebuild();
322  }
323  }
324 
325  /* Justification setting (TOP, CENTER, BOTTOM) */
326  Align_t _verticalAlignment;
327 
328  /* Space multiplier for tabs */
329  float _tabSpacing;
330 
331  //-----------------------------------------------------------------------
332  /*
333  */
334  GLSGEN_GLSTEXTBOX_EXPORT void Rebuild();
335 
336  //-----------------------------------------------------------------------
337  /*
338  */
339  GLSGEN_GLSTEXTBOX_EXPORT void RecalcCellSize();
340 
341  //-----------------------------------------------------------------------
342  /*
343  */
344  GLSGEN_GLSTEXTBOX_EXPORT void RecalcVertices();
345 
346  /** Populate the _rowInfo array based on the current display string
347  * \pre none
348  * \post _rowInfo array is populated based on the current display string
349  */
350  GLSGEN_GLSTEXTBOX_EXPORT virtual void CalculateRowData( void );
351 
352  /* Get the row info for the row starting at the given string index
353  * \param strIndex starting index into string
354  * \param rowLength [out] gets number of characters in row
355  * \param rowPixelWidth [out] gets pixel width of row
356  * \param nextRowStartIndex [out] gets starting string index for next row
357  * else GLSUINT32_MAX if there is no string data for the next row
358  * \pre strIndex < _str.GetLength()
359  * \post rowLength has the number of characters in the row,
360  * rowPixelWidth has the pixel width of the row,
361  * nextRowStartIndex has the starting string index for the next row
362  * else GLSUINT32_MAX if there is no string data for the next row
363  */
364  GLSGEN_GLSTEXTBOX_EXPORT void GetNextRowInfo(const unsigned int strIndex,
365  unsigned int& rowLength,
366  float& rowPixelWidth,
367  unsigned int& nextRowStartIndex ) const;
368 
369 public:
370  /* Get the width for the given character taking into account cell sizing, character spacing, uppercasing
371  * and tab characters width being expanded
372  * \param c character in question
373  * \return width for given character
374  * \pre none
375  * \post none
376  */
377  GLSGEN_GLSTEXTBOX_EXPORT float GetCharWidth(const unsigned short c) const;
378 
379 protected:
380  /** info for one row of text in the display */
381  struct RowInfo
382  {
383  unsigned int startingIndex; /**< starting text index into the display for row
384  * else GLSUINT32_MAX if row has no characters */
385  unsigned int length; /**< the number of characters in row */
386  float pixelWidth; /**< the width of row in pixels */
387  };
388 
389  /** Number of rows of characters in the text grid (number of lines) */
390  unsigned int _lineCount;
391  bool _lineCountChanged;
392 
393  RowInfo* _rowInfo; /**< array ( _rows number of elements ) of RowInfo */
394 
395  float _cellWidthRatio;
396 
397  float _maxLineLengthPixels;
398  float _maxTextHeightPixels;
399  unsigned int _maxLinesToDraw;
400 
401  bool _leftToRight; /**< true to render characters from left to right else
402  * false for right to left */
403 
404  UnicodeString _unicodeText; /**< unicode version of _text from base class, updated by CalculateRowData */
405 
406  /* helper class for processing underline and strike-thru when drawing text grid */
408  {
409  public:
410  /**
411  * \param cellWidth maximum width of a character cell in the text box
412  * \param cellHeight height of a character cell in the text box
413  * \param cellYScale unused
414  * \param shadow true if text box has shadow enabled
415  * \param shadowOffset offset for shadow
416  * \param shadowColor color of shadow in text box
417  * \param underlineOffset offset of underline
418  * \param underlineSize size of underline
419  * \param halo true if text box has halo enabled
420  * \param haloOffset offset for halo
421  * \param haloColor color of halo in text box
422  * \param leftToRight true if text flows left to right else false for right to left
423  */
424  UnderlineStrikeThruHelper( float cellWidth, float cellHeight, float cellYScale, bool shadow, const Vector& shadowOffset, const GlsColor& shadowColor,
425  float underlineOffset, float underlineSize, bool halo, float haloOffset, GlsColor haloColor, bool leftToRight );
426 
427  /**
428  * Setup to process a new row in the text box.
429  */
430  void NewRow( void );
431 
432  /**
433  * Pre Process the given character attributes
434  * \param charAttr attributes in question
435  * \param c the character code to process.
436  * \param cellX x coord of character cell
437  * \param charY y coord of character
438  */
439  void PreProcessCharacter( const CharAttr_t& charAttr, const Char_t& c, float cellX, float charY );
440 
441  /**
442  * Post Process the given character attributes
443  * \param charAttr attributes in question
444  * \param c the character code to process.
445  * \param cellX x coord of character cell
446  * \param charY y coord of character cell
447  * \param cellWidth the width of the current character
448  * \param endOfLine true if character was the end of the current line
449  */
450  void PostProcessCharacter( const CharAttr_t& charAttr, const Char_t& c, float cellX, float charY, float cellWidth, bool endOfLine );
451 
452 #ifdef GLES
453  /**
454  * Render the line segments for the underline / strikethru
455  * \param quadStorage The quad storage list to render
456  */
457  void RenderLineSegments( GlsQuadListVC_3D& quadStorage );
458 #else
459  /**
460  * Render the line segments for the underline / strikethru
461  */
462  void RenderLineSegments( void );
463 #endif
464 
465  void IgnoreShadow( void );
466 
467  void AllowShadow( void );
468 
469  protected:
470  // cell constants
471  const float _cellWidth;
472  const float _cellHeight;
473 
474  // shadow constants
475  const bool _shadow;
476  const Vector _shadowOffset;
477  const GlsColor _shadowColor;
478  bool _allowShadow;
479 
480  // underline constants
481  const float _underlineOffset;
482  const float _underlineSize;
483 
484  // halo constants
485  const bool _halo;
486  const float _haloOffset;
487  const GlsColor _haloColor;
488 
489  // left to right
490  const bool _leftToRight;
491 
492  // state vars for underline processing
493  float _underlineX1, _underlineX2, _underlineY, _underlineScale;
494  GlsColor _underlineColor;
495  bool _underlineOn;
496 
497  // state vars for strike-thru processing
498  float _strikeX1, _strikeX2, _strikeY, _strikeScale;
499  GlsColor _strikeColor;
500  bool _strikeOn;
501 
502  // state vars for line processing
503  bool _whiteSpaceYes;
504 
505  // line segments to draw
506  typedef std::list<LineSegment_t> LineSegmentCont_t;
507  LineSegmentCont_t _lineSegments;
508  };
509 
510 private:
511  GlsTextBox& operator=( const GlsTextBox& ) DISTI_SPECIAL_MEM_FUN_DELETE;
512  GlsTextBox( const GlsTextBox& ) DISTI_SPECIAL_MEM_FUN_DELETE;
513 
514  /* See base class */
515  void OnCellDimensionChanged()
516  {
517  _needToRebuild = true;
518  }
519 };
520 
521 //---------------------------------------------------------------------------
522 // Stream operators for text enumeration types
523 //---------------------------------------------------------------------------
524 inline std::istream& operator>>(
525  std::istream& instr, disti::GlsTextBox::Align_t& j )
526 {
527  std::string str;
528  instr >> str;
529 
530  if( str == "ALIGN_TOP" )
531  {
532  j = disti::GlsTextBox::ALIGN_TOP;
533  }
534  else if( str == "ALIGN_CENTER" )
535  {
536  j = disti::GlsTextBox::ALIGN_CENTER;
537  }
538  else if( str == "ALIGN_BOTTOM" )
539  {
540  j = disti::GlsTextBox::ALIGN_BOTTOM;
541  }
542  return instr;
543 }
544 
545 //---------------------------------------------------------------------------
546 inline std::ostream& operator<<( std::ostream& outstr, disti::GlsTextBox::Align_t j )
547 {
548  switch( j )
549  {
550  case disti::GlsTextBox::ALIGN_TOP:
551  outstr << "ALIGN_TOP";
552  break;
553  case disti::GlsTextBox::ALIGN_CENTER:
554  outstr << "ALIGN_CENTER";
555  break;
556  case disti::GlsTextBox::ALIGN_BOTTOM:
557  outstr << "ALIGN_BOTTOM";
558  break;
559  }
560  return outstr;
561 }
562 
563 } // namespace disti
564 
565 #endif
The DistiUnhideGlobalsDummyClass class.
Definition: cull.h:49
virtual void SetVertices(unsigned int nPoints, Vertex *vertices)
float Baseline()
UnicodeString _unicodeText
Definition: gls_text_box.h:404
Definition: vertex.h:408
virtual DisplayObject * CloneObject(bool generateNames=false)
virtual void SetAvailableAttributes(unsigned int value)
Definition: dynamic_array.h:62
Class to contain current OpenGL view, projection and draw matrices.
Definition: util.h:278
virtual void PreDraw(const OpenGLMatrices &current, Culler &culler)
virtual unsigned int MaxLinesToDraw(void)
unsigned int length
Definition: gls_text_box.h:385
void VaString(const char *format,...)
The disti::GlsQuadListVC_3D and GlsQuadListVCT_2D classes.
Attributes for each character position in the grid.
Definition: gls_text.h:175
void PostProcessCharacter(const CharAttr_t &charAttr, const Char_t &c, float cellX, float charY, float cellWidth, bool endOfLine)
RowInfo * _rowInfo
Definition: gls_text_box.h:393
GlsColor TextColor()
Definition: display.h:97
void Clear(void)
Definition: gls_text_box.h:220
Definition: gls_text_box.h:381
Definition: gls_text.h:151
std::string _text
Definition: gls_text.h:834
Definition: gls_quad_storage.h:156
GlsColor BgColor()
The disti::GlsText class.
The disti::GlsStateManager factory class. Creates an instance of a state manager that manages the GL ...
void PreProcessCharacter(const CharAttr_t &charAttr, const Char_t &c, float cellX, float charY)
void SetString(const char *s)
Definition: gls_text_box.h:244
void Char(Char_t code)
Definition: gls_text_box.h:407
Definition: gls_glo_file.h:835
virtual void Scale(float px, float py, float pz, Vertex *anchor, int handleBar)
float CellWidth() const
Definition: gls_text.h:392
unsigned int _lineCount
Definition: gls_text_box.h:390
void ClearChars(void)
Definition: gls_text_box.h:229
virtual void CopyGeometry(DisplayObject *src)
bool LeftToRight(void)
bool _leftToRight
Definition: gls_text_box.h:401
Definition: gls_text_box.h:86
UnderlineStrikeThruHelper(float cellWidth, float cellHeight, float cellYScale, bool shadow, const Vector &shadowOffset, const GlsColor &shadowColor, float underlineOffset, float underlineSize, bool halo, float haloOffset, GlsColor haloColor, bool leftToRight)
float pixelWidth
Definition: gls_text_box.h:386
virtual ~GlsTextBox()
Definition: gls_color.h:53
The gls_auto_lib.
virtual void CopyProperties(DisplayObject *src)
virtual InterfaceListType * GetCppInterfaceDescription(InterfaceListType *addToThisList=NULL)
virtual void GetCppInterfaceDescriptionFree(InterfaceListType *array)
float CharScaling()
CharAttr_t CharAttr(unsigned int index) const
Definition: gls_text.h:414
float CharSpacing()
void Scale(int handleBar, float px, float py, Vertex *anchor=NULL)
Definition: display.h:1111
std::string String() const
Definition: gls_text.h:667
Definition: vertex.h:83
void SetRebuild()
Definition: gls_text.h:711
virtual Align_t VerticalAlignment() const
Definition: gls_text_box.h:205
virtual void CalculateRowData(void)
Macros and helper code to determine what subset of C++11/14/17 is available.
Definition: gls_quad_storage.h:63
bool _needToRebuild
Definition: gls_text.h:822
Definition: bmpimage.h:46
virtual void Calculate(double time)
virtual void Draw(void)
float CellHeight() const
Definition: gls_text.h:378
unsigned int startingIndex
Definition: gls_text_box.h:383
The gls_gl.