2016-04-08 3 views
2

Я использую Gtk и WebKit от gi.repository с использованием python на сервере X11 (на raspbian). У меня есть Gtk.OffscreenWindow с виджетом WebKit.WebView, и я ищу способ получить ссылку на фактические данные поверхности OffscreenWindow.Получить ссылку на Gtk.OffscreenWindow cairo surface

Gtk.OffscreenWindow.get_surface возвращает объект cairo.XlibSurface, но, похоже, нет способа получить доступ к данным о пикселях поверхности (get_drawable отсутствует).

Gtk.OffscreenWindow.get_pixbuf возвращает буфер пикселей, но, насколько мне известно, это копия фактических данных поверхности.

Я использовал get_snapshot метод WebKit.WebView, но он создает новый cairo.ImageSurface.

Моя конечная цель - использовать ссылку для рисования поверхности с помощью pi3d и получить любые обновления поверхности без необходимости получать новый снимок OffscreenWindow (что довольно медленно).

+0

* Почему * у вас есть WebView в OffscreenWindow? Похоже, вы хотите, чтобы содержимое WebView было где-то видимым ... ну, тогда почему это в OffscreenWindow? –

+0

Я использую OffscreenWindow, потому что хочу сделать контент видимым через opengl (pi3d). – kapetanos

ответ

0

Из GTK3 developer reference,

GtkOffscreenWindow происходит от GtkWindow только как деталь реализации. Приложения не должны использовать какой-либо API, специфичный для GtkWindow, для работы с этим объектом.

GTKOffscreenWindows нельзя или не следует использовать как окна, поэтому на них нельзя использовать Каир.

+0

Я понимаю документацию. Цель OffscreenWindow - получить снимок содержащегося виджета. Вы можете получить поверхность с помощью OffscreenWindow.get_surface, которая возвращает cairo.XlibSurface, как указано в документации. Я не использую ничего конкретного GtkWindow. – kapetanos

+1

Почему вы используете 'GtkOffscreenWindow' вообще? Не могли бы вы просто иметь виртуальный 'WebKit.WebView' в памяти и получить поверхность? В любом случае, 'cairo.ImageSurface' даст вам пиксельные данные. – oldtechaa

+0

Да, это действительно работает. Проблема в том, что get_snapshot создает новый cairo.ImageSurface каждый раз, когда вы его вызываете (как видно из источника webkit). Я ищу способ получить ссылку на буфер, содержащий данные пикселя, поэтому любые обновления содержимого webkit будут доступны через один и тот же буфер. – kapetanos

0

@kapetanos, Вы, вероятно, знакомы с pi3d.groups разговор здесь https://groups.google.com/forum/#!topic/pi3d/4x0fPerYKRU и последующей интеграции в pi3d https://github.com/pi3d/pi3d_demos/blob/master/GtkCube.py и https://github.com/pi3d/pi3d_demos/blob/master/PyQtCube.py

Я понимаю, что это слишком поздно для вашего первоначального вопроса, но это может помочь кому-то прибывающий здесь из поиска в Google!

Я до сих пор не понимаю, почему Наземная система рисования X11, который работает на других реализациях Линукс не работает на Raspberry Pi, но и другие разработчики, кажется, прибегают к использованию libbcm_host.so

Смежные вопросы