• 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窗口不显示;
  • 文字不覆盖行为(虽然看得见,但是摸不着!哈哈);

看看效果吧!(点击看大图)

Pango Lyrics

歌词显示在屏幕上,但是当我把光标移到歌词后面的文字上,依然可以自如地进行操作,还弹出了一个Tooltip。

Pango Lyrics 2

Rhythmbox最大化,漂亮的Pango渲染的“文泉驿正黑”字体。

现在只是实现了一个雏形,不过已经可以用来听歌看歌词了。

下篇文章再放源码和简述一下实现过程,GTK还是相当强大的。它把底层绘制、字体绘制和控件绘制都层层分开来,仅看控件层的话,GTK似乎就那样,但是结合底层的绘制,几乎可以实现任何想要的图形模式!

Tags: Rhythmbox, GTK, txosd.

» You can leave a comment.

13 Comments

  1. xiws

    很棒!..简直太棒了
    等源码..

  2. kugoo 的歌词模块不错,尽管我不怎么用它。
    嗯,D兄再写一个精简版的 kugoo for linux 吧!

  3. Dig

    等代码放出

  4. 汗,不会用gnome-osd啊?

  5. 老大,代码呢?等了好几天了都...

  6. 牛 pyosd 显示的是文字还是图片 能用鼠标选词么?

  7. 早点看到这个文章,我昨天就不用为pyosd的字体搞了一天了。搞定了中文却显示不了英文,显示了英文却显示不了中文,那是一个郁闷,恨死gtk1的字体显示方式了。太out了。

    • python-osd字体不爽,看这里,改下配置文件就好了。以前没留意这个问题。
      https://groups.google.com/group/binsos/browse_thread/thread/fa5e3f3997af2db7

  8. http://code.google.com/p/desktop-lyric-show/
    毛遂自荐
    我写的桌面歌词秀,支持rhythmbox

Leave a Comment