1 from .layout import Layout |
1 from .layout import Layout |
2 |
2 |
3 |
3 |
4 class FixedLayout(Layout): |
4 class FixedLayout(Layout): |
5 |
5 |
6 def update(self, _w, _h): |
6 """Widgets are placed on fixed position as specified in `sizereq`. |
|
7 |
|
8 Align hints (kwargs to :meth:`add`): |
|
9 * halign = 'left' (default) | 'right' | 'fill' | 'center' |
|
10 * valign = 'top' (default) | 'bottom' | 'fill' | 'center' |
|
11 |
|
12 """ |
|
13 |
|
14 def __init__(self): |
|
15 Layout.__init__(self) |
|
16 self._widget_hints = {} # Widget : (halign, valign) |
|
17 |
|
18 def add(self, widget, *args, **kwargs): |
|
19 Layout.add(self, widget) |
|
20 assert len(args) == 0, \ |
|
21 "FixedLayout does not support positional hint args: %s" % args |
|
22 assert all(key in ('halign', 'valign') for key in kwargs.keys()), \ |
|
23 "Unsupported hints: %s" % tuple(kwargs.keys()) |
|
24 halign = kwargs.get('halign', 'left') |
|
25 valign = kwargs.get('valign', 'top') |
|
26 self._widget_hints[widget] = (halign, valign) |
|
27 |
|
28 def update(self, w, h): |
7 for widget in self._managed_widgets: |
29 for widget in self._managed_widgets: |
8 widget.resize(*widget.sizereq) |
30 halign, valign = self._widget_hints[widget] |
9 widget.pos.update(*widget.posreq) |
31 px, py = widget.posreq |
|
32 sw, sh = widget.sizereq |
|
33 if halign == 'right': px = w - px |
|
34 if valign == 'bottom': py = h - py |
|
35 if halign == 'fill': px = 0; sw = w |
|
36 if valign == 'fill': py = 0; sh = h |
|
37 if halign == 'center': px = (w - sw) // 2 |
|
38 if valign == 'center': py = (h - sh) // 2 |
|
39 widget.resize(sw, sh) |
|
40 widget.pos.update(px, py) |