[mutter] MetaMonitor: Add mode spec concept



commit 5d9e2d8d2e964856b06cea64583e1006f3d35d81
Author: Jonas Ådahl <jadahl gmail com>
Date:   Sat Dec 17 22:29:33 2016 +0800

    MetaMonitor: Add mode spec concept
    
    Add a "mode spec" concept, meaning to be used as a identifier for an
    actual monitor mode. It consists of details making a mode unique, i.e.
    the total resolution and refresh rate. This will later be used to get
    the actual monitor mode (set of one or more CRTC modes).
    
    https://bugzilla.gnome.org/show_bug.cgi?id=777732

 src/backends/meta-monitor.c |   34 +++++++++++++++++++++-------------
 src/backends/meta-monitor.h |    9 +++++++++
 2 files changed, 30 insertions(+), 13 deletions(-)
---
diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
index 9fad8b6..7fa0094 100644
--- a/src/backends/meta-monitor.c
+++ b/src/backends/meta-monitor.c
@@ -28,9 +28,7 @@
 
 typedef struct _MetaMonitorMode
 {
-  int width;
-  int height;
-  float refresh_rate;
+  MetaMonitorModeSpec spec;
   MetaMonitorCrtcMode *crtc_modes;
 } MetaMonitorMode;
 
@@ -176,9 +174,11 @@ meta_monitor_normal_generate_modes (MetaMonitorNormal *monitor_normal)
       MetaMonitorMode *mode;
 
       mode = g_new0 (MetaMonitorMode, 1);
-      mode->width = crtc_mode->width;
-      mode->height = crtc_mode->height;
-      mode->refresh_rate = crtc_mode->refresh_rate;
+      mode->spec = (MetaMonitorModeSpec) {
+        .width = crtc_mode->width,
+        .height = crtc_mode->height,
+        .refresh_rate = crtc_mode->refresh_rate
+      },
       mode->crtc_modes = g_new (MetaMonitorCrtcMode, 1);
       mode->crtc_modes[0] = (MetaMonitorCrtcMode) {
         .x = 0,
@@ -337,7 +337,8 @@ meta_monitor_tiled_generate_modes (MetaMonitorTiled *monitor_tiled)
 
   mode = g_new0 (MetaMonitorMode, 1);
   meta_monitor_tiled_calculate_tiled_size (monitor,
-                                           &mode->width, &mode->height);
+                                           &mode->spec.width,
+                                           &mode->spec.height);
   mode->crtc_modes = g_new (MetaMonitorCrtcMode,
                             g_list_length (monitor_priv->outputs));
   for (l = monitor_priv->outputs, i = 0; l; l = l->next, i++)
@@ -356,10 +357,11 @@ meta_monitor_tiled_generate_modes (MetaMonitorTiled *monitor_tiled)
         .crtc_mode = preferred_crtc_mode
       };
 
-      g_warn_if_fail (mode->refresh_rate == 0.0f ||
-                      mode->refresh_rate == preferred_crtc_mode->refresh_rate);
+      g_warn_if_fail (mode->spec.refresh_rate == 0.0f ||
+                      (mode->spec.refresh_rate ==
+                       preferred_crtc_mode->refresh_rate));
 
-      mode->refresh_rate = preferred_crtc_mode->refresh_rate;
+      mode->spec.refresh_rate = preferred_crtc_mode->refresh_rate;
     }
 
   monitor_priv->modes = g_list_append (monitor_priv->modes, mode);
@@ -452,19 +454,25 @@ meta_monitor_get_modes (MetaMonitor *monitor)
   return priv->modes;
 }
 
+MetaMonitorModeSpec *
+meta_monitor_mode_get_spec (MetaMonitorMode *monitor_mode)
+{
+  return &monitor_mode->spec;
+}
+
 void
 meta_monitor_mode_get_resolution (MetaMonitorMode *monitor_mode,
                                   int             *width,
                                   int             *height)
 {
-  *width = monitor_mode->width;
-  *height = monitor_mode->height;
+  *width = monitor_mode->spec.width;
+  *height = monitor_mode->spec.height;
 }
 
 float
 meta_monitor_mode_get_refresh_rate (MetaMonitorMode *monitor_mode)
 {
-  return monitor_mode->refresh_rate;
+  return monitor_mode->spec.refresh_rate;
 }
 
 void
diff --git a/src/backends/meta-monitor.h b/src/backends/meta-monitor.h
index fc8511b..ec33984 100644
--- a/src/backends/meta-monitor.h
+++ b/src/backends/meta-monitor.h
@@ -28,6 +28,13 @@
 
 typedef struct _MetaMonitorMode MetaMonitorMode;
 
+typedef struct _MetaMonitorModeSpec
+{
+  int width;
+  int height;
+  float refresh_rate;
+} MetaMonitorModeSpec;
+
 typedef struct _MetaMonitorCrtcMode
 {
   int x;
@@ -91,6 +98,8 @@ uint32_t meta_monitor_tiled_get_tile_group_id (MetaMonitorTiled *monitor_tiled);
 
 GList * meta_monitor_get_modes (MetaMonitor *monitor);
 
+MetaMonitorModeSpec * meta_monitor_mode_get_spec (MetaMonitorMode *monitor_mode);
+
 void meta_monitor_mode_get_resolution (MetaMonitorMode *monitor_mode,
                                        int             *width,
                                        int             *height);


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