[metacity] compositor: add pre_paint functions



commit 9761e50995bb5cab03eebf02e61d437f254cdab4
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Sat Oct 5 15:04:19 2019 +0300

    compositor: add pre_paint functions

 src/compositor/meta-compositor-none.c    |  6 ++++++
 src/compositor/meta-compositor-private.h |  2 ++
 src/compositor/meta-compositor-vulkan.c  |  6 ++++++
 src/compositor/meta-compositor-xrender.c |  6 ++++++
 src/compositor/meta-compositor.c         |  8 ++++++++
 src/compositor/meta-surface-private.h    |  2 ++
 src/compositor/meta-surface-vulkan.c     | 10 ++++++++++
 src/compositor/meta-surface-xrender.c    | 10 ++++++++++
 src/compositor/meta-surface.c            |  6 ++++++
 src/compositor/meta-surface.h            |  2 ++
 10 files changed, 58 insertions(+)
---
diff --git a/src/compositor/meta-compositor-none.c b/src/compositor/meta-compositor-none.c
index 111e05fc..e8fd3035 100644
--- a/src/compositor/meta-compositor-none.c
+++ b/src/compositor/meta-compositor-none.c
@@ -122,6 +122,11 @@ meta_compositor_none_sync_window_geometry (MetaCompositor *compositor,
 {
 }
 
+static void
+meta_compositor_none_pre_paint (MetaCompositor *compositor)
+{
+}
+
 static void
 meta_compositor_none_redraw (MetaCompositor *compositor,
                              XserverRegion   all_damage)
@@ -150,6 +155,7 @@ meta_compositor_none_class_init (MetaCompositorNoneClass *none_class)
   compositor_class->unmaximize_window = meta_compositor_none_unmaximize_window;
   compositor_class->sync_screen_size = meta_compositor_none_sync_screen_size;
   compositor_class->sync_window_geometry = meta_compositor_none_sync_window_geometry;
+  compositor_class->pre_paint = meta_compositor_none_pre_paint;
   compositor_class->redraw = meta_compositor_none_redraw;
 }
 
diff --git a/src/compositor/meta-compositor-private.h b/src/compositor/meta-compositor-private.h
index 20a26a67..ded9ce67 100644
--- a/src/compositor/meta-compositor-private.h
+++ b/src/compositor/meta-compositor-private.h
@@ -77,6 +77,8 @@ struct _MetaCompositorClass
   void              (* sync_window_geometry)         (MetaCompositor     *compositor,
                                                       MetaWindow         *window);
 
+  void              (* pre_paint)                    (MetaCompositor     *compositor);
+
   void              (* redraw)                       (MetaCompositor     *compositor,
                                                       XserverRegion       all_damage);
 };
diff --git a/src/compositor/meta-compositor-vulkan.c b/src/compositor/meta-compositor-vulkan.c
index 77476d8c..026998d0 100644
--- a/src/compositor/meta-compositor-vulkan.c
+++ b/src/compositor/meta-compositor-vulkan.c
@@ -1357,6 +1357,11 @@ meta_compositor_vulkan_sync_window_geometry (MetaCompositor *compositor,
 {
 }
 
+static void
+meta_compositor_vulkan_pre_paint (MetaCompositor *compositor)
+{
+}
+
 static void
 meta_compositor_vulkan_redraw (MetaCompositor *compositor,
                                XserverRegion   all_damage)
@@ -1389,6 +1394,7 @@ meta_compositor_vulkan_class_init (MetaCompositorVulkanClass *vulkan_class)
   compositor_class->unmaximize_window = meta_compositor_vulkan_unmaximize_window;
   compositor_class->sync_screen_size = meta_compositor_vulkan_sync_screen_size;
   compositor_class->sync_window_geometry = meta_compositor_vulkan_sync_window_geometry;
+  compositor_class->pre_paint = meta_compositor_vulkan_pre_paint;
   compositor_class->redraw = meta_compositor_vulkan_redraw;
 }
 
diff --git a/src/compositor/meta-compositor-xrender.c b/src/compositor/meta-compositor-xrender.c
index 82a55bc1..4ca9df5e 100644
--- a/src/compositor/meta-compositor-xrender.c
+++ b/src/compositor/meta-compositor-xrender.c
@@ -2897,6 +2897,11 @@ meta_compositor_xrender_sync_window_geometry (MetaCompositor *compositor,
   meta_error_trap_pop (window->display);
 }
 
+static void
+meta_compositor_xrender_pre_paint (MetaCompositor *compositor)
+{
+}
+
 static void
 meta_compositor_xrender_redraw (MetaCompositor *compositor,
                                 XserverRegion   all_damage)
