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  DISTI_DEPRECATED( "This identifier is forbidden by the C++ standard. Use BaseClass instead." )
104  typedef GlsText _BaseClass;
105  typedef GlsText BaseClass;
106 
107  friend class GlsTextBoxEditor;
108 
109  /** Class Constructor. */
110  GLSGEN_GLSTEXTBOX_EXPORT GlsTextBox();
111  GLSGEN_GLSTEXTBOX_EXPORT GlsTextBox( const GlsTextBox& that, const bool generateNames );
112 
113  /** Class Constructor. */
114  virtual GLSGEN_GLSTEXTBOX_EXPORT ~GlsTextBox();
115 
116  // Need to declare using all base class methods that we overload
117  using BaseClass::Baseline;
118  using BaseClass::BgColor;
119  using BaseClass::CellHeight;
120  using BaseClass::CellWidth;
121  using BaseClass::Char;
122  using BaseClass::CharAttr;
125  using BaseClass::Erase;
126  using BaseClass::FauxBold;
127  using BaseClass::Inverse;
128  using BaseClass::StrikeThru;
129  using BaseClass::String;
130  using BaseClass::TextColor;
131  using BaseClass::Underline;
132 
133  /* See base class */
134  virtual GLSGEN_GLSTEXTBOX_EXPORT void SetAvailableAttributes( unsigned int value );
135 
136  /* Peform any necessary non-draw calculations like resizing
137  * the grid.
138  * \param time The time since the start of program execution
139  */
140  virtual GLSGEN_GLSTEXTBOX_EXPORT void Calculate( double time );
141 
142  /* See base class */
143  virtual GLSGEN_GLSTEXTBOX_EXPORT DisplayObject* CloneObject( bool generateNames = false );
144 
145  /* See base class */
146  virtual GLSGEN_GLSTEXTBOX_EXPORT void CopyGeometry( DisplayObject* src );
147 
148  /* See base class */
149  virtual GLSGEN_GLSTEXTBOX_EXPORT void CopyProperties( DisplayObject* src );
150 
151  /* See base class */
152  virtual GLSGEN_GLSTEXTBOX_EXPORT void Draw( void );
153 
154 #ifndef GLES
155  /* See base class */
156  virtual GLSGEN_GLSTEXTBOX_EXPORT InterfaceListType* GetCppInterfaceDescription(
157  InterfaceListType* addToThisList = NULL );
158 
159  /* See base class */
160  virtual GLSGEN_GLSTEXTBOX_EXPORT void GetCppInterfaceDescriptionFree(
161  InterfaceListType* array );
162 #endif
163 
164 #ifdef GLES
165  /* See base class */
166  virtual GLSGEN_GLSTEXTBOX_EXPORT void PreDraw( const OpenGLMatrices& current, Culler& culler );
167 #endif
168 
169  /* See base class */
170  virtual GLSGEN_GLSTEXTBOX_EXPORT void SetVertices( unsigned int nPoints, Vertex* vertices );
171 
172  /* See base class */
173  virtual GLSGEN_GLSTEXTBOX_EXPORT void Initialize();
174 
175  /* Unhides base class implementation. */
176  using BaseClass::Scale;
177 
178  /**
179  We need to know the Max number of lines/rows possible to display, we
180  may run out of characters to print/display before we hit the max
181  number of lines though.
182  \return A value between Zero and INT_MAX, representing the max lines/rows to draw
183  \pre The TextBox object has been initialized
184  \post The value of max lines returned to the caller
185  */
186  virtual GLSGEN_GLSTEXTBOX_EXPORT unsigned int MaxLinesToDraw( void );
187 
188  /* See base class */
189  virtual GLSGEN_GLSTEXTBOX_EXPORT void Scale( float px, float py, float pz, Vertex* anchor, int handleBar );
190 
191  // Different text justifications.
192  enum Align_t
193  {
194  ALIGN_CENTER,
195  ALIGN_TOP,
196  ALIGN_BOTTOM
197  };
198 
199  /** Set the vertical justification for this text object
200  * \param justification The justification mode (TOP, BOTTOM, CENTER)
201  */
202  GLSGEN_GLSTEXTBOX_EXPORT void VerticalAlignment( Align_t justification );
203 
204  /** Get the vertical justification for this text object
205  * \return vertical justification
206  */
207  virtual Align_t VerticalAlignment() const
208  {
209  return _verticalAlignment;
210  }
211 
212  //-----------------------------------------------------------------------
213  //-----------------------------------------------------------------------
214  // Routines for compatbility with TextDisplay.gls
215  //-----------------------------------------------------------------------
216  //-----------------------------------------------------------------------
217 
218  /** Clears all of the characters and resets the attributes of all
219  * characters (TextDisplay compatability method)
220  * \deprecated use Erase instead
221  */
222  GLSGEN_GLSTEXTBOX_EXPORT void Clear( void )
223  {
224  Erase();
225  }
226 
227  /** Clears all of the characters. Does NOT reset the attributes
228  * of the characters (TextDisplay compatability method)
229  * \deprecated
230  */
231  GLSGEN_GLSTEXTBOX_EXPORT void ClearChars( void )
232  {
233  _text.erase();
234  SetRebuild();
235  }
236 
237  /** SetColor() meaning has changed, now use TextColor */
238 
239  /** Print a string into this text object starting at index 0 and proceeding Left
240  * to right Wraps at newline characters. Does not change the color or any
241  * other modes. Replaces the entire string.
242  * (TextDisplay compatability method)
243  * \param s The string to print
244  * \deprecated use String instead
245  */
246  GLSGEN_GLSTEXTBOX_EXPORT void SetString( const char* s )
247  {
248  String( s );
249  }
250 
251  /** Print a string into this text object
252  * to right. Wraps at newline characters. Does not change the color or any
253  * other modes. Replaces the entire string.
254  * \param format printf style varargs formatting string.
255  */
256  GLSGEN_GLSTEXTBOX_EXPORT void VaString( const char* format, ... );
257 
258  /* Undocumented.
259  * This method is used to calculate the lines of the text box and is likely to change in future releases.
260  */
261  GLSGEN_GLSTEXTBOX_EXPORT void NextLineInfo( const unsigned int currentStringIndex,
262  unsigned int* lineEndIndex,
263  unsigned int* nextLineStringIndex,
264  float* startXpixels,
265  float* lineLengthPixels );
266 
267  /* Undocumented.
268  * This method is used to calculate the lines of the text box and may change in future releases.
269  */
270  GLSGEN_GLSTEXTBOX_EXPORT unsigned int GetLineCount();
271 
272  /** Sets tab space multiplier, 1.0 == same as specified in font */
273  GLSGEN_GLSTEXTBOX_EXPORT void TabSpacing( float );
274 
275  /** Returns the current tab space multiplier
276  * \return the current tab space multiplier
277  */
278  GLSGEN_GLSTEXTBOX_EXPORT float TabSpacing();
279 
280  /** Determine if the text direction is set to left->right or right->left
281  * \return true if if the text direction is set to left->right else false for right->left
282  */
283  GLSGEN_GLSTEXTBOX_EXPORT bool LeftToRight( void );
284 
285  /** Set the text direction
286  * \param leftToRight true for left->right else false for right->left
287  */
288  GLSGEN_GLSTEXTBOX_EXPORT void LeftToRight( bool leftToRight );
289 
290 protected:
291 #ifdef GLES
292  /** Set a single attribute from the GLO file.
293  * \param data The attribute to set and its associated data.
294  */
295  virtual GLSGEN_GLSTEXTBOX_EXPORT void SetFromGloData( GlsGloFileAttribute& data );
296 #endif
297 
298  /*
299  * Allocate a text buffer of the appropriate size for this grid and output snprintf style format
300  * into the buffer
301  * \param format snprintf style format spec
302  * \param args arguments for sprintf style formatting
303  * \return formatted textbuffer ( must be deleted by caller )
304  */
305  GLSGEN_GLSTEXTBOX_EXPORT char* FormatVarArgList( const char* format, va_list args );
306 
307  /* true -> grid will draw characters using "per character attributes" else
308  * false -> all characters will be drawn using the first character's attribute
309  * NOTE: This defaults to false and automatically enables to true if the user calls
310  * a method that requires per character attributes
311  */
312  bool _perCharAttribs;
313 
314  /*
315  * Enable per character attribute drawing for this grid
316  */
317  GLSGEN_GLSTEXTBOX_EXPORT void EnablePerCharAttribs( void )
318  {
319  if( !_perCharAttribs )
320  {
321  _perCharAttribs = true;
322  SetRebuild();
323  }
324  }
325 
326  /* Justification setting (TOP, CENTER, BOTTOM) */
327  Align_t _verticalAlignment;
328 
329  /* Space multiplier for tabs */
330  float _tabSpacing;
331 
332  //-----------------------------------------------------------------------
333  /*
334  */
335  GLSGEN_GLSTEXTBOX_EXPORT void Rebuild();
336 
337  //-----------------------------------------------------------------------
338  /*
339  */
340  GLSGEN_GLSTEXTBOX_EXPORT void RecalcCellSize();
341 
342  //-----------------------------------------------------------------------
343  /*
344  */
345  GLSGEN_GLSTEXTBOX_EXPORT void RecalcVertices();
346 
347  /** Populate the _rowInfo array based on the current display string
348  * \pre none
349  * \post _rowInfo array is populated based on the current display string
350  */
351  GLSGEN_GLSTEXTBOX_EXPORT virtual void CalculateRowData( void );
352 
353  /* Get the row info for the row starting at the given string index
354  * \param strIndex starting index into string
355  * \param rowLength [out] gets number of characters in row
356  * \param rowPixelWidth [out] gets pixel width of row
357  * \param nextRowStartIndex [out] gets starting string index for next row
358  * else GLSUINT32_MAX if there is no string data for the next row
359  * \pre strIndex < _str.GetLength()
360  * \post rowLength has the number of characters in the row,
361  * rowPixelWidth has the pixel width of the row,
362  * nextRowStartIndex has the starting string index for the next row
363  * else GLSUINT32_MAX if there is no string data for the next row
364  */
365  GLSGEN_GLSTEXTBOX_EXPORT void GetNextRowInfo( const unsigned int strIndex,
366  unsigned int& rowLength,
367  float& rowPixelWidth,
368  unsigned int& nextRowStartIndex ) const;
369 
370 public:
371  /** Get the width for the given character taking into account cell sizing, character spacing, uppercasing
372  * and tab characters width being expanded
373  * \param c character in question
374  * \return width for given character
375  * \pre none
376  * \post none
377  */
378  GLSGEN_GLSTEXTBOX_EXPORT float GetCharWidth( const unsigned short c ) const;
379 
380 protected:
381  /** info for one row of text in the display */
382  struct RowInfo
383  {
384  unsigned int startingIndex; /**< starting text index into the display for row
385  * else GLSUINT32_MAX if row has no characters */
386  unsigned int length; /**< the number of characters in row */
387  float pixelWidth; /**< the width of row in pixels */
388  };
389 
390  /** Number of rows of characters in the text grid (number of lines) */
391  unsigned int _lineCount;
392  bool _lineCountChanged;
393 
394  RowInfo* _rowInfo; /**< array ( _rows number of elements ) of RowInfo */
395 
396  float _cellWidthRatio;
397 
398  float _maxLineLengthPixels;
399  float _maxTextHeightPixels;
400  unsigned int _maxLinesToDraw;
401 
402  bool _leftToRight; /**< true to render characters from left to right else
403  * false for right to left */
404 
405  UnicodeString _unicodeText; /**< unicode version of _text from base class, updated by CalculateRowData */
406 
407  /* helper class for processing underline and strike-thru when drawing text grid */
409  {
410  public:
411  /**
412  * \param cellWidth maximum width of a character cell in the text box
413  * \param cellHeight height of a character cell in the text box
414  * \param cellYScale unused
415  * \param shadow true if text box has shadow enabled
416  * \param shadowOffset offset for shadow
417  * \param shadowColor color of shadow in text box
418  * \param underlineOffset offset of underline
419  * \param underlineSize size of underline
420  * \param halo true if text box has halo enabled
421  * \param haloOffset offset for halo
422  * \param haloColor color of halo in text box
423  * \param leftToRight true if text flows left to right else false for right to left
424  */
425  UnderlineStrikeThruHelper( float cellWidth, float cellHeight, float cellYScale, bool shadow, const Vector& shadowOffset, const GlsColor& shadowColor,
426  float underlineOffset, float underlineSize, bool halo, float haloOffset, GlsColor haloColor, bool leftToRight );
427 
428  /**
429  * Setup to process a new row in the text box.
430  */
431  void NewRow( void );
432 
433  /**
434  * Pre Process the given character attributes
435  * \param charAttr attributes in question
436  * \param c the character code to process.
437  * \param cellX x coord of character cell
438  * \param charY y coord of character
439  */
440  void PreProcessCharacter( const CharAttr_t& charAttr, const Char_t& c, float cellX, float charY );
441 
442  /**
443  * Post Process the given character attributes
444  * \param charAttr attributes in question
445  * \param c the character code to process.
446  * \param cellX x coord of character cell
447  * \param charY y coord of character cell
448  * \param cellWidth the width of the current character
449  * \param endOfLine true if character was the end of the current line
450  */
451  void PostProcessCharacter( const CharAttr_t& charAttr, const Char_t& c, float cellX, float charY, float cellWidth, bool endOfLine );
452 
453 #ifdef GLES
454  /**
455  * Render the line segments for the underline / strikethru
456  * \param quadStorage The quad storage list to render
457  */
458  void RenderLineSegments( GlsQuadListVC_3D& quadStorage );
459 #else
460  /**
461  * Render the line segments for the underline / strikethru
462  */
463  void RenderLineSegments( void );
464 #endif
465 
466  void IgnoreShadow( void );
467 
468  void AllowShadow( void );
469 
470  protected:
471  // cell constants
472  const float _cellWidth;
473  const float _cellHeight;
474 
475  // shadow constants
476  const bool _shadow;
477  const Vector _shadowOffset;
478  const GlsColor _shadowColor;
479  bool _allowShadow;
480 
481  // underline constants
482  const float _underlineOffset;
483  const float _underlineSize;
484 
485  // halo constants
486  const bool _halo;
487  const float _haloOffset;
488  const GlsColor _haloColor;
489 
490  // left to right
491  const bool _leftToRight;
492 
493  // state vars for underline processing
494  float _underlineX1, _underlineX2, _underlineY, _underlineScale;
495  GlsColor _underlineColor;
496  bool _underlineOn;
497 
498  // state vars for strike-thru processing
499  float _strikeX1, _strikeX2, _strikeY, _strikeScale;
500  GlsColor _strikeColor;
501  bool _strikeOn;
502 
503  // state vars for line processing
504  bool _whiteSpaceYes;
505 
506  // line segments to draw
507  typedef std::list<LineSegment_t> LineSegmentCont_t;
508  LineSegmentCont_t _lineSegments;
509  };
510 
511 private:
512  GlsTextBox& operator=( const GlsTextBox& ) DISTI_SPECIAL_MEM_FUN_DELETE;
513  GlsTextBox( const GlsTextBox& ) DISTI_SPECIAL_MEM_FUN_DELETE;
514 
515  /* See base class */
516  void OnCellDimensionChanged()
517  {
518  _needToRebuild = true;
519  }
520 };
521 
522 //---------------------------------------------------------------------------
523 // Stream operators for text enumeration types
524 //---------------------------------------------------------------------------
525 inline std::istream& operator>>(
526  std::istream& instr, disti::GlsTextBox::Align_t& j )
527 {
528  std::string str;
529  instr >> str;
530 
531  if( str == "ALIGN_TOP" )
532  {
533  j = disti::GlsTextBox::ALIGN_TOP;
534  }
535  else if( str == "ALIGN_CENTER" )
536  {
537  j = disti::GlsTextBox::ALIGN_CENTER;
538  }
539  else if( str == "ALIGN_BOTTOM" )
540  {
541  j = disti::GlsTextBox::ALIGN_BOTTOM;
542  }
543  return instr;
544 }
545 
546 //---------------------------------------------------------------------------
547 inline std::ostream& operator<<( std::ostream& outstr, disti::GlsTextBox::Align_t j )
548 {
549  switch( j )
550  {
551  case disti::GlsTextBox::ALIGN_TOP:
552  outstr << "ALIGN_TOP";
553  break;
554  case disti::GlsTextBox::ALIGN_CENTER:
555  outstr << "ALIGN_CENTER";
556  break;
557  case disti::GlsTextBox::ALIGN_BOTTOM:
558  outstr << "ALIGN_BOTTOM";
559  break;
560  }
561  return outstr;
562 }
563 
564 } // namespace disti
565 
566 #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:405
Definition: vertex.h:409
#define DISTI_DEPRECATED(msg)
Defines whether this compiler supports the C++14 deprecated attribute.
Definition: gls_cpp_lang_support.h:436
virtual DisplayObject * CloneObject(bool generateNames=false)
virtual void SetAvailableAttributes(unsigned int value)
Definition: dynamic_array.h:66
Class to contain current OpenGL view, projection and draw matrices.
Definition: util.h:296
virtual void PreDraw(const OpenGLMatrices &current, Culler &culler)
virtual unsigned int MaxLinesToDraw(void)
unsigned int length
Definition: gls_text_box.h:386
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:177
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:394
GlsColor TextColor()
Definition: display.h:98
void Clear(void)
Definition: gls_text_box.h:222
Definition: gls_text_box.h:382
Definition: gls_text.h:151
std::string _text
Definition: gls_text.h:837
Definition: gls_quad_storage.h:158
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:246
void Char(Char_t code)
Definition: gls_text_box.h:408
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:394
unsigned int _lineCount
Definition: gls_text_box.h:391
void ClearChars(void)
Definition: gls_text_box.h:231
virtual void CopyGeometry(DisplayObject *src)
bool LeftToRight(void)
bool _leftToRight
Definition: gls_text_box.h:402
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:387
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:416
virtual void Scale(float px, float py, float pz, Vertex *anchor, int handleBar=0)
float CharSpacing()
std::string String() const
Definition: gls_text.h:669
Definition: vertex.h:84
void SetRebuild()
Definition: gls_text.h:713
virtual Align_t VerticalAlignment() const
Definition: gls_text_box.h:207
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:825
Definition: bmpimage.h:46
virtual void Calculate(double time)
virtual void Draw(void)
float CellHeight() const
Definition: gls_text.h:380
unsigned int startingIndex
Definition: gls_text_box.h:384
The gls_gl.