2013-02-21 56 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