diff --git a/python_payload/apps/text/__init__.py b/python_payload/apps/text/__init__.py index 9cf68adf5121381f78681477c7cf8d15bd48ed2a..681c8fe91e26a55da4e6ece5843a19a988c1f7ff 100644 --- a/python_payload/apps/text/__init__.py +++ b/python_payload/apps/text/__init__.py @@ -15,9 +15,16 @@ class App(Application): self.scroll_pos = 0.0 self.scroll = CapScrollController() self.content = "fnord" - self.font_size = 17 + self.font_size = 12 + self.line_numbers = True + self.wrap_word = True + self.bg_dirty = True # self.load_path("/flash/sys/apps/text/__init__.py") # self.load_path("/flash/sys/st3m/run.py") + + # if app_ctx.arguments: + # self.load_path(app_ctx.arguments[0]) + # else: self.load_path("/flash/sys/apps/text/LGPL") def on_enter(self, vm): @@ -32,24 +39,53 @@ class App(Application): self.lines.append(self.curline) self.curline = "" return - for b in self.contents[self.layout_i]: - if len(self.curline) > self.cols: - self.line_no.append("") - self.lines.append(self.curline) - self.curline = b - elif b == "\n": - self.lines.append(self.curline) - self.line += 1 - self.line_no.append(str(self.line)) - self.curline = "" - else: - self.curline += b + + if self.wrap_word: + for b in self.contents[self.layout_i]: + if b == " ": + if len(self.curline + " " + self.curword) > self.cols: + self.lines.append(self.curline) + self.curline = self.curword + self.line_no.append("") + else: + self.curline += " " + self.curword + self.curword = "" + elif b == "\n": + if len(self.curline + " " + self.curword) > self.cols: + self.lines.append(self.curline) + self.line_no.append("") + self.lines.append(self.curword) + else: + self.lines.append(self.curline + " " + self.curword) + self.curword = "" + self.curline = "" + self.line += 1 + self.line_no.append(str(self.line)) + else: + self.curword += b + else: + for b in self.contents[self.layout_i]: + if len(self.curline) > self.cols: + self.line_no.append("") + self.lines.append(self.curline) + self.curline = b + elif b == "\n": + self.lines.append(self.curline) + self.line += 1 + self.line_no.append(str(self.line)) + self.curline = "" + else: + self.curline += b self.layout_i += 1 def relayout(self): - self.x0 = self.font_size * 1.9 + if self.line_numbers: + self.x0 = self.font_size * 1.9 + else: + self.x0 = self.font_size * 1 self.cols = int((240 - self.x0) / self.font_size * 1.9) + self.bg_dirty = True self.viewport_lines = int(240 / self.font_size + 8) self.viewport_height = self.font_size * self.viewport_lines self.scroll.position = (0.0, 0.0) @@ -59,6 +95,7 @@ class App(Application): self.drawn.append(-1) self.layout_i = 0 self.curline = "" + self.curword = "" self.line = 1 sys_display.fbconfig(240, self.viewport_height, 0, 0) self.lines = [] @@ -108,18 +145,21 @@ class App(Application): ctx.gray(1) ctx.move_to(self.x0, y + self.font_size * 0.8).text(self.lines[no]) - ctx.save() - ctx.text_align = ctx.RIGHT - ctx.gray(0.5) - ctx.move_to(self.x0 - 4, y + self.font_size * 0.8).text( - self.line_no[no] - ) - ctx.restore() + if self.line_numbers: + ctx.save() + ctx.text_align = ctx.RIGHT + ctx.gray(0.5) + ctx.move_to(self.x0 - 4, y + self.font_size * 0.8).text( + self.line_no[no] + ) + ctx.restore() def draw(self, ctx): if self.vm.transitioning: - ctx.gray(0).rectangle(-120, -120, 240, 480).fill() return + if self.bg_dirty: + ctx.gray(0).rectangle(-120, -120, 240, 480).fill() + self.bg_dirty = False _, self.scroll_pos = self.scroll.position self.scroll_pos = (self.scroll_pos * -2) - 100 @@ -134,7 +174,7 @@ class App(Application): ) self.layout_iter() - first_line = int((self.offset + self.scan) / self.font_size) + first_line = int((self.offset + self.scan) / self.font_size) - 1 for i in range(240 / self.font_size + 2): self.drawline(ctx, first_line + i)