无边框GTkWindow的信号处理

今天继续改进osd-lyrics的scroll-mode显示,希望最终的效果图为:

首要把标准的gtkwindow的框去掉,设置成无窗口模式,ol_scroll_window继承自gtkwindow可以使用:

 gtk_window_set_decorated (GTK_WINDOW(scroll),FALSE);

如下图显示:

但是此时,ol_scroll_window不会响应button_press,button_release和motion_notify信号,也就是无法移动ol_scroll_window和改变ol_scroll_window的大小,经过测试:key_press等信号是可以响应的,于是怀疑gtkwindow将button_press,button_release和motion_notify信号屏蔽掉了。通过阅读gtkwindow.c源代码,发现其gtk_window_realize (GtkWidget *widget)中对无边框窗口屏蔽了button_press,button_release和motion_notify信号。(比较悲剧,不懂gtkwindow为什么这样设计)

解决方案为:

在ol_scroll_window_init (OlScrollWindow *self)中添加事件响应

  gtk_widget_add_events (GTK_WIDGET (self), GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_POINTER_MOTION_MASK);

但是问题解决得并不完美,发现在移动窗口的时候,在碰到其他窗口时scroll_window坐标会大幅度变动. google一下得到解决方案:

 gtk_widget_add_events (GTK_WIDGET (self), GDK_POINTER_MOTION_HINT_MASK);

最终问题得到解决,继续进一步的改进。

Posted by 陈着 Jul 12, 2010 12:15:11 AM


Osd-lyric classical module进展

最近插空就搞搞osd-lyrics,虽然进度慢,但是还是有进展的。相比osd模式,可能有些人喜欢一次可以看多行歌词(但其实已经不是当初设想的on-screen display),所以我们就有了做这个模块的想法了。然后我就肩负起osd-lyrics 0.3版本重要功能的开发。主要的参照对象是TTplayer的歌词显示方式。废话少说,发张图先:

现在歌词已经可以很平滑的滚动了,不会出现刚开始的跳跃现象。不过需要处理的是第一行和最后一行的渐进效果,这样在换歌词的时候就可以很没有让人难受的跳跃感。

下一步就是实现歌词的拖动,等着tigersoldier的接口,:D

ps:.透漏下一步计划,03版本发布的时候可能会加上另一重要功能,大家多多关注啊!

项目地址:http://code.google.com/p/osd-lyrics/

Posted by 陈着 Oct 19, 2009 08:03:50 AM