2401d,fluid库更改日志

2024-01-26 13:44
文章标签 日志 更改 fluid 2401d

本文主要是介绍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.bindInputReplacenode.tree.clearBoundInput覆盖它们.

Fluid现在在Freetype2Raylib之上,使用自己的Typeface渲染字体.

因为无法维护的旧代码基,删除了RichLabel.目前还没有替代品.
不支持Raylib版本3和4.请使用Raylib5.

节点不再可用常量或不变风格和主题.mixin defineStyles现在定义可变风格字段.

填充,边距和边框风格侧数组现在是float[4]而不是int[4],以支持对Fluid处理HiDPI.

先前已弃用

1,dropdownGluiDropdown分别重命名为popupPopup.
2,mousePass已重命名为ignoreMouse.
3,hidden,hovereddisabled分别重命名为isHidden,isHoveredisDisabled.
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) {}
}

focusImplmouseImpl可用于输入动作无法处理的高级用法.

相关更改中,针对与鼠标但不与键盘交互的节点,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的域上,更好显示文本.
现在不鼓励使用RaylibFLAG_WINDOW_HIGHDPI.

切换后端

虽然仍支持Raylib,且是与Fluid一起使用的最佳选择,但Fluid不再完全依赖Raylib.如,现在可结合arsd.simpledisplay,来与Fluid一起使用内置的SimpledisplayBackend.这里
可能很快就会支持HipremeEngine这里.

这也是Fluid开发重点的重大转变,因为该库现在可整合到不同的渲染API中,如MetalVulkan,甚至是CPU渲染.
通过进一步修改,可修改核心组件来绑定到现有的GUI框架,如Qt,WindowsFormsCocoa.

如果想在代码中即使没有任何渲染也可流动,现在也可用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库更改日志的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/646990

相关文章

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

我在移动打工的日志

客户:给我搞一下录音 我:不会。不在服务范围。 客户:是不想吧 我:笑嘻嘻(气笑) 客户:小姑娘明明会,却欺负老人 我:笑嘻嘻 客户:那我交话费 我:手机号 客户:给我搞录音 我:不会。不懂。没搞过。 客户:那我交话费 我:手机号。这是电信的啊!!我这是中国移动!! 客户:我不管,我要充话费,充话费是你们的 我:可是这是移动!!中国移动!! 客户:我这是手机号 我:那又如何,这是移动!你是电信!!

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

SSM项目使用AOP技术进行日志记录

本步骤只记录完成切面所需的必要代码 本人开发中遇到的问题: 切面一直切不进去,最后发现需要在springMVC的核心配置文件中中开启注解驱动才可以,只在spring的核心配置文件中开启是不会在web项目中生效的。 之后按照下面的代码进行配置,然后前端在访问controller层中的路径时即可观察到日志已经被正常记录到数据库,代码中有部分注释,看不懂的可以参照注释。接下来进入正题 1、导入m

多数据源的事务处理总是打印很多无用的log日志

之前做了一个项目,需要用到多数据源以及事务处理,在使用事务处理,服务器总是打印很多关于事务处理的log日志(com.atomikos.logging.Slf4jLogger),但是我们根本不会用到这些log日志,反而使得查询一些有用的log日志变得困难。那要如何屏蔽这些log日志呢? 之前的项目是提高项目打印log日志的级别,后来觉得这样治标不治本。 现在有一个更好的方法: 我使用的是log

android两种日志获取log4j

android   log4j 加载日志使用方法; 先上图: 有两种方式: 1:直接使用架包 加载(两个都要使用); 架包:android-logging-log4j-1.0.3.jar 、log4j-1.2.15.jar  (说明:也可以使用架包:log4j-1.2.17.jar)  2:对架包输入日志的二次封装使用; 1:直接使用 log4j 日志框架获取日志信息: A:配置 日志 文

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

机械学习—零基础学习日志(概率论总笔记5)

引言——“黑天鹅” 要获得95%以上置信度的统计结果,需要被统计的对象出现上千次,但是如果整个样本只有几千字,被统计的对象能出现几次就不错了。这样得到的数据可能和真实的概率相差很远。怎么避免“黑天鹅”? 古德-图灵折扣估计法 在词语统计中,有点词语虽然是出现0次,但是实际的出现概率并不是永远不可能的零。 那需要把一些概率转移给到这些词语。 古德的做法实际上就是把出现1次的单词的总量,给了

如何使用Selenium捕获控制台日志

Selenium是一个流行的开源工具,用于自动化Web浏览器。其中一个关键功能是能够与浏览器的开发者控制台交互。本文将向您展示如何在Selenium中使用Java获取控制台日志。这些日志对于调试和解决Selenium脚本的问题非常有用。 如何查看任何网页的控制台日志 首先,打开浏览器的开发者控制台。在大多数浏览器中,您可以通过右键点击页面并选择“检查”来做到这一点。我们将在我们的测试网站——h