Package glitter :: Package contexts :: Module proxies
[hide private]
[frames] | no frames]

Source Code for Module glitter.contexts.proxies

 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   
12 -class BooleanProxy(Proxy):
13 - def __init__(self, get_args=(), setter=None, set_args=(), shape=()):
14 super(BooleanProxy, self).__init__(_gl.glGetBooleanv, get_args, setter, set_args, bool8, shape)
15
16 -class FloatProxy(Proxy):
17 - def __init__(self, get_args=(), setter=None, set_args=(), shape=()):
18 super(FloatProxy, self).__init__(_gl.glGetFloatv, get_args, setter, set_args, float32, shape)
19
20 -class IntegerProxy(Proxy):
21 - def __init__(self, get_args=(), setter=None, set_args=(), shape=()):
22 super(IntegerProxy, self).__init__(_gl.glGetIntegerv, get_args, setter, set_args, int32, shape)
23
24 -class Integer64Proxy(Proxy):
25 - def __init__(self, get_args=(), setter=None, set_args=(), shape=()):
26 super(Integer64Proxy, self).__init__(_gl.glGetInteger64v, get_args, setter, set_args, int64, shape)
27
28 -class EnableDisableProxy(Proxy):
29 - def __init__(self, arg):
30 super(EnableDisableProxy, self).__init__(name=arg) 31 self._arg = arg
32
33 - def __get__(self, obj, cls=None):
34 with obj: 35 return _gl.glIsEnabled(self._arg) == _gl.GL_TRUE
36
37 - def __set__(self, obj, value):
38 with obj: 39 _gl.glEnable(self._arg) if value else _gl.glDisable(self._arg)
40
41 -class EnumProxy(Proxy):
42 - def __init__(self, enum, arg, setter=None, set_args=()):
43 super(EnumProxy, self).__init__(enum=enum, getter=_gl.glGetIntegerv, get_args=(arg,), setter=setter, set_args=set_args)
44
45 -class HintProxy(EnumProxy):
46 - def __init__(self, hint):
47 super(HintProxy, self).__init__(hints, hint, _gl.glHint, [hint])
48
49 -class StringProxy(Proxy):
50 - def __init__(self, arg, count_attr=None):
51 super(StringProxy, self).__init__(name=arg) 52 self._arg = arg 53 self._count_attr = count_attr
54
55 - def __get__(self, obj, cls=None):
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
65 - def __set__(self, obj, value):
66 raise AttributeError("can't set attribute")
67
68 -class BindingProxy(Proxy):
69 - def __init__(self, setter, set_args=()):
70 super(BindingProxy, self).__init__(setter=setter, set_args=set_args) 71 self._value = WeakKeyDictionary()
72
73 - def __get__(self, obj, cls=None):
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