Spaces:
Running
on
L4
Running
on
L4
File size: 1,527 Bytes
c1ce505 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
from kivy.uix.textinput import TextInput
from kivy.properties import StringProperty
DEFAULT_PADDING = 6
class AlignedTextInput(TextInput):
halign = StringProperty('left')
valign = StringProperty('top')
def __init__(self, **kwargs):
self.halign = kwargs.get("halign", "left")
self.valign = kwargs.get("valign", "top")
self.bind(on_text=self.on_text)
super().__init__(**kwargs)
def on_text(self, instance, value):
self.redraw()
def on_size(self, instance, value):
self.redraw()
def redraw(self):
"""
Note: This methods depends on internal variables of its TextInput
base class (_lines_rects and _refresh_text())
"""
self._refresh_text(self.text)
max_size = max(self._lines_rects, key=lambda r: r.size[0]).size
num_lines = len(self._lines_rects)
px = [DEFAULT_PADDING, DEFAULT_PADDING]
py = [DEFAULT_PADDING, DEFAULT_PADDING]
if self.halign == 'center':
d = (self.width - max_size[0]) / 2.0 - DEFAULT_PADDING
px = [d, d]
elif self.halign == 'right':
px[0] = self.width - max_size[0] - DEFAULT_PADDING
if self.valign == 'middle':
d = (self.height - max_size[1] * num_lines) / 2.0 - DEFAULT_PADDING
py = [d + 5, d - 5]
elif self.valign == 'bottom':
py[0] = self.height - max_size[1] * num_lines - DEFAULT_PADDING
self.padding_x = px
self.padding_y = py
|