author | Radek Brich <radek.brich@devl.cz> |
Sun, 15 Feb 2015 12:52:46 +0100 | |
changeset 115 | b4ff7392003a |
parent 108 | 11dac45bfba4 |
child 119 | dd91747504dd |
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 |
|
107
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
8 |
This is heavy-weight mutable object. See also ImmutablePoint. |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
9 |
|
87
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
10 |
""" |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
11 |
|
97
0c2e0c09ba5c
Add TextField widget, keypress event, cursor.
Radek Brich <radek.brich@devl.cz>
parents:
94
diff
changeset
|
12 |
def __init__(self, *args, **kwargs): |
0c2e0c09ba5c
Add TextField widget, keypress event, cursor.
Radek Brich <radek.brich@devl.cz>
parents:
94
diff
changeset
|
13 |
self.x = 0 |
0c2e0c09ba5c
Add TextField widget, keypress event, cursor.
Radek Brich <radek.brich@devl.cz>
parents:
94
diff
changeset
|
14 |
self.y = 0 |
0c2e0c09ba5c
Add TextField widget, keypress event, cursor.
Radek Brich <radek.brich@devl.cz>
parents:
94
diff
changeset
|
15 |
self.update(*args, **kwargs) |
87
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
16 |
|
94
e50dae408fe9
Add origin to Buffer. Use it to simplify hierarchical drawing.
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
17 |
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
|
18 |
self.x += relx |
e50dae408fe9
Add origin to Buffer. Use it to simplify hierarchical drawing.
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
19 |
self.y += rely |
e50dae408fe9
Add origin to Buffer. Use it to simplify hierarchical drawing.
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
20 |
|
e50dae408fe9
Add origin to Buffer. Use it to simplify hierarchical drawing.
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
21 |
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
|
22 |
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
|
23 |
|
87
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
24 |
def update(self, *args, **kwargs): |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
25 |
"""Update point. |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
26 |
|
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
27 |
Accepts positional or keyword arguments: |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
28 |
- (point: Point) |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
29 |
- (x: int, y: int) |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
30 |
|
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
31 |
""" |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
32 |
if len(args) == 2: |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
33 |
self.x, self.y = args |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
34 |
elif len(args) == 1: |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
35 |
self.x, self.y = args[0] |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
36 |
elif len(args): |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
37 |
raise ValueError('Too many args.') |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
38 |
for key, val in kwargs.items(): |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
39 |
if key == 'point': |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
40 |
self.x, self.y = val |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
41 |
elif key in ('x', 'y'): |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
42 |
setattr(self, key, val) |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
43 |
else: |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
44 |
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
|
45 |
|
106
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
46 |
# sequence interface |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
47 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
48 |
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
|
49 |
return 2 |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
50 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
51 |
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
|
52 |
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
|
53 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
54 |
# point arithmetics |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
55 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
56 |
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
|
57 |
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
|
58 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
59 |
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
|
60 |
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
|
61 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
62 |
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
|
63 |
"""Comparison operator. |
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 |
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
|
66 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
67 |
>>> 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
|
68 |
>>> 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
|
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 == (1, 2) |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
71 |
True |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
72 |
>>> 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
|
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 |
>>> p == None |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
75 |
False |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
76 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
77 |
""" |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
78 |
try: |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
79 |
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
|
80 |
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
|
81 |
return False |
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 |
# string representation |
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
84 |
|
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
85 |
def __repr__(self): |
115
b4ff7392003a
GridLayout: basic implementation.
Radek Brich <radek.brich@devl.cz>
parents:
108
diff
changeset
|
86 |
return '{0.__class__.__name__}(x={0.x}, y={0.y})'.format(self) |
107
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
87 |
|
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
88 |
def immutable(self): |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
89 |
return ImmutablePoint(*self) |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
90 |
|
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
91 |
|
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
92 |
class ImmutablePoint: |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
93 |
|
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
94 |
"""Point class without write access.""" |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
95 |
|
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
96 |
__slots__ = ('_x', '_y') |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
97 |
|
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
98 |
def __init__(self, x, y): |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
99 |
self._x = x |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
100 |
self._y = y |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
101 |
|
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
102 |
@property |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
103 |
def x(self): |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
104 |
return self._x |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
105 |
|
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
106 |
@property |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
107 |
def y(self): |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
108 |
return self._y |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
109 |
|
108 | 110 |
def moved(self, relx, rely): |
111 |
return ImmutablePoint(self.x + relx, self.y + rely) |
|
112 |
||
107
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
113 |
def __getitem__(self, key): |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
114 |
return (self.x, self.y)[key] |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
115 |
|
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
116 |
def __repr__(self): |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
117 |
return '{0.__class__.__name__}(x={0.x}, y={0.y})'.format(self) |
106
abcadb7e2ef1
Use Point for mouse events, add them to Container and Widget.
Radek Brich <radek.brich@devl.cz>
parents:
104
diff
changeset
|
118 |
|
87
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
119 |
|
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
|
120 |
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
|
121 |
|
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
|
122 |
"""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
|
123 |
|
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 |
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
|
125 |
|
107
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
126 |
This is heavy-weight mutable object. See also ImmutableSize. |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
127 |
|
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
|
128 |
""" |
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 |
|
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 |
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
|
131 |
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
|
132 |
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
|
133 |
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
|
134 |
|
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 |
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
|
136 |
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
|
137 |
|
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 |
def __repr__(self): |
115
b4ff7392003a
GridLayout: basic implementation.
Radek Brich <radek.brich@devl.cz>
parents:
108
diff
changeset
|
139 |
return '{0.__class__.__name__}(w={0.w}, h={0.h})'.format(self) |
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
|
140 |
|
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 |
def update(self, *args, **kwargs): |
87
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
142 |
"""Update size. |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
143 |
|
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
144 |
Accepts positional or keyword arguments: |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
145 |
- (size: Size) |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
146 |
- (w: int, h: int) |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
147 |
|
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
148 |
""" |
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
|
149 |
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
|
150 |
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
|
151 |
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
|
152 |
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
|
153 |
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
|
154 |
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
|
155 |
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
|
156 |
if key == 'size': |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
157 |
self.w, self.h = val |
ee5ea9671f28
Add core Widget, Container. Add widgets Label.
Radek Brich <radek.brich@devl.cz>
parents:
86
diff
changeset
|
158 |
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
|
159 |
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
|
160 |
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
|
161 |
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
|
162 |
|
107
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
163 |
def immutable(self): |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
164 |
return ImmutableSize(*self) |
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
|
165 |
|
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
|
166 |
|
107
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
167 |
class ImmutableSize: |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
168 |
|
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
169 |
"""Size class without write access. |
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
|
170 |
|
107
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
171 |
When using reference to (mutable) Size class, properties are not fixed. |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
172 |
They can still be changed by original owner and these changes will become |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
173 |
visible to other references of the object. ImmutableSize should be used |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
174 |
when this is not intended. |
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
|
175 |
|
107
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
176 |
""" |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
177 |
|
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
178 |
__slots__ = ('_w', '_h') |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
179 |
|
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
180 |
def __init__(self, w, h): |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
181 |
self._w = w |
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
182 |
self._h = 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
|
183 |
|
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
|
184 |
@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
|
185 |
def w(self): |
107
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
186 |
return self._w |
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
|
187 |
|
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
|
188 |
@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
|
189 |
def h(self): |
107
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
190 |
return self._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
|
191 |
|
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
|
192 |
def __getitem__(self, key): |
107
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
193 |
return (self.w, self.h)[key] |
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
|
194 |
|
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
|
195 |
def __repr__(self): |
107
1822c37b2688
Refactoring. Add ImmutablePoint.
Radek Brich <radek.brich@devl.cz>
parents:
106
diff
changeset
|
196 |
return '{0.__class__.__name__}(w={0.w}, h={0.h})'.format(self) |
91
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
197 |
|
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
198 |
|
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
199 |
class Rect: |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
200 |
|
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
201 |
"""Rectangle is defined by coordinates and size.""" |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
202 |
|
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
203 |
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
|
204 |
self.x = x |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
205 |
self.y = y |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
206 |
self.w = w |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
207 |
self.h = h |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
208 |
|
104
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
209 |
@classmethod |
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
210 |
def _make(cls, origin, size): |
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
211 |
"""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
|
212 |
|
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
213 |
`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
|
214 |
`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
|
215 |
|
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
216 |
""" |
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
217 |
x, y = origin |
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
218 |
w, h = size |
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
219 |
return Rect(x, y, w, h) |
742e504ec053
Update TextBox: Replace "spot" with "cursor".
Radek Brich <radek.brich@devl.cz>
parents:
97
diff
changeset
|
220 |
|
91
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
221 |
def __repr__(self): |
115
b4ff7392003a
GridLayout: basic implementation.
Radek Brich <radek.brich@devl.cz>
parents:
108
diff
changeset
|
222 |
return '{0.__class__.__name__}(x={0.x}, y={0.y}, w={0.w}, h={0.h})'.format(self) |
91
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
223 |
|
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
224 |
def __contains__(self, point): |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
225 |
"""Test if point is positioned inside rectangle. |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
226 |
|
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
227 |
`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
|
228 |
|
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
229 |
""" |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
230 |
x, y = point |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
231 |
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
|
232 |
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
|
233 |
|
94
e50dae408fe9
Add origin to Buffer. Use it to simplify hierarchical drawing.
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
234 |
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
|
235 |
"""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
|
236 |
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
|
237 |
|
91
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
238 |
def intersect(self, other): |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
239 |
x1 = max(self.x, other.x) |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
240 |
y1 = max(self.y, other.y) |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
241 |
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
|
242 |
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
|
243 |
if x1 >= x2 or y1 >= y2: |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
244 |
return Rect() |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
245 |
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
|
246 |
|
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
247 |
def union(self, other): |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
248 |
x = min(self.x, other.x) |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
249 |
y = min(self.y, other.y) |
de80e140b0ec
Add clipping for Buffer draw operations.
Radek Brich <radek.brich@devl.cz>
parents:
87
diff
changeset
|
250 |
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
|
251 |
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
|
252 |
return Rect(x, y, w, h) |