GUI
Screen
界面
AbstractWidget
组件
Button
按钮
EditBox
输入框
字符串渲染流程:
- 字符串由
value
储存 - 渲染起始位置
displayPos
在setHighlightPos
中由尾端减去getInnerWidth
(元素宽度-边框宽度)得到 - 在
renderWidget
中通过this.font.plainSubstrByWidth
截取从displayPos
开始的getInnerWidth
长度的字符串 - 检查字串不为空,
pGuiGraphics.drawString
渲染
如果value
为空且未获焦点,绘制hint
如果有suggestion
,会在文本末尾绘制
高亮区域=CursorPos
到highlightPos
的区域
杂项
Narratable
叙述功能
无障碍功能,用于屏幕阅读器
AbstactWidget
继承了NarratableEntry
逻辑是按照Screen中的一个循环不断检测Delay
如果当前时间大于下一次播放时间,且大于禁止播放时间
就执行当前GUI的叙述检查
然后遍历Screen
中的narratables
检查isActive
中返回true
的项(似乎是默认返回true,待检查)
如果有多项(一个GUI内有多个可叙述的组件),就叙述优先级为FOCUSED
的项
并且输出Press Tab to navigate to next element
的提示
可以用Tab
和方向键选择组件
触发FocusNavigationEvent
如果使用Tab
,则从Screen#this.children
中顺序读取
如果使用方向键,则按照组件坐标从上到下,左侧优先读取