我希望能够在Linux的根窗口上绘图。 即做一个OSD。
我正在使用Gnome。
代码示例或指向它们的链接将不胜感激。
答案 0 :(得分:12)
有可能,但你不会在GNOME中看到任何东西。 NOMElus,GNOME的文件管理器,在根X窗口顶部打开自己的窗口以显示图标。因为根X窗口被完全覆盖......所以绘制它没有意义。
如果您想制作OSD,您应该使用像XOSD这样的库,或者打开自己的X窗口并使其半透明。事实上,XOSD的源代码应该是如何做到这一点的一个很好的例子。
整个库似乎在一个文件中实现:xosd.c。
答案 1 :(得分:0)
use X11::Protocol;
my $x = X11::Protocol->new();
my $desktop;
my ($root,undef,@kids)=$x->QueryTree($x->{'root'});
printf "%10x:\tRoot\n", $root;
foreach (@kids){
my $gdkw = Gtk2::Gdk::Window->foreign_new($_);
printf ("%10x:\tDesktop\n",$gdkw->get_xid),$desktop=$gdkw,last if $gdkw->get_type_hint eq 'desktop';
}
$desktop=Gtk2::Gdk::Window->foreign_new($root) if ! $desktop;
#------------------------------------------
我可以找到桌面,由xwininfo验证。 但是,我丢失了可以绘制桌面的代码,似乎使用了“set_back_pixmap”。
现在cairo可以非常简单地在任何窗口上绘图,只需使用
$cr = Gtk2::Gdk::Cairo::Context->create ($drawable);
但是,这在桌面上不起作用。 也许是由于内核更新?或者我现在搞砸了Ubuntu 10.04-3。