monitor-manager: Add portrait modes to portrait displays

If a monitor's max resolution is a portrait resolution, then assume it is
a native portrait monitor and add portrait versions of the common modes.

https://bugzilla.gnome.org/show_bug.cgi?id=782294
This commit is contained in:
Hans de Goede
2017-10-24 15:47:30 +02:00
committed by Jonas Ådahl
parent 383ac76d00
commit dd43d04d42
4 changed files with 98 additions and 20 deletions

View File

@ -51,7 +51,7 @@ common_resolutions = [
output_lines = [
"/* Generated by gen-default-modes.py */\n",
"static const drmModeModeInfo meta_default_drm_mode_infos[] = {",
"static const drmModeModeInfo meta_default_landscape_drm_mode_infos[] = {",
]
def sync_flags(hsync, vsync):
@ -76,6 +76,21 @@ def drm_mode_info_from_modeline(line):
sync_flags(sline[11], sline[12]),
sline[1])
def portrait_drm_mode_info_from_modeline(line):
sline = line.split()
return "{ %d, %d, %d, %d, %d, 0, %d, %d, %d, %d, 0, 0, %s, DRM_MODE_TYPE_DEFAULT, \"%dx%d_60.00\" }," % \
(int(float(sline[2]) * 1000),
int(sline[7]),
int(sline[8]),
int(sline[9]),
int(sline[10]),
int(sline[3]),
int(sline[4]),
int(sline[5]),
int(sline[6]),
sync_flags(sline[12], sline[11]),
int(sline[7]), int(sline[3]))
for resolution in common_resolutions:
cvt = os.popen("%s %s %s" % ('cvt', resolution[0], resolution[1]))
cvt.readline() # discard comment line
@ -84,6 +99,16 @@ for resolution in common_resolutions:
cvt.close()
output_lines.append("};")
output_lines.append("")
output_lines.append("static const drmModeModeInfo meta_default_portrait_drm_mode_infos[] = {")
for resolution in common_resolutions:
cvt = os.popen("%s %s %s" % ('cvt', resolution[0], resolution[1]))
cvt.readline() # discard comment line
line = cvt.readline()
output_lines.append(portrait_drm_mode_info_from_modeline(line))
cvt.close()
output_lines.append("};")
for line in output_lines:
sys.stdout.write(line + "\n")
sys.stdout.flush()