@@ -2941,6 +2946,7 @@ meta_compositor_xrender_class_init (MetaCompositorXRenderClass *xrender_class)
   compositor_class->unmaximize_window = meta_compositor_xrender_unmaximize_window;
   compositor_class->sync_screen_size = meta_compositor_xrender_sync_screen_size;
   compositor_class->sync_window_geometry = meta_compositor_xrender_sync_window_geometry;
+  compositor_class->pre_paint = meta_compositor_xrender_pre_paint;
   compositor_class->redraw = meta_compositor_xrender_redraw;
 }
 
diff --git a/src/compositor/meta-compositor.c b/src/compositor/meta-compositor.c
index 6a2079be..a430d450 100644
--- a/src/compositor/meta-compositor.c
+++ b/src/compositor/meta-compositor.c
@@ -131,10 +131,18 @@ redraw_idle_cb (gpointer user_data)
 {
   MetaCompositor *compositor;
   MetaCompositorPrivate *priv;
+  GHashTableIter iter;
+  MetaSurface *surface;
 
   compositor = META_COMPOSITOR (user_data);
   priv = meta_compositor_get_instance_private (compositor);
 
+  META_COMPOSITOR_GET_CLASS (compositor)->pre_paint (compositor);
+
+  g_hash_table_iter_init (&iter, priv->surfaces);
+  while (g_hash_table_iter_next (&iter, NULL, (gpointer) &surface))
+    meta_surface_pre_paint (surface);
+
   if (priv->all_damage != None)
     {
       META_COMPOSITOR_GET_CLASS (compositor)->redraw (compositor, priv->all_damage);
diff --git a/src/compositor/meta-surface-private.h b/src/compositor/meta-surface-private.h
index 10f2b530..6d9a5d64 100644
--- a/src/compositor/meta-surface-private.h
+++ b/src/compositor/meta-surface-private.h
@@ -25,6 +25,8 @@ G_BEGIN_DECLS
 struct _MetaSurfaceClass
 {
   GObjectClass parent_class;
+
+  void (* pre_paint) (MetaSurface *self);
 };
 
 G_END_DECLS
diff --git a/src/compositor/meta-surface-vulkan.c b/src/compositor/meta-surface-vulkan.c
index 9ad3c659..626b3405 100644
--- a/src/compositor/meta-surface-vulkan.c
+++ b/src/compositor/meta-surface-vulkan.c
@@ -25,9 +25,19 @@ struct _MetaSurfaceVulkan
 
 G_DEFINE_TYPE (MetaSurfaceVulkan, meta_surface_vulkan, META_TYPE_SURFACE)
 
+static void
+meta_surface_vulkan_pre_paint (MetaSurface *surface)
+{
+}
+
 static void
 meta_surface_vulkan_class_init (MetaSurfaceVulkanClass *self_class)
 {
+  MetaSurfaceClass *surface_class;
+
+  surface_class = META_SURFACE_CLASS (self_class);
+
+  surface_class->pre_paint = meta_surface_vulkan_pre_paint;
 }
 
 static void
diff --git a/src/compositor/meta-surface-xrender.c b/src/compositor/meta-surface-xrender.c
index 025b4492..f4c88841 100644
--- a/src/compositor/meta-surface-xrender.c
+++ b/src/compositor/meta-surface-xrender.c
@@ -25,9 +25,19 @@ struct _MetaSurfaceXRender
 
 G_DEFINE_TYPE (MetaSurfaceXRender, meta_surface_xrender, META_TYPE_SURFACE)
 
+static void
+meta_surface_xrender_pre_paint (MetaSurface *surface)
+{
+}
+
 static void
 meta_surface_xrender_class_init (MetaSurfaceXRenderClass *self_class)
 {
+  MetaSurfaceClass *surface_class;
+
+  surface_class = META_SURFACE_CLASS (self_class);
+
+  surface_class->pre_paint = meta_surface_xrender_pre_paint;
 }
 
 static void
diff --git a/src/compositor/meta-surface.c b/src/compositor/meta-surface.c
index 3c1243c6..f7bca565 100644
--- a/src/compositor/meta-surface.c
+++ b/src/compositor/meta-surface.c
@@ -152,3 +152,9 @@ meta_surface_get_window (MetaSurface *self)
 
   return priv->window;
 }
+
+void
+meta_surface_pre_paint (MetaSurface *self)
+{
+  META_SURFACE_GET_CLASS (self)->pre_paint (self);
+}
diff --git a/src/compositor/meta-surface.h b/src/compositor/meta-surface.h
index ff940431..e975b187 100644
--- a/src/compositor/meta-surface.h
+++ b/src/compositor/meta-surface.h
@@ -30,6 +30,8 @@ MetaCompositor *meta_surface_get_compositor (MetaSurface *self);
 
 MetaWindow     *meta_surface_get_window     (MetaSurface *self);
 
+void            meta_surface_pre_paint      (MetaSurface *self);
+
 G_END_DECLS
 
 #endif


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