[gtk+/wip/matthiasc/monitor] Implement workarea with a vfunc
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/matthiasc/monitor] Implement workarea with a vfunc
- Date: Mon, 4 Apr 2016 00:02:39 +0000 (UTC)
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]