我正在尝试追踪 Unity 窗口按钮主题的规范。
我指的是 Unity 特有的规范,(/usr/share/themes/Radiance/unity
),不是gtk 或 metacity 规范(/usr/share/themes/Radiance/metacity-1
或/usr/share/themes/Radiance/gtk-x.0
)。
我发现唯一使用该规范的主题是 Radiance 和 Ambiance 主题(在包中light-themes
)。
通过查看/usr/share/themes/(Ambiance|Radiance)/unity
,我看到了以下图像:
- 角色.png
- 角色焦点状态.png
在哪里
role
是close
、maximize
或之一minimize
;unmaximize
focusstate
是focused
或unfocused
;state
是normal
,prelight
或pressed
。
是否有关于如何创建统一窗口主题的规范? 上述哪些文件是最低要求? 何时使用?
(例如,是否已针对所有焦点状态和状态存在close.png
曾经使用过的 if close_[focusstate]_[state].png
?如果是,那么什么时候?如果不是,为什么它close.png
包含在 Ambiance/Radiance 中,而它似乎已经涵盖了所有焦点状态和所有状态?)
答案1
我做了更多的调查,我怀疑:
- unity 使用 metacity 主题(
metacity-1
子文件夹)所有窗户装饰; - unity使用
unity
子文件夹绘制窗口按钮仅在顶部统一面板中(当窗口最大化并且标题栏被隐藏时(?))
(我目前没有 Unity 可供测试)。
相关错误:https://bugs.launchpad.net/unity/+bug/740232
特别是第 22 条评论:
这个问题已经修复。检查 /usr/share/themes/ambiance/unity,你会发现那里的按钮被加载到面板中。所以,是的,Unity 窗口控制按钮现在可以主题化了。
相关代码(2013年6月3日):http://bazaar.launchpad.net/~unity-team/unity/trunk/view/3355/unity-shared/PanelStyle.cpp#L197
我不相信有任何文献。
然而,阅读相关代码(上面)似乎
- 窗口按钮类型为
CLOSE
、MINIMIZE
、UNMAXIMIZE
、MAXIMIZE
- 窗口按钮状态为
NORMAL
,PRELIGHT
,PRESSED
,DISABLED
,UNFOCUSED
,UNFOCUSED_PRELIGHT
UNFOCUSED_PRESSED
这些看起来与 metacity 非常相似。
type
为了找到与类型和状态为 的按钮相对应的图像state
,我们查找unity/<type_><state_>.png
,其中:
type_
是:- 类型为“close”
CLOSE
; - 类型为“最小化”
MINIMIZE
; - 类型为‘最大化’
MAXIMIZE
; - 类型为‘取消最大化’
UNMAXIMIZE
。
- 类型为“close”
state_
是:- ''(无)表示状态
NORMAL
(活动窗口上的按钮); - '_focused_prelight' 表示状态
PRELIGHT
(活动窗口上悬停的按钮); - '_focused_pressed' 表示状态
PRESSED
(活动窗口上被按下的按钮); - '_unfocused' 为状态
DISABLED
;(??) - '_unfocused' 表示状态
UNFOCUSED
(未聚焦窗口上的按钮); - '_unfocused_prelight' 表示状态
UNFOCUSED_PRELIGHT
(悬停在未聚焦窗口上的按钮); - '_unfocused_pressed' 表示状态
UNFOCUSED_PRESSED
(未聚焦窗口上被按下的按钮)。
- ''(无)表示状态
unity
因此,请注意Ambiance 子文件夹中的图像,<role>_focused_normal.png
未使用,即使它是在包中提供的(??)。
如果未找到特定(类型、状态)的图像,则看起来就像绘制了某种默认按钮(而不是使用其中一种现有图像)。