[gnome-flashback] display-config: add method to get a monitor from an output



commit 433be96f2fb48663e70034bdbed4f63a2e421bbd
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Mon Mar 30 14:01:35 2015 +0300

    display-config: add method to get a monitor from an output

 .../libdisplay-config/flashback-monitor-manager.c  |   32 ++++++++++++++++++++
 .../libdisplay-config/flashback-monitor-manager.h  |    3 ++
 2 files changed, 35 insertions(+), 0 deletions(-)
---
diff --git a/gnome-flashback/libdisplay-config/flashback-monitor-manager.c 
b/gnome-flashback/libdisplay-config/flashback-monitor-manager.c
index c5064dd..2803c95 100644
--- a/gnome-flashback/libdisplay-config/flashback-monitor-manager.c
+++ b/gnome-flashback/libdisplay-config/flashback-monitor-manager.c
@@ -57,6 +57,17 @@ struct _FlashbackMonitorManagerPrivate
 
 G_DEFINE_TYPE_WITH_PRIVATE (FlashbackMonitorManager, flashback_monitor_manager, G_TYPE_OBJECT)
 
+static gboolean
+rectangle_contains_rect (const GdkRectangle *outer_rect,
+                         const GdkRectangle *inner_rect)
+{
+  return
+    inner_rect->x                      >= outer_rect->x &&
+    inner_rect->y                      >= outer_rect->y &&
+    inner_rect->x + inner_rect->width  <= outer_rect->x + outer_rect->width &&
+    inner_rect->y + inner_rect->height <= outer_rect->y + outer_rect->height;
+}
+
 static Rotation
 meta_monitor_transform_to_xrandr (MetaMonitorTransform transform)
 {
@@ -1501,3 +1512,24 @@ flashback_monitor_manager_get_screen_limits (FlashbackMonitorManager *manager,
   *width = manager->max_screen_width;
   *height = manager->max_screen_height;
 }
+
+gint
+flashback_monitor_manager_get_monitor_for_output (FlashbackMonitorManager *manager,
+                                                  guint                    id)
+{
+  MetaOutput *output;
+  guint i;
+
+  g_return_val_if_fail (FLASHBACK_IS_MONITOR_MANAGER (manager), -1);
+  g_return_val_if_fail (id < manager->n_outputs, -1);
+
+  output = &manager->outputs[id];
+  if (!output || !output->crtc)
+    return -1;
+
+  for (i = 0; i < manager->n_monitor_infos; i++)
+    if (rectangle_contains_rect (&manager->monitor_infos[i].rect, &output->crtc->rect))
+      return i;
+
+  return -1;
+}
diff --git a/gnome-flashback/libdisplay-config/flashback-monitor-manager.h 
b/gnome-flashback/libdisplay-config/flashback-monitor-manager.h
index 41c3596..1a9ddd3 100644
--- a/gnome-flashback/libdisplay-config/flashback-monitor-manager.h
+++ b/gnome-flashback/libdisplay-config/flashback-monitor-manager.h
@@ -313,6 +313,9 @@ void                     flashback_monitor_manager_get_screen_limits   (Flashbac
                                                                         int                     *width,
                                                                         int                     *height);
 
+gint                     flashback_monitor_manager_get_monitor_for_output (FlashbackMonitorManager *manager,
+                                                                           guint                    id);
+
 G_END_DECLS
 
 #endif


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