Compose for Desktop之旅仍在繼續!自上一版Compose for Desktop里程碑釋出以來,我們竭盡全力為現代的宣告式風格構建桌面UI提供更好的體驗。今天,我們釋出了Compose for Desktop里程碑3,渲染和互操作性在該版本得以顯著改進,並讓整合和分發Compose for Desktop應用更加容易。
在這篇博文中,我們將向你介紹該版本的重點。它們包括:
- 渲染器方面的改進,包括新新增的對DirectX渲染器和基於軟體渲染器的支援,以及對VSync的支援。
- 對文字欄位快捷方式及選擇的相容改進
- 支援SVG作為額外的向量圖形格式。
- 支援直接新增Swing元件
- 改進和簡化本地發行版的打包,簽名和公證
- 透過Compose for Desktop為IntelliJ IDEA構建外掛
有關更多資訊,以及我們在該版本中修復的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=SOFTWARE
或OPENGL
來顯式強制應用使用特定的渲染器。但是請記住,該後備渲染器的速度明顯慢於其對應硬體加速的渲染器(最高慢4倍)。
支援垂直同步(VSync)
Milestone 3內建全新的渲染程式同步和定時機制。對於之前由於作業系統限制,或渲染與顯示重新整理率之間的同步差異使介面感到遲滯的情況下,應該會有所幫助。
該垂直同步(VSync)新方案是一項底層更改,但我們希望你能注意到它的效果!它可確保你的使用者介面保持絲般流暢,並幫助你的應用程式能始終如一地以顯示器最理想的幀率執行,即便是高重新整理率的顯示器也一樣。。
文字欄位的改進
該版本中最令人期待的變動之一是圍繞TextField
元件行為進行的諸多改善。鍵盤快捷鍵現在可用於Compose for Desktop中的文字欄位!包括剪貼簿快捷鍵(例如⌘或Ctrl
+ C/X/V
),用於建立和調整選擇區的快捷鍵(例如⌘或Ctrl
+ A
,Shift
或Ctrl-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視窗中,如以下例子所示:
有關如何在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:
該段示例程式碼片段的實際使用者介面如下所示:
有關更多詳細資訊和其他示例,包括上述示例的完整程式碼,請檢視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
檔案需要透過這個流程。
為使該操作儘可能簡單,我們新增了notarizeDmg
和checkNotarizationStatusXX
Gradle任務,併為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構建下一個出色的外掛!
嘗試里程碑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構建的內容!