You.i Engine
YiTextSceneNode.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_TEXT_SCENE_NODE_H_
3 #define _YI_TEXT_SCENE_NODE_H_
4 
7 #include "utility/YiColor.h"
8 
11 
78 {
79 public:
80  enum X_JUSTIFY
81  {
85  };
86 
88  {
90 
91  bool operator==(const YI_TEXT_STYLE_DEF &other) const;
92  bool operator!=(const YI_TEXT_STYLE_DEF &other) const;
93 
95  int32_t m_nFontSize;
96  int32_t m_nLeading;
97  bool m_bIsAllCaps;
101  int32_t m_nTracking;
102  int32_t m_nKerning;
105  };
106 
107  struct YI_TEXT_DEF
108  {
109  YI_TEXT_DEF();
110 
112  int32_t m_nLength;
115  bool m_bEllipses;
117  std::vector<YI_TEXT_STYLE_DEF> m_styles;
118  };
119 
121  virtual ~CYITextSceneNode();
122 
130  float GetTextWidth();
131 
139  float GetTextHeight();
140 
147 
154 
161  void SetTextOffsetX(float fTextOffsetX);
162 
169  void SetTextMaxWidth(float fMaxWidth);
170 
180  bool SetFont(const CYIString &fontFamilyName, const CYIString &fontStyle, uint32_t uFirstCodepointIndex = 0, uint32_t uLength = std::numeric_limits<uint32_t>::max());
181 
189  void SetFontID(ssize_t nFontID, uint32_t uFirstCodepointIndex = 0, uint32_t uLength = std::numeric_limits<uint32_t>::max());
190 
202  bool SetFontFamily(const CYIString &fontFamilyName, uint32_t uFirstCodepointIndex = 0, uint32_t uLength = std::numeric_limits<uint32_t>::max());
203 
215  bool SetFontStyle(const CYIString &fontStyleName, uint32_t uFirstCodepointIndex = 0, uint32_t uLength = std::numeric_limits<uint32_t>::max());
216 
222  void SetFontSize(int32_t nFontSize, uint32_t uFirstCodepointIndex = 0, uint32_t uLength = std::numeric_limits<uint32_t>::max());
223 
229  void SetFontColor(const CYIColor &Color, uint32_t uFirstCodepointIndex = 0, uint32_t uLength = std::numeric_limits<uint32_t>::max());
230 
236  void SetAllCaps(bool bEnable, uint32_t uFirstCodepointIndex = 0, uint32_t uLength = std::numeric_limits<uint32_t>::max());
237 
243  void SetScriptMode(YI_SCRIPT_MODE eScriptMode, uint32_t uFirstCodepointIndex = 0, uint32_t uLength = std::numeric_limits<uint32_t>::max());
244 
250  void SetBaselineShift(int32_t nBaselineShift, uint32_t uFirstCodepointIndex = 0, uint32_t uLength = std::numeric_limits<uint32_t>::max());
251 
257  void SetTracking(int32_t nBaselineShift, uint32_t uFirstCodepointIndex = 0, uint32_t uLength = std::numeric_limits<uint32_t>::max());
258 
264  void SetKerning(int32_t nBaselineShift, uint32_t uFirstCodepointIndex = 0, uint32_t uLength = std::numeric_limits<uint32_t>::max());
265 
271  void SetLeading(int32_t uLeading, uint32_t uFirstCodepointIndex = 0, uint32_t uLength = std::numeric_limits<uint32_t>::max());
272 
278  void SetEllipses(bool bEnable);
279 
283  void SetMultiline(bool bEnable);
284 
285  virtual void SetSize(const glm::vec3 &vSize, bool bDirtyLayout = true) override;
286 
297  void SetText(const CYIString &rText);
298 
312  void SetMarkedUpText(const CYIString &rMarkedUpText, CYITextMarkupParser *pMarkupParser = nullptr, const CYICustomMarkupTagsProvider *pExternalTagsProvider = nullptr);
313 
317  void SetXJustify(X_JUSTIFY eXJustify);
318 
330  void SetPointTypeOn(int32_t nWidth = 0);
331 
341  void SetBoxTypeOn(int32_t nBoxWidth, int32_t nBoxHeight);
342 
348  void SetLineStyle(YI_TEXT_LINE_STYLE eTextLineStyle, uint32_t uFirstCodepointIndex = 0, uint32_t uLength = std::numeric_limits<uint32_t>::max());
349 
350  float GetTextOffsetX() const;
351  const CYIString &GetText() const;
352  const CYIString &GetMarkedUpText() const;
353  int32_t GetLength() const;
354  X_JUSTIFY GetXJustify() const;
355  bool GetMultiline() const;
356  bool GetEllipses() const;
357 
358  ssize_t GetFontID(uint32_t uCodepointIndex = 0) const;
359  const CYIString &GetFontFamily(uint32_t uCodepointIndex = 0) const;
360  const CYIString &GetFontStyle(uint32_t uCodepointIndex = 0) const;
361  int32_t GetFontSize(uint32_t uCodepointIndex = 0) const;
362  const CYIColor &GetFontColor(uint32_t uCodepointIndex = 0) const;
363  bool IsAllCaps(uint32_t uCodepointIndex = 0) const;
364  YI_TEXT_LINE_STYLE GetLineStyle(uint32_t uCodepointIndex = 0) const;
365  int32_t GetLeading(uint32_t uCodepointIndex = 0) const;
366  YI_SCRIPT_MODE GetScriptMode(uint32_t uCodepointIndex = 0) const;
367  int32_t GetBaselineShift(uint32_t uCodepointIndex = 0) const;
368  int32_t GetTracking(uint32_t uCodepointIndex = 0) const;
369  int32_t GetKerning(uint32_t uCodepointIndex = 0) const;
370 
374  const std::vector<YI_TEXT_STYLE_DEF> &GetTextStyles() const;
375 
379  const YI_TEXT_STYLE_DEF &GetTextStyle(uint32_t uCodepointIndex) const;
380 
386  void SetTextStyle(const YI_TEXT_STYLE_DEF &style, uint32_t uFirstCodepointIndex);
387 
396  void SetTextStyles(const std::vector<YI_TEXT_STYLE_DEF> &styles);
397 
403  void SetEllipsisStyle(const YI_TEXT_STYLE_DEF &style);
404 
409 
418  int32_t GetBoxWidth() const;
427  int32_t GetBoxHeight() const;
428 
435  void SetUseFontTables(bool bUseFontTables);
436 
440  bool IsUsingFontTables() const;
441 
447  bool IsBoxType() const;
448 
454  bool IsPointType() const;
455 
459  virtual YI_FLOAT_RECT GetRectForTextRange(int32_t nStartIndex, int32_t nEndIndex, float fHorizontalPixelRatio, float fVerticalPixelRatio);
460 
464  int32_t GetIndexOfPosition(float fX, float fY, float fHorizontalPixelRatio, float fVerticalPixelRatio);
465 
466  virtual void Measure(const MeasureSpec &widthSpec, const MeasureSpec &heightSpec, const MeasureSpec &depthSpec) override;
467  virtual void ApplyMeasurements() override;
468 
469 protected:
474  const std::shared_ptr<const CYITextLayout> &GetTextLayout(const YI_TEXT_RENDER_INFO &textRenderInfo);
475 
484 
488  virtual YI_FLOAT_RECT_REL CalculateGlyphBox(const YI_RECT_REL &boxRect);
489 
493  YI_FLOAT_RECT_REL CalculateGlyphBox(const CYITextLayout *pLayout, const YI_RECT_REL &layoutRect) const;
494 
500  YI_FLOAT_RECT_REL CalculateGlyphBox(const CYITextLayout *pLayout, const YI_FLOAT_RECT_REL &layoutRect) const;
501 
505  virtual void PrepareToDraw() = 0;
506 
507  virtual void TransformUpdated() override;
508  virtual void UpdateEnd() override;
509  virtual void WorldSurfaceScaleUpdated() override;
510  virtual CYIString GetDumpTreeString() const override;
511 
515  void SetTextDirty();
516 
520  static bool HasAllCaps(const YI_TEXT_DEF &rTextDef);
521 
525  static void UpdateTextForAllCaps(const YI_TEXT_DEF &rTextDef, CYIString &rText);
526 
530  virtual void UpdateTextRect();
531 
544 private:
545  void CreateTextMesh();
546 
547  float m_fTextOffsetX;
548  std::shared_ptr<const CYITextLayout> m_pCachedTextLayout;
549  YI_TEXT_RENDER_INFO m_cachedTextRenderInfo;
550 
552 };
553 
558 #ifdef YI_FUNCTION_SPECIALIZATION_FULLY_SUPPORTED
559 template<>
560 inline const CYITextSceneNode *YiDynamicCast<CYITextSceneNode>(const CYISceneNode *pObject)
561 {
562  return pObject ? (pObject->CanCastTo<CYITextSceneNode>() ? static_cast<const CYITextSceneNode *>(pObject) : nullptr) : nullptr;
563 }
564 #endif
565 
566 #endif // _YI_TEXT_SCENE_NODE_H_
CYIString m_text
Definition: YiTextSceneNode.h:111
void SetMultiline(bool bEnable)
YI_TEXT_LINE_STYLE GetLineStyle(uint32_t uCodepointIndex=0) const
uint32_t m_uLastCodepointIndex
Definition: YiTextSceneNode.h:104
static void UpdateTextForAllCaps(const YI_TEXT_DEF &rTextDef, CYIString &rText)
int32_t GetIndexOfPosition(float fX, float fY, float fHorizontalPixelRatio, float fVerticalPixelRatio)
void SetTextStyle(const YI_TEXT_STYLE_DEF &style, uint32_t uFirstCodepointIndex)
YI_SCRIPT_MODE m_eScriptMode
Definition: YiTextSceneNode.h:99
Definition: YiSceneNode.h:356
static bool HasAllCaps(const YI_TEXT_DEF &rTextDef)
int32_t GetBoxHeight() const
void SetUseFontTables(bool bUseFontTables)
void SetLeading(int32_t uLeading, uint32_t uFirstCodepointIndex=0, uint32_t uLength=std::numeric_limits< uint32_t >::max())
void SetFontColor(const CYIColor &Color, uint32_t uFirstCodepointIndex=0, uint32_t uLength=std::numeric_limits< uint32_t >::max())
void ResetPerCharacterStyles()
const YI_TEXT_STYLE_DEF & GetTextStyle(uint32_t uCodepointIndex) const
bool m_bIsAllCaps
Definition: YiTextSceneNode.h:97
Definition: YiPredef.h:234
void SetTextStyles(const std::vector< YI_TEXT_STYLE_DEF > &styles)
const CYIString & GetText() const
Container class for Unicode strings. Conceptually, a CYIString object is a sequence of Unicode charac...
Definition: YiString.h:35
virtual void WorldSurfaceScaleUpdated() override
int32_t GetLeading(uint32_t uCodepointIndex=0) const
void SetTracking(int32_t nBaselineShift, uint32_t uFirstCodepointIndex=0, uint32_t uLength=std::numeric_limits< uint32_t >::max())
virtual void UpdateEnd() override
virtual ~CYITextSceneNode()
int32_t m_nLeading
Definition: YiTextSceneNode.h:96
bool m_bIsBoxType
Definition: YiTextSceneNode.h:540
void SetXJustify(X_JUSTIFY eXJustify)
void SetBaselineShift(int32_t nBaselineShift, uint32_t uFirstCodepointIndex=0, uint32_t uLength=std::numeric_limits< uint32_t >::max())
int32_t m_nKerning
Definition: YiTextSceneNode.h:102
bool GetEllipses() const
#define YI_TYPE_BASES(...)
Definition: YiRtti.h:350
const CYIString & GetFontStyle(uint32_t uCodepointIndex=0) const
bool SetFont(const CYIString &fontFamilyName, const CYIString &fontStyle, uint32_t uFirstCodepointIndex=0, uint32_t uLength=std::numeric_limits< uint32_t >::max())
bool m_bEllipses
Definition: YiTextSceneNode.h:115
X_JUSTIFY
Definition: YiTextSceneNode.h:80
virtual void Measure(const MeasureSpec &widthSpec, const MeasureSpec &heightSpec, const MeasureSpec &depthSpec) override
int32_t m_nFontSize
Definition: YiTextSceneNode.h:95
virtual void UpdateTextRect()
const CYIColor & GetFontColor(uint32_t uCodepointIndex=0) const
Definition: YiTextSceneNode.h:83
int32_t GetKerning(uint32_t uCodepointIndex=0) const
int32_t m_nTracking
Definition: YiTextSceneNode.h:101
bool m_bMultiline
Definition: YiTextSceneNode.h:114
bool IsBoxType() const
int32_t GetFontSize(uint32_t uCodepointIndex=0) const
bool SetFontStyle(const CYIString &fontStyleName, uint32_t uFirstCodepointIndex=0, uint32_t uLength=std::numeric_limits< uint32_t >::max())
virtual YI_FLOAT_RECT_REL CalculateGlyphBox()
virtual void ApplyMeasurements() override
Definition: YiTextMarkupParser.h:15
CYIColor m_Color
Definition: YiTextSceneNode.h:103
const std::vector< YI_TEXT_STYLE_DEF > & GetTextStyles() const
Definition: YiTextSceneNode.h:107
YI_TEXT_LINE_STYLE m_eTextLineStyle
Definition: YiTextSceneNode.h:98
bool m_bTextRectDirty
Definition: YiTextSceneNode.h:541
bool IsPointType() const
X_JUSTIFY m_XJustify
Definition: YiTextSceneNode.h:113
virtual void TransformUpdated() override
int32_t GetBaselineShift(uint32_t uCodepointIndex=0) const
int32_t GetLength() const
std::vector< YI_TEXT_STYLE_DEF > m_styles
Definition: YiTextSceneNode.h:117
bool operator!=(const YI_TEXT_STYLE_DEF &other) const
ssize_t m_nFontID
Definition: YiTextSceneNode.h:94
A scene node is the base type for all nodes which are used by the scene manager; it is an integral pa...
Definition: YiSceneNode.h:114
void SetAllCaps(bool bEnable, uint32_t uFirstCodepointIndex=0, uint32_t uLength=std::numeric_limits< uint32_t >::max())
bool m_bUsesFontTables
Definition: YiTextSceneNode.h:542
Definition: YiPredef.h:273
A scene node type that renders text.
Definition: YiTextSceneNode.h:77
YI_SCRIPT_MODE GetScriptMode(uint32_t uCodepointIndex=0) const
bool GetMultiline() const
virtual CYIString GetDumpTreeString() const override
virtual void PrepareToDraw()=0
CYIString m_markedUpText
Definition: YiTextSceneNode.h:533
Base class for abstracting the layout for text.
Definition: YiTextLayout.h:33
float GetTextOffsetX() const
void SetPointTypeOn(int32_t nWidth=0)
void SetText(const CYIString &rText)
void SetMarkedUpText(const CYIString &rMarkedUpText, CYITextMarkupParser *pMarkupParser=nullptr, const CYICustomMarkupTagsProvider *pExternalTagsProvider=nullptr)
virtual YI_FLOAT_RECT GetRectForTextRange(int32_t nStartIndex, int32_t nEndIndex, float fHorizontalPixelRatio, float fVerticalPixelRatio)
void SetLineStyle(YI_TEXT_LINE_STYLE eTextLineStyle, uint32_t uFirstCodepointIndex=0, uint32_t uLength=std::numeric_limits< uint32_t >::max())
YI_RECT_REL m_MeasuredBoxRect
Definition: YiTextSceneNode.h:536
int32_t GetBoxWidth() const
const CYIString & GetMarkedUpText() const
int32_t GetTracking(uint32_t uCodepointIndex=0) const
void SetTextOffsetX(float fTextOffsetX)
virtual void SetSize(const glm::vec3 &vSize, bool bDirtyLayout=true) override
YI_TEXT_LINE_STYLE
Definition: YiTextEngine.h:68
float m_fTextMaxWidth
Definition: YiTextSceneNode.h:538
void SetEllipsisStyle(const YI_TEXT_STYLE_DEF &style)
bool m_bUserSpecifiedWidth
Definition: YiTextSceneNode.h:116
bool SetFontFamily(const CYIString &fontFamilyName, uint32_t uFirstCodepointIndex=0, uint32_t uLength=std::numeric_limits< uint32_t >::max())
int32_t m_nBaselineShift
Definition: YiTextSceneNode.h:100
void SetScriptMode(YI_SCRIPT_MODE eScriptMode, uint32_t uFirstCodepointIndex=0, uint32_t uLength=std::numeric_limits< uint32_t >::max())
bool IsAllCaps(uint32_t uCodepointIndex=0) const
YI_RECT_REL m_LayoutRect
Definition: YiTextSceneNode.h:535
ssize_t GetFontID(uint32_t uCodepointIndex=0) const
const CYIString & GetFontFamily(uint32_t uCodepointIndex=0) const
int ssize_t
Definition: YiPredefWin32.h:133
YI_SCRIPT_MODE
Definition: YiTextEngine.h:53
void SetFontID(ssize_t nFontID, uint32_t uFirstCodepointIndex=0, uint32_t uLength=std::numeric_limits< uint32_t >::max())
Definition: YiPredef.h:342
bool m_bTextBufferDirty
Definition: YiTextSceneNode.h:539
Struct used to pass information when rendering text.
Definition: YiTextEngine.h:97
A class used to represent a color value.
Definition: YiColor.h:31
Definition: YiTextSceneNode.h:84
YI_TEXT_RENDER_INFO CreateTextRenderInfo()
float GetTextHeight()
YI_RECT_REL m_BoxRect
Definition: YiTextSceneNode.h:534
float GetTextWidth()
X_JUSTIFY GetXJustify() const
void SetTextMaxWidth(float fMaxWidth)
YI_FLOAT_RECT CalculateTightTextRect()
YI_TEXT_DEF m_TextDef
Definition: YiTextSceneNode.h:532
void SetKerning(int32_t nBaselineShift, uint32_t uFirstCodepointIndex=0, uint32_t uLength=std::numeric_limits< uint32_t >::max())
void SetEllipses(bool bEnable)
void SetBoxTypeOn(int32_t nBoxWidth, int32_t nBoxHeight)
YI_RECT_REL m_PreferredBoxRect
Definition: YiTextSceneNode.h:537
const std::shared_ptr< const CYITextLayout > & GetTextLayout(const YI_TEXT_RENDER_INFO &textRenderInfo)
Definition: YiTextSceneNode.h:82
Definition: YiTextSceneNode.h:87
void SetFontSize(int32_t nFontSize, uint32_t uFirstCodepointIndex=0, uint32_t uLength=std::numeric_limits< uint32_t >::max())
int32_t m_nLength
Definition: YiTextSceneNode.h:112
Definition: YiCustomMarkupTagsProvider.h:15
bool IsUsingFontTables() const
bool operator==(const YI_TEXT_STYLE_DEF &other) const