diff options
author | Mattias Andrée <maandree@operamail.com> | 2014-03-03 22:05:15 +0100 |
---|---|---|
committer | Mattias Andrée <maandree@operamail.com> | 2014-03-03 22:05:15 +0100 |
commit | 76e4be8b1474f1eadeabef8947dd7d26a29668db (patch) | |
tree | b3add8a33a5946481c09d4a4a13b75f87a7fcb56 /src/__main__.py | |
parent | Sometimes returns the last return (diff) | |
download | xpybar-76e4be8b1474f1eadeabef8947dd7d26a29668db.tar.gz xpybar-76e4be8b1474f1eadeabef8947dd7d26a29668db.tar.bz2 xpybar-76e4be8b1474f1eadeabef8947dd7d26a29668db.tar.xz |
add moderate example and multiple column printing functions
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to '')
-rwxr-xr-x | src/__main__.py | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/__main__.py b/src/__main__.py index 62dc7d0..ace57f9 100755 --- a/src/__main__.py +++ b/src/__main__.py @@ -278,6 +278,30 @@ class Bar: buf += c self.change_colour(self.foreground) + def draw_coloured_splitted_text(self, x, width, y, ascent, descent, text): + ''' + Draw a coloured multi-line, multi-column text + + @param x:int The left position of the text + @param width:int The width of the print area + @param y:int The Y position of the bottom of the text + @param ascent:int Extra height above the text on each line + @param descent:int Extra height under the text on each line + @param text:str The text to draw, '\0' is column delimiter inside each line + ''' + line_height = ascent + self.font_height + descent + for line in text.split('\n'): + if '\0' not in line: + self.draw_coloured_text(x, y, ascent, descent, line) + else: + parts = line.split('\0') + i, n = 0, len(parts) - 1 + for part in parts: + x = (width - Bar.coloured_length(part) * self.font_width) * i / n + self.draw_coloured_text(int(x), y, ascent, descent, part) + i += 1 + y += line_height + def create_colour(self, red, green, blue): ''' Create a colour instance @@ -325,6 +349,26 @@ class Bar: self.window.fill_rectangle(self.gc, 0, 0, self.width, self.panel_height) self.change_colour(self.foreground) self.change_font(self.font) + + @staticmethod + def coloured_length(text): + ''' + The print length of a coloured text + + @param text:str The text + @return :int The print length of the text + ''' + n = 0 + esc = False + for c in text: + if esc: + if ('a' <= c <= 'z') or ('A' <= c <= 'Z') or (c == '~'): + esc = False + elif c == '\033': + esc = True + else: + n += 1 + return n ## Read command line arguments |