author | Radek Brich <radek.brich@devl.cz> |
Wed, 03 Sep 2014 08:53:44 +0200 | |
changeset 106 | abcadb7e2ef1 |
parent 104 | 742e504ec053 |
child 107 | 1822c37b2688 |
permissions | -rw-r--r-- |
106
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
1 |
|
87
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
2 |
class Point: |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
3 |
|
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
4 |
"""Point in cartesian space. |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
5 |
|
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
6 |
Implements attribute access (.x, .y) and list-like access([0],[1]). |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
7 |
|
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
8 |
""" |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
9 |
|
97
0c2e0c09ba5c
Add TextField widget, keypress event, cursor.
Radek Brich <radek.brich@devl.cz>
parents:
94
diff
changeset
|
10 |
def __init__(self, *args, **kwargs): |
0c2e0c09ba5c
Add TextField widget, keypress event, cursor.
Radek Brich <radek.brich@devl.cz>
parents:
94
diff
changeset
|
11 |
self.x = 0 |
0c2e0c09ba5c
Add TextField widget, keypress event, cursor.
Radek Brich <radek.brich@devl.cz>
parents:
94
diff
changeset
|
12 |
self.y = 0 |
0c2e0c09ba5c
Add TextField widget, keypress event, cursor.
Radek Brich <radek.brich@devl.cz>
parents:
94
diff
changeset
|
13 |
self.update(*args, **kwargs) |
87
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
14 |
|
94
e50dae408fe9
Add origin to Buffer. Use it to simplify hierarchical drawing.
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
15 |
def move(self, relx, rely): |
e50dae408fe9
Add origin to Buffer. Use it to simplify hierarchical drawing.
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
16 |
self.x += relx |
e50dae408fe9
Add origin to Buffer. Use it to simplify hierarchical drawing.
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
17 |
self.y += rely |
e50dae408fe9
Add origin to Buffer. Use it to simplify hierarchical drawing.
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
18 |
|
e50dae408fe9
Add origin to Buffer. Use it to simplify hierarchical drawing.
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
19 |
def moved(self, relx, rely): |
e50dae408fe9
Add origin to Buffer. Use it to simplify hierarchical drawing.
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
20 |
return Point(self.x + relx, self.y + rely) |
e50dae408fe9
Add origin to Buffer. Use it to simplify hierarchical drawing.
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
21 |
|
87
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
22 |
def update(self, *args, **kwargs): |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
23 |
"""Update point. |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
24 |
|
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
25 |
Accepts positional or keyword arguments: |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
26 |
- (point: Point) |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
27 |
- (x: int, y: int) |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
28 |
|
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
29 |
""" |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
30 |
if len(args) == 2: |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
31 |
self.x, self.y = args |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
32 |
elif len(args) == 1: |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
33 |
self.x, self.y = args[0] |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
34 |
elif len(args): |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
35 |
raise ValueError('Too many args.') |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
36 |
for key, val in kwargs.items(): |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
37 |
if key == 'point': |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
38 |
self.x, self.y = val |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
39 |
elif key in ('x', 'y'): |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
40 |
setattr(self, key, val) |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
41 |
else: |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
42 |
raise ValueError('Bad keyword arg: %r' % key) |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
43 |
|
106
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
44 |
# sequence interface |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
45 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
46 |
def __len__(self): |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
47 |
return 2 |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
48 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
49 |
def __getitem__(self, key): |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
50 |
return (self.x, self.y)[key] |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
51 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
52 |
# point arithmetics |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
53 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
54 |
def __add__(self, other): |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
55 |
return Point(self.x + other[0], self.y + other[1]) |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
56 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
57 |
def __sub__(self, other): |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
58 |
return Point(self.x - other[0], self.y - other[1]) |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
59 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
60 |
def __eq__(self, other): |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
61 |
"""Comparison operator. |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
62 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
63 |
Point can be compared to any sequence of at least two elements: |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
64 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
65 |
>>> p = Point(1, 2) |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
66 |
>>> p == Point(1, 2) |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
67 |
True |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
68 |
>>> p == (1, 2) |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
69 |
True |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
70 |
>>> p == (0, 0) |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
71 |
False |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
72 |
>>> p == None |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
73 |
False |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
74 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
75 |
""" |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
76 |
try: |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
77 |
return self.x == other[0] and self.y == other[1] |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
78 |
except (TypeError, IndexError): |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
79 |
return False |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
80 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
81 |
# string representation |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
82 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
83 |
def __repr__(self): |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
84 |
return 'Point(x={0.x},y={0.y})'.format(self) |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
85 |
|
87
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
86 |
|
86
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
87 |
class Size: |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
88 |
|
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
89 |
"""Size class. |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
90 |
|
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
91 |
Implements attribute access (.w, .h) and list-like access([0],[1]). |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
92 |
|
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
93 |
""" |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
94 |
|
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
95 |
def __init__(self, *args, **kwargs): |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
96 |
self.w = 0 |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
97 |
self.h = 0 |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
98 |
self.update(*args, **kwargs) |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
99 |
|
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
100 |
def __getitem__(self, key): |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
101 |
return (self.w, self.h)[key] |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
102 |
|
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
103 |
def __repr__(self): |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
104 |
return 'Size(w={0.w},h={0.h})'.format(self) |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
105 |
|
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
106 |
def update(self, *args, **kwargs): |
87
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
107 |
"""Update size. |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
108 |
|
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
109 |
Accepts positional or keyword arguments: |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
110 |
- (size: Size) |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
111 |
- (w: int, h: int) |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
112 |
|
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
113 |
""" |
86
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
114 |
if len(args) == 2: |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
115 |
self.w, self.h = args |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
116 |
elif len(args) == 1: |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
117 |
self.w, self.h = args[0] |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
118 |
elif len(args): |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
119 |
raise ValueError('Too many args.') |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
120 |
for key, val in kwargs.items(): |
87
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
121 |
if key == 'size': |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
122 |
self.w, self.h = val |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
123 |
elif key in ('w', 'h'): |
86
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
124 |
setattr(self, key, val) |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
125 |
else: |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
126 |
raise ValueError('Bad keyword arg: %r' % key) |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
127 |
|
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
128 |
def readonly(self): |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
129 |
return ReadonlySize(self) |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
130 |
|
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
131 |
|
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
132 |
class ReadonlySize: |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
133 |
|
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
134 |
"""Wrapper for Size which makes it read-only.""" |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
135 |
|
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
136 |
def __init__(self, size): |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
137 |
self._size = size |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
138 |
|
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
139 |
@property |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
140 |
def w(self): |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
141 |
return self._size.w |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
142 |
|
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
143 |
@property |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
144 |
def h(self): |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
145 |
return self._size.h |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
146 |
|
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
147 |
def __getitem__(self, key): |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
148 |
return self._size[key] |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
149 |
|
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
150 |
def __repr__(self): |
0978fb755d31
Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
151 |
return 'ReadonlySize(w={0.w},h={0.h})'.format(self._size) |
91
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
152 |
|
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
153 |
|
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
154 |
class Rect: |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
155 |
|
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
156 |
"""Rectangle is defined by coordinates and size.""" |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
157 |
|
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
158 |
def __init__(self, x=0, y=0, w=0, h=0): |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
159 |
self.x = x |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
160 |
self.y = y |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
161 |
self.w = w |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
162 |
self.h = h |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
163 |
|
104
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
164 |
@classmethod |
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
165 |
def _make(cls, origin, size): |
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
166 |
"""Make new Rect instance with origin and size as specified. |
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
167 |
|
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
168 |
`origin` should be Point or pair of coordinates, |
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
169 |
`size` should be Size or pair of integers |
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
170 |
|
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
171 |
""" |
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
172 |
x, y = origin |
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
173 |
w, h = size |
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
174 |
return Rect(x, y, w, h) |
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
175 |
|
91
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
176 |
def __repr__(self): |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
177 |
return 'Rect(x={0.x},y={0.y},w={0.w},h={0.h})'.format(self) |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
178 |
|
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
179 |
def __contains__(self, point): |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
180 |
"""Test if point is positioned inside rectangle. |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
181 |
|
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
182 |
`point` should be either Point or pair of int values. |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
183 |
|
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
184 |
""" |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
185 |
x, y = point |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
186 |
return (self.x <= x < self.x + self.w |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
187 |
and self.y <= y < self.y + self.h) |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
188 |
|
94
e50dae408fe9
Add origin to Buffer. Use it to simplify hierarchical drawing.
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
189 |
def moved(self, relx, rely): |
e50dae408fe9
Add origin to Buffer. Use it to simplify hierarchical drawing.
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
190 |
"""Return new Rect with same size, moved by `relx`, `rely`.""" |
e50dae408fe9
Add origin to Buffer. Use it to simplify hierarchical drawing.
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
191 |
return Rect(self.x + relx, self.y + rely, self.w, self.h) |
e50dae408fe9
Add origin to Buffer. Use it to simplify hierarchical drawing.
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
192 |
|
91
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
193 |
def intersect(self, other): |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
194 |
x1 = max(self.x, other.x) |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
195 |
y1 = max(self.y, other.y) |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
196 |
x2 = min(self.x + self.w, other.x + other.w) |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
197 |
y2 = min(self.y + self.h, other.y + other.h) |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
198 |
if x1 >= x2 or y1 >= y2: |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
199 |
return Rect() |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
200 |
return Rect(x1, y1, x2-x1, y2-y1) |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
201 |
|
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
202 |
def union(self, other): |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
203 |
x = min(self.x, other.x) |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
204 |
y = min(self.y, other.y) |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
205 |
w = max(self.x + self.w, other.x + other.w) - x |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
206 |
h = max(self.y + self.h, other.y + other.h) - y |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
207 |
return Rect(x, y, w, h) |