简 述: 社区版本 Deepin
的大圆角
官方版本的 “小杯”、“中杯”、“超大杯” 来了。所有窗口有和任务栏有了 直角、小圆角、大圆角 (0px、8px、 18px)。附上详细修改教程步骤,和如何修改任意角度的圆角。
[TOC]
本文初发于 “偕臧的小站“,同步转载于此。
前言:
对于 DDE
一直以来的大圆角 18px
,社区有着不同审美,有人希望坚持大圆角、有人希望调整小圆角、和直角;个人经历和生活环境不同,柑橘也不一样,所以有着各自不同角度的看待想法,能够互相欣赏即可
DDE
的圆角修改范围为: **所有主窗口的圆角 + Dock 圆角 + Menu 圆角 ** 。
本次修改只涉及社区 Deepin
拥有此功能(属于社区定制功能,也是某文和社区心心恋恋的~ )。
UOS
版本默认不开启,当然,你想体验的话,也可通过命令来修改圆角大小 (此类功能,暂时都属于规定的计划之外。 也害怕被 UOS
的产品经理、开发们锤、然后被测试小姐姐报 bug
单)。
因
Deepin
和UOS
实际是一个产品的两种不同形态。
文案设计:
- 中文文案:
窗口圆角
,小
,中
,大
- English 文案 :
Rounded Corner
,small
,medium
,large
大圆角(系统原本样式):窗口 = 18px; 中圆角:窗口 = 8px; 小圆角:窗口 = 0px; 对于 内部(按钮、item背景等)的圆角大小, 不做修改。
嗯嗯 ,,也是来自设计部的小姐姐(人也美)给的设计图,由于篇幅,就不上图了(我说的是设计图), 确实很棒,,,
修改圆角窗口思路:
- 先
fork
官网仓库到自己的仓库;- 编译项目的依赖, 执行
sudo apt build-dep dtkgui
,或者去项目根目录下, 执行dpkg-checkbuilddeps
;- 修改代码, 按照格式提交(很重要)
- 测试达到预期后后、提交代码,等待合并
如何实现,修改地方一共要设计三个项目:
- dtkgui :修改基础的圆角数值、添加接口
- dde-control-center :添加控件修改软件的圆角数值,国际化翻译
- dde-dock :同时修改任务栏 dock 的在“时尚模式”下的圆角大小数值
修改 dtkgui 代码:
先添加对应的接口;要确 winID
被创建后(不然会被创建一个默认的窗口),再修改 属性的数值, 否则 dock 会变灰,右键菜单等都会变成不透明的严重 bug。 本次修改提交,代码如下。
修改代码提交:
- commit a3b9836b // 添加修改圆角接口
- commit de1f742e // 修复默显示为直角角
- commit 6ae8f77d // 修复 ToolTip 的圆角为 18px 的不美观的意外 bug
- commit ea60f6b0 // 优化代码
运行之后,将新的头文件和生成的二进制,替换进系统,查看效果
☁ dtkgui [master] ⚡ sudo rm -rf /usr/lib/x86_64-linux-gnu/libdtkgui.so.5.2.2
☁ dtkgui [master] ⚡ sudo cp ~/project/build-dtkgui-unknown-Debug/src/libdtkgui.so.5.2.2 /usr/lib/x86_64-linux-gnu/
☁ dtkgui [master] ⚡ sudo cp src/dplatformtheme.h /usr/include/libdtk-5.2.2/DGui
修改 dde-control-center 代码:
修改代码提交:
- commit a37aae15 // 添加控件修改大圆角度的数值
- commit b9926d97 // 添加对的应国际化翻译
- commit a6ea6be6 // 修复布局错误导致其他控件的被压缩显示
直接运行,查看是否有实时效果。
修改 dde-dock 代码:
修改代码提交:
- commit 89cf36ab // Dock 任务栏修改大圆角
- commit 63953ef5 // 修复 注销重启后,dock 默认显示为直角
运行编译下想要看下效果,需要先下载 dconf-editor
软件, 搜寻 看门狗 watchdog
, 然后关闭 dde-dock
的按钮,这样就可以运行代码生成的 dock 而非一直显示系统本身的任务栏 dock。
后期优化:
突然,被楼上测试小姐姐报告了一个缺陷,
由于只在前端做了此值的设置, 所以每次 “注销 、重启、关闭特效后再开启”, 都会导致此值 "DTK/windowRadius" QVariant(int, 8)
的丢失,从而导致都会显示为大圆角。
下一阶段,会在后端一块给此添加赋值,修复此缺陷。
自定义设置圆角大小:
方式一:
通过界面调整 “控制中心 - 个性化- 圆角窗口“ 的修改(仅对 Deepin
有效)。只有 直角(0px
)、小圆角(8px
) 、和 大圆角(18px) 三档可调。
方式二:
通过命令终端调整,执行命令:其中具体的参数 8
可以替换为任意数字的角度,且对 Deepin
和 UOS
都生效。
# 终端手动调整数值 "DTK/windowRadius" QVariant(int, 8)
/usr/lib/x86_64-linux-gnu/libdtk-5.2.2/DGui/bin/deepin-gui-settings --set "DTK/WindowRadius" -i 8 // 设定圆角数值
/usr/lib/x86_64-linux-gnu/libdtk-5.2.2/DGui/bin/deepin-gui-settings // 查看圆角数值
PS: 若是此路径下没有此运行程序,则需要执行:
sudo apt install libdtkgui5-bin
最终效果:
没图,没图说个🔨:
赶紧先放一下最终的实现效果:
碎碎念总结~:
本次功能很小,但却是社区用户的一直想要的功能,提交很多此次。一是被测试小姐姐测出来的,二是秉持一个提交只干一件事情。三是给想参与社区贡献的小伙伴,一个提交示范,展示如何从 github
提交 pr
然后被合并到 主干代码的流程。四是分享自己的细节和快乐。
对于任意的一个软件,个人觉得都应该是秉持 ”以人为本“ 的观点。一个产品应该有温度的 ,在一些细节的地方有着对用户的细心呵护,而不知识一个冷冰冰的设备。没得一点感情,虽然需要时候能用,但是不用后就丢弃,以后再也想不起。 人生短暂,得做一点有意思的事情。始终尽我所能,为其添加一份心意在里面。也感谢过程中指点的思路的大佬们。
一起参与贡献:
若是感兴趣,你也可以添加一些新功能在里面,直接合入上游的 Deepin 主线代码中。源码直接在 linuxdeepin 中下载,是实时和 内网代码同步的。关于DTK 的除了看源码注释,还可以看 DTK API 网页说明(目前每日更新)。然后 fork
后,自己修改自己玩,若是想要让更多的人体验你的代码效果,直接提交 pr
,记得 提交规范参考这个 Commit提交规范 哦。下一篇再见~~
若是希望能够快速被合并,附上一些建议:
- 对于在其他发行版移植、一些缺陷 Bug 修复的,此类贡献 pr 都是很容易被合并的且快速的;
- 对于一些社区的自定义功能,建议设置为只在社区 Deepin 上生效,且在 UOS 上默认生效是不生效关闭的,能够加快被被合并的速度;
- 对于一些新功能和特性,若是 UOS 版本刚好需要,或者在规划中,也能够被快速合并;
- 对于个人和来自社区的轮子,沟通下,也是很容易被合并的,社区都是很期待的(没有商业线那么严格的规范和流程);
- 尽可能的充分测试完整再提交;
- 一定要注意 Commit提交规范 ;
- 可以在社区 bbs 论坛或者 github 进行沟通,提醒
另外,对于系统版本的区分,可以推荐使用如下接口的类 dsysinfo.h , 有空再写一个详细的教程,区分系统的各个版本。
QString DSysInfo::uosEditionName(const QLocale &locale) // 获取版本名称,比如英文的话返回"Professional"/"Home"/"Community"...
enum UosEdition {
UosEditionUnknown,
UosProfessional, //专业版
UosHome, //个人版
UosCommunity, //社区版
UosMilitary,
UosEnterprise,
UosEnterpriseC,
UosEuler, // 欧拉版
UosMilitaryS, // for Server
UosEditionCount // must at last
};
---------------------------------------------------------------------------------
// 不推荐使用下面的接口,后面此接口会被移除的。
enum ProductType {
UnknownType = 0,
Deepin,
ArchLinux,
CentOS,
Debian,
Fedora,
LinuxMint,
Manjaro,
openSUSE,
SailfishOS,
Ubuntu,
Uos
};
enum DeepinType {
UnknownDeepin = 0,
DeepinDesktop,
DeepinProfessional,
DeepinServer,
DeepinPersonal
};
更新: 2020-11-16
以下修改早已经早已经完成, 不过由于发布版本时间的安排, 预计的发布策略, 整体的赶进度, 给测试预留时间, 和协调其它项目的开发者沟通,一起合作等等多方面因素, 导致不能一被修复就立马安排上,看到作用.
修复 控制中心, 添加圆角修改窗口的布局错误,导致默认透明度模块被压缩了的 Bug:
- 本部分修改涉及到前端支持:
dde-control-center
: a6ea6be6
修复 注销/重启后,任务栏和活动窗口直角就成圆角了,状态不能够保存的 bug;
- 本部分修改涉及到后端支持:
- 本部分修改涉及到前端支持:
dde-control-center
: e523a87f
总结:
修改一个定义窗口圆角,在社区中早已经有人给出相应的教程,方法是修改一个 dtkgui
项目数值,然后重新生成对应的二进制后替换到系统目录中;虽然暂时可行,但是会有不规范,和重启或者注销之后, 失效的问题, 方法比较简单且粗犷和有效, 且替换方式复杂, 感觉不是那么的简洁和优雅;
只是说能用,谁说官方迟迟未进行此功能呢? 迫不及待的热情技术者们, 就只好自己动手先来探探路, 搞一个可用方式, 先完成可达到的预期再说, 舒坦了~;
但作为正式的修改, 肯定不能同样的对待, 得符合一个dtk 的风格, 方便用户, 功能上和产品设计的规划不能冲突, 接口的修改要规范, 且要保持接口向下兼容.
本以为是修改一个简单功能, 但是会最后会牵涉到如此多的项目, 是我没有想到的: dde-daemon
、startdde
、deepin-desktop-schemas
、dde-control-center
、dtkgui
、 dde-dock
全程一共有 6 个,且其中好几个都是很重要的核心基础库,修改的话, 会对其他很多项目都有影响,所以修改的时候比较慎重和小心。 不过最后算是给社区加上了这个功能,还是很开心的。 Happy~;
系列地址:
欢迎 star
和 fork
这个系列的 QT / DTK 学习,附学习由浅入深的目录。