Der Gtk-Zeichenbereich wird nicht immer gerendert, wenn er sich in einem gescrollten Fenster befindet

Der Gtk-Zeichenbereich wird nicht immer gerendert, wenn er sich in einem gescrollten Fenster befindet

Ich habe einen Zeichenbereich innerhalb eines Ansichtsfensters innerhalb eines gescrollten Fensters. Das Bild wird einwandfrei gerendert, wenn der Zeichenbereich in das gescrollte Fenster passt. Wenn ich jedoch eine Größe anfordere, die größer als das gescrollte Fenster ist, wird der Zeichenbereich nicht immer neu gezeichnet, wenn ich nach oben oder unten scrolle, und dasselbe passiert, wenn die Größe des übergeordneten Fensters geändert wird. Was passiert, ist, dass ich einen Bereich der richtigen Größe innerhalb des gescrollten Fensters erhalte, aber es sieht so aus, als ob es keinen Zeichenbereich darin gibt oder als ob nichts auf dem Zeichenbereich gezeichnet wäre, der manchmal mit der richtigen Zeichnung an zufälligen Positionen der Bildlaufleisten blinkt. Ich habe einen Rückruf an das Zeichensignal angeschlossen, der bei jedem Aufruf „render“ ausgibt, und einen weiteren Rückruf an das Wertänderungssignal der Anpassungen der Bildlaufleisten, der bei jedem Scrollen „adj“ auf dem Bildschirm ausgibt. Die Terminalausgabe ist wie folgt

adj
adj
adj
adj
adj
1428919598 render
adj
adj
adj

Wenn ich also „adj“ sehe, sieht die Leinwand leer aus, während sie korrekt gezeichnet wird, wenn ich „<...> render“ sehe. Wenn ich also schnell scrolle, bekomme ich ein flimmerndes Bild. Irgendeine Idee, woran das liegen könnte?

Antwort1

Ich habe Code von GTK2 auf GTK3 portiert. Das Problem lag im neuen Signal „draw“, das jetzt „expose-event“ ersetzt. In der älteren Version musste ich den Kontext im Signalhandler erstellen, aber der neue Rückruf hat ihn als eines der Argumente, und dieses sollte verwendet werden.

verwandte Informationen