我遇到了问题。用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