aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extras/display/display.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2020-08-17 17:58:51 -0400
committerKevin O'Connor <kevin@koconnor.net>2020-08-20 09:04:56 -0400
commit8fa1c97767223ceb285211bff96d2b716ffe4474 (patch)
tree3c95e24181ac12b6f230f7380d780438e4b88f7f /klippy/extras/display/display.py
parent1bdf705524c4ac32829515e2919c543134a29076 (diff)
downloadkutter-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.py18
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('~')):