繁体   English   中英

在X根窗口上绘图

[英]Drawing on the X root window

我希望能够在Linux的根窗口上绘图。 即制作OSD。

我正在使用Gnome。

代码示例或链接到他们将不胜感激。

这是可能的,但你不会在GNOME中看到任何东西。 NOMElus,GNOME的文件管理器,在根X窗口顶部打开自己的窗口以显示图标。 因为根X窗口被完全覆盖...所以绘制它没有意义。

如果你想制作OSD,你应该使用像XOSD这样的库,或者打开你自己的X窗口并使其半透明。 事实上,XOSD的源代码应该是如何做到这一点的一个很好的例子。

整个库似乎在一个文件中实现: xosd.c

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM