2013-02-21 62 views
0

我遇到了問題。用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。

誰能告訴我有什麼問題?

我將不勝感激!

而......對不起,這麼糟糕的英語!

+0

除非你有真正令人信服的理由來使用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

+0

cairo無濟於事。因爲我在函數中使用了一個特殊的庫。它有以下參數:someFunction(long int,Display *,Window,GC,DRAWPOINT)。所以cairo和gdk繪圖基元不會有幫助。因爲問題不在這個函數中,並且在錯誤的組織中使用低級GtkDrawingArea(通過Xlib)。 – BeatAngel 2013-02-21 12:09:02

回答

0

你需要使用這些功能X Window System Interaction但被警告,但可能有其他缺陷。我想你還需要使用gtk_widget_set_double_buffered

+0

嗨,iain! 我使用一些函數閱讀了文章「X Window System Interaction」。 我已經關閉了參數小部件GtkDrawingArea(在Glade中)中的雙緩衝。沒有工作。 然後我嘗試了gtk_widget_set_double_buffered函數。它被顯示,因爲它應該! iain,謝謝你的回覆和提示! – BeatAngel 2013-02-21 18:46:20