mirror of
https://github.com/Klipper3d/klipper.git
synced 2025-08-05 13:04:05 -06:00
display: Move glyph definition to printer config
This commit allows to modify the icons (or glyphs) in the displays that support it. Existing icons can be modified and new icons can be added via a [display_glyph] section in the config. Signed-off-by: Florian Heilmann <Florian.Heilmann@gmx.net>
This commit is contained in:
parent
722770f62f
commit
3dcac1308e
7 changed files with 196 additions and 173 deletions
|
@ -100,9 +100,6 @@ 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.glyph_helpers = { 'animated_bed': self.animate_bed,
|
||||
'animated_fan': self.animate_fan }
|
||||
self.printer.register_event_handler("klippy:ready", self.handle_ready)
|
||||
self.screen_update_timer = self.reactor.register_timer(
|
||||
self.screen_update_event)
|
||||
|
@ -139,6 +136,28 @@ class PrinterLCD:
|
|||
for group_name, data_configs in groups.items():
|
||||
dg = DisplayGroup(config, group_name, data_configs)
|
||||
self.display_data_groups[group_name] = dg
|
||||
# Load display glyphs
|
||||
dg_prefix = 'display_glyph '
|
||||
icons = {}
|
||||
dg_main = config.get_prefix_sections(dg_prefix)
|
||||
dg_main_names = {c.get_name(): 1 for c in dg_main}
|
||||
dg_def = [c for c in dconfig.get_prefix_sections(dg_prefix)
|
||||
if c.get_name() not in dg_main_names]
|
||||
for dg in dg_main + dg_def:
|
||||
glyph_name = dg.get_name()[len(dg_prefix):]
|
||||
glyph_data = []
|
||||
for line in dg.get('data').split('\n'):
|
||||
if line:
|
||||
line_val = int(line, 2)
|
||||
if line_val > 65535:
|
||||
raise config.error("Glyph line out of range for " + \
|
||||
"glyph %s maximum is 65535" % (glyph_name,))
|
||||
glyph_data.append(line_val)
|
||||
if len(glyph_data) < 16:
|
||||
raise config.error("Not enough lines for" + \
|
||||
"glyph %s, 16 lines are needed" % (glyph_name,))
|
||||
icons[dg.get_name()[len(dg_prefix):]] = glyph_data
|
||||
self.lcd_chip.set_glyphs(icons)
|
||||
# Initialization
|
||||
def handle_ready(self):
|
||||
self.lcd_chip.init()
|
||||
|
@ -159,13 +178,6 @@ class PrinterLCD:
|
|||
logging.exception("Error during display screen update")
|
||||
self.lcd_chip.flush()
|
||||
return eventtime + .500
|
||||
# Rendering helpers
|
||||
def animate_bed(self, row, col, eventtime):
|
||||
frame = int(eventtime) & 1
|
||||
return self.lcd_chip.write_glyph(col, row, 'bed_heat%d' % (frame + 1,))
|
||||
def animate_fan(self, row, col, eventtime):
|
||||
frame = int(eventtime) & 1
|
||||
return self.lcd_chip.write_glyph(col, row, 'fan%d' % (frame + 1,))
|
||||
def draw_text(self, row, col, mixed_text, eventtime):
|
||||
pos = col
|
||||
for i, text in enumerate(mixed_text.split('~')):
|
||||
|
@ -173,8 +185,6 @@ class PrinterLCD:
|
|||
# write text
|
||||
self.lcd_chip.write_text(pos, row, text)
|
||||
pos += len(text)
|
||||
elif text in self.glyph_helpers:
|
||||
pos += self.glyph_helpers[text](row, pos, eventtime)
|
||||
else:
|
||||
# write glyph
|
||||
pos += self.lcd_chip.write_glyph(pos, row, text)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue