Spaces:
Running
on
L4
Running
on
L4
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 | |