[mutter] backends: Refactor MetaScreenDirection guessing into separate function



commit efae039ad94c48bacdeaeb779513ff83eddcbe98
Author: Carlos Garnacho <carlosg gnome org>
Date:   Fri Mar 24 15:46:32 2017 +0100

    backends: Refactor MetaScreenDirection guessing into separate function
    
    Make it a helper MetaLogicalMonitor API, and use it on the
    MetaMonitorManager.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=778119

 src/backends/meta-logical-monitor.c |   40 +++++++++++++++++++++++++++++++++++
 src/backends/meta-logical-monitor.h |    4 +++
 src/backends/meta-monitor-manager.c |   33 +---------------------------
 3 files changed, 46 insertions(+), 31 deletions(-)
---
diff --git a/src/backends/meta-logical-monitor.c b/src/backends/meta-logical-monitor.c
index 4385fe9..e400e0e 100644
--- a/src/backends/meta-logical-monitor.c
+++ b/src/backends/meta-logical-monitor.c
@@ -180,3 +180,43 @@ static void
 meta_logical_monitor_class_init (MetaLogicalMonitorClass *klass)
 {
 }
+
+gboolean
+meta_logical_monitor_has_neighbor (MetaLogicalMonitor  *logical_monitor,
+                                   MetaLogicalMonitor  *neighbor,
+                                   MetaScreenDirection  neighbor_direction)
+{
+  switch (neighbor_direction)
+    {
+    case META_SCREEN_RIGHT:
+      if (neighbor->rect.x == (logical_monitor->rect.x +
+                               logical_monitor->rect.width) &&
+          meta_rectangle_vert_overlap (&neighbor->rect,
+                                       &logical_monitor->rect))
+        return TRUE;
+      break;
+    case META_SCREEN_LEFT:
+      if (logical_monitor->rect.x == (neighbor->rect.x +
+                                      neighbor->rect.width) &&
+          meta_rectangle_vert_overlap (&neighbor->rect,
+                                       &logical_monitor->rect))
+        return TRUE;
+      break;
+    case META_SCREEN_UP:
+      if (logical_monitor->rect.y == (neighbor->rect.y +
+                                      neighbor->rect.height) &&
+          meta_rectangle_horiz_overlap (&neighbor->rect,
+                                        &logical_monitor->rect))
+        return TRUE;
+      break;
+    case META_SCREEN_DOWN:
+      if (neighbor->rect.y == (logical_monitor->rect.y +
+                               logical_monitor->rect.height) &&
+          meta_rectangle_horiz_overlap (&neighbor->rect,
+                                        &logical_monitor->rect))
+        return TRUE;
+      break;
+    }
+
+  return FALSE;
+}
diff --git a/src/backends/meta-logical-monitor.h b/src/backends/meta-logical-monitor.h
index a7e3a9d..de1af1b 100644
--- a/src/backends/meta-logical-monitor.h
+++ b/src/backends/meta-logical-monitor.h
@@ -80,4 +80,8 @@ int meta_logical_monitor_get_scale (MetaLogicalMonitor *logical_monitor);
 
 GList * meta_logical_monitor_get_monitors (MetaLogicalMonitor *logical_monitor);
 
+gboolean meta_logical_monitor_has_neighbor (MetaLogicalMonitor  *logical_monitor,
+                                            MetaLogicalMonitor  *neighbor,
+                                            MetaScreenDirection  neighbor_dir);
+
 #endif /* META_LOGICAL_MONITOR_H */
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
index e03b5cb..dc1d960 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -1572,37 +1572,8 @@ meta_monitor_manager_get_logical_monitor_neighbor (MetaMonitorManager *manager,
     {
       MetaLogicalMonitor *other = l->data;
 
-      switch (direction)
-        {
-        case META_SCREEN_RIGHT:
-           if (other->rect.x == (logical_monitor->rect.x +
-                                 logical_monitor->rect.width) &&
-               meta_rectangle_vert_overlap (&other->rect,
-                                            &logical_monitor->rect))
-             return other;
-           break;
-        case META_SCREEN_LEFT:
-           if (logical_monitor->rect.x == (other->rect.x +
-                                           other->rect.width) &&
-               meta_rectangle_vert_overlap (&other->rect,
-                                            &logical_monitor->rect))
-             return other;
-           break;
-        case META_SCREEN_UP:
-           if (logical_monitor->rect.y == (other->rect.y +
-                                           other->rect.height) &&
-               meta_rectangle_horiz_overlap (&other->rect,
-                                             &logical_monitor->rect))
-             return other;
-           break;
-        case META_SCREEN_DOWN:
-           if (other->rect.y == (logical_monitor->rect.y +
-                                 logical_monitor->rect.height) &&
-               meta_rectangle_horiz_overlap (&other->rect,
-                                             &logical_monitor->rect))
-             return other;
-           break;
-        }
+      if (meta_logical_monitor_has_neighbor (logical_monitor, other, direction))
+        return other;
     }
 
   return NULL;


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