YSTest: TextBase.h 源文件

YSTest PreAlpha_b500_20140530 The YSLib Test Project

- 首页
- 相关页面
- 模块
- 命名空间
- 类
- 文件

- 文件列表
- 文件成员

全部 类 命名空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义 组 页
TextBase.h
浏览该文件的文档.
1 /*
2 © 2009-2014 FrankHB.
3
4 This file is part of the YSLib project, and may only be used,
5 modified, and distributed under the terms of the YSLib project
6 license, LICENSE.TXT. By continuing to use, modify, or distribute
7 this file you indicate that you have read the license and
8 understand and accept it fully.
9 */
10
28 #ifndef YSL_INC_Service_TextBase_h_
29 #define YSL_INC_Service_TextBase_h_ 1
30
31 #include "YModules.h"
32 #include YFM_YSLib_Service_YGDI
33 #include YFM_YSLib_Adaptor_Font
34 #include YFM_YSLib_Core_YStorage
35
36 namespace YSLib
37 {
38
39 namespace Drawing
40 {
41
46 yconstexpr Padding DefaultMargin(2, 2, 2, 2);
47
48
54 class YF_API PenStyle
55 {
56 public:
57 Drawing::Font Font;
58 Drawing::Color Color;
59
64 explicit
65 PenStyle(const Drawing::Font& fnt = {},
66 Drawing::Color c = Drawing::ColorSpace::White)
67 : Font(fnt), Color(c)
68 {}
69
70 DefGetterMem(const ynothrow, const FontFamily&, FontFamily, Font)
71 DefGetterMem(const ynothrow, FontCache&, Cache, Font)
72 };
73
74
87 class YF_API TextState : protected PenStyle
88 {
89 public:
91 using PenStyle::Font;
93 using PenStyle::Color;
94 Padding Margin;
95
99 Point Pen;
100 u8 LineGap;
101
106 explicit
107 TextState(const Drawing::Font& = {});
111 explicit
112 TextState(FontCache&);
113
117 PDefHOp(TextState&, =, const PenStyle& ps)
118 ImplRet(PenStyle::operator=(ps), *this)
122 PDefHOp(TextState&, =, const Padding& ms)
123 ImplRet(Margin = ms, *this)
124
130 PDefH(Rect, GetCharBounds, ucs4_t c) const ynothrow
131 ImplRet(Rect(Pen.X, Pen.Y - Font.GetAscender(), Font.GetAdvance(c),
132 Font.GetHeight()))
133
137 void
138 PutNewline();
139
144 void
145 ResetPen();
152 void
153 ResetPen(const Point&, const Padding& = {});
154 };
155
157
158
162 inline SDst
163 GetTextLineHeightOf(const TextState& ts)
164 {
165 return ts.Font.GetHeight();
166 }
167
172 inline SDst
173 GetTextLineHeightExOf(const TextState& ts)
174 {
175 return ts.Font.GetHeight() + ts.LineGap;
176 }
177
182 inline u16
183 GetCurrentTextLineNOf(const TextState& ts)
184 {
185 return (ts.Pen.Y - ts.Margin.Top) / GetTextLineHeightExOf(ts);
186 }
187
192 inline SPos
193 GetTextLineBaseOf(const TextState& ts)
194 {
195 return ts.Margin.Top + ts.Font.GetAscender();
196 }
197
202 inline void
203 SetPenOf(TextState& ts, SPos x, SPos y)
204 {
205 ts.Pen = Point(x, y);
206 }
207
212 YF_API void
213 SetCurrentTextLineNOf(TextState&, u16);
214
222 inline void
223 AdjustEndOfLine(TextState& ts, const Rect& r, SDst w)
224 {
225 // ts.Margin = FetchMargin(r, s);
226 ts.Margin.Right = w - r.X - r.Width;
227 }
228
235 inline void
236 CarriageReturn(TextState& ts)
237 {
238 ts.Pen.X = ts.Margin.Left;
239 }
240
245 YF_API void
246 MovePen(TextState&, ucs4_t);
248
249 } // namespace Drawing;
250
251 } // namespace YSLib;
252
253 #endif
254
YSLib::Drawing::Font::GetAscender
s8 GetAscender() const
取升部。
Definition: Font.cpp:509
YSLib::Drawing::TextState::Pen
Point Pen
笔坐标。
Definition: TextBase.h:99
YSLib::Drawing::DefaultMargin
yconstexpr Padding DefaultMargin(2, 2, 2, 2)
默认边距。
YSLib::Drawing::TextState::LineGap
u8 LineGap
行距。
Definition: TextBase.h:100
YSLib::Drawing::TextState::SetPenOf
void SetPenOf(TextState &ts, SPos x, SPos y)
设置笔位置。
Definition: TextBase.h:203
ImplRet
#define ImplRet(...)
Definition: YBaseMacro.h:97
YF_API
#define YF_API
Definition: Platform.h:64
YSLib::Drawing::PenStyle
笔样式：字体和笔颜色。
Definition: TextBase.h:54
YSLib::Drawing::MovePen
void MovePen(TextState &ts, ucs4_t c)
Definition: TextBase.cpp:80
YSLib::Drawing::PenStyle::PenStyle
PenStyle(const Drawing::Font &fnt={}, Drawing::Color c=Drawing::ColorSpace::White)
构造：使用指定字体家族、字体大小和颜色。
Definition: TextBase.h:65
platform::SDst
std::uint16_t SDst
屏幕坐标距离。
Definition: Video.h:39
platform::SPos
std::int16_t SPos
屏幕坐标度量。
Definition: Video.h:38
YSLib::Drawing::TextState::GetTextLineHeightOf
SDst GetTextLineHeightOf(const TextState &ts)
取当前指定文本状态的字体设置对应的行高。
Definition: TextBase.h:163
platform::Consoles::White
Definition: Video.h:475
YSLib::Drawing::TextState::Margin
Padding Margin
边距：文本区域到显示区域的距离。
Definition: TextBase.h:94
YSLib::Drawing::Padding::Right
SPos Right
Definition: ygdi.h:52
YSLib::Drawing::Point
GBinaryGroup< SPos > Point
屏幕二维点（直角坐标表示）。
Definition: ygdibase.h:235
YSLib::Drawing::FontCache
字体缓存。
Definition: Font.h:415
ynothrow
#define ynothrow
YSLib 无异常抛出保证：若支持 noexcept 关键字， 指定特定的 noexcept 异常规范。
Definition: ydef.h:514
YSLib::Drawing::TextState
文本状态。
Definition: TextBase.h:87
YSLib::Drawing::GBinaryGroup::Y
_type Y
分量。
Definition: ygdibase.h:59
YSLib::Drawing::Rect
屏幕标准矩形：表示屏幕矩形区域。
Definition: ygdibase.h:416
YSLib::Drawing::PenStyle::Font
Drawing::Font Font
字体。
Definition: TextBase.h:57
YSLib::Drawing::TextState::GetCurrentTextLineNOf
u16 GetCurrentTextLineNOf(const TextState &ts)
取笔所在的当前行数。
Definition: TextBase.h:183
YSLib::Drawing::GBinaryGroup< SPos >
YSLib::Drawing::Padding::Top
SPos Top
Definition: ygdi.h:52
YSLib::Drawing::PenStyle::Color
Drawing::Color Color
笔颜色。
Definition: TextBase.h:58
YSLib::Drawing::GBinaryGroup::X
_type X
Definition: ygdibase.h:59
YSLib::Drawing::SetCurrentTextLineNOf
void SetCurrentTextLineNOf(TextState &ts, u16 n)
Definition: TextBase.cpp:74
YSLib::Drawing::Y
p1 p1 Y
Definition: ydraw.h:188
YSLib::Drawing::Padding::Left
SPos Left
Definition: ygdi.h:52
platform::Consoles::Color
Color
控制台颜色枚举。
Definition: Video.h:458
YSLib::u8
std::uint8_t u8
通用数据类型。
Definition: yadaptor.h:67
YSLib::Drawing::TextState::GetTextLineBaseOf
SPos GetTextLineBaseOf(const TextState &ts)
取第一行的基线位置（纵坐标）。
Definition: TextBase.h:193
YSLib::Drawing::c
c
Definition: ystyle.h:93
YSLib::Drawing::Padding
空白样式。
Definition: ygdi.h:46
yconstexpr
#define yconstexpr
指定编译时常量表达式。
Definition: ydef.h:462
YSLib::Drawing::TextState::CarriageReturn
void CarriageReturn(TextState &ts)
回车。
Definition: TextBase.h:236
YSLib::Drawing::TextState::AdjustEndOfLine
void AdjustEndOfLine(TextState &ts, const Rect &r, SDst w)
按指定显示区域和文本区域的宽重新设置右边距。
Definition: TextBase.h:223
CHRLib::ucs4_t
char32_t ucs4_t
UCS-4 字符类型。
Definition: chrdef.h:45
YSLib::Drawing::r
bounds & r
Definition: ydraw.h:220
DefGetterMem
#define DefGetterMem(_q, _t, _n, _m)
Definition: YBaseMacro.h:185
YSLib::Drawing::PDefH
PDefH(void, DrawLineSeg, const Graphics &g, const Rect &bounds, const Point &p1, const Point &p2, Color c) ImplExpr(DrawLineSeg(g
YSLib::Drawing::X
p1 X
Definition: ydraw.h:188
YSLib::Drawing::Font
字体：字模，包含字型、样式和大小。
Definition: Font.h:546
YSLib::u16
std::uint16_t u16
Definition: yadaptor.h:68
platform::Color
颜色。
Definition: Video.h:339
YModules.h
YSLib::Drawing::Font::GetHeight
FontSize GetHeight() const ynothrow
取字体对应的字符高度。
Definition: Font.cpp:527
YSLib::Drawing::Size::Width
SDst Width
Definition: ygdibase.h:258
YSLib::Drawing::FontFamily
字型家族 (Typeface Family) 标识。
Definition: Font.h:170
YSLib::Drawing::TextState::GetTextLineHeightExOf
SDst GetTextLineHeightExOf(const TextState &ts)
取当前指定文本状态的字体设置对应的行高与行距之和。
Definition: TextBase.h:173