1 /* 2 * Copyright (C) 2016 Red Hat, Inc. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 * 18 */ 19 20 #pragma once 21 22 #include <glib-object.h> 23 24 G_BEGIN_DECLS 25 26 /* 27 * GNOME Control Center display configuration system: 28 * 29 * The display configuration system consists of multiple concepts: 30 * 31 * CcDisplayConfig: 32 * 33 * Configuration instance, read from mutter using the 34 * org.gnome.Mutter.DisplayConfig D-Bus API. Contains information about the 35 * current configuration. Can be copied, to create a representation of a 36 * configuration at a given time, and applied, applying any changes that has 37 * been made to the objects associated with the configuration. 38 * 39 * CcDisplayConfig provides a list of all known "monitors" known to the 40 * compositor. It does not know about ports without any monitors connected, 41 * nor low level details about monitors, such as tiling etc. 42 * 43 * CcDisplayMonitor: 44 * 45 * A high level representation of a connected monitor. A monitor have details 46 * associated with it, some which can be altered. Each CcDisplayMonitor 47 * instance is associated with a single CcDisplayConfig instance. All 48 * alteration to a monitor is cached and not applied until 49 * cc_display_config_apply() is called on the corresponding CcDisplayConfig 50 * object. 51 * 52 * CcDisplayMode: 53 * 54 * A monitor mode, including resolution, refresh rate, and scale. Each monitor 55 * will have a list of possible modes. 56 * 57 */ 58 59 typedef enum _CcDisplayRotation 60 { 61 CC_DISPLAY_ROTATION_NONE, 62 CC_DISPLAY_ROTATION_90, 63 CC_DISPLAY_ROTATION_180, 64 CC_DISPLAY_ROTATION_270, 65 CC_DISPLAY_ROTATION_FLIPPED, 66 CC_DISPLAY_ROTATION_90_FLIPPED, 67 CC_DISPLAY_ROTATION_180_FLIPPED, 68 CC_DISPLAY_ROTATION_270_FLIPPED, 69 } CcDisplayRotation; 70 71 72 #define CC_TYPE_DISPLAY_MODE (cc_display_mode_get_type ()) 73 G_DECLARE_DERIVABLE_TYPE (CcDisplayMode, cc_display_mode, 74 CC, DISPLAY_MODE, GObject) 75 76 struct _CcDisplayModeClass 77 { 78 GObjectClass parent_class; 79 80 void (*get_resolution) (CcDisplayMode *self, int *w, int *h); 81 GArray* (*get_supported_scales) (CcDisplayMode *self); 82 double (*get_preferred_scale) (CcDisplayMode *self); 83 gboolean (*is_interlaced) (CcDisplayMode *self); 84 int (*get_freq) (CcDisplayMode *self); 85 double (*get_freq_f) (CcDisplayMode *self); 86 }; 87 88 89 #define CC_TYPE_DISPLAY_MONITOR (cc_display_monitor_get_type ()) 90 G_DECLARE_DERIVABLE_TYPE (CcDisplayMonitor, cc_display_monitor, 91 CC, DISPLAY_MONITOR, GObject) 92 93 struct _CcDisplayMonitorClass 94 { 95 GObjectClass parent_class; 96 97 guint32 (*get_id) (CcDisplayMonitor *self); 98 const char* (*get_display_name) (CcDisplayMonitor *self); 99 const char* (*get_connector_name) (CcDisplayMonitor *self); 100 gboolean (*is_builtin) (CcDisplayMonitor *self); 101 gboolean (*is_primary) (CcDisplayMonitor *self); 102 void (*set_primary) (CcDisplayMonitor *self, 103 gboolean primary); 104 gboolean (*is_active) (CcDisplayMonitor *self); 105 void (*set_active) (CcDisplayMonitor *self, 106 gboolean a); 107 CcDisplayRotation (*get_rotation) (CcDisplayMonitor *self); 108 void (*set_rotation) (CcDisplayMonitor *self, 109 CcDisplayRotation r); 110 gboolean (*supports_rotation) (CcDisplayMonitor *self, 111 CcDisplayRotation r); 112 void (*get_physical_size) (CcDisplayMonitor *self, 113 int *w, 114 int *h); 115 void (*get_geometry) (CcDisplayMonitor *self, 116 int *x, 117 int *y, 118 int *w, 119 int *h); 120 gboolean (*supports_underscanning) (CcDisplayMonitor *self); 121 gboolean (*get_underscanning) (CcDisplayMonitor *self); 122 void (*set_underscanning) (CcDisplayMonitor *self, 123 gboolean u); 124 CcDisplayMode* (*get_mode) (CcDisplayMonitor *self); 125 CcDisplayMode* (*get_preferred_mode) (CcDisplayMonitor *self); 126 GList* (*get_modes) (CcDisplayMonitor *self); 127 void (*set_mode) (CcDisplayMonitor *self, 128 CcDisplayMode *m); 129 void (*set_position) (CcDisplayMonitor *self, 130 int x, 131 int y); 132 double (*get_scale) (CcDisplayMonitor *self); 133 void (*set_scale) (CcDisplayMonitor *self, 134 double s); 135 }; 136 137 138 #define CC_TYPE_DISPLAY_CONFIG (cc_display_config_get_type ()) 139 G_DECLARE_DERIVABLE_TYPE (CcDisplayConfig, cc_display_config, 140 CC, DISPLAY_CONFIG, GObject) 141 142 struct _CcDisplayConfigClass 143 { 144 GObjectClass parent_class; 145 146 GList* (*get_monitors) (CcDisplayConfig *self); 147 gboolean (*is_applicable) (CcDisplayConfig *self); 148 gboolean (*equal) (CcDisplayConfig *self, 149 CcDisplayConfig *other); 150 gboolean (*apply) (CcDisplayConfig *self, 151 GError **error); 152 gboolean (*is_cloning) (CcDisplayConfig *self); 153 void (*set_cloning) (CcDisplayConfig *self, 154 gboolean clone); 155 GList* (*get_cloning_modes) (CcDisplayConfig *self); 156 gboolean (*is_layout_logical) (CcDisplayConfig *self); 157 void (*set_minimum_size) (CcDisplayConfig *self, 158 int width, 159 int height); 160 gboolean (*is_scaled_mode_valid) (CcDisplayConfig *self, 161 CcDisplayMode *mode, 162 double scale); 163 gboolean (* get_panel_orientation_managed) (CcDisplayConfig *self); 164 }; 165 166 167 GList* cc_display_config_get_monitors (CcDisplayConfig *config); 168 GList* cc_display_config_get_ui_sorted_monitors (CcDisplayConfig *config); 169 int cc_display_config_count_useful_monitors (CcDisplayConfig *config); 170 gboolean cc_display_config_is_applicable (CcDisplayConfig *config); 171 gboolean cc_display_config_equal (CcDisplayConfig *config, 172 CcDisplayConfig *other); 173 gboolean cc_display_config_apply (CcDisplayConfig *config, 174 GError **error); 175 gboolean cc_display_config_is_cloning (CcDisplayConfig *config); 176 void cc_display_config_set_cloning (CcDisplayConfig *config, 177 gboolean clone); 178 GList* cc_display_config_get_cloning_modes (CcDisplayConfig *config); 179 180 void cc_display_config_set_mode_on_all_outputs (CcDisplayConfig *config, 181 CcDisplayMode *mode); 182 183 gboolean cc_display_config_is_layout_logical (CcDisplayConfig *self); 184 void cc_display_config_set_minimum_size (CcDisplayConfig *self, 185 int width, 186 int height); 187 gboolean cc_display_config_is_scaled_mode_valid (CcDisplayConfig *self, 188 CcDisplayMode *mode, 189 double scale); 190 gboolean cc_display_config_get_panel_orientation_managed 191 (CcDisplayConfig *self); 192 193 const char* cc_display_monitor_get_display_name (CcDisplayMonitor *monitor); 194 gboolean cc_display_monitor_is_active (CcDisplayMonitor *monitor); 195 void cc_display_monitor_set_active (CcDisplayMonitor *monitor, 196 gboolean active); 197 const char* cc_display_monitor_get_connector_name (CcDisplayMonitor *monitor); 198 CcDisplayRotation cc_display_monitor_get_rotation (CcDisplayMonitor *monitor); 199 void cc_display_monitor_set_rotation (CcDisplayMonitor *monitor, 200 CcDisplayRotation r); 201 gboolean cc_display_monitor_supports_rotation (CcDisplayMonitor *monitor, 202 CcDisplayRotation rotation); 203 void cc_display_monitor_get_physical_size (CcDisplayMonitor *monitor, 204 int *w, 205 int *h); 206 gboolean cc_display_monitor_is_builtin (CcDisplayMonitor *monitor); 207 gboolean cc_display_monitor_is_primary (CcDisplayMonitor *monitor); 208 void cc_display_monitor_set_primary (CcDisplayMonitor *monitor, 209 gboolean primary); 210 guint32 cc_display_monitor_get_id (CcDisplayMonitor *monitor); 211 212 gboolean cc_display_monitor_supports_underscanning (CcDisplayMonitor *monitor); 213 gboolean cc_display_monitor_get_underscanning (CcDisplayMonitor *monitor); 214 void cc_display_monitor_set_underscanning (CcDisplayMonitor *monitor, 215 gboolean underscanning); 216 217 CcDisplayMode* cc_display_monitor_get_mode (CcDisplayMonitor *monitor); 218 void cc_display_monitor_get_geometry (CcDisplayMonitor *monitor, 219 int *x, 220 int *y, 221 int *width, 222 int *height); 223 GList* cc_display_monitor_get_modes (CcDisplayMonitor *monitor); 224 CcDisplayMode* cc_display_monitor_get_preferred_mode (CcDisplayMonitor *monitor); 225 double cc_display_monitor_get_scale (CcDisplayMonitor *monitor); 226 void cc_display_monitor_set_scale (CcDisplayMonitor *monitor, 227 double s); 228 229 void cc_display_monitor_set_mode (CcDisplayMonitor *monitor, 230 CcDisplayMode *mode); 231 void cc_display_monitor_set_position (CcDisplayMonitor *monitor, 232 int x, 233 int y); 234 235 gboolean cc_display_monitor_is_useful (CcDisplayMonitor *monitor); 236 gboolean cc_display_monitor_is_usable (CcDisplayMonitor *monitor); 237 void cc_display_monitor_set_usable (CcDisplayMonitor *monitor, 238 gboolean is_usable); 239 int cc_display_monitor_get_ui_number (CcDisplayMonitor *monitor); 240 const char* cc_display_monitor_get_ui_name (CcDisplayMonitor *monitor); 241 const char* cc_display_monitor_get_ui_number_name (CcDisplayMonitor *monitor); 242 char* cc_display_monitor_dup_ui_number_name (CcDisplayMonitor *monitor); 243 244 void cc_display_mode_get_resolution (CcDisplayMode *mode, 245 int *width, 246 int *height); 247 GArray* cc_display_mode_get_supported_scales (CcDisplayMode *self); 248 double cc_display_mode_get_preferred_scale (CcDisplayMode *self); 249 gboolean cc_display_mode_is_interlaced (CcDisplayMode *mode); 250 int cc_display_mode_get_freq (CcDisplayMode *mode); 251 double cc_display_mode_get_freq_f (CcDisplayMode *mode); 252 253 G_END_DECLS 254