From 94cfcd322c2debdb2bf14b364ca53c21a2e080eb Mon Sep 17 00:00:00 2001 From: hyzboy Date: Mon, 20 Jul 2020 22:22:25 +0800 Subject: [PATCH] update TextLayout.h --- inc/hgl/graph/font/TextLayout.h | 99 ++++++++++++++++++++++++++------- 1 file changed, 78 insertions(+), 21 deletions(-) diff --git a/inc/hgl/graph/font/TextLayout.h b/inc/hgl/graph/font/TextLayout.h index 5e7f8df1..cda80804 100644 --- a/inc/hgl/graph/font/TextLayout.h +++ b/inc/hgl/graph/font/TextLayout.h @@ -2,41 +2,98 @@ #define HGL_GRAPH_TEXT_LAYOUT_INCLUDE #include -#include #include -#include namespace hgl { namespace graph { /** - * 文本排版处理 + * 字符属性,可精确到字也可精确到段落或是全文 */ - class TextLayout + struct CharAttributes { - FontSource *source; + bool bold =false; ///<加粗 + bool italic =false; ///<右斜 + bool underline =false; ///<下划线 - public: + Color4f CharColor; ///<字符颜色 + Color4f BackgroundColor; ///<背影颜色 + };//struct CharAttributes - enum class Direction - { - LeftToRight=0, ///<横排从左到右 - RightToLeft, ///<横排从右到左 - TopToRight, ///<坚排从上到下从右到左 - };//enum class Direction + /** + * 段落对齐 + */ + enum class ParagraphAlign + { + Left=0, ///<左对齐 + Right, ///<右对齐 + Center, ///<居中 - RectScope2f scope; ///<绘制区域 + Top =Left, ///<上对齐 + Bottom =Right ///<下对齐 + };//enum class ParagraphAlign - bool text_symbols; ///<是否开启文本到符号自动替换 - bool symbols_edge_disable; ///<符号边界禁用 + /** + * 段落属性 + */ + struct ParagraphAttributes + { + ParagraphAlign align =ParagraphAlign::Left; ///<段落对齐 + float char_gap =0.0f; ///<字间距 + float line_gap =0.1f; ///<行间距(相对于字符高度) - public: - - TextLayout(FontSource *fs):source(fs){} - virtual ~TextLayout()=default; + uint32 char_attributes =0; ///<缺省字符属性 - bool Layout(const UTF16String &); - };//class TextLayout + bool border_symbols_disable =true; ///<边界符号禁用(如行首禁用逗号) + bool auto_symbols_convert =true; ///<自动符号转换(如tm/(r)/(c)等) + + float space_size =0.5f; ///<空格符尺寸(对应字符高度的系数) + float tab_size =2.0f; ///; + using ParagraphAttributesList=Map; + + /** + * 文本排版处理配置 + */ + struct TextLayoutAttributes + { + FontSource * source =nullptr; ///字符源 + + CharAttributesList char_attributes; ///<文本属性 + ParagraphAttributesList paragraph_attributes; ///<段落属性 + + float max_width =0.0f; ///<最大宽度(<=0代表无限制) + float max_height =0.0f; ///<最大高度(<=0代表无限制) + + TextAttributes attributes; ///<文本属性 + };//struct TextLayoutAttributes + + uint TextLayout(vulkan::Renderable *,const uint max_chars,const UTF16String &); + uint TextLayout(vulkan::Renderable *,const uint max_chars,const UTF16StringList &); + + uint TextLayout(vulkan::Renderable *,const uint max_chars,const UTF32String &); + uint TextLayout(vulkan::Renderable *,const uint max_chars,const UTF32StringList &); }//namespace graph }//namespace hgl #endif//HGL_GRAPH_TEXT_LAYOUT_INCLUDE