[gtk+/wip/matthiasc/monitor] Implement workarea with a vfunc



commit 0f37375c457c596a00cb76dfcf5a0ba99a0280e4
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Apr 3 19:59:12 2016 -0400

    Implement workarea with a vfunc

 gdk/gdkmonitor.c        |   32 ++++++++++++++++++++++++++++++++
 gdk/gdkmonitor.h        |    3 +++
 gdk/gdkmonitorprivate.h |    7 +++++++
 3 files changed, 42 insertions(+), 0 deletions(-)
---
diff --git a/gdk/gdkmonitor.c b/gdk/gdkmonitor.c
index 1701a79..10e4be5 100644
--- a/gdk/gdkmonitor.c
+++ b/gdk/gdkmonitor.c
@@ -31,6 +31,10 @@
  * - monitor type (laptop, projector, ...)
  * - consider vfuncs instead of baseclass storage
  * - provide a persistent id (if the backend allows)
+ * - x11: refresh rate
+ * - x11: hidpi scaling
+ * - convert win32
+ * - convert quartz
  */
 enum {
   PROP_0,
@@ -39,6 +43,7 @@ enum {
   PROP_MODEL,
   PROP_SCALE_FACTOR,
   PROP_GEOMETRY,
+  PROP_WORKAREA,
   PROP_WIDTH_MM,
   PROP_HEIGHT_MM,
   PROP_REFRESH_RATE,
@@ -86,6 +91,14 @@ gdk_monitor_get_property (GObject    *object,
       g_value_set_boxed (value, &monitor->geometry);
       break;
 
+    case PROP_WORKAREA:
+      {
+        GdkRectangle workarea;
+        gdk_monitor_get_workarea (monitor, &workarea);
+        g_value_set_boxed (value, &workarea);
+      }
+      break;
+
     case PROP_WIDTH_MM:
       g_value_set_int (value, monitor->width_mm);
       break;
@@ -177,6 +190,12 @@ gdk_monitor_class_init (GdkMonitorClass *class)
                         "The geometry of the monitor",
                         GDK_TYPE_RECTANGLE,
                         G_PARAM_READABLE);
+  props[PROP_WORKAREA] =
+    g_param_spec_boxed ("workarea",
+                        "Workarea",
+                        "The workarea of the monitor",
+                        GDK_TYPE_RECTANGLE,
+                        G_PARAM_READABLE);
   props[PROP_WIDTH_MM] =
     g_param_spec_int ("width-mm",
                       "Physical width",
@@ -227,6 +246,19 @@ gdk_monitor_get_geometry (GdkMonitor   *monitor,
   *geometry = monitor->geometry;
 }
 
+void
+gdk_monitor_get_workarea (GdkMonitor   *monitor,
+                          GdkRectangle *workarea)
+{
+  g_return_if_fail (GDK_IS_MONITOR (monitor));
+  g_return_if_fail (workarea != NULL);
+
+  if (GDK_MONITOR_GET_CLASS (monitor)->get_workarea)
+    GDK_MONITOR_GET_CLASS (monitor)->get_workarea (monitor, workarea);
+  else
+    *workarea = monitor->geometry;
+}
+
 int
 gdk_monitor_get_width_mm (GdkMonitor *monitor)
 {
diff --git a/gdk/gdkmonitor.h b/gdk/gdkmonitor.h
index 1407b7f..37f7d19 100644
--- a/gdk/gdkmonitor.h
+++ b/gdk/gdkmonitor.h
@@ -57,6 +57,9 @@ GDK_AVAILABLE_IN_3_22
 void              gdk_monitor_get_geometry        (GdkMonitor   *monitor,
                                                    GdkRectangle *geometry);
 GDK_AVAILABLE_IN_3_22
+void              gdk_monitor_get_workarea        (GdkMonitor   *monitor,
+                                                   GdkRectangle *geometry);
+GDK_AVAILABLE_IN_3_22
 int               gdk_monitor_get_width_mm        (GdkMonitor   *monitor);
 GDK_AVAILABLE_IN_3_22
 int               gdk_monitor_get_height_mm       (GdkMonitor   *monitor);
diff --git a/gdk/gdkmonitorprivate.h b/gdk/gdkmonitorprivate.h
index d0f7e40..0d63113 100644
--- a/gdk/gdkmonitorprivate.h
+++ b/gdk/gdkmonitorprivate.h
@@ -26,6 +26,10 @@
 
 G_BEGIN_DECLS
 
+#define GDK_MONITOR_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_MONITOR, GdkMonitorClass))
+#define GDK_IS_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_MONITOR))
+#define GDK_MONITOR_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_MONITOR, GdkMonitorClass))
+
 struct _GdkMonitor {
   GObject parent;
 
@@ -42,6 +46,9 @@ struct _GdkMonitor {
 
 struct _GdkMonitorClass {
   GObjectClass parent_class;
+
+  void (* get_workarea) (GdkMonitor   *monitor,
+                         GdkRectangle *geometry);
 };
 
 GdkMonitor *    gdk_monitor_new                 (GdkDisplay *display);


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