Рисование в корневом окне X - PullRequest
       11

Рисование в корневом окне X

9 голосов
/ 20 декабря 2009

Я бы хотел иметь возможность рисовать в корневом окне в Linux. То есть сделать OSD.

Я использую Gnome.

Примеры кода или ссылки на них приветствуются.

Ответы [ 2 ]

12 голосов
/ 20 декабря 2009

Возможно, но вы ничего не увидите в GNOME. Nautilus, файловый менеджер GNOME, открывает свое собственное окно поверх корневого окна X для отображения значков. Из-за этого корневое окно X полностью закрыто ... поэтому рисовать на нем нет смысла.

Если вы хотите сделать OSD, вы должны использовать библиотеку типа XOSD или открыть свое собственное окно X и сделать его полупрозрачным. Фактически, исходный код XOSD должен быть хорошим примером того, как это сделать.

Кажется, вся библиотека реализована в одном файле: xosd.c .

0 голосов
/ 15 ноября 2011
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".

Теперь Каир может рисовать в любых окнах очень просто, просто используйте

$cr = Gtk2::Gdk::Cairo::Context->create ($drawable);

Но на рабочем столе это не работает. Возможно, из-за обновления ядра? Или я сейчас испортил Ubuntu 10.04-3.

...