41 #ifndef INCLUDED_GLS_CTL_TEXT_BOX_H
42 #define INCLUDED_GLS_CTL_TEXT_BOX_H
47 #if defined( EMSCRIPTEN ) || defined( RPI_ARCH )
48 # define GLS_CTL_FALLBACK_ENABLED
50 # error "GLES should always be enabled when using the CTL fallback code"
55 #if( defined( GLSGEN_EXPORT_GLSCTLTEXTBOX ) || defined( GLSGEN_IMPORT_GLSCTLTEXTBOX ) || defined( GLSGEN_GLSCTLTEXTBOX_EXPORT_GENERATED ) || defined( GLS_IMPORT_GENERATED ) ) \
56 && defined( _MSC_VER )
57 # if defined( GLSGEN_EXPORT_GLSCTLTEXTBOX ) || defined( GLSGEN_GLSCTLTEXTBOX_EXPORT_GENERATED )
58 # define GLSGEN_GLSCTLTEXTBOX_EXPORT __declspec( dllexport )
60 # define GLSGEN_GLSCTLTEXTBOX_EXPORT __declspec( dllimport )
63 # define GLSGEN_GLSCTLTEXTBOX_EXPORT
73 #ifndef GLS_CTL_FALLBACK_ENABLED
75 # define CTL_BASE_CLASS GlsText
78 # define CTL_BASE_CLASS GlsTextBox
81 #define LIB_BASE_NAME "gls_ctl_text_box"
87 # if !defined( NO_GLS_AUTOLIB ) && !defined( GLS_IMPORT_LIBRARY )
89 # define PANGO_SUFFIX "_64"
91 # define PANGO_SUFFIX ""
93 # pragma message( "Will automatically link with libfontconfig" PANGO_SUFFIX "-1.0.lib" )
94 # pragma message( "Will automatically link with libpango" PANGO_SUFFIX "-1.0.lib" )
95 # pragma message( "Will automatically link with libpangoft2" PANGO_SUFFIX "-1.0.lib" )
96 # pragma message( "Will automatically link with libgobject" PANGO_SUFFIX "-2.0.lib" )
97 # pragma comment( lib, "libfontconfig" PANGO_SUFFIX "-1.0.lib" )
98 # pragma comment( lib, "libpango" PANGO_SUFFIX "-1.0.lib" )
99 # pragma comment( lib, "libpangoft2" PANGO_SUFFIX "-1.0.lib" )
100 # pragma comment( lib, "libgobject" PANGO_SUFFIX "-2.0.lib" )
107 #ifndef GLS_CTL_FALLBACK_ENABLED
108 class GlsPangoWrapper;
111 class GlsTextBoxFontRenderer;
112 #endif // GLS_CTL_FALLBACK_ENABLED
115 class GlsGloFileAttribute;
116 class GlsStateManager;
117 class GlsQuadListVCT_2D;
131 DISTI_DEPRECATED(
"This identifier is forbidden by the C++ standard. Use BaseClass instead." )
140 friend class GlsCTLTextBoxEditor;
142 #ifndef GLS_CTL_FALLBACK_ENABLED
151 #endif // GLS_CTL_FALLBACK_ENABLED
156 VERTICAL_ALIGNMENT_CENTER = ALIGN_CENTER,
157 VERTICAL_ALIGNMENT_TOP = ALIGN_TOP,
158 VERTICAL_ALIGNMENT_BOTTOM = ALIGN_BOTTOM
165 ELLIPSIZE_MODE_START,
166 ELLIPSIZE_MODE_MIDDLE,
181 TEXT_DIRECTION_AUTOMATIC,
182 TEXT_DIRECTION_AUTO_BY_LINE
186 #ifndef GLS_CTL_FALLBACK_ENABLED
190 RESIZE_MODE_AUTO_WIDTH,
191 RESIZE_MODE_AUTO_HEIGHT
230 #ifndef GLS_CTL_FALLBACK_ENABLED
244 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
void Draw();
247 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
void SetVertices(
unsigned int nPoints,
Vertex* vertices );
250 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
void Scale(
float px,
float py,
float pz,
Vertex* anchor,
int handleBar );
256 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
void VaString(
const char* format, ... );
261 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
void VerticalAlignment( VerticalAlignment_t verticalAlignment );
268 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
void VerticalAlignment( VerticalAlignment_t verticalAlignment ) { BaseClass::VerticalAlignment( verticalAlignment ); }
271 #endif // GLS_CTL_FALLBACK_ENABLED
289 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
void Rebuild();
310 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
unsigned int GetLineCount();
316 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
unsigned int GetGlyphCount();
323 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT GlyphMetrics
GetGlyphMetrics(
const unsigned int glyphIndex );
337 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
void SetAltWidth(
float width );
343 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
void SetAltHeight(
float height );
379 #ifndef GLS_CTL_FALLBACK_ENABLED
380 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
void ResizeMode( ResizeMode_t value );
381 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT ResizeMode_t ResizeMode();
383 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
void MaxWidth(
float value );
384 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
float MaxWidth();
386 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
void MaxHeight(
float value );
387 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
float MaxHeight();
395 GLSGEN_GLSCTLTEXTBOX_EXPORT
static void SetAutomaticPixelAlignmentEnabled(
const bool enabled );
399 #ifndef GLS_CTL_FALLBACK_ENABLED
419 void ApplyTextScale(
float textBoxWidth,
float textBoxHeight, PangoRect& verts );
420 void ClampToTextBoxSize(
float textBoxWidth,
float textBoxHeight, PangoRect& verts, PangoRect& texCoords );
421 void ApplyVerticalAlignment(
float textBoxHeight, PangoRect& verts );
425 static bool s_isAutomaticPixelAlignmentEnabled;
430 #ifndef GLS_CTL_FALLBACK_ENABLED
431 ResizeMode_t _resizeMode;
432 float _resizeMaxWidth;
433 float _resizeMaxHeight;
436 #endif // GLS_CTL_FALLBACK_ENABLED
443 # ifndef GLS_CTL_FALLBACK_ENABLED
450 bool _geometryRefreshDraw;
455 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
void PopulateQuadStorage(
IGlsStateManager* stateManager );
461 # endif // GLS_CTL_FALLBACK_ENABLED
466 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
void DrawText();
468 #ifndef GLS_CTL_FALLBACK_ENABLED
473 virtual GLSGEN_GLSCTLTEXTBOX_EXPORT
void SetVerticesToImageSize(
const PangoRect& verts,
bool keepWidth );
474 #endif // GLS_CTL_FALLBACK_ENABLED
478 void OnCellDimensionChanged()
490 #ifndef GLS_CTL_FALLBACK_ENABLED
499 if( str ==
"ALIGN_TOP" || str ==
"VERTICAL_ALIGNMENT_TOP" )
501 verticalAlignment = disti::GlsCTLTextBox::ALIGN_TOP;
503 else if( str ==
"ALIGN_CENTER" || str ==
"VERTICAL_ALIGNMENT_CENTER" )
505 verticalAlignment = disti::GlsCTLTextBox::ALIGN_CENTER;
507 else if( str ==
"ALIGN_BOTTOM" || str ==
"VERTICAL_ALIGNMENT_BOTTOM" )
509 verticalAlignment = disti::GlsCTLTextBox::ALIGN_BOTTOM;
518 switch( verticalAlignment )
520 case disti::GlsCTLTextBox::ALIGN_TOP:
521 outstr <<
"ALIGN_TOP";
523 case disti::GlsCTLTextBox::ALIGN_CENTER:
524 outstr <<
"ALIGN_CENTER";
526 case disti::GlsCTLTextBox::ALIGN_BOTTOM:
527 outstr <<
"ALIGN_BOTTOM";
532 #endif // GLS_CTL_FALLBACK_ENABLED
541 if( str ==
"ELLIPSIZE_MODE_NONE" )
543 ellipsizeMode = disti::GlsCTLTextBox::ELLIPSIZE_MODE_NONE;
545 else if( str ==
"ELLIPSIZE_MODE_START" )
547 ellipsizeMode = disti::GlsCTLTextBox::ELLIPSIZE_MODE_START;
549 else if( str ==
"ELLIPSIZE_MODE_MIDDLE" )
551 ellipsizeMode = disti::GlsCTLTextBox::ELLIPSIZE_MODE_MIDDLE;
553 else if( str ==
"ELLIPSIZE_MODE_END" )
555 ellipsizeMode = disti::GlsCTLTextBox::ELLIPSIZE_MODE_END;
564 switch( ellipsizeMode )
566 case disti::GlsCTLTextBox::ELLIPSIZE_MODE_NONE:
567 outstr <<
"ELLIPSIZE_MODE_NONE";
569 case disti::GlsCTLTextBox::ELLIPSIZE_MODE_START:
570 outstr <<
"ELLIPSIZE_MODE_START";
572 case disti::GlsCTLTextBox::ELLIPSIZE_MODE_MIDDLE:
573 outstr <<
"ELLIPSIZE_MODE_MIDDLE";
575 case disti::GlsCTLTextBox::ELLIPSIZE_MODE_END:
576 outstr <<
"ELLIPSIZE_MODE_END";
589 if( str ==
"TEXT_DIRECTION_LTR" )
591 direction = disti::GlsCTLTextBox::TEXT_DIRECTION_LTR;
593 else if( str ==
"TEXT_DIRECTION_RTL" )
595 direction = disti::GlsCTLTextBox::TEXT_DIRECTION_RTL;
597 else if( str ==
"TEXT_DIRECTION_AUTOMATIC" )
599 direction = disti::GlsCTLTextBox::TEXT_DIRECTION_AUTOMATIC;
601 else if( str ==
"TEXT_DIRECTION_AUTO_BY_LINE" )
603 direction = disti::GlsCTLTextBox::TEXT_DIRECTION_AUTO_BY_LINE;
614 case disti::GlsCTLTextBox::TEXT_DIRECTION_LTR:
615 outstr <<
"TEXT_DIRECTION_LTR";
617 case disti::GlsCTLTextBox::TEXT_DIRECTION_RTL:
618 outstr <<
"TEXT_DIRECTION_RTL";
620 case disti::GlsCTLTextBox::TEXT_DIRECTION_AUTOMATIC:
621 outstr <<
"TEXT_DIRECTION_AUTOMATIC";
623 case disti::GlsCTLTextBox::TEXT_DIRECTION_AUTO_BY_LINE:
624 outstr <<
"TEXT_DIRECTION_AUTO_BY_LINE";
631 #ifndef GLS_CTL_FALLBACK_ENABLED
634 inline std::istream& operator>>( std::istream& instr, disti::GlsCTLTextBox::ResizeMode_t& direction )
639 if( str ==
"RESIZE_MODE_FIXED" )
641 direction = disti::GlsCTLTextBox::RESIZE_MODE_FIXED;
643 else if( str ==
"RESIZE_MODE_AUTO_WIDTH" )
645 direction = disti::GlsCTLTextBox::RESIZE_MODE_AUTO_WIDTH;
647 else if( str ==
"RESIZE_MODE_AUTO_HEIGHT" )
649 direction = disti::GlsCTLTextBox::RESIZE_MODE_AUTO_HEIGHT;
656 inline std::ostream&
operator<<( std::ostream& outstr, disti::GlsCTLTextBox::ResizeMode_t direction )
660 case disti::GlsCTLTextBox::RESIZE_MODE_FIXED:
661 outstr <<
"RESIZE_MODE_FIXED";
663 case disti::GlsCTLTextBox::RESIZE_MODE_AUTO_WIDTH:
664 outstr <<
"RESIZE_MODE_AUTO_WIDTH";
666 case disti::GlsCTLTextBox::RESIZE_MODE_AUTO_HEIGHT:
667 outstr <<
"RESIZE_MODE_AUTO_HEIGHT";
676 #endif // INCLUDED_GLS_CTL_TEXT_BOX_H
The DistiUnhideGlobalsDummyClass class.
virtual VerticalAlignment_t VerticalAlignment()
The disti::GlsTextBox class.
#define DISTI_DEPRECATED(msg)
Defines whether this compiler supports the C++14 deprecated attribute.
Definition: gls_cpp_lang_support.h:436
ScopedPtr< GlsPangoWrapper > _glsPangoWrapper
Definition: gls_ctl_text_box.h:411
virtual float TextHorizontalScale()
void AdjustImageVertsAndCoords(PangoRect &verts, PangoRect &texCoords)
virtual void PreDraw(const OpenGLMatrices ¤t, Culler &culler)
Class to contain current OpenGL view, projection and draw matrices.
Definition: util.h:296
virtual void CopyGeometry(DisplayObject *src)
virtual void SetVertices(unsigned int nPoints, Vertex *vertices)
float _altWidth
Definition: gls_ctl_text_box.h:401
bool RequiresFontFile() const DISTI_METHOD_OVERRIDE
Definition: gls_ctl_text_box.h:374
virtual DisplayObject * CloneObject(bool generateNames=false)
EllipsizeMode_t
Definition: gls_ctl_text_box.h:162
virtual void SetAvailableAttributes(unsigned int value)
virtual void VaString(const char *format,...)
virtual GlyphMetrics GetGlyphMetrics(const unsigned int glyphIndex)
float _cellHeight
Definition: gls_text.h:787
Definition: gls_state_manager_interface.h:67
virtual void RecalcVertices()
virtual unsigned int GetLineCount()
The disti::GlsText class.
float _altHeight
Definition: gls_ctl_text_box.h:403
Definition: gls_glo_file.h:988
virtual unsigned int GetGlyphCount()
std::ostream & operator<<(std::ostream &outstr, const AttributeName &name)
Defines the stream out operator.
virtual void CopyProperties(DisplayObject *src)
virtual float TextVerticalScale()
virtual void Scale(float px, float py, float pz, Vertex *anchor, int handleBar)
The Gls CTL (Complex Text Layout) Text Box.
Definition: gls_ctl_text_box.h:128
bool ControlCellSize() const
Definition: gls_text.h:465
VerticalAlignmentCTL_t
Definition: gls_ctl_text_box.h:154
static const unsigned int INTERNAL_BORDER
Definition: gls_ctl_text_box.h:138
virtual void SetLayoutAutoDir(bool)
Definition: gls_ctl_text_box.h:331
TextDirection_t
Definition: gls_ctl_text_box.h:177
Definition: gls_ctl_text_box.h:198
VerticalAlignment_t
Definition: gls_ctl_text_box.h:144
virtual InterfaceListType * GetCppInterfaceDescription(InterfaceListType *addToThisList=NULL)
float _cellWidth
Definition: gls_text.h:790
virtual void GetCppInterfaceDescriptionFree(InterfaceListType *array)
float _textVerticalScale
Definition: gls_ctl_text_box.h:408
virtual EllipsizeMode_t EllipsizeMode()
virtual void SetAltHeight(float height)
A smart pointer with unique ownership – poor man's std::unique_ptr.
Macros and helper code to determine what subset of C++11/14/17 is available.
float _textHorizontalScale
Definition: gls_ctl_text_box.h:406
virtual TextDirection_t TextDirection()
Definition: bmpimage.h:46
virtual void SetAltWidth(float width)