Jetpack Compose for Desktop第三个里程碑版本发布

Compose for Desktop之旅仍在继续!自上一版Compose for Desktop里程碑发布以来,我们竭尽全力为现代的声明式风格构建桌面UI提供更好的体验。今天,我们发布了Compose for Desktop里程碑3渲染互操作性在该版本得以显着改进,并让集成分发Compose for Desktop应用更加容易。

Compose for Desktop M3 Banner

在这篇博文中,我们将向你介绍该版本的重点。它们包括:

有关更多信息,以及我们在该版本中修复的bug,请查看完整的更新日志

让我们继续深入吧!

VISIT THE COMPOSE FOR DESKTOP LANDING PAGE

渲染改进

支持Windows的DirectX

通过新的DirectX 12渲染器在Windows上运行的Compose for Desktop应用程序现在支持改进过的硬件加速。而对于不支持DirectX 12的环境将使用基于OpenGL的渲染器,哪怕这个也失败了,也将使用该版本中引入的全新软件渲染器。

软件渲染支持

Compose for Desktop由我们的图形库Skiko提供支持。默认情况下,在macOS和Linux上使用基于OpenGL的渲染器,在Windows上使用(现在)基于DirectX的渲染器。但是,并非所有运行应用的系统都可以提供这种硬件加速。硬件加速可能不可用的原因有很多。例如虚拟化/虚拟机的设备或显卡配置不正确或驱动程序已过时的计算机。

从Milestone 3开始,当Skiko无法创建硬件加速的上下文时,Compose for Desktop应用将自动回退到基于软件的渲染器,从而几乎可以在任何硬件上运行Compose for Desktop应用程序,而无需考虑其图形配置。

为了进行测试和基准测试,你还可以通过环境变量SKIKO_RENDER_API=SOFTWAREOPENGL来显式强制应用使用特定的渲染器。但是请记住,该后备渲染器的速度明显慢于其对应硬件加速的渲染器(最高慢4倍)。

支持垂直同步(VSync)

Milestone 3内置全新的渲染进程同步和定时机制。对于之前由于操作系统限制,或渲染与显示刷新率之间的同步差异使界面感到迟滞的情况下,应该会有所帮助。

垂直同步(VSync)新方案是一项底层更改,但我们希望你能注意到它的效果!它可确保你的用户界面保持丝般流畅,并帮助你的应用程序能始终如一地以显示器最理想的帧率运行,即便是高刷新率的显示器也一样。。

文本字段的改进

该版本中最令人期待的变动之一是围绕TextField组件行为进行的诸多改善。键盘快捷键现在可用于Compose for Desktop中的文本字段!包括剪贴板快捷键(例如⌘或Ctrl + C/X/V),用于创建和调整选择区的快捷键(例如⌘或Ctrl + AShiftCtrl-Shift + 方向键,…)以及删除文本。根据Compose for Desktop应用所运行的平台,你的用户将能够使用规范的快捷键来修改文本字段内容。

文本字段现在还支持基本的撤消和重做功能(通过⌘或Ctrl + Z/Shift-Z),并且其鼠标选择行为已经过调整,以支持Shift拖动来扩展或缩小文本选择区。

由于文本字段是许多应用程序不可或缺的一部分,因此我们将持续改进Compose for Desktop中的功能集。

支持可缩放矢量图形(SVG)

除了支持Android的Vector Drawables,Compose for Desktop现在还支持SVG格式的矢量图形。通过将新引入的svgResource函数结果作为painter参数传递给Image,我们现在可以将resources目录的SVG文件绘制到Compose for Desktop窗口中,如以下例子所示:

img

有关如何在Compose for Desktop中使用图像和图标的其他信息,请查看图像和应用程序内图标操作的教程

将Swing组件嵌入Compose for Desktop

里程碑3进一步提高了基于Compose的UI和基于Swing的组件之间的互操作性。新添加的SwingPanel支持在Compose for Desktop渲染的组成中使用Swing组件。这样,它对应于里程碑2中引入的ComposePanel组件(能将Compose UI无缝添加到基于Swing容器中)。

要将Swing组件添加到你的Compose UI中,请在SwingPanel部件的factory lambda参数中创建JComponent:

该段示例代码片段的实际用户界面如下所示:

img

有关更多详细信息和其他示例,包括上述示例的完整代码,请查看Compose for Desktop仓库中的Compose for Desktop和Swing应互相集成的教程

本地发行版的改进

Compose for Desktop为应用程序提供了通过本地发行版创建独立应用程序包的功能。生成的工件是完全自包含的二进制文件,这意味着在未安装JVM/Java Runtime Environment的系统上,你也可以装载和运行应用程序。这些捆绑包是使用平台的首要格式打包的(对于macOS是.dmg/.pkg,对于Linux是.deb/.rpm,对于Windows是.msi.exe),其中包含运行Compose for Desktop应用程序所需的所有内容

在Compose for Desktop M3,我们为创建这些独立的捆绑软件提供了更多的改进特别是针对macOS

macOS应用程序的签名和公证

从macOS 10.15开始,第三方应用需要签名和公证。这是Apple进行的自检流程。使用Compose for Desktop创建的应用程序也不例外:生成的.dmg.pkg文件需要通过这个流程。

为使该操作尽可能简单,我们添加了notarizeDmgcheckNotarizationStatusXXGradle任务,并为Compose for Desktop的Gradle DSL添加了相应的属性。初始配置后,这些任务可帮助你自动完成应用程序分发所需的签名和公证步骤

要了解Compose for Desktop应用程序macOS签名和公证的的整个过程,请查看仓库中的教程

为与该功能配合使用,我们现在还确保了Skiko(Compose for Desktop用于渲染的图形库)的本地二进制文件已在macOS上签名(在x64和ARM上)。

使用Compose for Desktop的IntelliJ IDEA插件

为了展示Compose for Desktop另一个有趣的领域,我们在仓库中添加了一个使用Compose for Desktop编写的IntelliJ IDEA插件的示例。尽情在GitHub上阅览代码,并以此基础为IntelliJ的IDE构建下一个出色的插件

img

尝试里程碑3!

与以前的版本一样,我们希望你可以尝试Compose for Desktop里程碑3!你可以在Compose for Desktop教程的入门部分中找到有关如何起步的最新信息。

如果你使用的是早期版本的Compose for Desktop,调整plugins块即可轻松更新到最新版本:

请注意Compose for Desktop M3要求Kotlin 1.4.30.

预发行版注意事项

这是Compose for Desktop的第三个里程碑版本,我们将继续努力为你提供最佳体验。请记住,在稳定版本发布之前,Compose for Desktop提供的某些API可能仍会更改。我们正朝着第一个稳定的,可立即投入生产的发行版迈进,并仍然非常欢迎你的反馈来帮助我们实现这一目标。

反馈与讨论!

在Milestone发布期间,你的反馈特别重要,因为它使我们能够在稳定版本发布之前修复关键问题或涵盖其他功能。如果你在使用Compose for Desktop中遇到任何问题,或者发现我们的桌面特定API尚未涵盖的用例,请在项目的问题跟踪器中与我们分享这些用例

如果你想与其他开发人员和团队成员交谈,我们还邀请你加入Kotlin Slack的讨论。在#compose-desktop中,你可以找到有关Compose for Desktop的讨论,在#compose中,你可以讨论涉及Android上的Compose和Jetpack Compose的常规主题。

我们期待能看到你接下来使用Compose for Desktop构建的内容!

此条目发表在官方分类目录。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。 必填项已用*标注