Hi;

On 29 July 2015 at 14:55, Stefan Salewski <m...@ssalewski.de> wrote:
> On Wed, 2015-07-29 at 13:05 +0100, Emmanuele Bassi wrote:
>> If you have legacy code that requires disabling double buffering, you
>> should probably invest some time into porting it to a proper solution
>> integrated with the GTK drawing model;
>
> It would be great if someone could port this example to GTK3:
>
> http://www.cairographics.org/threaded_animation_with_cairo/

Those examples, especially the one that uses Unix signals to interrupt
the program flow, ought to be burned with fire. Not only they are
questionable in GTK 2.x, but they are also unportable jumbles of code
that work by sheer accident.

If you want to draw with Cairo on a separate thread Because Of
Reasons™, then you need to create a Cairo surface using the GdkWindow
API — see gdk_window_create_similar_image_surface() — then draw on it
from within your thread; at the end of the thread, queue a redraw on
the widget. At the same time, inside a GtkWidget::draw handler, use
the Cairo surface you drew on inside the thread, set it as you source,
and draw the surface on the Cairo context that GTK gives you. This
way, the drawing code will happen in a separate thread, and you'll
draw only when GTK tells you to draw.

All considerations on accessing GTK and GDK API from the thread that
called gtk_init/gtk_main (or g_application_run(), if you're writing
modern code) still apply.

Ciao,
 Emmanuele.

-- 
https://www.bassi.io
[@] ebassi [@gmail.com]
_______________________________________________
gtk-list mailing list
gtk-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-list

Reply via email to