2016-04-08 3 views
2

J'utilise Gtk et WebKit de gi.repository en utilisant python sur le serveur X11 (sur raspbian). J'ai un Gtk.OffscreenWindow avec un widget WebKit.WebView dedans et je cherche un moyen d'obtenir une référence aux données réelles de surface du OffscreenWindow.Obtenez une référence à la surface cairo Gtk.OffscreenWindow

Gtk.OffscreenWindow.get_surface renvoie un objet cairo.XlibSurface mais il ne semble pas qu'il existe un moyen d'accéder aux données de pixel de la surface (get_drawable est manquant).

Gtk.OffscreenWindow.get_pixbuf renvoie un tampon de pixels mais, à ma connaissance, il s'agit d'une copie des données de surface réelles.

J'ai utilisé la méthode get_snapshot du WebKit.WebView mais il crée un nouveau cairo.ImageSurface.

Mon objectif final est d'utiliser la référence pour dessiner la surface en utilisant pi3d et obtenir des mises à jour de surface sans avoir à obtenir un nouvel instantané du OffscreenWindow (ce qui est assez lent).

+0

* Pourquoi * Avez-vous un WebView dans une Fenêtre Offscreen? Il semble que vous vouliez rendre le contenu de WebView visible quelque part ... eh bien, alors pourquoi est-ce dans une fenêtre d'écran? –

+0

J'utilise un OffscreenWindow parce que je veux rendre le contenu visible par opengl (pi3d). – kapetanos

Répondre

0

De l'GTK3 developer reference,

GtkOffscreenWindow dérive de GtkWindow seulement comme un détail de mise en œuvre. Les applications ne doivent utiliser aucune API spécifique à GtkWindow pour fonctionner sur cet objet.

GTKOffscreenWindows ne peut pas ou ne doit pas être utilisé comme des fenêtres, donc Cairo ne peut pas être utilisé sur eux.

+0

Je comprends la documentation. OffscreenWindow a pour but d'obtenir un instantané du widget contenu. Vous pouvez obtenir la surface avec OffscreenWindow.get_surface qui renvoie une cairo.XlibSurface comme indiqué dans la documentation. Je n'utilise rien de spécifique à GtkWindow. – kapetanos

+1

Pourquoi utilisez-vous un 'GtkOffscreenWindow '? Ne pourriez-vous pas avoir un 'WebKit.WebView' virtuel en mémoire, et obtenir la surface? Un 'cairo.ImageSurface' vous donnerait les données de pixels de toute façon. – oldtechaa

+0

Oui, cela fonctionne effectivement. Le problème est que get_snapshot crée un nouveau cairo.ImageSurface chaque fois que vous l'appelez (comme vu sur la source webkit). Je cherche un moyen d'obtenir une référence à un tampon qui contient les données de pixels, de sorte que toutes les mises à jour du contenu de la webkit seront disponibles via le même tampon. – kapetanos

0

@kapetanos, vous êtes probablement au courant de la conversation de pi3d.groups ici https://groups.google.com/forum/#!topic/pi3d/4x0fPerYKRU et l'intégration ultérieure dans pi3d https://github.com/pi3d/pi3d_demos/blob/master/GtkCube.py et https://github.com/pi3d/pi3d_demos/blob/master/PyQtCube.py

Je sais que cela est trop tard pour que votre question initiale, mais il pourrait aider quelqu'un d'arriver ici d'une recherche google!

Je ne comprends toujours pas pourquoi le système de surface de dessin X11 qui fonctionne sur d'autres implémentations de Linux ne fonctionne pas sur le Raspberry Pi, mais d'autres développeurs semblent recourir à l'utilisation libbcm_host.so