- 18
- Jan
之前我为了让播放器能滚动显示歌词废过不少力气,用的是Audacious的ShowLyrics,但始终没跳出那个框子:歌词显示在窗口里。
一个月前,也就是去年12月末,邵志雄兄发给我一个Rthymbox的歌词显示插件,这个插件的作用是通过千千静听的歌词服务器,搜索出歌词并直接显示在屏幕上!
我恍然大悟,对啊!把歌词直接显示在屏幕的某个角落,不用再增加一个窗口。那多省事呢!
然而,那个插件用的是pyosd,不但需要单独安装一个pyosd软件包,而且因为pyosd调用的是底层的X窗口,字体比较难设置,也设置不好。更重要的是,虽然是歌词是直接画在屏幕上的,但事实上还是会覆盖用户交互区。意思是,如果你要点的按钮或要选中的字,刚好被歌词盖住了,那么就点不了了~
所以我一直琢磨着,用GTK来实现一个Pyosd,利用Pango来画歌词,无论是效果还是可控制方面,都会非常好。
当时尝试直接在屏幕上用Pango写字,但是没有成功,因为GTK应用程序要求每个资源都有一个gtk.gdk.Window(gtk.gdk.Drawable)相关联。一旦显示了一个GTK窗口的话,那不是达不到我想要的效果了?
这个周末,听歌时突然又想起这个玩意。这次换个思路吧,GTK窗口并不一定要显示出来的嘛。
于是再次折腾了一会,上网看了些有关GTK不规则窗体的例子,终于完美的实现我的要的效果了!
- 利用Pango在屏幕上显示文字;
- GTK窗口不显示;
- 文字不覆盖行为(虽然看得见,但是摸不着!哈哈);
看看效果吧!(点击看大图)
歌词显示在屏幕上,但是当我把光标移到歌词后面的文字上,依然可以自如地进行操作,还弹出了一个Tooltip。
Rhythmbox最大化,漂亮的Pango渲染的“文泉驿正黑”字体。
现在只是实现了一个雏形,不过已经可以用来听歌看歌词了。
下篇文章再放源码和简述一下实现过程,GTK还是相当强大的。它把底层绘制、字体绘制和控件绘制都层层分开来,仅看控件层的话,GTK似乎就那样,但是结合底层的绘制,几乎可以实现任何想要的图形模式!


很棒!..简直太棒了
等源码..
sonata支持吗
好
kugoo 的歌词模块不错,尽管我不怎么用它。
嗯,D兄再写一个精简版的 kugoo for linux 吧!
等代码放出
汗,不会用gnome-osd啊?
居然还不知道gnome-osd……玩了一会后,感觉还不错。不过还得改造成我想要的样子!
老大,代码呢?等了好几天了都...
牛 pyosd 显示的是文字还是图片 能用鼠标选词么?
早点看到这个文章,我昨天就不用为pyosd的字体搞了一天了。搞定了中文却显示不了英文,显示了英文却显示不了中文,那是一个郁闷,恨死gtk1的字体显示方式了。太out了。
python-osd字体不爽,看这里,改下配置文件就好了。以前没留意这个问题。
https://groups.google.com/group/binsos/browse_thread/thread/fa5e3f3997af2db7
http://code.google.com/p/desktop-lyric-show/
毛遂自荐
我写的桌面歌词秀,支持rhythmbox