summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2014-02-16 19:08:21 +0100
committerMattias Andrée <maandree@operamail.com>2014-02-16 19:08:21 +0100
commit3406cb26df17e183dfc3da2b9fe4a5b41575c40d (patch)
treebfb2c71f27469c5087902ea2a5ff03d8f3e16266
parentbeginning c binding (diff)
downloadblueshift-3406cb26df17e183dfc3da2b9fe4a5b41575c40d.tar.gz
blueshift-3406cb26df17e183dfc3da2b9fe4a5b41575c40d.tar.bz2
blueshift-3406cb26df17e183dfc3da2b9fe4a5b41575c40d.tar.xz
c binding
Signed-off-by: Mattias Andrée <maandree@operamail.com>
-rw-r--r--.gitignore1
-rw-r--r--Makefile9
-rw-r--r--src/_blueshift_randr.pyx33
3 files changed, 31 insertions, 12 deletions
diff --git a/.gitignore b/.gitignore
index 9276e4c..87b68f2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,4 +10,5 @@ obj/
*.out
*.gch
__pycache__/
+/src/_blueshift_randr.c
diff --git a/Makefile b/Makefile
index 6aacca1..df938e1 100644
--- a/Makefile
+++ b/Makefile
@@ -1,14 +1,14 @@
PKGCONFIG = pkg-config
OPTIMISE = -Og -g
WARN = -Wall -Wextra -pedantic
-LIBS = xcb-randr
+LIBS = xcb-randr python3
STD = c99
FLAGS = $$($(PKGCONFIG) --cflags --libs $(LIBS)) -std=$(STD) $(WARN) $(OPTIMISE) -fPIC
.PHONY: all
-all: bin/blueshift_randr
+all: bin/blueshift_randr.so
bin/blueshift_randr.so: obj/_blueshift_randr.o obj/blueshift_randr_c.o
@@ -24,11 +24,12 @@ obj/%.o: obj/%.c
$(CC) $(FLAGS) -c -o $@ $<
obj/_blueshift_randr.c: src/_blueshift_randr.pyx
- cd src ; cython -3 $<
+ @mkdir -p obj
+ if ! cython -3 -v $<; then src/_blueshift_randr.c ; false ; fi
mv src/_blueshift_randr.c $@
.PHONY: all
clean:
- -rm -r bin obj
+ -rm -r bin obj src/_blueshift_randr.c
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():