diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2020-08-17 17:58:51 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2020-08-20 09:04:56 -0400 |
commit | 8fa1c97767223ceb285211bff96d2b716ffe4474 (patch) | |
tree | 3c95e24181ac12b6f230f7380d780438e4b88f7f /klippy/extras/display/display.py | |
parent | 1bdf705524c4ac32829515e2919c543134a29076 (diff) | |
download | kutter-8fa1c97767223ceb285211bff96d2b716ffe4474.tar.gz kutter-8fa1c97767223ceb285211bff96d2b716ffe4474.tar.xz kutter-8fa1c97767223ceb285211bff96d2b716ffe4474.zip |
display: Support requesting a screen redraw on a menu key press
Add a request_redraw() method and call it when a key menu event
occurs. Limit these proactive screen redraws to no more than 4 per
second.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/extras/display/display.py')
-rw-r--r-- | klippy/extras/display/display.py | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/klippy/extras/display/display.py b/klippy/extras/display/display.py index 11f60a57..8e47e5a1 100644 --- a/klippy/extras/display/display.py +++ b/klippy/extras/display/display.py @@ -100,9 +100,12 @@ class PrinterLCD: self.show_data_group = self.display_data_groups.get(dgroup) if self.show_data_group is None: raise config.error("Unknown display_data group '%s'" % (dgroup,)) + # Screen updating self.printer.register_event_handler("klippy:ready", self.handle_ready) self.screen_update_timer = self.reactor.register_timer( self.screen_update_event) + self.redraw_request_pending = False + self.redraw_time = 0. # Register g-code commands gcode = self.printer.lookup_object("gcode") gcode.register_mux_command('SET_DISPLAY_GROUP', 'DISPLAY', name, @@ -111,6 +114,8 @@ class PrinterLCD: if name == 'display': gcode.register_mux_command('SET_DISPLAY_GROUP', 'DISPLAY', None, self.cmd_SET_DISPLAY_GROUP) + def get_dimensions(self): + return self.lcd_chip.get_dimensions() # Configurable display def _parse_glyph(self, config, glyph_name, data, width, height): glyph_data = [] @@ -184,19 +189,28 @@ class PrinterLCD: self.reactor.update_timer(self.screen_update_timer, self.reactor.NOW) # Screen updating def screen_update_event(self, eventtime): + if self.redraw_request_pending: + self.redraw_request_pending = False + self.redraw_time = eventtime + 0.250 + self.lcd_chip.clear() # update menu component if self.menu is not None: ret = self.menu.screen_update_event(eventtime) if ret: - return ret + self.lcd_chip.flush() + return eventtime + .500 # Update normal display - self.lcd_chip.clear() try: self.show_data_group.show(self, self.display_templates, eventtime) except: logging.exception("Error during display screen update") self.lcd_chip.flush() return eventtime + .500 + def request_redraw(self): + if self.redraw_request_pending: + return + self.redraw_request_pending = True + self.reactor.update_timer(self.screen_update_timer, self.redraw_time) def draw_text(self, row, col, mixed_text, eventtime): pos = col for i, text in enumerate(mixed_text.split('~')): |