From 8fa1c97767223ceb285211bff96d2b716ffe4474 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Mon, 17 Aug 2020 17:58:51 -0400 Subject: 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 --- klippy/extras/display/display.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'klippy/extras/display/display.py') 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('~')): -- cgit v1.2.3-70-g09d2