[gnome-remote-desktop] rdp-gfx-surface: Add way to override the render surface



commit ef31fb218beaa0f7eedefaed3c8f419194b39648
Author: Pascal Nowack <Pascal Nowack gmx de>
Date:   Thu Feb 10 17:46:16 2022 +0100

    rdp-gfx-surface: Add way to override the render surface
    
    This is another preparation step to be able to use separate render
    surfaces to render the frame content to, which will then be blit onto
    the mapped surface.

 src/grd-rdp-gfx-surface.c | 21 +++++++++++++++++++++
 src/grd-rdp-gfx-surface.h |  5 +++++
 2 files changed, 26 insertions(+)
---
diff --git a/src/grd-rdp-gfx-surface.c b/src/grd-rdp-gfx-surface.c
index 73b8200c..1216164e 100644
--- a/src/grd-rdp-gfx-surface.c
+++ b/src/grd-rdp-gfx-surface.c
@@ -40,6 +40,8 @@ struct _GrdRdpGfxSurface
   uint16_t width;
   uint16_t height;
 
+  GrdRdpGfxSurface *render_surface;
+
   GrdRdpGfxFrameController *frame_controller;
 };
 
@@ -81,6 +83,24 @@ grd_rdp_gfx_surface_get_height (GrdRdpGfxSurface *gfx_surface)
   return gfx_surface->height;
 }
 
+GrdRdpGfxSurface *
+grd_rdp_gfx_surface_get_render_surface (GrdRdpGfxSurface *gfx_surface)
+{
+  if (gfx_surface->render_surface)
+    return gfx_surface->render_surface;
+
+  return gfx_surface;
+}
+
+void
+grd_rdp_gfx_surface_override_render_surface (GrdRdpGfxSurface *gfx_surface,
+                                             GrdRdpGfxSurface *render_surface)
+{
+  g_assert (!gfx_surface->render_surface);
+
+  gfx_surface->render_surface = render_surface;
+}
+
 GrdRdpGfxFrameController *
 grd_rdp_gfx_surface_get_frame_controller (GrdRdpGfxSurface *gfx_surface)
 {
@@ -137,6 +157,7 @@ grd_rdp_gfx_surface_dispose (GObject *object)
   GrdRdpGfxSurface *gfx_surface = GRD_RDP_GFX_SURFACE (object);
 
   g_clear_object (&gfx_surface->frame_controller);
+  g_clear_object (&gfx_surface->render_surface);
 
   if (gfx_surface->created)
     {
diff --git a/src/grd-rdp-gfx-surface.h b/src/grd-rdp-gfx-surface.h
index abfdb07a..6195ad20 100644
--- a/src/grd-rdp-gfx-surface.h
+++ b/src/grd-rdp-gfx-surface.h
@@ -64,6 +64,11 @@ uint16_t grd_rdp_gfx_surface_get_width (GrdRdpGfxSurface *gfx_surface);
 
 uint16_t grd_rdp_gfx_surface_get_height (GrdRdpGfxSurface *gfx_surface);
 
+GrdRdpGfxSurface *grd_rdp_gfx_surface_get_render_surface (GrdRdpGfxSurface *gfx_surface);
+
+void grd_rdp_gfx_surface_override_render_surface (GrdRdpGfxSurface *gfx_surface,
+                                                  GrdRdpGfxSurface *render_surface);
+
 GrdRdpGfxFrameController *grd_rdp_gfx_surface_get_frame_controller (GrdRdpGfxSurface *gfx_surface);
 
 void grd_rdp_gfx_surface_attach_frame_controller (GrdRdpGfxSurface         *gfx_surface,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]