如何为 KWin 编写 QML 效果

  • 背景与需求:过去在 C++中实现有复杂用户界面的效果是唯一方式,C++ API 使用难度大。几年前概述效果流行,需求增加,为解决此问题开始寻找选项,QtQuick 是明显选择,已在 Plasma 5.24 引入基本支持,但自己实现仍需写 C++胶水代码,且 libkwin 发布时 API 常不兼容。
  • Plasma 6.0 改进:解决需 C++代码的问题,改进声明式效果 API,引入特定项目结构。

    • 项目结构:包含package目录(含metadata.jsoncontents目录)和contents目录(含 QML 代码等),ui/main.qml是入口点。安装效果需运行kpackagetool6命令,kwin 提供示例 qtquick 效果。
    • Hello World 效果:简单展示“Hello world”消息,使用QtQuickkwin组件,通过SceneEffectShortcutHandlerScreenEdgeHandlerPinchGestureHandler控制可见性和交互。
    • 显示窗口:将显示内容改为WindowThumbnail以显示活动窗口。
    • 输入处理:输入处理使用 QtQuick 中的常见组件,如TapHandler等,实现窗口排列和点击关闭窗口功能。
    • 委托 per 屏幕:委托是 per 屏幕实例化的,可通过SceneView.screen获取屏幕信息。
    • 配置:添加main.xmlconfig.ui文件实现配置,main.xml列出选项,config.ui是 Qt Designer UI 文件,需在metadata.json中添加X-KDE-ConfigModule
  • 分享与资源:通过[KDE Store]分发第三方扩展,KWin 脚本 API 文档在[https://develop.kde.org/docs/...],kwin git 仓库中的示例[https://invent.kde.org/plasma...],如需更多示例可看kdeplasma-addons中的桌面 cube 效果[https://invent.kde.org/plasma...]。
  • 总结与展望:希望此介绍对 KWin 中基于 QML 的效果有用,声明式效果仍处于初期,API 不完美,欢迎第三方扩展开发者提供反馈,可在[https://webchat.kde.org/#/roo...]交流。
阅读 18
0 条评论