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  String( s );
247  }
248 
249  /** Print a string into this text object
250  * to right. Wraps at newline characters. Does not change the color or any
251  * other modes. Replaces the entire string.
252  * \param format printf style varargs formatting string.
253  */
254  GLSGEN_GLSTEXTBOX_EXPORT void VaString( const char* format, ... );
255 
256  /* Undocumented.
257  * This method is used to calculate the lines of the text box and is likely to change in future releases.
258  */
259  GLSGEN_GLSTEXTBOX_EXPORT void NextLineInfo( const unsigned int currentStringIndex,
260  unsigned int* lineEndIndex,
261  unsigned int* nextLineStringIndex,
262  float* startXpixels,
263  float* lineLengthPixels );
264 
265  /* Undocumented.
266  * This method is used to calculate the lines of the text box and may change in future releases.
267  */
268  GLSGEN_GLSTEXTBOX_EXPORT unsigned int GetLineCount();
269 
270  /** Sets tab space multiplier, 1.0 == same as specified in font */
271  GLSGEN_GLSTEXTBOX_EXPORT void TabSpacing( float );
272 
273  /** Returns the current tab space multiplier
274  * \return the current tab space multiplier
275  */
276  GLSGEN_GLSTEXTBOX_EXPORT float TabSpacing();
277 
278  /** Determine if the text direction is set to left->right or right->left
279  * \return true if if the text direction is set to left->right else false for right->left
280  */
281  GLSGEN_GLSTEXTBOX_EXPORT bool LeftToRight( void );
282 
283  /** Set the text direction
284  * \param leftToRight true for left->right else false for right->left
285  */
286  GLSGEN_GLSTEXTBOX_EXPORT void LeftToRight( bool leftToRight );
287 
288 protected:
289 #ifdef GLES
290  /** Set a single attribute from the GLO file.
291  * \param data The attribute to set and its associated data.
292  */
293  virtual GLSGEN_GLSTEXTBOX_EXPORT void SetFromGloData( GlsGloFileAttribute& data );
294 #endif
295 
296  /*
297  * Allocate a text buffer of the appropriate size for this grid and output snprintf style format
298  * into the buffer
299  * \param format snprintf style format spec
300  * \param args arguments for sprintf style formatting
301  * \return formatted textbuffer ( must be deleted by caller )
302  */
303  GLSGEN_GLSTEXTBOX_EXPORT char* FormatVarArgList( const char* format, va_list args );
304 
305  /* true -> grid will draw characters using "per character attributes" else
306  * false -> all characters will be drawn using the first character's attribute
307  * NOTE: This defaults to false and automatically enables to true if the user calls
308  * a method that requires per character attributes
309  */
310  bool _perCharAttribs;
311 
312  /*
313  * Enable per character attribute drawing for this grid
314  */
315  GLSGEN_GLSTEXTBOX_EXPORT void EnablePerCharAttribs( void )
316  {
317  if( !_perCharAttribs )
318  {
319  _perCharAttribs = true;
320  SetRebuild();
321  }
322  }
323 
324  /* Justification setting (TOP, CENTER, BOTTOM) */
325  Align_t _verticalAlignment;
326 
327  /* Space multiplier for tabs */
328  float _tabSpacing;
329 
330  //-----------------------------------------------------------------------
331  /*
332  */
333  GLSGEN_GLSTEXTBOX_EXPORT void Rebuild();
334 
335  //-----------------------------------------------------------------------
336  /*
337  */
338  GLSGEN_GLSTEXTBOX_EXPORT void RecalcCellSize();
339 
340  //-----------------------------------------------------------------------
341  /*
342  */
343  GLSGEN_GLSTEXTBOX_EXPORT void RecalcVertices();
344 
345  /** Populate the _rowInfo array based on the current display string
346  * \pre none
347  * \post _rowInfo array is populated based on the current display string
348  */
349  GLSGEN_GLSTEXTBOX_EXPORT virtual void CalculateRowData( void );
350 
351  /* Get the row info for the row starting at the given string index
352  * \param strIndex starting index into string
353  * \param rowLength [out] gets number of characters in row
354  * \param rowPixelWidth [out] gets pixel width of row
355  * \param nextRowStartIndex [out] gets starting string index for next row
356  * else GLSUINT32_MAX if there is no string data for the next row
357  * \pre strIndex < _str.GetLength()
358  * \post rowLength has the number of characters in the row,
359  * rowPixelWidth has the pixel width of the row,
360  * nextRowStartIndex has the starting string index for the next row
361  * else GLSUINT32_MAX if there is no string data for the next row
362  */
363  GLSGEN_GLSTEXTBOX_EXPORT void GetNextRowInfo( const unsigned int strIndex,
364  unsigned int& rowLength,
365  float& rowPixelWidth,
366  unsigned int& nextRowStartIndex ) const;
367 
368 public:
369  /** Get the width for the given character taking into account cell sizing, character spacing, uppercasing
370  * and tab characters width being expanded
371  * \param c character in question
372  * \return width for given character
373  * \pre none
374  * \post none
375  */
376  GLSGEN_GLSTEXTBOX_EXPORT float GetCharWidth( const unsigned short c ) const;
377 
378 protected:
379  /** info for one row of text in the display */
380  struct RowInfo
381  {
382  unsigned int startingIndex; /**< starting text index into the display for row
383  * else GLSUINT32_MAX if row has no characters */
384  unsigned int length; /**< the number of characters in row */
385  float pixelWidth; /**< the width of row in pixels */
386  };
387 
388  /** Number of rows of characters in the text grid (number of lines) */
389  unsigned int _lineCount;
390  bool _lineCountChanged;
391 
392  RowInfo* _rowInfo; /**< array ( _rows number of elements ) of RowInfo */
393 
394  float _cellWidthRatio;
395 
396  float _maxLineLengthPixels;
397  float _maxTextHeightPixels;
398  unsigned int _maxLinesToDraw;
399 
400  bool _leftToRight; /**< true to render characters from left to right else
401  * false for right to left */
402 
403  UnicodeString _unicodeText; /**< unicode version of _text from base class, updated by CalculateRowData */
404 
405  /* helper class for processing underline and strike-thru when drawing text grid */
407  {
408  public:
409  /**
410  * \param cellWidth maximum width of a character cell in the text box
411  * \param cellHeight height of a character cell in the text box
412  * \param cellYScale unused
413  * \param shadow true if text box has shadow enabled
414  * \param shadowOffset offset for shadow
415  * \param shadowColor color of shadow in text box
416  * \param underlineOffset offset of underline
417  * \param underlineSize size of underline
418  * \param halo true if text box has halo enabled
419  * \param haloOffset offset for halo
420  * \param haloColor color of halo in text box
421  * \param leftToRight true if text flows left to right else false for right to left
422  */
423  UnderlineStrikeThruHelper( float cellWidth, float cellHeight, float cellYScale, bool shadow, const Vector& shadowOffset, const GlsColor& shadowColor,
424  float underlineOffset, float underlineSize, bool halo, float haloOffset, GlsColor haloColor, bool leftToRight );
425 
426  /**
427  * Setup to process a new row in the text box.
428  */
429  void NewRow( void );
430 
431  /**
432  * Pre Process the given character attributes
433  * \param charAttr attributes in question
434  * \param c the character code to process.
435  * \param cellX x coord of character cell
436  * \param charY y coord of character
437  */
438  void PreProcessCharacter( const CharAttr_t& charAttr, const Char_t& c, float cellX, float charY );
439 
440  /**
441  * Post Process the given character attributes
442  * \param charAttr attributes in question
443  * \param c the character code to process.
444  * \param cellX x coord of character cell
445  * \param charY y coord of character cell
446  * \param cellWidth the width of the current character
447  * \param endOfLine true if character was the end of the current line
448  */
449  void PostProcessCharacter( const CharAttr_t& charAttr, const Char_t& c, float cellX, float charY, float cellWidth, bool endOfLine );
450 
451 #ifdef GLES
452  /**
453  * Render the line segments for the underline / strikethru
454  * \param quadStorage The quad storage list to render
455  */
456  void RenderLineSegments( GlsQuadListVC_3D& quadStorage );
457 #else
458  /**
459  * Render the line segments for the underline / strikethru
460  */
461  void RenderLineSegments( void );
462 #endif
463 
464  void IgnoreShadow( void );
465 
466  void AllowShadow( void );
467 
468  protected:
469  // cell constants
470  const float _cellWidth;
471  const float _cellHeight;
472 
473  // shadow constants
474  const bool _shadow;
475  const Vector _shadowOffset;
476  const GlsColor _shadowColor;
477  bool _allowShadow;
478 
479  // underline constants
480  const float _underlineOffset;
481  const float _underlineSize;
482 
483  // halo constants
484  const bool _halo;
485  const float _haloOffset;
486  const GlsColor _haloColor;
487 
488  // left to right
489  const bool _leftToRight;
490 
491  // state vars for underline processing
492  float _underlineX1, _underlineX2, _underlineY, _underlineScale;
493  GlsColor _underlineColor;
494  bool _underlineOn;
495 
496  // state vars for strike-thru processing
497  float _strikeX1, _strikeX2, _strikeY, _strikeScale;
498  GlsColor _strikeColor;
499  bool _strikeOn;
500 
501  // state vars for line processing
502  bool _whiteSpaceYes;
503 
504  // line segments to draw
505  typedef std::list<LineSegment_t> LineSegmentCont_t;
506  LineSegmentCont_t _lineSegments;
507  };
508 
509 private:
510  GlsTextBox& operator=( const GlsTextBox& ) DISTI_SPECIAL_MEM_FUN_DELETE;
511  GlsTextBox( const GlsTextBox& ) DISTI_SPECIAL_MEM_FUN_DELETE;
512 
513  /* See base class */
514  void OnCellDimensionChanged()
515  {
516  _needToRebuild = true;
517  }
518 };
519 
520 //---------------------------------------------------------------------------
521 // Stream operators for text enumeration types
522 //---------------------------------------------------------------------------
523 inline std::istream& operator>>(
524  std::istream& instr, disti::GlsTextBox::Align_t& j )
525 {
526  std::string str;
527  instr >> str;
528 
529  if( str == "ALIGN_TOP" )
530  {
531  j = disti::GlsTextBox::ALIGN_TOP;
532  }
533  else if( str == "ALIGN_CENTER" )
534  {
535  j = disti::GlsTextBox::ALIGN_CENTER;
536  }
537  else if( str == "ALIGN_BOTTOM" )
538  {
539  j = disti::GlsTextBox::ALIGN_BOTTOM;
540  }
541  return instr;
542 }
543 
544 //---------------------------------------------------------------------------
545 inline std::ostream& operator<<( std::ostream& outstr, disti::GlsTextBox::Align_t j )
546 {
547  switch( j )
548  {
549  case disti::GlsTextBox::ALIGN_TOP:
550  outstr << "ALIGN_TOP";
551  break;
552  case disti::GlsTextBox::ALIGN_CENTER:
553  outstr << "ALIGN_CENTER";
554  break;
555  case disti::GlsTextBox::ALIGN_BOTTOM:
556  outstr << "ALIGN_BOTTOM";
557  break;
558  }
559  return outstr;
560 }
561 
562 } // namespace disti
563 
564 #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:403
Definition: vertex.h:409
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:301
virtual void PreDraw(const OpenGLMatrices &current, Culler &culler)
virtual unsigned int MaxLinesToDraw(void)
unsigned int length
Definition: gls_text_box.h:384
void VaString(const char *format,...)
float GetCharWidth(const unsigned short c) const
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:392
GlsColor TextColor()
Definition: display.h:98
void Clear(void)
Definition: gls_text_box.h:220
Definition: gls_text_box.h:380
Definition: gls_text.h:151
std::string _text
Definition: gls_text.h:835
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:406
Definition: gls_glo_file.h:982
std::ostream & operator<<(std::ostream &outstr, const AttributeName &name)
Defines the stream out operator.
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:389
void ClearChars(void)
Definition: gls_text_box.h:229
virtual void CopyGeometry(DisplayObject *src)
bool LeftToRight(void)
bool _leftToRight
Definition: gls_text_box.h:400
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:385
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:1112
std::string String() const
Definition: gls_text.h:667
Definition: vertex.h:84
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:823
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:382
The gls_gl.