diff options
Diffstat (limited to '')
-rw-r--r-- | xorg-xrandr/setres/set.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/xorg-xrandr/setres/set.py b/xorg-xrandr/setres/set.py new file mode 100644 index 0000000..27533bc --- /dev/null +++ b/xorg-xrandr/setres/set.py @@ -0,0 +1,68 @@ +class Display: + def __init__(self, display = None, deepclone = False): + self.outputs = [] + self.fb = None + self.fbmm = None ## TODO automatically + self.dpi = None ## TODO automatically + if display is not None: + self.outputs = [Output(output) if deepclone else output for output in display.outputs] + self.fb = display.fb + self.fbmm = display.fbmm + self.dpi = display.dpi + + def to_xrandr(self): + ret = ['xrandr'] + if self.fb is not None: ret += ['--fb', self.mode] + if self.fbmm is not None: ret += ['--fbmm', self.pos] + if self.dpi is not None: ret += ['--dpi', self.rate] + for output in self.outputs: + ret += output.to_xrandr() + return ret + + +class Output: + def __init__(self, output): + isnew = not isinstance(output, Output) + self.output = output if isnew else output.output + self.mode = None if isnew else output.mode + self.pos = None if isnew else output.pos + self.rate = None if isnew else output.rate + self.reflect = None if isnew else output.reflect + self.rotate = None if isnew else output.rotate + self.off = False if isnew else output.off + self.crtc = None if isnew else output.crtc + self.gamma = None if isnew else output.gamma + self.brightness = None if isnew else output.brightness + self.panning = None if isnew else output.panning + self.transform = None if isnew else output.transform + self.scale = None if isnew else output.scale + self.scale_from = None if isnew else output.scale_from + self.relpos = None if isnew else output.relpos + self.relto = None if isnew else output.relto + self.primary = False if isnew else output.primary + + def to_xrandr(self): + ret = ['--output', self.output] + if self.mode is not None: ret += ['--mode', self.mode] + if self.pos is not None: ret += ['--pos', self.pos] + if self.rate is not None: ret += ['--rate', self.rate] + if self.reflect is not None: ret += ['--reflect', self.reflect] + if self.rotate is not None: ret += ['--rotate', self.rate] + if self.crtc is not None: ret += ['--crtc', self.crtc] + if self.gamma is not None: ret += ['--gamma', self.gamma] + if self.brightness is not None: ret += ['--brightness', self.brightness] + if self.panning is not None: ret += ['--panning', self.panning] + if self.transform is not None: ret += ['--transform', self.transform] + if self.scale is not None: ret += ['--scale', self.scale] + if self.scale_from is not None: ret += ['--scale-from', self.scale_from] + if self.primary: ret += ['--primary'] + if self.relpos is not None and self.relto is not None: + ret += ['--' + self.relpos, self.relto] + return ret if not self.off else ['--output', self.output, '--off'] + + +def apply_setup(display): + import sys + from subprocess import Popen + p = Popen(display.to_xrandr(), stdin = sys.stdin, stdout = sys.stdout, stderr = sys.stderr) + return p.wait() == 0 |