GCC Code Coverage Report


Directory: ./
File: panels/display/cc-display-config.h
Date: 2024-05-04 07:58:27
Exec Total Coverage
Lines: 0 3 0.0%
Functions: 0 18 0.0%
Branches: 0 16 0.0%

Line Branch Exec Source
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 typedef enum _CcDisplayMonitorPrivacy
72 {
73 CC_DISPLAY_MONITOR_PRIVACY_UNSUPPORTED = 0,
74 CC_DISPLAY_MONITOR_PRIVACY_DISABLED = 1 << 0,
75 CC_DISPLAY_MONITOR_PRIVACY_ENABLED = 1 << 1,
76 CC_DISPLAY_MONITOR_PRIVACY_LOCKED = 1 << 2,
77 } CcDisplayMonitorPrivacy;
78
79 typedef enum _CcDisplayModeRefreshRateMode
80 {
81 MODE_REFRESH_RATE_MODE_FIXED,
82 MODE_REFRESH_RATE_MODE_VARIABLE,
83 } CcDisplayModeRefreshRateMode;
84
85 #define CC_TYPE_DISPLAY_MODE (cc_display_mode_get_type ())
86 G_DECLARE_DERIVABLE_TYPE (CcDisplayMode, cc_display_mode,
87 CC, DISPLAY_MODE, GObject)
88
89 struct _CcDisplayModeClass
90 {
91 GObjectClass parent_class;
92
93 gboolean (*is_clone_mode) (CcDisplayMode *self);
94 void (*get_resolution) (CcDisplayMode *self, int *w, int *h);
95 GArray* (*get_supported_scales) (CcDisplayMode *self);
96 double (*get_preferred_scale) (CcDisplayMode *self);
97 CcDisplayModeRefreshRateMode (*get_refresh_rate_mode) (CcDisplayMode *self);
98 gboolean (*is_interlaced) (CcDisplayMode *self);
99 gboolean (*is_preferred) (CcDisplayMode *self);
100 int (*get_freq) (CcDisplayMode *self);
101 double (*get_freq_f) (CcDisplayMode *self);
102 };
103
104
105 #define CC_TYPE_DISPLAY_MONITOR (cc_display_monitor_get_type ())
106 G_DECLARE_DERIVABLE_TYPE (CcDisplayMonitor, cc_display_monitor,
107 CC, DISPLAY_MONITOR, GObject)
108
109 struct _CcDisplayMonitorClass
110 {
111 GObjectClass parent_class;
112
113 guint32 (*get_id) (CcDisplayMonitor *self);
114 const char* (*get_display_name) (CcDisplayMonitor *self);
115 const char* (*get_connector_name) (CcDisplayMonitor *self);
116 gboolean (*is_builtin) (CcDisplayMonitor *self);
117 gboolean (*is_primary) (CcDisplayMonitor *self);
118 void (*set_primary) (CcDisplayMonitor *self,
119 gboolean primary);
120 gboolean (*is_active) (CcDisplayMonitor *self);
121 void (*set_active) (CcDisplayMonitor *self,
122 gboolean a);
123 CcDisplayRotation (*get_rotation) (CcDisplayMonitor *self);
124 void (*set_rotation) (CcDisplayMonitor *self,
125 CcDisplayRotation r);
126 gboolean (*supports_rotation) (CcDisplayMonitor *self,
127 CcDisplayRotation r);
128 void (*get_physical_size) (CcDisplayMonitor *self,
129 int *w,
130 int *h);
131 void (*get_geometry) (CcDisplayMonitor *self,
132 int *x,
133 int *y,
134 int *w,
135 int *h);
136 int (*get_min_freq) (CcDisplayMonitor *self);
137 gboolean (*supports_variable_refresh_rate) (CcDisplayMonitor *self);
138 gboolean (*supports_underscanning) (CcDisplayMonitor *self);
139 gboolean (*get_underscanning) (CcDisplayMonitor *self);
140 void (*set_underscanning) (CcDisplayMonitor *self,
141 gboolean u);
142 CcDisplayMonitorPrivacy (*get_privacy) (CcDisplayMonitor *self);
143 CcDisplayMode* (*get_mode) (CcDisplayMonitor *self);
144 CcDisplayMode* (*get_preferred_mode) (CcDisplayMonitor *self);
145 GList* (*get_modes) (CcDisplayMonitor *self);
146 void (*set_compatible_clone_mode) (CcDisplayMonitor *self,
147 CcDisplayMode *m);
148 void (*set_mode) (CcDisplayMonitor *self,
149 CcDisplayMode *m);
150 void (*set_refresh_rate_mode) (CcDisplayMonitor *self,
151 CcDisplayModeRefreshRateMode refresh_rate_mode);
152 void (*set_position) (CcDisplayMonitor *self,
153 int x,
154 int y);
155 double (*get_scale) (CcDisplayMonitor *self);
156 void (*set_scale) (CcDisplayMonitor *self,
157 double s);
158 };
159
160
161 #define CC_TYPE_DISPLAY_CONFIG (cc_display_config_get_type ())
162 G_DECLARE_DERIVABLE_TYPE (CcDisplayConfig, cc_display_config,
163 CC, DISPLAY_CONFIG, GObject)
164
165 struct _CcDisplayConfigClass
166 {
167 GObjectClass parent_class;
168
169 GList* (*get_monitors) (CcDisplayConfig *self);
170 gboolean (*is_applicable) (CcDisplayConfig *self);
171 gboolean (*equal) (CcDisplayConfig *self,
172 CcDisplayConfig *other);
173 gboolean (*apply) (CcDisplayConfig *self,
174 GError **error);
175 gboolean (*is_cloning) (CcDisplayConfig *self);
176 void (*set_cloning) (CcDisplayConfig *self,
177 gboolean clone);
178 GList* (*generate_cloning_modes) (CcDisplayConfig *self);
179 gboolean (*is_layout_logical) (CcDisplayConfig *self);
180 void (*set_minimum_size) (CcDisplayConfig *self,
181 int width,
182 int height);
183 gboolean (*is_scaled_mode_valid) (CcDisplayConfig *self,
184 CcDisplayMode *mode,
185 double scale);
186 gboolean (* get_panel_orientation_managed) (CcDisplayConfig *self);
187 };
188
189
190 GList* cc_display_config_get_monitors (CcDisplayConfig *config);
191 GList* cc_display_config_get_ui_sorted_monitors (CcDisplayConfig *config);
192 int cc_display_config_count_useful_monitors (CcDisplayConfig *config);
193 gboolean cc_display_config_is_applicable (CcDisplayConfig *config);
194 gboolean cc_display_config_equal (CcDisplayConfig *config,
195 CcDisplayConfig *other);
196 gboolean cc_display_config_apply (CcDisplayConfig *config,
197 GError **error);
198 gboolean cc_display_config_is_cloning (CcDisplayConfig *config);
199 void cc_display_config_set_cloning (CcDisplayConfig *config,
200 gboolean clone);
201 GList* cc_display_config_generate_cloning_modes (CcDisplayConfig *config);
202
203 void cc_display_config_set_mode_on_all_outputs (CcDisplayConfig *config,
204 CcDisplayMode *mode);
205
206 gboolean cc_display_config_is_layout_logical (CcDisplayConfig *self);
207 void cc_display_config_set_minimum_size (CcDisplayConfig *self,
208 int width,
209 int height);
210 gboolean cc_display_config_is_scaled_mode_valid (CcDisplayConfig *self,
211 CcDisplayMode *mode,
212 double scale);
213 gboolean cc_display_config_get_panel_orientation_managed
214 (CcDisplayConfig *self);
215 void cc_display_config_update_ui_numbers_names (CcDisplayConfig *self);
216
217 const char* cc_display_monitor_get_display_name (CcDisplayMonitor *monitor);
218 gboolean cc_display_monitor_is_active (CcDisplayMonitor *monitor);
219 void cc_display_monitor_set_active (CcDisplayMonitor *monitor,
220 gboolean active);
221 const char* cc_display_monitor_get_connector_name (CcDisplayMonitor *monitor);
222 CcDisplayRotation cc_display_monitor_get_rotation (CcDisplayMonitor *monitor);
223 void cc_display_monitor_set_rotation (CcDisplayMonitor *monitor,
224 CcDisplayRotation r);
225 gboolean cc_display_monitor_supports_rotation (CcDisplayMonitor *monitor,
226 CcDisplayRotation rotation);
227 void cc_display_monitor_get_physical_size (CcDisplayMonitor *monitor,
228 int *w,
229 int *h);
230 gboolean cc_display_monitor_is_builtin (CcDisplayMonitor *monitor);
231 gboolean cc_display_monitor_is_primary (CcDisplayMonitor *monitor);
232 void cc_display_monitor_set_primary (CcDisplayMonitor *monitor,
233 gboolean primary);
234 guint32 cc_display_monitor_get_id (CcDisplayMonitor *monitor);
235
236 gboolean cc_display_monitor_supports_variable_refresh_rate (CcDisplayMonitor *self);
237 gboolean cc_display_monitor_supports_underscanning (CcDisplayMonitor *monitor);
238 gboolean cc_display_monitor_get_underscanning (CcDisplayMonitor *monitor);
239 void cc_display_monitor_set_underscanning (CcDisplayMonitor *monitor,
240 gboolean underscanning);
241
242 CcDisplayMonitorPrivacy cc_display_monitor_get_privacy (CcDisplayMonitor *self);
243
244 CcDisplayMode* cc_display_monitor_get_mode (CcDisplayMonitor *monitor);
245 void cc_display_monitor_get_geometry (CcDisplayMonitor *monitor,
246 int *x,
247 int *y,
248 int *width,
249 int *height);
250 int cc_display_monitor_get_min_freq (CcDisplayMonitor *monitor);
251 GList* cc_display_monitor_get_modes (CcDisplayMonitor *monitor);
252 CcDisplayMode* cc_display_monitor_get_preferred_mode (CcDisplayMonitor *monitor);
253 double cc_display_monitor_get_scale (CcDisplayMonitor *monitor);
254 void cc_display_monitor_set_scale (CcDisplayMonitor *monitor,
255 double s);
256
257 void cc_display_monitor_set_compatible_clone_mode (CcDisplayMonitor *monitor,
258 CcDisplayMode *mode);
259 void cc_display_monitor_set_mode (CcDisplayMonitor *monitor,
260 CcDisplayMode *mode);
261 void cc_display_monitor_set_refresh_rate_mode (CcDisplayMonitor *self,
262 CcDisplayModeRefreshRateMode refresh_rate_mode);
263 void cc_display_monitor_set_position (CcDisplayMonitor *monitor,
264 int x,
265 int y);
266
267 gboolean cc_display_monitor_is_useful (CcDisplayMonitor *monitor);
268 gboolean cc_display_monitor_is_usable (CcDisplayMonitor *monitor);
269 void cc_display_monitor_set_usable (CcDisplayMonitor *monitor,
270 gboolean is_usable);
271 int cc_display_monitor_get_ui_number (CcDisplayMonitor *monitor);
272 const char* cc_display_monitor_get_ui_name (CcDisplayMonitor *monitor);
273 const char* cc_display_monitor_get_ui_number_name (CcDisplayMonitor *monitor);
274 char* cc_display_monitor_dup_ui_number_name (CcDisplayMonitor *monitor);
275
276 gboolean cc_display_mode_is_clone_mode (CcDisplayMode *mode);
277 void cc_display_mode_get_resolution (CcDisplayMode *mode,
278 int *width,
279 int *height);
280 GArray* cc_display_mode_get_supported_scales (CcDisplayMode *self);
281 double cc_display_mode_get_preferred_scale (CcDisplayMode *self);
282 CcDisplayModeRefreshRateMode cc_display_mode_get_refresh_rate_mode (CcDisplayMode *mode);
283 gboolean cc_display_mode_is_interlaced (CcDisplayMode *mode);
284 gboolean cc_display_mode_is_preferred (CcDisplayMode *mode);
285 int cc_display_mode_get_freq (CcDisplayMode *mode);
286 double cc_display_mode_get_freq_f (CcDisplayMode *mode);
287
288 G_END_DECLS
289