谢谢Zolt醤 Ponekker的帮助。
Andr醩 Mohari <mayday@freemail.hu>
$(DATADIR)/Skin/ $(PREFIX)/share/mplayer/Skin/ ~/.mplayer/Skin/
注意,第一个路径倚赖于MPlayer的安装配置(见configure
脚本
的--prefix
和--datadir
的参数)。
$(PREFIX)/share/mplayer/Skin/default/
在主窗口(见下面)中你能使用包含“透明色”的图像:用颜色#FF00FF(深红) 填充的区域在MPlayer看来是完全透明的。这意味着你甚至能改变窗口外形如果你的X服务器有XShape扩展。
目前有三个要被修饰的窗口:主窗口,副窗口,播放条和 Skin菜单(右键单击弹出)。
一个按钮有三种状态(按下,释放,禁止),所以按钮图像必须垂直地划分成三部分。 细节参见按钮项目。
滑动条(主要用于搜寻条和音量/平衡控制)可以有任意多的状态只要你把图像分成上下排列的足够多份。 细节参见hpotmeter和potmeter。
标签有一点特殊:字符需要从图像文件中绘制,而图像中的字符用字体描述文件描述。 后者一个纯文本文件规定图像中每一字符的x,y坐标和大小(图像文件和他的字体描述文件共同 组成一个字体)。细节参见dlabel和slabel。
注意:所有图像都能像图像格式一节中说明的使用透明色。如果X Server不支持 XShape扩展,透明的部分将显示为黑色。如果你想使用这个特性,主窗口背景图像的宽度应该能被8整除。
一个菜单选项用图像中的位置和大小定义(细节参见skin菜单)。
还有一件重要的事情没有提到:为了使按钮,滑动条和菜单项工作,MPlayer必须知道如果他们被点击 的话应该做什么。这是利用消息(事件)机制完成的。对于这些项目,你必须定义当 他们被点击时将会产生的消息。
.fnt
为扩展名)。
skin
文件
如上所述,这是skin的配置文件。
它是基于行的;注释行必须以';
'开头(只有空格和tab可以放在';
'之前)。
文件由section组成。每一段描述一个程序的skin,使用下列的形式:
section = section name . . . end |
目前只有一个程序,所以你只需要一个section: 它的名称是movieplayer。
这个段中每个窗口用下列形式的块描述:
window = window name . . . end |
其中window name可以是下面各字串中的一项:
(副窗口和skin菜单块是可选的 -- 你不一定要创建菜单或者修饰副窗口 )。
在一个窗口的描述块内,你能用下列形式的一行定义窗口中的每一项目:
item = parameter
item
是定义GUI项目的类型的字串,parameter
是一个数字或者文字值
(或者一组用逗号分开的值的列表)。
把上述的放在一起,整个文件看起来就有点像这样:
section = movieplayer window = main ; ... items for main window ... end window = sub ; ... items for subwindow ... end window = menu ; ... items for skin menu ... end window = playbar ; ... items for playbar ... end end |
图像文件的名称必须不带目录名 -- 图像在Skin
目录中被搜索。你能(但是并不需要)规定扩展名。
如果文件不存在,MPlayer将试图装载<filename>.<ext>
文件,
<ext>
可以是png
或者PNG
(按这个顺序尝试)。第一个匹配文件将被使用。
最后是一些用来定位的语句。主窗口和副窗口可以放置在屏幕的不同的角落,通过给定X
和Y
坐标。
0
代表顶端或左端,-1
代表中心然后-2
代表右边或底部:
(0, 0)----(-1, 0)----(-2, 0) | | | | | | (0,-1)----(-1,-1)----(-2,-1) | | | | | | (0,-2)----(-1,-2)----(-2,-2)
这里有个例子可以把这个搞清楚。假设你有个叫main.png 的图像用来做主窗口:
MPlayer将尝试装载base = main, -1, -1 main ,main.png ,main.PNG 文件。
|
window = main
' . . . 'end
'和'window = playbar
' . . 'end
'块中的项目的列表。
base = image, X, Y
X,Y
位置,窗口的大小与图像相同。
button = image, X, Y, width, height, message
width
*height
的按钮放置在X
,Y
的位置。
指定的message
将在按钮被点击时产生。被image
制定的图像必须有从上到下三个部分
(根据按钮的可能状态),像这样:
+------------+ | pressed | +------------+ | released | +------------+ | disabled | +------------+
decoration = enable|disable
hpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message
vpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message
X
,Y
位置放置一个大小为width
*height
的水平滑动条。
所用的图像可以划分成不同的部分用来显示滑动条的不同状态(例如,你能做一个音量滑动条,当音量从最小变到最大时,
滑动条的颜色从绿色变成红色。)。hpotmeter
可以有一个能被水平拖曳的按钮。
button
-- 用于按钮的图像(必须有从上到下三部分,跟button中一样)bwidth
,bheight
-- 按钮的大小phases
-- 用于hpotmeter的不同的状态的图像。如果你想不要这样的图像可以使用一个特殊的值NULL
。
图像必须像这样被垂直划分成numphases
个部分:
+------------+ | phase #1 | +------------+ | phase #2 | +------------+ ... +------------+ | phase #n | +------------+
numphases
-- phase
图像中储存的状态的数量default
-- hpotmeter的缺省值(范围0到100)X
,Y
-- hpotmeter的位置width
,height
-- hpotmeter
的宽度和高度message
-- 当hpotmeter
的值改变时产生的消息potmeter = phases, numphases, default, X, Y, width, height, message
hpotmeter
。(我猜它是用来旋转,但它只对水平拖拽作出反应)。
描述参数参见hpotmeter。phases
能设为NULL
,
但这实在没什么用处,因为那样你就看不到potmeter
在哪里了。
font = fontfile, fontid
fontfile
是以.fnt
为扩展名的字体描述文件的名字(不要加上扩展名)。
fontid
用来代表这种字体(见dlabel和slabel)。
可以定义25个字体。
slabel = X, Y, fontid, "text"
X
,Y
位置放置一个静态的标签。text
将用fontid
代表的字体显示。
text只能是无格式文本($x
之类的变量不起作用)而且必须封在一对双引号中(但是"
字符不能是text的一部分)。
标签使用由fontid
代表的字体显示。
dlabel = X, Y, length, align, fontid, "text"
X
,Y
位置放置一个动态的标签。标签被称为动态的,因为它的text周期性地刷新。标签的最大限度长度由
leghth
给定(它的高度是字符的高度)。如果将要显示的text比给定的宽度宽,它将滚动显示,否则它将在指定的空间之内按
align
参数的值对齐显示:0
表示靠右对齐,1
表示居中对齐,2
表示靠左对齐。
text
给定:text必须封在一对双引号中(但是"
字符不能是text的一部分)。标签使用由
fontid
代表的字体显示。你能在文本中使用下列变量:
Variable | Meaning |
---|---|
$1 | hh:mm:ss格式的播放时间 |
$2 | mmmm:ss格式的播放时间 |
$3 | hh(小时)格式的播放时间 |
$4 | mm(分)格式的播放时间 |
$5 | ss(秒)格式的播放时间 |
$6 | hh:mm:ss格式的电影长度 |
$7 | mmmm:ss格式的电影长度 |
$8 | h:mm:ss格式的电影长度 |
$v | xxx.xx%格式的音量 |
$V | xxx.x格式的音量 |
$b | xxx.xx%格式的声道平衡 |
$B | xxx.x格式的声道平衡 |
$$ | $字符 |
$a | 一个代表音频格式的字母(none: n ,mono: m ,stereo: t ) |
$t | track号(在播放列表中) |
$o | 文件名 |
$f | 小写格式文件名 |
$F | 大写格式文件名 |
$T | 一个代表媒体流类型的字幕(文件: f ,Video CD: v ,DVD: d ,URL: u ) |
$p | "p"字符(如果电影正在播放并且字体中有"p"这个字符) |
$s | "s"字符(如果电影停止播放并且字体中有"s"这个字符) |
$e | "e"字符(如果playback被暂停并且字体中有"e"这个字符) |
$x | 电影宽度 |
$y | 电影高度 |
$C | 使用的编解码器的名字 |
||
这样的暂停符号)的字符。你应该有一个正常字符的字体以及另一个用于符号的不同的字体。
更多信息参见符号部分。
window = sub
' . . . 'end
'块。
base = image, X, Y, width, height
X
,Y
位置出现(0,0
是左上角)。
你能用-1
指定中心-2
指定右边(X
)和底部(Y
)。窗口将和图像一样大。
width
和height
指定窗口的大小; 他们是可选的(如果没有他们,窗口是与图像同样的大小)。
background = R, G, B
R
,G
和B
规定颜色的的红,绿和蓝色的组成部分(它们中每一个都是从0到255的十进制数字)。
base
项指定的图像中获得,当前选择的条目则从selected
项指定的图像中获得。
你必须通过menu
项定义每个菜单条目的位置和大小。
这些是能用于'window = menu
'. . . 'end
'之间的项目。
base = image
selected = image
menu = X, Y, width, height, message
X,Y
位置和大小。当鼠标在该条目上被释放时产生message
消息。
字体描述文件随着(以.fnt
为扩展名)能有以';
'开始的注释行。文件必须有像这样的行
image = image
image
是用于字体的图像文件的名字(你不必制定扩展名)。
"char" = X, Y, width, height
X
和Y
指定char
字符在图像中的位置(0,0
表示左上角)。
width
和height
是字符的尺寸,以象素为单位。
font.png
定义A,B,C三个字符。
; Can be "font" instead of "font.png". image = font.png ; Three characters are enough for demonstration purposes :-) "A" = 0,0, 7,13 "B" = 7,0, 7,13 "C" = 14,0, 7,13 |
下列的表格列出所有能被用来显示符号的字符(所以要求另一种字体)。
字符 | 符号 |
---|---|
p | 播放 |
s | 停止 |
e | 暂停 |
n | 无声 |
m | 单声道 |
t | 立体声 |
f | 媒体流是文件 |
v | 媒体流是Video CD |
d | 媒体流是DVD |
u | 媒体流是URL |
注意:一些信息可能不像所预想的那样工作(或者根本不工作)。你也知道,GUI还在开发中。
- evNext
- 跳到播放列表中下一个track。
- evPause
- 暂停播放。
- evPauseSwitchToPlay
- 与
evPlaySwitchToPause
一起形成开关。他们能用来实现普通的播放/暂停按钮。两条信息应该被分配到 窗口中同一位置的两个按钮上。这条信息暂停播放并使evPlaySwitchToPause
按钮的图像显示出来(表明点击按钮能继续播放)。- evPlay
- 开始播放。
- evPlaySwitchToPause
- 与
evPauseSwitchToPlay
对应的消息。这条信息开始播放并使evPauseSwitchToPlay
按钮的图像显示出来(表明点击按钮能暂停播放)。- evPrev
- 跳到播放列表中上一个track。
- evStop
- 停止播放。
- evBackward10sec
- evBackward1min
- evBackward10min
- 向后搜索10秒/1分钟/10分钟。
- evForward10sec
- evForward1min
- evForward10min
- 向前搜索10秒/1分钟/10分钟。
- evSetMoviePosition
- 搜索到制定位置(能被滑动条使用;使用与滑动条相关的值( 0-100% ))。
- evDoubleSize化
- 把电影窗口置为双倍大小。
- evFullScreen
- 切换全屏方式。
- evNormalSize化
- 把电影窗口置为正常大小。
- evDecAudioBufDelay
- 减少音频缓冲延迟。
- evDecBalance
- 减少声道平衡。
- evDecVolume
- 减少音量。
- evIncAudioBufDelay
- 增加音频缓冲延迟。
- evIncBalance
- 增加声道平衡。
- evIncVolume
- 增加音量。
- evMute
- 禁音/取消禁音。
- evSetBalance
- 设置声道平衡(能被滑动条使用;使用与滑动条相关的值( 0-100% ))。
- evSetVolume
- 设置音量(能被滑动条使用;使用与滑动条相关的值( 0-100% ))。
- evAbout
- 打开关于窗口。
- evEqualizer
- 打开/关闭均衡器。
- evExit
- 退出程序。
- evIconify
- 窗口图标化。
- evLoad
- 装载文件(打开一个文件浏览窗口,你能在其中选择文件)。
- evLoadPlay
- 功能与
evLoad
一样,但是它在文件之后装载自动地开始播放。- evNone
- 空信息,它没有效果(也许CVS版本除外:-))。
- evPlayList
- 打开/关闭播放列表窗口。
- evPlayDVD
- 尝试打开指定的DVD-ROM驱动器中的碟片。
- evPlayVCD
- 尝试打开指定的CD-ROM驱动器中的碟片。
- evPreferences
- 打开选项设置窗口。
- evSetAspect
- 设置显示图像的屏幕高宽比。
- evSetURL
- 显示URL对话窗口。
- evSkinBrowser
- 打开skin浏览器窗口。