1 """Generic descriptor classes for per-context state.
2
3 @author: Stephan Wenger
4 @date: 2012-02-29
5 """
6
7 from weakref import WeakKeyDictionary
8
9 import glitter.raw as _gl
10 from glitter.utils import hints, bool8, int32, int64, float32, Proxy
11
13 - def __init__(self, get_args=(), setter=None, set_args=(), shape=()):
15
17 - def __init__(self, get_args=(), setter=None, set_args=(), shape=()):
19
21 - def __init__(self, get_args=(), setter=None, set_args=(), shape=()):
23
25 - def __init__(self, get_args=(), setter=None, set_args=(), shape=()):
27
40
42 - def __init__(self, enum, arg, setter=None, set_args=()):
44
48
50 - def __init__(self, arg, count_attr=None):
54
56 if self._count_attr is None:
57 with obj:
58 return _gl.string_at(_gl.glGetString(self._arg))
59 else:
60 with obj:
61 _n = _gl.GLint()
62 _gl.glGetIntegerv(self._count_attr, _gl.pointer(_n))
63 return [_gl.string_at(_gl.glGetStringi(self._arg, i)) for i in range(_n.value)]
64
66 raise AttributeError("can't set attribute")
67
69 - def __init__(self, setter, set_args=()):
70 super(BindingProxy, self).__init__(setter=setter, set_args=set_args)
71 self._value = WeakKeyDictionary()
72
74 return self._value.get(obj, None)
75
76 - def __set__(self, obj, value=None):
77 with obj:
78 old_value = self._value.get(obj, None)
79 self._value[obj] = value
80 if old_value is not None and old_value != value and hasattr(old_value, "_on_release") and old_value._on_release is not NotImplemented:
81 old_value._on_release()
82 try:
83 self._setter(*([getattr(obj, x) if isinstance(x, basestring) else x for x in self._set_args] + [0 if value is None else value._id]))
84 except:
85 self._value[obj] = old_value
86 raise
87 else:
88 if value is not None and value != old_value and hasattr(value, "_on_bind") and value._on_bind is not NotImplemented:
89 value._on_bind()
90