diff --git a/gui/widgets/label.py b/gui/widgets/label.py index 6d6d36f..0664007 100644 --- a/gui/widgets/label.py +++ b/gui/widgets/label.py @@ -3,12 +3,17 @@ # Released under the MIT License (MIT). See LICENSE. # Copyright (c) 2018-2020 Peter Hinch +from micropython import const from gui.core.nanogui import DObject from gui.core.writer import Writer +ALIGN_LEFT = const(0) +ALIGN_RIGHT = const(1) +ALIGN_CENTER = const(2) + # text: str display string int save width class Label(DObject): - def __init__(self, writer, row, col, text, invert=False, fgcolor=None, bgcolor=None, bdcolor=False): + def __init__(self, writer, row, col, text, invert=False, fgcolor=None, bgcolor=None, bdcolor=False, align=ALIGN_LEFT): # Determine width of object if isinstance(text, int): width = text @@ -17,6 +22,7 @@ class Label(DObject): width = writer.stringlen(text) height = writer.height super().__init__(writer, row, col, height, width, fgcolor, bgcolor, bdcolor) + self.align = align if text is not None: self.value(text, invert) @@ -39,7 +45,17 @@ class Label(DObject): super().show() # Draw or erase border wri = self.writer dev = self.device - Writer.set_textpos(dev, self.row, self.col) + if self.align == ALIGN_LEFT: + Writer.set_textpos(dev, self.row, self.col) + else: + txt_width = wri.stringlen(txt) + if self.width <= txt_width: + Writer.set_textpos(dev, self.row, self.col) + else: + if self.align == ALIGN_RIGHT: + Writer.set_textpos(dev, self.row, self.col + self.width - txt_width) + else: + Writer.set_textpos(dev, self.row, self.col + self.width // 2 - txt_width // 2) wri.setcolor(self.fgcolor, self.bgcolor) wri.printstring(txt, self.invert) wri.setcolor() # Restore defaults