YSTest: DSReader.h 源文件

YSTest PreAlpha_b500_20140530 The YSLib Test Project

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

- 文件列表
- 文件成员

全部 类 命名空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义 组 页
DSReader.h
浏览该文件的文档.
1 /*
2 © 2010-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 INC_YReader_DSReader_h_
29 #define INC_YReader_DSReader_h_ 1
30
31 #include <YSLib/UI/YModules.h>
32 #include YFM_YSLib_UI_TextArea
33 #include YFM_YSLib_Service_TextFile
34 #include YFM_YSLib_Service_TextManager
35 #include <Helper/DSMain.h>
36 #include YFM_Helper_Initialization
37
38 namespace YSLib
39 {
40
41 namespace DS
42 {
43
44 namespace UI
45 {
46
47 using Drawing::Color;
48 using Drawing::PixelType;
49
50
56 class DualScreenReader
57 {
58 public:
63 enum Command : u16
64 {
65 Null = 0,
66 Scroll = 1,
67 Up = 2,
68 Down = 0,
69 Line = 4,
70 Screen = 0,
71 LineUp = Line | Up,
72 LineDown = Line | Down,
73 ScreenUp = Screen | Up,
74 ScreenDown = Screen | Down,
75 LineUpScroll = LineUp | Scroll,
76 LineDownScroll = LineDown | Scroll,
77 ScreenUpScroll = ScreenUp | Scroll,
78 ScreenDownScroll = ScreenDown | Scroll
79 };
80
81 private:
86 unique_ptr<Text::TextFileBuffer> p_text;
87 Drawing::FontCache& fc;
88
96 Text::TextFileBuffer::iterator i_top;
97 Text::TextFileBuffer::iterator i_btm;
99
105 u16 overread_line_n;
110 Drawing::FontSize scroll_offset;
111
112 public:
119 Drawing::Padding Margin;
120
121 private:
127 YSLib::UI::BufferedTextArea area_up;
128 YSLib::UI::BufferedTextArea area_dn;
130
131 public:
136 std::function<void()> ViewChanged;
137
146 DualScreenReader(SDst w = MainScreenWidth,
147 SDst h_up = MainScreenHeight, SDst h_down = MainScreenHeight,
148 Drawing::FontCache& fc_ = FetchDefaultFontCache());
149
151 DefPred(const ynothrow, BufferReady, bool(p_text));
152 DefPred(const ynothrow, TextTop, i_top == p_text->begin()) \
153
155 DefPred(const ynothrow, TextBottom, i_btm == p_text->end()) \
157
163 DefGetter(const ynothrow, Color, Color, area_up.Color)
168 DefGetter(const ynothrow, const Drawing::Font&, Font, area_up.Font)
169 DefGetter(const ynothrow, u8, LineGap, area_up.LineGap) \
171 DefGetter(const ynothrow, Text::Encoding, Encoding, p_text
172 ? p_text->GetEncoding() : Text::CharSet::Null)
173
178 DefGetter(const ynothrow, size_t, TextSize,
179 p_text ? p_text->GetTextSize() : 0)
188 DefGetter(const ynothrow, size_t, TopPosition,
189 p_text ? p_text->GetPosition(i_top) : 0)
190 DefGetter(const ynothrow, size_t, BottomPosition,
191 p_text ? p_text->GetPosition(i_btm) : 0)
193
199 Text::TextFileBuffer&
200 GetTextBufferRef() ythrow(LoggedEvent)
201 {
202 if(p_text)
203 return *p_text;
204 throw LoggedEvent("Null text buffer pointer found.");
205 }
206
207 PDefH(void, SetColor, Color c = Drawing::ColorSpace::Black)
208 ImplUnseq(area_up.Color = c, area_dn.Color = c)
209
214 void
215 SetFont(const Drawing::Font&);
216 void
217 SetFontSize(Drawing::FontSize = Drawing::Font::DefaultSize); \
219 void
220 SetLineGap(u8 = 0);
221
225 void
226 SetVisible(bool = true);
227
228 private:
230 void
231 AdjustForFirstNewline();
232
234 void
235 AdjustForPrevNewline();
236
237 public:
243 void
244 AdjustMargins();
245
252 Drawing::FontSize
253 AdjustScrollOffset();
254
259 void
260 Attach(YSLib::UI::Window&, YSLib::UI::Window&);
261
266 void
267 Detach();
268
273 bool
274 Execute(Command);
275
280 void
281 Invalidate();
282
291 void
292 Locate(size_t);
293
295 void
296 LoadText(TextFile&);
297
298 private:
300 void
301 MoveUpForLastLine(ptrdiff_t, size_t);
302
304 Text::TextFileBuffer::iterator
305 PutLastLine();
306
307 public:
309 void
310 Reset();
311
321 Drawing::FontSize
322 ScrollByPixel(Drawing::FontSize);
323
331 void
332 Stretch(SDst);
333
338 void
339 UnloadText();
340
347 void
348 UpdateView();
349 };
350
355 DefBitmaskEnum(DualScreenReader::Command)
356
357 } // namespace UI;
358
359 } // namespace DS;
360
361 } // namespace YSLib;
362
363 #endif
364
YSLib::DS::UI::DualScreenReader::AdjustForFirstNewline
void AdjustForFirstNewline()
Definition: DSReader.cpp:260
YSLib::DS::UI::DualScreenReader::AdjustForPrevNewline
void AdjustForPrevNewline()
Definition: DSReader.cpp:266
ImplUnseq
#define ImplUnseq(...)
Definition: YBaseMacro.h:107
YSLib::DS::UI::DualScreenReader::ScrollByPixel
Drawing::FontSize ScrollByPixel(Drawing::FontSize)
向下滚屏指定像素行。
Definition: DSReader.cpp:464
YModules.h
YSLib::DS::UI::DualScreenReader::Screen
Definition: DSReader.h:70
YSLib::Text::TextFileBuffer::iterator
目标编码迭代器类型。
Definition: textmgr.h:68
YSLib::true
bool return true
Definition: DSMain.cpp:177
YSLib::DS::UI::DualScreenReader::AdjustScrollOffset
Drawing::FontSize AdjustScrollOffset()
调整滚屏像素偏移量：立即继续滚动至下一整文本行。
Definition: DSReader.cpp:289
YSLib::DS::UI::DualScreenReader::scroll_offset
Drawing::FontSize scroll_offset
滚屏像素偏移量。
Definition: DSReader.h:110
YSLib::DS::UI::DualScreenReader::i_top
Text::TextFileBuffer::iterator i_top
文本区域输入迭代器。
Definition: DSReader.h:96
YSLib::DS::UI::DualScreenReader::Null
Definition: DSReader.h:65
YSLib::DS::UI::DualScreenReader::LineDown
Definition: DSReader.h:72
YSLib::TextFile
文本文件类。
Definition: TextFile.h:56
YSLib::DS::UI::DualScreenReader::ScreenDownScroll
Definition: DSReader.h:78
YSLib::DS::UI::DualScreenReader::SetVisible
void SetVisible(bool=true)
设置文本区域可见性。
Definition: DSReader.cpp:235
YSLib::UI::Window
窗口。
Definition: ywindow.h:44
YSLib::DS::UI::DualScreenReader::ScreenDown
Definition: DSReader.h:74
platform::SDst
std::uint16_t SDst
屏幕坐标距离。
Definition: Video.h:39
DefBitmaskEnum
#define DefBitmaskEnum(_tEnum)
Definition: YBaseMacro.h:392
platform::Consoles::Black
Definition: Video.h:460
DefGetter
#define DefGetter(_q, _t, _n,...)
Definition: YBaseMacro.h:180
YSLib::DS::UI::DualScreenReader::area_up
YSLib::UI::BufferedTextArea area_up
上下屏幕对应文本区域。
Definition: DSReader.h:127
YSLib::DS::UI::DualScreenReader::DualScreenReader
DualScreenReader(SDst w=MainScreenWidth, SDst h_up=MainScreenHeight, SDst h_down=MainScreenHeight, Drawing::FontCache &fc_=FetchDefaultFontCache())
构造。
Definition: DSReader.cpp:211
YSLib::DS::UI::DualScreenReader::ScreenUpScroll
Definition: DSReader.h:77
YSLib::DS::UI::DualScreenReader::UpdateView
void UpdateView()
更新视图。
Definition: DSReader.cpp:513
YSLib::DS::UI::DualScreenReader::LineUpScroll
Definition: DSReader.h:75
YSLib::DS::UI::DualScreenReader::Command
Command
命令类型。
Definition: DSReader.h:63
YSLib::DS::UI::DualScreenReader::Attach
void Attach(YSLib::UI::Window &, YSLib::UI::Window &)
附加到窗口。
Definition: DSReader.cpp:296
YSLib::DS::UI::DualScreenReader::DefPred
DefPred(const ynothrow, BufferReady, bool(p_text))
YSLib::Drawing::FontCache
字体缓存。
Definition: Font.h:415
ynothrow
#define ynothrow
YSLib 无异常抛出保证：若支持 noexcept 关键字， 指定特定的 noexcept 异常规范。
Definition: ydef.h:514
YSLib::DS::UI::DualScreenReader::fc
Drawing::FontCache & fc
字体缓存。
Definition: DSReader.h:87
YSLib::DS::UI::DualScreenReader
双屏阅读器。
Definition: DSReader.h:56
YSLib::DS::UI::DualScreenReader::Scroll
Definition: DSReader.h:66
YSLib::FetchDefaultFontCache
YF_API Drawing::FontCache & FetchDefaultFontCache()
取默认字体缓存。
Definition: Initialization.cpp:394
ythrow
#define ythrow(...)
YSLib 动态异常规范：根据是否使用异常规范宏指定或忽略动态异常规范。
Definition: ydef.h:476
YSLib::Drawing::PenStyle::Font
Drawing::Font Font
字体。
Definition: TextBase.h:57
YSLib::DS::UI::DualScreenReader::PutLastLine
Text::TextFileBuffer::iterator PutLastLine()
Definition: DSReader.cpp:445
YSLib::DS::UI::DualScreenReader::area_dn
YSLib::UI::BufferedTextArea area_dn
Definition: DSReader.h:128
YSLib::DS::UI::DualScreenReader::Reset
void Reset()
复位输出显示状态。
Definition: DSReader.cpp:451
YSLib::Drawing::PenStyle::Color
Drawing::Color Color
笔颜色。
Definition: TextBase.h:58
YSLib::UI::BufferedTextArea
缓冲文本区域。
Definition: textarea.h:74
YSLib::DS::UI::DualScreenReader::LineDownScroll
Definition: DSReader.h:76
YSLib::DS::UI::DualScreenReader::Margin
Drawing::Padding Margin
公用边距。
Definition: DSReader.h:119
YSLib::DS::UI::DualScreenReader::MoveUpForLastLine
void MoveUpForLastLine(ptrdiff_t, size_t)
Definition: DSReader.cpp:434
YSLib::DS::UI::DualScreenReader::Execute
bool Execute(Command)
执行阅读器命令。
Definition: DSReader.cpp:315
YSLib::DS::UI::DualScreenReader::Down
Definition: DSReader.h:68
YSLib::DS::UI::DualScreenReader::p_text
unique_ptr< Text::TextFileBuffer > p_text
文本资源。
Definition: DSReader.h:86
YSLib::DS::UI::DualScreenReader::Locate
void Locate(size_t)
文本定位。
Definition: DSReader.cpp:390
YSLib::DS::UI::DualScreenReader::Up
Definition: DSReader.h:67
YSLib::DS::UI::DualScreenReader::SetLineGap
void SetLineGap(u8=0)
设置行距。
Definition: DSReader.cpp:225
platform::Consoles::Color
Color
控制台颜色枚举。
Definition: Video.h:458
YSLib::u8
std::uint8_t u8
通用数据类型。
Definition: yadaptor.h:67
YSLib::DS::UI::DualScreenReader::ScreenUp
Definition: DSReader.h:73
YSLib::DS::UI::DualScreenReader::Detach
void Detach()
从窗口分离。
Definition: DSReader.cpp:304
YSLib::LoggedEvent
记录日志的异常事件类。
Definition: yexcept.h:58
YSLib::Drawing::Padding
空白样式。
Definition: ygdi.h:46
YSLib::DS::UI::DualScreenReader::Invalidate
void Invalidate()
无效化文本区域，并调用 ViewChanged （仅当非空）。
Definition: DSReader.cpp:378
CHRLib::CharSet::Encoding
Encoding
Definition: encoding.h:53
YSLib::DS::UI::DualScreenReader::TextBottom
TextBottom
Definition: DSReader.h:155
YSLib::Text::TextFileBuffer
Definition: textmgr.h:46
YSLib::Drawing::Font
字体：字模，包含字型、样式和大小。
Definition: Font.h:546
YSLib::DS::UI::DualScreenReader::ViewChanged
std::function< void()> ViewChanged
视图变更回调函数。
Definition: DSReader.h:136
YSLib::DS::UI::DualScreenReader::AdjustMargins
void AdjustMargins()
调整边距：使用公用边距更新各文本显示区域的边距。
Definition: DSReader.cpp:272
CHRLib::c
c
Definition: chrproc.h:76
YSLib::u16
std::uint16_t u16
Definition: yadaptor.h:68
YSLib::DS::UI::DualScreenReader::i_btm
Text::TextFileBuffer::iterator i_btm
Definition: DSReader.h:97
DSMain.h
DS 平台框架。
YSLib::DS::UI::DualScreenReader::UnloadText
void UnloadText()
卸载文本。
Definition: DSReader.cpp:505
YSLib::DS::UI::DualScreenReader::SetFontSize
void SetFontSize(Drawing::FontSize=Drawing::Font::DefaultSize)
设置文本区域的字体大小。
Definition: DSReader.cpp:252
YSLib::DS::UI::DualScreenReader::overread_line_n
u16 overread_line_n
读入文件结束后的空行数。
Definition: DSReader.h:105
YSLib::DS::UI::DualScreenReader::Stretch
void Stretch(SDst)
伸缩：从最大值起向上调整（减少）下文字区域的高后更新视图。
Definition: DSReader.cpp:492
YSLib::DS::UI::DualScreenReader::LineUp
Definition: DSReader.h:71
YSLib::DS::UI::DualScreenReader::LoadText
void LoadText(TextFile &)
载入文本。
Definition: DSReader.cpp:416
YSLib::Drawing::FontSize
u8 FontSize
字体大小。
Definition: Font.h:63
YSLib::DS::UI::DualScreenReader::Line
Definition: DSReader.h:69