我遇到了問題。用Xlib繪製GtkDrawingArea func
我需要利用使用函數的Xlib(XDrawLine等)的微件類型GtkDrawingArea。
爲什麼?
我使用這個庫,這與Xlib的平局。我需要在渲染函數drawSome(...)中傳遞任何參數(Display,Window,GC)。一切都很好。我獲得了這些參數(通過gdk_x11 _...(),GdkDrawable,GdkGC)並用獲取的參數調用drawSome(...)。
但也有問題 - 繪圖並不總是完成。在最大化窗口,拖動,調整DrawingArea大小等時,圖像不會顯示。圖像僅在頂部窗口的非正常操作下顯示。
然後我測試的功能XDrawPoint /線/矩形 - 同樣的問題。如果我們使用gdk_draw_rectangle(...) - 一切正常。
這裏的代碼如下:
...
GtkDrawingArea* area;
...
int main (int argc, char *argv[])
{
...
area=GTK_DRAWING_AREA(gtk_builder_get_object(builder,"area"));
gtk_widget_realize (GTK_WIDGET(area));
...
g_signal_connect (G_OBJECT(area), "expose_event", G_CALLBACK(expose_event_callback), NULL);
...
}
...
gboolean expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
Display *dpy = gdk_x11_drawable_get_xdisplay(widget->window);
Window win =gdk_x11_drawable_get_xid(widget->window);
GC gc = DefaultGC(dpy, DefaultScreen(dpy));
//draw image on (0,0) in widget DrawingArea and a small black rectangle over image
drawSome(dpy, win, gc, ...);
XFillRectangle(dpy, win, gc, 0, 0, 10, 10);
return FALSE;
}
...
形象,只有在一種情況下顯示一個小的黑色矩形:如果超越桌面窗口移動,並返回到桌面 - 顯示的畫面。在其他情況下,不顯示。 印象是另一個函數會擦除DrawingArea。
誰能告訴我有什麼問題?
我將不勝感激!
而......對不起,這麼糟糕的英語!
除非你有真正令人信服的理由來使用Xlib中禁用雙緩衝您GtkDrawingArea,不使用它。使用cairo代替它,它的高級作品與gtk非常相稱。你可以在這裏找到一個例子:http://stackoverflow.com/questions/9395111/gtkdrawingarea-how-to-make-it-drawable看看第二個代碼frament。使用cairo可以在GtkDrawingArea上使用非常漂亮的圖形 – hetepeperfan 2013-02-21 11:51:30
cairo無濟於事。因爲我在函數中使用了一個特殊的庫。它有以下參數:someFunction(long int,Display *,Window,GC,DRAWPOINT)。所以cairo和gdk繪圖基元不會有幫助。因爲問題不在這個函數中,並且在錯誤的組織中使用低級GtkDrawingArea(通過Xlib)。 – BeatAngel 2013-02-21 12:09:02