2009-12-19 4 views
9

Me gustaría poder dibujar en la ventana raíz en Linux. Es decir hacer una OSD.Dibujando en la ventana raíz X

Estoy usando Gnome.

Se apreciarán ejemplos de código o enlaces a ellos.

Respuesta

8

Es posible, pero no verá nada en GNOME. Nautilus, el administrador de archivos de GNOME, abre su propia ventana en la parte superior de la ventana de root X para mostrar iconos. Debido a eso, la ventana de la raíz X está completamente cubierta ... por lo que no tiene sentido recurrir a ella.

Si desea hacer OSD, o bien debe utilizar una biblioteca como XOSD, o abra su propia ventana X y haga que sea translúcida. De hecho, el código fuente de XOSD debería ser un buen ejemplo de cómo hacer esto.

Toda la biblioteca parece estar implementada en un solo archivo: xosd.c.

+0

Gracias, su respuesta fue de gran ayuda. Me gustaría dibujar cosas que no sean solo texto, pero este es un buen punto de partida. – x10

+1

Aquí hay algunos ejemplos de código: http://pastebin.com/f58970b0c Y un tutorial: http://ldots.org/xosd-guide/using_libxosd.html – x10

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; 
#------------------------------------------ 

Puedo encontrar escritorio, verificado por xwininfo. Pero, perdí el código que puede dibujar el escritorio, parece usado "set_back_pixmap".

Ahora Cairo puede recurrir a cualquier ventana de manera muy simple, sólo tiene que utilizar

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

embargo, esto no funciona en el escritorio. ¿Quizás debido a la actualización del kernel? O lo arruiné ahora en Ubuntu 10.04-3.

Cuestiones relacionadas