Skip to content

Commit

Permalink
Use Cairo renderer for capturing image of widget
Browse files Browse the repository at this point in the history
Do not rely on GPU renderers - Cairo renderer (SW renderer) is safe to use in all cases.
  • Loading branch information
lundmar committed Jan 27, 2022
1 parent 553c48c commit 7b14295
Showing 1 changed file with 3 additions and 6 deletions.
9 changes: 3 additions & 6 deletions src/gtkchart.c
Original file line number Diff line number Diff line change
Expand Up @@ -874,20 +874,17 @@ bool gtk_chart_save_png(GtkChart *chart, const char *filename)
GdkPaintable *paintable = gtk_widget_paintable_new (GTK_WIDGET(chart));
GtkSnapshot *snapshot = gtk_snapshot_new ();
gdk_paintable_snapshot (paintable, snapshot, width, height);
GskRenderNode *node = gtk_snapshot_to_node (snapshot);
GdkSurface *surface = gdk_surface_new_toplevel (gdk_display_get_default());
GskRenderer *renderer = gsk_renderer_new_for_surface (surface);
gsk_renderer_realize (renderer, surface, NULL);
GskRenderNode *node = gtk_snapshot_free_to_node (snapshot);
GskRenderer *renderer = gsk_cairo_renderer_new ();
gsk_renderer_realize (renderer, NULL, NULL);
GdkTexture *texture = gsk_renderer_render_texture (renderer, node, NULL);
gdk_texture_save_to_png (texture, filename);

// Cleanup
g_object_unref(texture);
gsk_renderer_unrealize(renderer);
g_object_unref(renderer);
g_object_unref(surface);
gsk_render_node_unref(node);
g_object_unref(snapshot);
g_object_unref(paintable);

return true;
Expand Down

0 comments on commit 7b14295

Please sign in to comment.