Implement workarea with a vfunc
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user