[gnome-flashback] monitor-manager: add get_monitor_for_output



commit 9f83630e581489d9435e71fa7e8c78d4f780496c
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Thu Sep 28 15:17:15 2017 +0300

    monitor-manager: add get_monitor_for_output

 backends/gf-monitor-manager.c |   25 +++++++++++++++++++++++++
 backends/gf-monitor-manager.h |    3 +++
 backends/gf-rectangle.c       |   10 ++++++++++
 backends/gf-rectangle.h       |    3 +++
 4 files changed, 41 insertions(+), 0 deletions(-)
---
diff --git a/backends/gf-monitor-manager.c b/backends/gf-monitor-manager.c
index ffebbcb..e566e6c 100644
--- a/backends/gf-monitor-manager.c
+++ b/backends/gf-monitor-manager.c
@@ -2524,6 +2524,31 @@ gf_monitor_manager_clear_crtc (GfCrtc *crtc)
   memset (crtc, 0, sizeof (*crtc));
 }
 
+gint
+gf_monitor_manager_get_monitor_for_output (GfMonitorManager *manager,
+                                           guint             id)
+{
+  GfOutput *output;
+  GList *l;
+
+  g_return_val_if_fail (GF_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 (l = manager->logical_monitors; l; l = l->next)
+    {
+      GfLogicalMonitor *logical_monitor = l->data;
+
+      if (gf_rectangle_contains_rect (&logical_monitor->rect, &output->crtc->rect))
+        return logical_monitor->number;
+    }
+
+  return -1;
+}
+
 gboolean
 gf_monitor_manager_get_is_builtin_display_on (GfMonitorManager *manager)
 {
diff --git a/backends/gf-monitor-manager.h b/backends/gf-monitor-manager.h
index 2518dac..c7ed394 100644
--- a/backends/gf-monitor-manager.h
+++ b/backends/gf-monitor-manager.h
@@ -37,6 +37,9 @@ typedef enum
 
 typedef struct _GfMonitorManager GfMonitorManager;
 
+gint                      gf_monitor_manager_get_monitor_for_output            (GfMonitorManager          
*manager,
+                                                                                guint                      
id);
+
 gboolean                  gf_monitor_manager_get_is_builtin_display_on         (GfMonitorManager          
*manager);
 
 GfMonitorSwitchConfigType gf_monitor_manager_get_switch_config                 (GfMonitorManager          
*manager);
diff --git a/backends/gf-rectangle.c b/backends/gf-rectangle.c
index 06ebbba..7df8f2d 100644
--- a/backends/gf-rectangle.c
+++ b/backends/gf-rectangle.c
@@ -62,6 +62,16 @@ gf_rectangle_horiz_overlap (const GfRectangle *rect1,
 }
 
 gboolean
+gf_rectangle_contains_rect (const GfRectangle *outer_rect,
+                            const GfRectangle *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;
+}
+
+gboolean
 gf_rectangle_overlaps_with_region (const GList       *spanning_rects,
                                    const GfRectangle *rect)
 {
diff --git a/backends/gf-rectangle.h b/backends/gf-rectangle.h
index f587495..03ff228 100644
--- a/backends/gf-rectangle.h
+++ b/backends/gf-rectangle.h
@@ -43,6 +43,9 @@ gboolean gf_rectangle_vert_overlap  (const GfRectangle *rect1,
 gboolean gf_rectangle_horiz_overlap (const GfRectangle *rect1,
                                      const GfRectangle *rect2);
 
+gboolean gf_rectangle_contains_rect (const GfRectangle *outer_rect,
+                                     const GfRectangle *inner_rect);
+
 G_END_DECLS
 
 #endif


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