You've already forked android_translation_layer
mirror of
https://gitlab.com/android_translation_layer/android_translation_layer.git
synced 2025-10-27 11:48:10 -07:00
SurfaceView.unlockCanvasAndPost(): create GSK renderer without surface
This is needed to allow using the renderer on non UI threads.
This commit is contained in:
@@ -158,7 +158,18 @@ JNIEXPORT void JNICALL Java_android_view_SurfaceView_native_1postSnapshot(JNIEnv
|
||||
GtkWidget *view = GTK_WIDGET(_PTR(surface_view));
|
||||
SurfaceViewWidget *surface_view_widget = SURFACE_VIEW_WIDGET(gtk_widget_get_first_child(view));
|
||||
GtkSnapshot *snapshot = GTK_SNAPSHOT(_PTR(snapshot_ptr));
|
||||
GskRenderer *renderer = gsk_renderer_new_for_surface(gtk_native_get_surface(GTK_NATIVE(window)));
|
||||
static GType renderer_type = 0;
|
||||
if (!renderer_type) {
|
||||
// Use same renderer type as for onscreen rendering.
|
||||
GdkSurface *surface = gdk_surface_new_toplevel(gdk_display_get_default());
|
||||
GskRenderer *renderer = gsk_renderer_new_for_surface(surface);
|
||||
renderer_type = G_OBJECT_TYPE(renderer);
|
||||
gsk_renderer_unrealize(renderer);
|
||||
g_object_unref(renderer);
|
||||
gdk_surface_destroy(surface);
|
||||
}
|
||||
GskRenderer *renderer = g_object_new(renderer_type, NULL);
|
||||
gsk_renderer_realize(renderer, NULL, NULL);
|
||||
GskRenderNode *node = gtk_snapshot_free_to_node(snapshot);
|
||||
GdkTexture *texture = gsk_renderer_render_texture(renderer, node, NULL);
|
||||
gsk_render_node_unref(node);
|
||||
|
||||
Reference in New Issue
Block a user