2016-04-08 73 views
2

我使用GtkWebKitgi.repository在X11服務器上使用python(在raspbian上)。 我有一個Gtk.OffscreenWindowWebKit.WebView小部件,我正在尋找一種方法來獲得OffscreenWindow的實際表面數據的參考。獲取參考Gtk.OffscreenWindow開羅表面

Gtk.OffscreenWindow.get_surface返回一個cairo.XlibSurface對象,但似乎沒有辦法訪問曲面的像素數據(缺少get_drawable)。

Gtk.OffscreenWindow.get_pixbuf返回一個像素緩衝區,但據我瞭解,這是實際表面數據的副本。

我使用get_snapshot方法的WebKit.WebView,但它創建了一個新的cairo.ImageSurface

我最終的目標是使用參考來使用pi3d繪製曲面並獲得任何曲面更新,而不必獲得OffscreenWindow(這很慢)的新快照。

+0

*爲什麼*您必須OffscreenWindow中的WebView?這聽起來像你想讓WebView的內容可見的地方......那麼,爲什麼它在一個OffscreenWindow? –

+0

我正在使用OffscreenWindow,因爲我想通過opengl(pi3d)使內容可見。 – kapetanos

回答

0

GTK3 developer reference

GtkOffscreenWindow從派生的GtkWindow僅作爲一個實現細節。應用程序不應使用特定於GtkWindow的任何API來操作此對象。

GTKOffscreenWindows不能或不應該作爲windows操作,因此開羅不能用於他們。

+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.pyhttps://github.com/pi3d/pi3d_demos/blob/master/PyQtCube.py

我意識到這是爲時已晚,你原來的問題,但它可能會幫助別人到達這裏從谷歌搜索!

我還是不明白,爲什麼在其他Linux實現工程對樹莓派,但其他開發商不工作的X11繪圖表面系統似乎要利用到libbcm_host.so