私は問題があります。
関数 Xlib (XDrawLine など) を使用して、ウィジェット タイプ GtkDrawingArea を描画する必要があります。
なんで?
Xlibで描画するライブラリを使用しています。そして、レンダリング関数 drawSome で引数 (Display、Window、GC) を渡す必要があります (...)。すべては順調です。これらの引数を (gdk_x11_... ()、GdkDrawable、GdkGC を介して) 取得し、取得したパラメーターで drawSome (...) を呼び出します。
しかし、問題があります - 描画は常に行われるわけではありません。ウィンドウの最大化、ドラッグ、DrawingArea のサイズ変更などを行った場合、画像は表示されません。画像は、トップ ウィンドウの異常な操作時にのみ表示されます。
次に、関数 XDrawPoint/Line/Rectangle をテストしました - 同じ問題です。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;
}
...
画像と小さな黒い四角形が表示されるのは 1 つのケースのみです。ウィンドウがデスクトップを超えて移動し、デスクトップに戻ると、画像が表示されます。それ以外の場合は表示されません。別の関数で DrawingArea を消去している印象です。
何が問題なのか誰に教えてもらえますか?
私は感謝されます!
そして… 下手な英語でごめんなさい!