summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/_blueshift_randr.pyx33
1 files changed, 25 insertions, 8 deletions
diff --git a/src/_blueshift_randr.pyx b/src/_blueshift_randr.pyx
index 44fd4b6..e022714 100644
--- a/src/_blueshift_randr.pyx
+++ b/src/_blueshift_randr.pyx
@@ -1,9 +1,13 @@
# -*- python -*-
+cimport cython
+from libc.stdlib cimport malloc, free
+
+
cdef extern int blueshift_randr_open(int use_screen)
cdef extern int blueshift_randr_apply(unsigned long long int use_crtcs,
- unsigned short int r_curve[256],
- unsigned short int g_curve[256],
- unsigned short int b_curve[256])
+ unsigned short int* r_curve,
+ unsigned short int* g_curve,
+ unsigned short int* b_curve)
cdef extern void blueshift_randr_close()
@@ -11,11 +15,24 @@ def randr_open(int use_screen):
return blueshift_randr_open(use_screen)
-def randr_apply(unsigned long long int use_crtcs,
- unsigned short int r_curve[256],
- unsigned short int g_curve[256],
- unsigned short int b_curve[256]):
- return blueshift_randr_apply(use_crtcs, r_curve, g_curve, b_curve)
+def randr_apply(unsigned long long use_crtcs, r_curve, g_curve, b_curve):
+ cdef unsigned short int* r
+ cdef unsigned short int* g
+ cdef unsigned short int* b
+ r = <unsigned short int*>malloc(256 * 2)
+ g = <unsigned short int*>malloc(256 * 2)
+ b = <unsigned short int*>malloc(256 * 2)
+ if (r is NULL) or (g is NULL) or (b is NULL):
+ raise MemoryError()
+ for i in range(256):
+ r[i] = r_curve[i]
+ g[i] = g_curve[i]
+ b[i] = b_curve[i]
+ rc = blueshift_randr_apply(use_crtcs, r, g, b)
+ free(r)
+ free(g)
+ free(b)
+ return rc
def randr_close():