def trimmed(self, width): separator = PanelStrip().icon('split') if width < separator.width: return PanelStrip() if PanelVisual.char_width: side_chars = (width - separator.width) // (2 * PanelVisual.char_width) left_text = self.text[:side_chars] right_text = self.text[len(self.text) - side_chars:] else: left_text = self.text right_text = self.text fragment_width = (width - separator.width) // 2 while Raster.text_width(left_text) > fragment_width: left_text = left_text[len(left_text) - 1:] while Raster.text_width(right_text) > fragment_width: right_text = right_text[1:] return ( PanelStrip().text(left_text.rstrip()) + separator + PanelStrip().text(right_text.lstrip()) )
def update(self, text): self.text = text self.width = Raster.text_width(text)