#!/usr/bin/env python3 ''' pylibcoopgamma -- Python library for interfacing with cooperative gamma servers Copyright (C) 2016 Mattias Andrée (maandree@kth.se) This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . ''' import os, sys, time os.chdir('/'.join(sys.argv[0].split('/')[:-1])) sys.path.append('../bin') import libcoopgamma cg = libcoopgamma if len(sys.argv) == 1: print('\033[1m%s:\033[m' % 'Methods') for m in cg.get_methods(): print(m) print() print('\033[1m%s:\033[m' % 'Method') print(cg.get_method_and_site()[0]) print() print('\033[1m%s:\033[m' % 'Site') print(cg.get_method_and_site()[1]) print() print('\033[1m%s:\033[m' % 'PID file') print(cg.get_pid_file()) print() print('\033[1m%s:\033[m' % 'Socket') print(cg.get_socket_file()) print() g = cg.Context() g.connect() g.detach() gstr = repr(g) del g argv0 = './' + sys.argv[0].split('/')[-1] os.execl(argv0, argv0, gstr) else: g = eval(sys.argv[1]) g.attach() print('\033[1m%s:\033[m' % 'CRTC:s') for crtc in g.get_crtcs_sync(): print(crtc) print() info = g.get_gamma_info_sync(crtc) print('\033[1m%s:\033[m' % 'CRTC info') print('Cooperative:', 'yes' if info.cooperative else 'no') if info.depth is not None: print('Depth:', cg.Depth.str(info.depth)) print('Supported:', cg.Support.str(info.supported)) if info.red_size is not None: print('Red stops:', info.red_size) if info.green_size is not None: print('Green stops:', info.green_size) if info.blue_size is not None: print('Blue stops:', info.blue_size) print('Colourspace:', cg.Colourspace.str(info.colourspace)) if info.gamut is not None: print('Red point:', str(info.gamut.red)) print('Green point:', str(info.gamut.green)) print('Blue point:', str(info.gamut.blue)) print('White point:', str(info.gamut.white)) print() table = g.get_gamma_sync(cg.FilterQuery(crtc = crtc, coalesce = False)) print('\033[1m%s:\033[m' % 'Filter table') print('Red stops:', table.red_size) print('Green stops:', table.green_size) print('Blue stops:', table.blue_size) print('Depth:', cg.Depth.str(table.depth)) for i, fltr in enumerate(table.filters): print('Filter %i:' % i) print(' Priority:', fltr.priority) print(' Class:', fltr.fclass) print(' Ramps:') rr, gr, br = fltr.ramps.red, fltr.ramps.green, fltr.ramps.blue n = max(len(rr), len(gr), len(br)) fmt = ' \033[31m%s \033[32m%s \033[34m%s\033[m' rr = [str(rr[i]) if i < len(rr) else '' for i in range(n)] gr = [str(gr[i]) if i < len(gr) else '' for i in range(n)] br = [str(br[i]) if i < len(br) else '' for i in range(n)] for y in zip(rr, gr, br): print(fmt % y) print() table = g.get_gamma_sync(cg.FilterQuery(crtc = crtc, coalesce = True)) print('\033[1m%s:\033[m' % 'Filter table') print('Red stops:', table.red_size) print('Green stops:', table.green_size) print('Blue stops:', table.blue_size) print('Depth:', cg.Depth.str(table.depth)) for fltr in table.filters: print('Ramps:') rr, gr, br = fltr.ramps.red, fltr.ramps.green, fltr.ramps.blue n = max(len(rr), len(gr), len(br)) fmt = ' \033[31m%s \033[32m%s \033[34m%s\033[m' rr = [str(rr[i]) if i < len(rr) else '' for i in range(n)] gr = [str(gr[i]) if i < len(gr) else '' for i in range(n)] br = [str(br[i]) if i < len(br) else '' for i in range(n)] for y in zip(rr, gr, br): print(fmt % y) print() fltr = cg.Filter(0, crtc, 'pylibcoopgamma::test::test', cg.Lifespan.UNTIL_DEATH, table.depth, cg.Ramps(table.red_size, table.green_size, table.blue_size)) if table.depth < 0: Y = lambda x : x else: m = 2 ** table.depth - 1 Y = lambda x : int(x * m) redzero = fltr.ramps.red greenzero = fltr.ramps.green fltr.ramps.red = [Y(x / (table.red_size - 1)) for x in range(table.red_size)] g.set_gamma_sync(fltr) time.sleep(0.5) fltr.ramps.red = redzero fltr.ramps.green = [Y(x / (table.green_size - 1)) for x in range(table.green_size)] g.set_gamma_sync(fltr) time.sleep(0.5) fltr.ramps.green = greenzero fltr.ramps.blue = [Y(x / (table.blue_size - 1)) for x in range(table.blue_size)] g.set_gamma_sync(fltr) time.sleep(0.5) del g