[gnome-flashback] crtc: move all_transforms field into instance private



commit 3f00d85b09b7917006ab34afc88c38a567fa7de2
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Fri Jul 10 12:05:44 2020 +0300

    crtc: move all_transforms field into instance private
    
    Based on mutter commit:
    https://gitlab.gnome.org/GNOME/mutter/-/commit/c3fc6025b17eda210c5a

 backends/gf-crtc-private.h           | 18 +++++++--------
 backends/gf-crtc-xrandr.c            |  9 ++++----
 backends/gf-crtc.c                   | 43 +++++++++++++++++++++++++++++++++---
 backends/gf-monitor-manager-xrandr.c |  2 +-
 backends/gf-monitor-manager.c        |  6 +++--
 backends/gf-monitor-transform.h      |  3 +++
 6 files changed, 62 insertions(+), 19 deletions(-)
---
diff --git a/backends/gf-crtc-private.h b/backends/gf-crtc-private.h
index 78fafcc..b3ec5e1 100644
--- a/backends/gf-crtc-private.h
+++ b/backends/gf-crtc-private.h
@@ -47,8 +47,6 @@ struct _GfCrtc
 {
   GObject         parent;
 
-  guint           all_transforms;
-
   GfCrtcConfig   *config;
 
   gpointer        driver_private;
@@ -87,16 +85,18 @@ G_DECLARE_FINAL_TYPE (GfCrtc, gf_crtc, GF, CRTC, GObject)
 #define GF_TYPE_CRTC_MODE (gf_crtc_mode_get_type ())
 G_DECLARE_FINAL_TYPE (GfCrtcMode, gf_crtc_mode, GF, CRTC_MODE, GObject)
 
-uint64_t  gf_crtc_get_id       (GfCrtc             *self);
+uint64_t            gf_crtc_get_id             (GfCrtc             *self);
+
+GfGpu              *gf_crtc_get_gpu            (GfCrtc             *self);
 
-GfGpu    *gf_crtc_get_gpu      (GfCrtc             *self);
+GfMonitorTransform  gf_crtc_get_all_transforms (GfCrtc             *self);
 
-void      gf_crtc_set_config   (GfCrtc             *self,
-                                GfRectangle        *layout,
-                                GfCrtcMode         *mode,
-                                GfMonitorTransform  transform);
+void                gf_crtc_set_config         (GfCrtc             *self,
+                                                GfRectangle        *layout,
+                                                GfCrtcMode         *mode,
+                                                GfMonitorTransform  transform);
 
-void      gf_crtc_unset_config (GfCrtc             *self);
+void                gf_crtc_unset_config       (GfCrtc             *self);
 
 G_END_DECLS
 
diff --git a/backends/gf-crtc-xrandr.c b/backends/gf-crtc-xrandr.c
index 697331b..4c48279 100644
--- a/backends/gf-crtc-xrandr.c
+++ b/backends/gf-crtc-xrandr.c
@@ -32,7 +32,6 @@
 #include "gf-output-private.h"
 
 #define ALL_ROTATIONS (RR_Rotate_0 | RR_Rotate_90 | RR_Rotate_180 | RR_Rotate_270)
-#define ALL_TRANSFORMS ((1 << (GF_MONITOR_TRANSFORM_FLIPPED_270 + 1)) - 1)
 
 typedef struct
 {
@@ -99,7 +98,7 @@ gf_monitor_transform_from_xrandr_all (Rotation rotation)
   /* All rotations and one reflection -> all of them by composition */
   if ((rotation & ALL_ROTATIONS) &&
       ((rotation & RR_Reflect_X) || (rotation & RR_Reflect_Y)))
-    return ALL_TRANSFORMS;
+    return GF_MONITOR_ALL_TRANSFORMS;
 
   ret = 1 << GF_MONITOR_TRANSFORM_NORMAL;
   if (rotation & RR_Rotate_90)
@@ -128,6 +127,7 @@ gf_create_xrandr_crtc (GfGpuXrandr        *gpu_xrandr,
 
 {
   GfGpu *gpu;
+  GfMonitorTransform all_transforms;
   GfCrtc *crtc;
   GfCrtcXrandr *crtc_xrandr;
   unsigned int i;
@@ -135,9 +135,12 @@ gf_create_xrandr_crtc (GfGpuXrandr        *gpu_xrandr,
 
   gpu = GF_GPU (gpu_xrandr);
 
+  all_transforms = gf_monitor_transform_from_xrandr_all (xrandr_crtc->rotations);
+
   crtc = g_object_new (GF_TYPE_CRTC,
                        "id", crtc_id,
                        "gpu", gpu,
+                       "all-transforms", all_transforms,
                        NULL);
 
   crtc_xrandr = g_new0 (GfCrtcXrandr, 1);
@@ -152,8 +155,6 @@ gf_create_xrandr_crtc (GfGpuXrandr        *gpu_xrandr,
   crtc->driver_private = crtc_xrandr;
   crtc->driver_notify = (GDestroyNotify) gf_crtc_destroy_notify;
 
-  crtc->all_transforms = gf_monitor_transform_from_xrandr_all (xrandr_crtc->rotations);
-
   modes = gf_gpu_get_modes (gpu);
   for (i = 0; i < (guint) resources->nmode; i++)
     {
diff --git a/backends/gf-crtc.c b/backends/gf-crtc.c
index 0e9a1e1..8dc4830 100644
--- a/backends/gf-crtc.c
+++ b/backends/gf-crtc.c
@@ -23,9 +23,11 @@
 
 typedef struct
 {
-  uint64_t  id;
+  uint64_t            id;
 
-  GfGpu    *gpu;
+  GfGpu              *gpu;
+
+  GfMonitorTransform  all_transforms;
 } GfCrtcPrivate;
 
 enum
@@ -34,6 +36,7 @@ enum
 
   PROP_ID,
   PROP_GPU,
+  PROP_ALL_TRANSFORMS,
 
   LAST_PROP
 };
@@ -79,6 +82,10 @@ gf_crtc_get_property (GObject    *object,
         g_value_set_object (value, priv->gpu);
         break;
 
+      case PROP_ALL_TRANSFORMS:
+        g_value_set_uint (value, priv->all_transforms);
+        break;
+
       default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
         break;
@@ -107,6 +114,10 @@ gf_crtc_set_property (GObject      *object,
         priv->gpu = g_value_get_object (value);
         break;
 
+      case PROP_ALL_TRANSFORMS:
+        priv->all_transforms = g_value_get_uint (value);
+        break;
+
       default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
         break;
@@ -144,13 +155,29 @@ gf_crtc_class_init (GfCrtcClass *crtc_class)
                          G_PARAM_CONSTRUCT_ONLY |
                          G_PARAM_STATIC_STRINGS);
 
+  crtc_properties[PROP_ALL_TRANSFORMS] =
+    g_param_spec_uint ("all-transforms",
+                       "all-transforms",
+                       "All transforms",
+                       0,
+                       GF_MONITOR_ALL_TRANSFORMS,
+                       GF_MONITOR_ALL_TRANSFORMS,
+                       G_PARAM_READWRITE |
+                       G_PARAM_CONSTRUCT_ONLY |
+                       G_PARAM_STATIC_STRINGS);
+
   g_object_class_install_properties (object_class, LAST_PROP,
                                      crtc_properties);
 }
 
 static void
-gf_crtc_init (GfCrtc *crtc)
+gf_crtc_init (GfCrtc *self)
 {
+  GfCrtcPrivate *priv;
+
+  priv = gf_crtc_get_instance_private (self);
+
+  priv->all_transforms = GF_MONITOR_ALL_TRANSFORMS;
 }
 
 uint64_t
@@ -173,6 +200,16 @@ gf_crtc_get_gpu (GfCrtc *crtc)
   return priv->gpu;
 }
 
+GfMonitorTransform
+gf_crtc_get_all_transforms (GfCrtc *self)
+{
+  GfCrtcPrivate *priv;
+
+  priv = gf_crtc_get_instance_private (self);
+
+  return priv->all_transforms;
+}
+
 void
 gf_crtc_set_config (GfCrtc             *crtc,
                     GfRectangle        *layout,
diff --git a/backends/gf-monitor-manager-xrandr.c b/backends/gf-monitor-manager-xrandr.c
index 13d971d..588487f 100644
--- a/backends/gf-monitor-manager-xrandr.c
+++ b/backends/gf-monitor-manager-xrandr.c
@@ -1030,7 +1030,7 @@ gf_monitor_manager_xrandr_is_transform_handled (GfMonitorManager   *manager,
                                                 GfCrtc             *crtc,
                                                 GfMonitorTransform  transform)
 {
-  g_warn_if_fail ((crtc->all_transforms & transform) == transform);
+  g_warn_if_fail ((gf_crtc_get_all_transforms (crtc) & transform) == transform);
 
   return TRUE;
 }
diff --git a/backends/gf-monitor-manager.c b/backends/gf-monitor-manager.c
index 8aa1f54..1e8734e 100644
--- a/backends/gf-monitor-manager.c
+++ b/backends/gf-monitor-manager.c
@@ -1106,8 +1106,10 @@ gf_monitor_manager_handle_get_resources (GfDBusDisplayConfig   *skeleton,
 
       g_variant_builder_init (&transforms, G_VARIANT_TYPE ("au"));
       for (j = 0; j <= GF_MONITOR_TRANSFORM_FLIPPED_270; j++)
-        if (crtc->all_transforms & (1 << j))
-          g_variant_builder_add (&transforms, "u", j);
+        {
+          if (gf_crtc_get_all_transforms (crtc) & (1 << j))
+            g_variant_builder_add (&transforms, "u", j);
+        }
 
       crtc_config = crtc->config;
 
diff --git a/backends/gf-monitor-transform.h b/backends/gf-monitor-transform.h
index eabc83d..bc6aca9 100644
--- a/backends/gf-monitor-transform.h
+++ b/backends/gf-monitor-transform.h
@@ -35,6 +35,9 @@ typedef enum
   GF_MONITOR_TRANSFORM_FLIPPED_270,
 } GfMonitorTransform;
 
+#define GF_MONITOR_N_TRANSFORMS (GF_MONITOR_TRANSFORM_FLIPPED_270 + 1)
+#define GF_MONITOR_ALL_TRANSFORMS ((1 << GF_MONITOR_N_TRANSFORMS) - 1)
+
 static inline gboolean
 gf_monitor_transform_is_rotated (GfMonitorTransform transform)
 {


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