本文主要是介绍2401d,fluid库更改日志,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原文
自上个版本以来,0.6.0
已提交了134
次,可能是迄今为止对Fluid
最大的更新,也是第一个使用新名的更新.
它提供了许多新的改进:通过输入动作
更易输入,通过Tab
键和箭头键自动
支持键盘,改进和优化
文本渲染及开箱即用的Unicode
支持.
此外,TreeActions
允许绘图时懒遍历
,且对库的核心进行了重大更改,从而可在不依赖Raylib
时使用Fluid
.
破坏性变更
已重命名整个包
.Glui
现在是Fluid
.
除了少数例外,已删除节点类前缀
.再见GluiFrame,GluiLabel,GluiButton
,现在更简洁了.GluiInput
现在是InputNode
.
InputNode
的所有子类都必须mixin enableInputActions
.运行时检查mixin
的存在.
现在,Fluid
现在可在按Tab,Shift+Tab
,箭头键或选中的游戏杆按钮(LB,RB,A,B
,方向键)时默认搞事情.你可用node.tree.bindInputReplace
或node.tree.clearBoundInput
覆盖它们.
Fluid
现在在Freetype2
或Raylib
之上,使用自己的Typeface
类渲染
字体.
因为无法维护的旧代码基
,删除了RichLabel
.目前还没有替代品.
不支持Raylib
版本3和4.请使用Raylib5
.
节点不再可用常量或不变
的风格和主题
.mixin defineStyles
现在定义可变风格字段
.
填充,边距和边框风格
的侧数组
现在是float[4]
而不是int[4]
,以支持对Fluid
处理HiDPI
.
先前已弃用
1,dropdown
和GluiDropdown
分别重命名为popup
和Popup
.
2,mousePass
已重命名为ignoreMouse
.
3,hidden,hovered
和disabled
分别重命名为isHidden,isHovered
和isDisabled
.
4,preventOverlap
已重命名为preventOverflow
.
5,已删除childRef
.
现已弃用
1,从未实现TextInput.multiline
.最好作为子类或一个单独的节点
.
2,已用简单的isBranchDisabled
布尔值替换LayoutTree.disabledDepth
.此外,还添加了个更通用
的不跟踪禁止节点的LayoutTree.depth
.
3,除字体(font)
自身外,已弃用
风格中所有与字体
相关的字段
.请用Typeface
接口中的字段和方法
,如Style.typeface.lineHeight
.目前,许多选项
都是供应商相关
的.
4,现已弃用标签默认为空
,现在需要初始文本
.
5,filePicker
已重命名为fileInput
.
6,[vh]scrollBar
已重命名为[vh]scrollInput
.
7,popup
已(再次)重命名为popupFrame
.
8,已弃用BasicNodeParams
.节点构造器现在应按第一个参数取NodeParams
.现在由simpleConstructor
收集主题和布局
.
输入动作
Fluid0.6.0
引入了全新的输入动作
.这样,可轻松地绑定
输入到聚焦或悬停节点
的方法.稍后可反弹这些输入
,因此用户可配置他们.
默认,每个节点
都绑定了通过Tab,Shift+Tab
和箭头键在节点
间切换的动作
.根据距离和语义信息
选择相邻节点
,使该功能
对用户来说很直观,只需很少量甚至不需要你的工作
.
class MyNode : InputNode!Label {mixin enableInputActions;///用鼠标左键按下节点,或在`聚焦`时按`Enter`键时触发.@(FluidInputAction.press)void _press() {writeln("Node pressed!");}
}
//可反弹`动作`
auto ui = vframe(label("Hello, World!")
);
ui.draw();
ui.tree.bindInput(FluidInputAction.press, InputStroke(KeyboardKey.z));
//警告:`ui.tree`访问至少需要一次绘画!还支持游戏面板!
ui.tree.bindInput(FluidInputAction.press, InputStroke(GamepadButton.rightTrigger));
//可用`isDown`和`isActive`随时检查动作
ui.tree.isDown!(FluidInputAction.press);
ui.tree.isActive!(FluidInputAction.press);//可创建枚举并按`@InputAction`标记来`定义`自己的动作enum MyAction {attack,jump,dash,
}
class InputHandler : InputNode!Node {mixin enableInputActions;@(MyAction.attack)void _attack() {}//可在`单个函数`中处理`多个动作`:@(MyAction.jump, MyAction.dash)void _move(MyAction action) {}
}
focusImpl
和mouseImpl
可用于输入动作
无法处理的高级用法
.
相关更改中,针对与鼠标
但不与键盘
交互的节点
,FluidHoverable
现在可用作FluidFocusable
的子集.
因为Raylib5
和后端拆分
,textInput
现在可正确处理重复
的退格键
.
改进弹窗
因为引入了树动作
,已显著改进弹窗
.现在可在不使mapSpace
成为节点树根
时,显示弹窗
,它们可嵌套并有完整的键盘支持.
引入了一个新的点击
时会打开弹窗
的popupButton
节点.非常适合创建下拉菜单
,且可嵌套.
popupButton("Options",button("Edit", delegate { }),button("Copy", delegate { }),popupButton("Share",button("SMS", delegate { }),button("Via e-mail", delegate { }),button("Send to device", delegate { }),),
);
整合Freetype2
Fluid
现在支持Freetype2
,即:
1,改进Unicode
支持,开箱即用的兼容字体
!
2,减少内存占用
,应仅在更新文本
时耗尽内存.
3,更好的字体质量
,不应丢失提示
.
此外,现在Freetype2
是默认字体后端
.默认字体现在也是Ruda
,而不是Raylib
的光栅字体
.
如果使用了Style.loadFont
(别名为Style.loadTypeface
),则应用应自动开始
使用Freetype2
.但是,如果依赖Font
,则会遇见问题,因为该函数
现在返回Typeface'
.
注意,仍可用Raylib
后端绘画
文本,它也可提高
性能,但现在不鼓励
它.必须用new RaylibTypeface
显式完成.
改进支持HiDPI
Fluid
现在总是按1/96
英寸使用"像素"
.可指定纹理的DPI
,使其在HiDPI
环境下更好缩放
.这样在有更高DPI
的域上,更好显示
文本.
现在不鼓励使用Raylib
的FLAG_WINDOW_HIGHDPI
.
切换后端
虽然仍支持Raylib
,且是与Fluid
一起使用的最佳选择,但Fluid
不再完全依赖Raylib
.如,现在可结合arsd.simpledisplay
,来与Fluid
一起使用内置的SimpledisplayBackend
.这里
可能很快就会支持HipremeEngine
这里.
这也是Fluid
开发重点的重大转变,因为该库现在可整合
到不同的渲染API
中,如Metal
或Vulkan
,甚至是CPU
渲染.
通过进一步修改,可修改核心组件
来绑定到现有的GUI
框架,如Qt,WindowsForms
或Cocoa
.
如果想在代码
中即使没有任何渲染
也可流动
,现在也可用HeadlessBackend
.它对运行测试
特别有用,现在正在支持Fluid
单元测试.
新示例
现在,一个应用,涵盖Fluid
使用的不同主题
,并带有实时代码示例
.它类似D的旅游
,只是专门讨论Fluid
.
示例
仍在进行中,尚未完成
,但应对想开始使用Fluid
的人提供良好开端
!
另一方面,已更新readme.md
文件,以友好介绍Fluid
.
树动作
高级内容:树动作
可在绘画树
时,懒迭代树
.管理
焦点或执行更复杂
的节点树动作
非常有用.
内置了一些动作:
1,在树的给定分支
中的第一个可用节点
上,focusRecurse
设置焦点.它的focusRecurseChildren
变体忽略分支的根
.
2,scrollIntoView
更新父滚动容器
,以便在视图
中显示
所选节点.
class MyAction : TreeAction {override void beforeDraw(Node node, Rectangle space) {//调用`'stop()'`立即结束动作.注意不会调用`afterDraw`和`afterTree`.}//默认,仅执行一次`树动作`.重写`"afterTree"`以停止此行为.override void afterTree() {//或如果想保留它,调用`'stop()'`或`'super.afterTree()'`}
}
//为下一次绘画排队动作
tree.queueAction(new MyAction);
//或,对指定树分支,排队等待
node.queueAction(new MyAction);
其他改进
各种分配优化
;Fluid
不应在普通绘画循环
时分配.文本渲染
最受影响.
改进了filePicker
的显示方式.也可用鼠标
选择目录.计划进一步改进文件选取器
.
Children
调试助手现在,检测缺少的updateSize
调用.
现在线安和GC
安全执行OpenGL
纹理析构,在多线程
环境中也可析构
析构器中的纹理
.
现在可用dub init -t fluid
创建新项目
.
这篇关于2401d,fluid库更改日志的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!