28 #ifndef YSL_INC_Service_TextRenderer_h_
29 #define YSL_INC_Service_TextRenderer_h_ 1
32 #include YFM_YSLib_Service_CharRenderer
33 #include YFM_YSLib_Core_YString
49 template<
typename _tIter,
class _tRenderer,
54 while(*s != 0 && *s !=
'\n')
71 template<
typename _tIter,
class _tRenderer,
76 while(s != g &&
ucs4_t(*s) !=
c && *s !=
'\n')
90 template<
class _tRenderer,
class _tString,
92 inline String::size_type
107 template<
typename _tIter,
class _tRenderer,
113 const SPos fpy(ts.Pen.Y);
115 while(*s != 0 && fpy == ts.Pen.Y)
131 template<
typename _tIter,
class _tRenderer,
137 const SPos fpy(ts.Pen.Y);
139 while(s != g &&
ucs4_t(*s) !=
c && fpy == ts.Pen.Y)
152 template<
class _tRenderer,
class _tString,
154 inline String::size_type
157 return PutLine(r, &str[0]) - &str[0];
168 template<
typename _tIter,
class _tRenderer,
173 while(*s != 0 && *s !=
'\n')
187 template<
typename _tIter,
class _tRenderer,
192 while(s != g &&
ucs4_t(*s) !=
c && *s !=
'\n')
203 template<
class _tRenderer,
class _tString,
205 inline String::size_type
220 template<
typename _tIter,
class _tRenderer,
228 while(*s != 0 && ts.Pen.Y <= mpy)
244 template<
typename _tIter,
class _tRenderer,
252 while(s != g &&
ucs4_t(*s) !=
c && ts.Pen.Y <= mpy)
265 template<
class _tRenderer,
class _tString,
267 inline String::size_type
279 template<
typename... _tParams>
307 : State(ts), Height(h)
327 template<class _type>
331 DeclSEntry(
const TextState& GetTextState()
const)
335 #define This static_cast<_type*>(this)
336 #define CThis static_cast<const _type*>(this)
342 CThis->GetContext().GetHeight()))
347 CThis->GetContext().GetHeight() +
CThis->GetTextState().LineGap))
370 State(ts), Buffer(g), ClipArea(g.GetSize())
378 State(ts), Buffer(g), ClipArea(mask)
425 : TextRenderer(ts, g), RenderFunction(f)
429 : TextRenderer(ts, g, mask), RenderFunction(f)
461 template<
typename... _tParams>
484 operator=(const TextState& ts)
525 ClearLine(
u16 l, SDst n);
547 Scroll(ptrdiff_t n, SDst h);
562 const
String& str,
bool line_wrap);
577 const
Font& fnt = {});
588 DrawText(
const Graphics& g, TextState& ts,
const String& str,
bool line_wrap);
615 const String& str,
bool line_wrap);
void PrintChar(_tRenderer &r, ucs4_t c)
打印单个可打印字符。
EmptyTextRenderer(TextState &ts, SDst h)
yconstfn const string _tParams && args
YF_API void DrawClippedText(const Graphics &g, const Rect &mask, TextState &ts, const String &str, bool line_wrap)
绘制剪切区域的文本。
#define DefDeCopyCtor(_t)
void MovePen(TextState &ts, ucs4_t c)
u8 PutChar(_tRenderer &r, ucs4_t c)
打印单个字符。
TextRenderer(TextState &ts, const Graphics &g, const Rect &mask)
_tIter PrintString(_tRenderer &r, _tIter s)
打印迭代器指定的起始字符的字符串,直至区域末尾或字符迭代终止。
TextRenderer(TextState &ts, const Graphics &g)
enable_if_t< is_class< decay_t< _tParam >>::value, int > enable_for_string_class_t
选择字符串类类型的特定重载避免和其它非字符串类型冲突。
std::uint16_t SDst
屏幕坐标距离。
#define yforward(_expr)
根据参数类型使用 std::forward 传递对应参数。
定制文本渲染器:使用自定义的渲染函数替代的 TextRenderer 。
YF_API SPos FetchLastLineBasePosition(const TextState &, SDst)
取指定文本状态在指定高的区域中表示的最底行的基线位置(纵坐标)。
CompactPixmapEx & operator=(const CompactPixmapEx &buf)
CompactPixmapEx(ConstBitmapPtr, SDst, SDst)
构造:使用指定位图指针和大小。
YSLib 标准字符串(使用 UCS-2 作为内部编码)。
#define DefDeMoveCtor(_t)
YF_API u16 FetchResizedLineN(const TextState &ts, SDst)
取指定文本状态和文本区域高所能显示的最大文本行数。
#define ynothrow
YSLib 无异常抛出保证:若支持 noexcept 关键字, 指定特定的 noexcept 异常规范。
std::function< void(TextRenderer &, ucs4_t)> RenderFunctionType
YF_API void DrawText(const Graphics &g, TextState &ts, const String &str, bool line_wrap)
绘制文本。
TextRegion(_tParams &&...args)
构造:使用指定参数确定文本状态。
CustomTextRenderer(RenderFunctionType f, TextState &ts, const Graphics &g, const Rect &mask)
#define DeclSEntry(...)
静态接口。
_tIter PrintLine(_tRenderer &r, _tIter s)
打印迭代器指定的起始字符的字符串,直至行尾或字符迭代终止。
CustomTextRenderer(RenderFunctionType f, TextState &ts, const Graphics &g)
_tIter PutLine(_tRenderer &r, _tIter s)
打印迭代器指定的起始字符的字符串,直至行尾或字符迭代终止。
_tIter PutString(_tRenderer &r, _tIter s)
打印迭代器指定的起始字符的字符串,直至区域末尾或字符迭代终止。
#define DefDeMoveAssignment(_t)
#define ImplS(...)
静态接口实现。
enable_if_t< is_same< decltype(++std::declval< _tParam & >()), _tParam & >::value, int > enable_for_iterator_t
选择迭代器类型的特定重载避免和其它类型冲突。
char32_t ucs4_t
UCS-4 字符类型。
#define DefGetterMem(_q, _t, _n, _m)
void PutText(bool multi, _tParams &&...args)
打印文本。
RenderFunctionType RenderFunction
if(YB_UNLIKELY(r >=sGraphics.Height)) throw std return pBuffer r *sGraphics Width
DefGetter(const ynothrow, AlphaType *, BufferAlphaPtr, pBufferAlpha) DefGetter(const ynothrow
取 Alpha 缓冲区的指针。
#define DefDeCopyAssignment(_t)