[mutter] clutter/backend: Introduce a fallback scale set to primary monitor scale



commit 802b24a640edbdef4ad94c20d23663800c5c0e68
Author: Jonas Dreßler <verdre v0yd nl>
Date:   Sat Jun 6 22:58:10 2020 +0200

    clutter/backend: Introduce a fallback scale set to primary monitor scale
    
    Add private API to ClutterBackend to set a fallback resource scale
    available to Clutter. This API will be used for "guessing" the
    resource-scale of ClutterActors in case the actor is not attached to a
    stage or not properly positioned yet.
    
    We set this value from inside mutters MetaRenderer while creating new
    stage-views for each logical monitor. This makes it possible to set the
    fallback scale to the scale of the primary monitor, which is the monitor
    where most ClutterActors are going to be positioned.
    
    https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1276

 clutter/clutter/clutter-backend-private.h |  8 ++++++++
 clutter/clutter/clutter-backend.c         | 13 +++++++++++++
 src/backends/meta-renderer.c              | 13 +++++++++++++
 3 files changed, 34 insertions(+)
---
diff --git a/clutter/clutter/clutter-backend-private.h b/clutter/clutter/clutter-backend-private.h
index c7c54f85be..d5dca0d25d 100644
--- a/clutter/clutter/clutter-backend-private.h
+++ b/clutter/clutter/clutter-backend-private.h
@@ -53,6 +53,8 @@ struct _ClutterBackend
   gfloat units_per_em;
   gint32 units_serial;
 
+  float fallback_resource_scale;
+
   ClutterStageWindow *stage_window;
 
   ClutterInputMethod *input_method;
@@ -134,6 +136,12 @@ void                    clutter_set_allowed_drivers                     (const c
 CLUTTER_EXPORT
 ClutterStageWindow *    clutter_backend_get_stage_window                (ClutterBackend         *backend);
 
+CLUTTER_EXPORT
+void clutter_backend_set_fallback_resource_scale (ClutterBackend *backend,
+                                                  float           fallback_resource_scale);
+
+float clutter_backend_get_fallback_resource_scale (ClutterBackend *backend);
+
 G_END_DECLS
 
 #endif /* __CLUTTER_BACKEND_PRIVATE_H__ */
diff --git a/clutter/clutter/clutter-backend.c b/clutter/clutter/clutter-backend.c
index 3cc4ca2974..20d8961154 100644
--- a/clutter/clutter/clutter-backend.c
+++ b/clutter/clutter/clutter-backend.c
@@ -1031,3 +1031,16 @@ clutter_backend_get_default_seat (ClutterBackend *backend)
 
   return CLUTTER_BACKEND_GET_CLASS (backend)->get_default_seat (backend);
 }
+
+void
+clutter_backend_set_fallback_resource_scale (ClutterBackend *backend,
+                                             float           fallback_resource_scale)
+{
+  backend->fallback_resource_scale = fallback_resource_scale;
+}
+
+float
+clutter_backend_get_fallback_resource_scale (ClutterBackend *backend)
+{
+  return backend->fallback_resource_scale;
+}
diff --git a/src/backends/meta-renderer.c b/src/backends/meta-renderer.c
index b5cc37efbf..e0107ec9d6 100644
--- a/src/backends/meta-renderer.c
+++ b/src/backends/meta-renderer.c
@@ -153,6 +153,19 @@ meta_renderer_real_rebuild_views (MetaRenderer *renderer)
     {
       MetaLogicalMonitor *logical_monitor = l->data;
 
+      if (meta_logical_monitor_is_primary (logical_monitor))
+        {
+          ClutterBackend *clutter_backend;
+          float scale;
+
+          clutter_backend = meta_backend_get_clutter_backend (backend);
+          scale = meta_is_stage_views_scaled ()
+            ? meta_logical_monitor_get_scale (logical_monitor)
+            : 1.f;
+
+          clutter_backend_set_fallback_resource_scale (clutter_backend, scale);
+        }
+
       meta_logical_monitor_foreach_crtc (logical_monitor,
                                          create_crtc_view,
                                          renderer);


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