From bafcd084cc4b39b125caeacc319576a3ec792c15 Mon Sep 17 00:00:00 2001 From: Marcio Teixeira Date: Tue, 24 Sep 2019 16:46:00 -0600 Subject: [PATCH] LULZBOT_TOUCH_UI performance/cosmetic fixes (#15319) --- .../ftdi_eve_lib/extended/screen_types.h | 6 + .../lib/lulzbot/language/language_en.h | 20 +- .../base_numeric_adjustment_screen.cpp | 276 ++++++++++-------- .../lib/lulzbot/screens/base_screen.cpp | 8 +- .../lib/lulzbot/screens/bio_main_menu.cpp | 2 +- .../lib/lulzbot/screens/bio_status_screen.cpp | 35 ++- .../lib/lulzbot/screens/bio_tune_menu.cpp | 2 +- .../lib/lulzbot/screens/move_axis_screen.cpp | 37 +-- .../lib/lulzbot/screens/screens.h | 14 +- 9 files changed, 230 insertions(+), 170 deletions(-) diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/screen_types.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/screen_types.h index 44204b3356..e42ff41d67 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/screen_types.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/screen_types.h @@ -199,6 +199,9 @@ class CachedScreen { public: static void onRefresh() { + #if ENABLED(TOUCH_UI_DEBUG) + const uint32_t start_time = millis(); + #endif using namespace FTDI; DLCache dlcache(DL_SLOT); CommandProcessor cmd; @@ -220,5 +223,8 @@ class CachedScreen { cmd.cmd(DL::DL_DISPLAY); cmd.cmd(CMD_SWAP); cmd.execute(); + #if ENABLED(TOUCH_UI_DEBUG) + SERIAL_ECHOLNPAIR("Time to draw screen (ms): ", millis() - start_time); + #endif } }; diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h index 5731e4984b..4182277cbb 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h @@ -197,7 +197,7 @@ #else #define LULZBOT_BIOPRINTER_STRINGS ,\ MAIN_MENU, \ - UNLOCK_XY_AXIS, \ + RELEASE_XY_AXIS, \ LOAD_SYRINGE, \ BED_TEMPERATURE, \ LOADING_WARNING, \ @@ -302,7 +302,11 @@ namespace Language_en { PROGMEM Language_Str PLEASE_RESET = u8"Please reset"; PROGMEM Language_Str COLOR_TOUCH_PANEL = u8"Color Touch Panel"; - PROGMEM Language_Str ABOUT_ALEPH_OBJECTS = u8"(C) 2019 Aleph Objects, Inc.\n\nwww.lulzbot.com"; + #if ENABLED(TOUCH_UI_UTF8_COPYRIGHT) + PROGMEM Language_Str ABOUT_ALEPH_OBJECTS = u8"© 2019 Aleph Objects, Inc.\n\nwww.lulzbot.com"; + #else + PROGMEM Language_Str ABOUT_ALEPH_OBJECTS = u8"(C) 2019 Aleph Objects, Inc.\n\nwww.lulzbot.com"; + #endif PROGMEM Language_Str FIRMWARE_FOR_TOOLHEAD = u8"Firmware for toolhead:\n%s\n\n"; @@ -327,10 +331,14 @@ namespace Language_en { PROGMEM Language_Str UNITS_MILLIAMP = u8"mA"; PROGMEM Language_Str UNITS_MM = u8"mm"; PROGMEM Language_Str UNITS_MM_S = u8"mm/s"; - PROGMEM Language_Str UNITS_MM_S2 = u8"mm/s^2"; + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + PROGMEM Language_Str UNITS_MM_S2 = u8"mm/s²"; + #else + PROGMEM Language_Str UNITS_MM_S2 = u8"mm/s^2"; + #endif PROGMEM Language_Str UNITS_STEP_MM = u8"st/mm"; PROGMEM Language_Str UNITS_PERCENT = u8"%"; - #if defined(TOUCH_UI_USE_UTF8) && defined(TOUCH_UI_UTF8_WESTERN_CHARSET) + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) PROGMEM Language_Str UNITS_C = u8"°C"; #else PROGMEM Language_Str UNITS_C = u8" C"; @@ -399,10 +407,10 @@ namespace Language_en { #ifdef LULZBOT_USE_BIOPRINTER_UI PROGMEM Language_Str MAIN_MENU = u8"Main Menu"; - PROGMEM Language_Str UNLOCK_XY_AXIS = u8"Unlock XY Axis"; + PROGMEM Language_Str RELEASE_XY_AXIS = u8"Release XY Axis"; PROGMEM Language_Str LOAD_SYRINGE = u8"Load Syringe"; PROGMEM Language_Str BED_TEMPERATURE = u8"Bed Temperature"; - PROGMEM Language_Str LOADING_WARNING = u8"About to home to loading position.\nEnsure the top and the bed of the printer are clear.\n\nContinue?"; + PROGMEM Language_Str LOADING_WARNING = u8"About to home to loading position. Ensure the top and the bed of the printer are clear.\n\nContinue?"; PROGMEM Language_Str HOMING_WARNING = u8"About to re-home plunger and auto-level. Remove syringe prior to proceeding.\n\nContinue?"; #endif diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp index 9c8cca68e6..480315620c 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp @@ -33,34 +33,84 @@ using namespace Theme; #ifdef TOUCH_UI_PORTRAIT #define GRID_COLS 13 #define GRID_ROWS 10 + #define LAYOUT_FONT font_small #else #define GRID_COLS 18 #define GRID_ROWS 7 + #define LAYOUT_FONT font_medium #endif BaseNumericAdjustmentScreen::widgets_t::widgets_t(draw_mode_t what) : _what(what) { + CommandProcessor cmd; + if (what & BACKGROUND) { - CommandProcessor cmd; cmd.cmd(CLEAR_COLOR_RGB(bg_color)) - .cmd(CLEAR(true,true,true)); + .cmd(CLEAR(true,true,true)) + .colors(normal_btn) + .cmd(COLOR_RGB(bg_text_enabled)); } - if (what & FOREGROUND) { - CommandProcessor cmd; - cmd.font(font_medium) - .colors(action_btn) + cmd.font(font_medium); + _button(cmd, 1, #ifdef TOUCH_UI_PORTRAIT - .tag(1).button( BTN_POS(1,10), BTN_SIZE(13,1), GET_TEXTF(BACK)) + BTN_POS(1,10), BTN_SIZE(13,1), #else - .tag(1).button( BTN_POS(15,7), BTN_SIZE(4,1), GET_TEXTF(BACK)) + BTN_POS(15,7), BTN_SIZE(4,1), #endif - .colors(normal_btn); - } + GET_TEXTF(BACK), true, true + ); _line = 1; _units = F(""); } +/** + * Speed optimization for changing button style. + */ +void BaseNumericAdjustmentScreen::widgets_t::_button_style(CommandProcessor &cmd, BaseNumericAdjustmentScreen::widgets_t::style_t style) { + if (_style != style) { + const btn_colors *old_colors = &normal_btn; + const btn_colors *new_colors = &normal_btn; + + switch(_style) { + case BTN_ACTION: old_colors = &action_btn; break; + case BTN_TOGGLE: old_colors = &ui_toggle; break; + case BTN_DISABLED: old_colors = &disabled_btn; break; + default: break; + } + switch(style) { + case BTN_ACTION: new_colors = &action_btn; break; + case BTN_TOGGLE: new_colors = &ui_toggle; break; + case BTN_DISABLED: new_colors = &disabled_btn; break; + default: break; + } + + const bool rgb_changed = old_colors->rgb != new_colors->rgb; + const bool grad_changed = old_colors->grad != new_colors->grad; + const bool fg_changed = (old_colors->fg != new_colors->fg) || (_style == TEXT_AREA); + const bool bg_changed = old_colors->bg != new_colors->bg; + + if (rgb_changed) cmd.cmd(COLOR_RGB(new_colors->rgb)); + if (grad_changed) cmd.gradcolor(new_colors->grad); + if (fg_changed) cmd.fgcolor(new_colors->fg); + if (bg_changed) cmd.bgcolor(new_colors->bg); + + _style = style; + } +} + +/** + * Speed optimization for drawing buttons. Draw all unpressed buttons in the + * background layer and draw only the pressed button in the foreground layer. + */ +void BaseNumericAdjustmentScreen::widgets_t::_button(CommandProcessor &cmd, uint8_t tag, int16_t x, int16_t y, int16_t w, int16_t h, progmem_str text, bool enabled, bool highlight) { + if (_what & BACKGROUND) enabled = true; + if ((_what & BACKGROUND) || buttonIsPressed(tag) || highlight || !enabled) { + _button_style(cmd, (!enabled) ? BTN_DISABLED : (highlight ? BTN_ACTION : BTN_NORMAL)); + cmd.tag(enabled ? tag : 0).button(x, y, w, h, text); + } +} + BaseNumericAdjustmentScreen::widgets_t &BaseNumericAdjustmentScreen::widgets_t::precision(uint8_t decimals, precision_default_t initial) { _decimals = decimals; if (screen_data.BaseNumericAdjustmentScreen.increment == 0) { @@ -70,14 +120,17 @@ BaseNumericAdjustmentScreen::widgets_t &BaseNumericAdjustmentScreen::widgets_t:: } void BaseNumericAdjustmentScreen::widgets_t::heading(progmem_str label) { - CommandProcessor cmd; - cmd.font(font_medium).cmd(COLOR_RGB(bg_text_enabled)); if (_what & BACKGROUND) { - #ifdef TOUCH_UI_PORTRAIT - cmd.tag(0).fgcolor(bg_color).button( BTN_POS(1, _line), BTN_SIZE(12,1), label, OPT_FLAT); - #else - cmd.tag(0).fgcolor(bg_color).button( BTN_POS(5, _line), BTN_SIZE(8,1), label, OPT_FLAT); - #endif + CommandProcessor cmd; + cmd.font(font_medium) + .text( + #ifdef TOUCH_UI_PORTRAIT + BTN_POS(1, _line), BTN_SIZE(12,1), + #else + BTN_POS(5, _line), BTN_SIZE(8,1), + #endif + label + ); } _line++; @@ -93,8 +146,7 @@ void BaseNumericAdjustmentScreen::widgets_t::heading(progmem_str label) { #endif #endif -void BaseNumericAdjustmentScreen::widgets_t::_draw_increment_btn(uint8_t, const uint8_t tag) { - CommandProcessor cmd; +void BaseNumericAdjustmentScreen::widgets_t::_draw_increment_btn(CommandProcessor &cmd, uint8_t, const uint8_t tag) { const char *label = PSTR("?"); uint8_t pos; uint8_t & increment = screen_data.BaseNumericAdjustmentScreen.increment; @@ -112,48 +164,43 @@ void BaseNumericAdjustmentScreen::widgets_t::_draw_increment_btn(uint8_t, const default: label = PSTR("100" ); pos = _decimals + 2; break; } - cmd.tag(tag) - .colors(increment == tag ? action_btn : normal_btn) - #ifdef TOUCH_UI_PORTRAIT - .font(font_small); - #else - .font(font_medium); - #endif + const bool highlight = (_what & FOREGROUND) && (increment == tag); + switch (pos) { #ifdef TOUCH_UI_PORTRAIT - case 0: cmd.button( BTN_POS(5,_line), BTN_SIZE(2,1), progmem_str(label)); break; - case 1: cmd.button( BTN_POS(7,_line), BTN_SIZE(2,1), progmem_str(label)); break; - case 2: cmd.button( BTN_POS(9,_line), BTN_SIZE(2,1), progmem_str(label)); break; + case 0: _button(cmd, tag, BTN_POS(5,_line), BTN_SIZE(2,1), progmem_str(label), true, highlight); break; + case 1: _button(cmd, tag, BTN_POS(7,_line), BTN_SIZE(2,1), progmem_str(label), true, highlight); break; + case 2: _button(cmd, tag, BTN_POS(9,_line), BTN_SIZE(2,1), progmem_str(label), true, highlight); break; #else - case 0: cmd.button( BTN_POS(15,2), BTN_SIZE(4,1), progmem_str(label)); break; - case 1: cmd.button( BTN_POS(15,3), BTN_SIZE(4,1), progmem_str(label)); break; - case 2: cmd.button( BTN_POS(15,4), BTN_SIZE(4,1), progmem_str(label)); break; + case 0: _button(cmd, tag, BTN_POS(15,2), BTN_SIZE(4,1), progmem_str(label), true, highlight); break; + case 1: _button(cmd, tag, BTN_POS(15,3), BTN_SIZE(4,1), progmem_str(label), true, highlight); break; + case 2: _button(cmd, tag, BTN_POS(15,4), BTN_SIZE(4,1), progmem_str(label), true, highlight); break; #endif } - cmd.colors(normal_btn); } - void BaseNumericAdjustmentScreen::widgets_t::increments() { + CommandProcessor cmd; + + cmd.font(LAYOUT_FONT); + if (_what & BACKGROUND) { - CommandProcessor cmd; - cmd.fgcolor(bg_color) - .tag(0) - #ifdef TOUCH_UI_PORTRAIT - .font(font_small).button( BTN_POS(1, _line), BTN_SIZE(4,1), GET_TEXTF(INCREMENT), OPT_FLAT); - #else - .font(font_medium).button( BTN_POS(15,1), BTN_SIZE(4,1), GET_TEXTF(INCREMENT), OPT_FLAT); - #endif + cmd.text( + #ifdef TOUCH_UI_PORTRAIT + BTN_POS(1, _line), BTN_SIZE(4,1), + #else + BTN_POS(15, 1), BTN_SIZE(4,1), + #endif + GET_TEXTF(INCREMENT) + ); } - if (_what & FOREGROUND) { - _draw_increment_btn(_line+1, 245 - _decimals); - _draw_increment_btn(_line+1, 244 - _decimals); - _draw_increment_btn(_line+1, 243 - _decimals); - } + _draw_increment_btn(cmd, _line+1, 245 - _decimals); + _draw_increment_btn(cmd, _line+1, 244 - _decimals); + _draw_increment_btn(cmd, _line+1, 243 - _decimals); #ifdef TOUCH_UI_PORTRAIT - _line++; + _line++; #endif } @@ -161,19 +208,22 @@ void BaseNumericAdjustmentScreen::widgets_t::adjuster_sram_val(uint8_t tag, prog CommandProcessor cmd; if (_what & BACKGROUND) { - cmd.enabled(1) + _button_style(cmd, TEXT_AREA); + cmd.tag(0) .font(font_small) - .fgcolor(_color) .tag(0).button( BTN_POS(5,_line), BTN_SIZE(5,1), F(""), OPT_FLAT) - .cmd(COLOR_RGB(bg_text_enabled)) - .fgcolor(bg_color) .tag(0).button( BTN_POS(1,_line), BTN_SIZE(4,1), (progmem_str) label, OPT_FLAT); + .text( BTN_POS(1,_line), BTN_SIZE(4,1), label) + .fgcolor(_color).button( BTN_POS(5,_line), BTN_SIZE(5,1), F(""), OPT_FLAT); } - if (_what & FOREGROUND) { - cmd.colors(normal_btn) - .font(font_medium) - .tag(is_enabled ? tag : 0).enabled(is_enabled).button( BTN_POS(10,_line), BTN_SIZE(2,1), F("-")) - .tag(is_enabled ? tag+1 : 0).enabled(is_enabled).button( BTN_POS(12,_line), BTN_SIZE(2,1), F("+")) - .tag(0).font(font_small) .text ( BTN_POS(5,_line), BTN_SIZE(5,1), is_enabled ? value : "-"); + cmd.font(font_medium); + _button(cmd, tag, BTN_POS(10,_line), BTN_SIZE(2,1), F("-"), is_enabled); + _button(cmd, tag + 1, BTN_POS(12,_line), BTN_SIZE(2,1), F("+"), is_enabled); + + if ((_what & FOREGROUND) && is_enabled) { + _button_style(cmd, BTN_NORMAL); + cmd.tag(0) + .font(font_small) + .text(BTN_POS(5,_line), BTN_SIZE(5,1), value); } _line++; @@ -206,18 +256,9 @@ void BaseNumericAdjustmentScreen::widgets_t::adjuster(uint8_t tag, progmem_str l } void BaseNumericAdjustmentScreen::widgets_t::button(uint8_t tag, progmem_str label, bool is_enabled) { - if (_what & FOREGROUND) { - CommandProcessor cmd; - cmd.colors(normal_btn) - .tag(is_enabled ? tag : 0) - .enabled(is_enabled) - #ifdef TOUCH_UI_PORTRAIT - .font(font_small) - #else - .font(font_medium) - #endif - .button(BTN_POS(5,_line), BTN_SIZE(9,1), label); - } + CommandProcessor cmd; + cmd.font(LAYOUT_FONT); + _button(cmd, tag, BTN_POS(5,_line), BTN_SIZE(9,1), label, is_enabled); _line++; } @@ -226,89 +267,78 @@ void BaseNumericAdjustmentScreen::widgets_t::text_field(uint8_t tag, progmem_str CommandProcessor cmd; if (_what & BACKGROUND) { + _button_style(cmd, TEXT_AREA); cmd.enabled(1) + .tag(0) .font(font_small) - .cmd(COLOR_RGB(bg_text_enabled)) - .fgcolor(_color).tag(0).button( BTN_POS(5,_line), BTN_SIZE(9,1), F(""), OPT_FLAT) - .fgcolor(bg_color) .tag(0).button( BTN_POS(1,_line), BTN_SIZE(4,1), label, OPT_FLAT); + .text( BTN_POS(1,_line), BTN_SIZE(4,1), label) + .fgcolor(_color) + .tag(tag) + .button( BTN_POS(5,_line), BTN_SIZE(9,1), F(""), OPT_FLAT); } if (_what & FOREGROUND) { - cmd.colors(normal_btn) - .font(font_medium) - .tag(tag).font(font_small).text ( BTN_POS(5,_line), BTN_SIZE(9,1), is_enabled ? value : "-"); + cmd.font(font_small).text( BTN_POS(5,_line), BTN_SIZE(9,1), is_enabled ? value : "-"); } _line++; } void BaseNumericAdjustmentScreen::widgets_t::two_buttons(uint8_t tag1, progmem_str label1, uint8_t tag2, progmem_str label2, bool is_enabled) { - if (_what & FOREGROUND) { - CommandProcessor cmd; - cmd.enabled(is_enabled) - #ifdef TOUCH_UI_PORTRAIT - .font(font_small) - #else - .font(font_medium) - #endif - .tag(is_enabled ? tag1: 0).button(BTN_POS(5,_line), BTN_SIZE(4.5,1), label1) - .tag(is_enabled ? tag2: 0).button(BTN_POS(9.5,_line), BTN_SIZE(4.5,1), label2); - } + CommandProcessor cmd; + cmd.font(LAYOUT_FONT); + _button(cmd, tag1, BTN_POS(5,_line), BTN_SIZE(4.5,1), label1, is_enabled); + _button(cmd, tag2, BTN_POS(9.5,_line), BTN_SIZE(4.5,1), label2, is_enabled); _line++; } void BaseNumericAdjustmentScreen::widgets_t::toggle(uint8_t tag, progmem_str label, bool value, bool is_enabled) { + CommandProcessor cmd; + if (_what & BACKGROUND) { - CommandProcessor cmd; - cmd.fgcolor(bg_color) - .tag(0) - .font(font_small) - #ifdef TOUCH_UI_PORTRAIT - .button( BTN_POS(1, _line), BTN_SIZE( 8,1), label, OPT_FLAT); - #else - .button( BTN_POS(1, _line), BTN_SIZE(10,1), label, OPT_FLAT); - #endif + cmd.font(font_small) + .text( + #ifdef TOUCH_UI_PORTRAIT + BTN_POS(1, _line), BTN_SIZE( 8,1), + #else + BTN_POS(1, _line), BTN_SIZE(10,1), + #endif + label + ); } if (_what & FOREGROUND) { - CommandProcessor cmd; + _button_style(cmd, BTN_TOGGLE); cmd.tag(is_enabled ? tag : 0) .enabled(is_enabled) .font(font_small) - .colors(ui_toggle) - #ifdef TOUCH_UI_PORTRAIT - .toggle2(BTN_POS( 9,_line), BTN_SIZE(5,1), GET_TEXTF(NO), GET_TEXTF(YES), value); - #else - .toggle2(BTN_POS(10,_line), BTN_SIZE(4,1), GET_TEXTF(NO), GET_TEXTF(YES), value); - #endif + .toggle2( + #ifdef TOUCH_UI_PORTRAIT + BTN_POS( 9,_line), BTN_SIZE(5,1), + #else + BTN_POS(10,_line), BTN_SIZE(4,1), + #endif + GET_TEXTF(NO), GET_TEXTF(YES), value + ); } _line++; } void BaseNumericAdjustmentScreen::widgets_t::home_buttons(uint8_t tag) { + CommandProcessor cmd; + if (_what & BACKGROUND) { - CommandProcessor cmd; - cmd.fgcolor(bg_color) - .tag(0) - .font(font_small) - .button( BTN_POS(1, _line), BTN_SIZE(4,1), GET_TEXTF(HOME), OPT_FLAT); + cmd.font(font_small) + .text(BTN_POS(1, _line), BTN_SIZE(4,1), GET_TEXTF(HOME)); } - if (_what & FOREGROUND) { - CommandProcessor cmd; - cmd - #ifdef TOUCH_UI_PORTRAIT - .font(font_small) - #else - .font(font_medium) - #endif - .tag(tag+0).button(BTN_POS(5,_line), BTN_SIZE(2,1), GET_TEXTF(AXIS_X)) - .tag(tag+1).button(BTN_POS(7,_line), BTN_SIZE(2,1), GET_TEXTF(AXIS_Y)) - .tag(tag+2).button(BTN_POS(9,_line), BTN_SIZE(2,1), GET_TEXTF(AXIS_Z)) - .tag(tag+3).button(BTN_POS(11,_line), BTN_SIZE(3,1), GET_TEXTF(AXIS_ALL)); - } + cmd.font(LAYOUT_FONT); + _button(cmd, tag+0, BTN_POS(5,_line), BTN_SIZE(2,1), GET_TEXTF(AXIS_X)); + _button(cmd, tag+1, BTN_POS(7,_line), BTN_SIZE(2,1), GET_TEXTF(AXIS_Y)); + _button(cmd, tag+2, BTN_POS(9,_line), BTN_SIZE(2,1), GET_TEXTF(AXIS_Z)); + _button(cmd, tag+3, BTN_POS(11,_line), BTN_SIZE(3,1), GET_TEXTF(AXIS_ALL)); _line++; } @@ -316,11 +346,13 @@ void BaseNumericAdjustmentScreen::widgets_t::home_buttons(uint8_t tag) { void BaseNumericAdjustmentScreen::onEntry() { screen_data.BaseNumericAdjustmentScreen.increment = 0; // This will force the increment to be picked while drawing. BaseScreen::onEntry(); + CommandProcessor cmd; + cmd.set_button_style_callback(nullptr); } bool BaseNumericAdjustmentScreen::onTouchEnd(uint8_t tag) { switch (tag) { - case 1: GOTO_PREVIOUS(); return true; + case 1: GOTO_PREVIOUS(); return true; case 240 ... 245: screen_data.BaseNumericAdjustmentScreen.increment = tag; break; default: return current_screen.onTouchHeld(tag); } diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_screen.cpp index 662a55439a..c0c7212a22 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_screen.cpp @@ -36,6 +36,10 @@ void BaseScreen::onEntry() { UIScreen::onEntry(); } +bool BaseScreen::buttonIsPressed(uint8_t tag) { + return tag != 0 && EventLoop::get_pressed_tag() == tag; +} + bool BaseScreen::buttonStyleCallback(CommandProcessor &cmd, uint8_t tag, uint8_t &style, uint16_t &options, bool post) { if (post) { cmd.colors(normal_btn); @@ -48,7 +52,7 @@ bool BaseScreen::buttonStyleCallback(CommandProcessor &cmd, uint8_t tag, uint8_t } #endif - if (tag != 0 && EventLoop::get_pressed_tag() == tag) { + if (buttonIsPressed(tag)) { options = OPT_FLAT; } @@ -65,7 +69,7 @@ void BaseScreen::onIdle() { #ifdef LCD_TIMEOUT_TO_STATUS if ((millis() - last_interaction) > LCD_TIMEOUT_TO_STATUS) { reset_menu_timeout(); - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_MSG("Returning to status due to menu timeout"); #endif GOTO_SCREEN(StatusScreen); diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp index a42cb547aa..403376a180 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp @@ -46,7 +46,7 @@ void MainMenu::onRedraw(draw_mode_t what) { .colors(normal_btn) .font(font_medium) .tag(2).button( BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXTF(LOAD_SYRINGE)) - .tag(3).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(UNLOCK_XY_AXIS)) + .tag(3).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(RELEASE_XY_AXIS)) .tag(4).button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(BED_TEMPERATURE)) .tag(5).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(INTERFACE_SETTINGS)) .tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(ADVANCED_SETTINGS)) diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp index 3f8b3d611a..bd32d3a8ff 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp @@ -37,9 +37,10 @@ #define POLY(A) PolyUI::poly_reader_t(A, sizeof(A)/sizeof(A[0])) const uint8_t shadow_depth = 5; -const float max_speed = 0.30; -const float min_speed = 0.05; -const uint8_t num_speeds = 10; +const float max_speed = 1.00; +const float min_speed = 0.02; +const float emax_speed = 2.00; +const float emin_speed = 0.70; using namespace FTDI; using namespace Theme; @@ -251,7 +252,7 @@ void StatusScreen::onRedraw(draw_mode_t what) { } bool StatusScreen::onTouchStart(uint8_t) { - increment = min_speed; + increment = 0; return true; } @@ -288,7 +289,7 @@ bool StatusScreen::onTouchEnd(uint8_t tag) { bool StatusScreen::onTouchHeld(uint8_t tag) { if (tag >= 1 && tag <= 4 && !jog_xy) return false; - const float s = fine_motion ? min_speed : increment; + const float s = min_speed + (fine_motion ? 0 : (max_speed - min_speed) * sq(increment)); switch (tag) { case 1: jog(-s, 0, 0); break; case 2: jog( s, 0, 0); break; @@ -297,22 +298,20 @@ bool StatusScreen::onTouchHeld(uint8_t tag) { case 5: jog( 0, 0, -s); break; case 6: jog( 0, 0, s); break; case 7: - if (ExtUI::isMoving()) return false; - MoveAxisScreen::setManualFeedrate(E0, 1); - UI_INCREMENT(AxisPosition_mm, E0); - current_screen.onRefresh(); - break; case 8: + { if (ExtUI::isMoving()) return false; - MoveAxisScreen::setManualFeedrate(E0, 1); - UI_DECREMENT(AxisPosition_mm, E0); + const float feedrate = emin_speed + (fine_motion ? 0 : (emax_speed - emin_speed) * sq(increment)); + const float increment = 0.25 * feedrate * (tag == 7 ? -1 : 1); + MoveAxisScreen::setManualFeedrate(E0, feedrate); + UI_INCREMENT(AxisPosition_mm, E0); current_screen.onRefresh(); break; + } default: return false; } - if (increment < max_speed) - increment += (max_speed - min_speed) / num_speeds; + increment = min(1.0f, increment + 0.1f); return false; } @@ -325,11 +324,11 @@ void StatusScreen::setStatusMessage(const char * const str) { } void StatusScreen::onIdle() { - if (isPrintingFromMedia()) - BioPrintingDialogBox::show(); - if (refresh_timer.elapsed(STATUS_UPDATE_INTERVAL)) { - onRefresh(); + if (!EventLoop::is_touch_held()) + onRefresh(); + if (isPrintingFromMedia()) + BioPrintingDialogBox::show(); refresh_timer.start(); } } diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp index ab6f2dda89..2b22876970 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp @@ -56,7 +56,7 @@ void TuneMenu::onRedraw(draw_mode_t what) { #endif .tag(4).button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(NUDGE_NOZZLE)) .enabled(!isPrinting()).tag(5).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(LOAD_SYRINGE)) - .enabled(!isPrinting()).tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(UNLOCK_XY_AXIS)) + .enabled(!isPrinting()).tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(RELEASE_XY_AXIS)) .colors(action_btn) .tag(1).button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(BACK)); } #undef GRID_COLS diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp index a2edde8b3b..73f21bc8f5 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp @@ -46,30 +46,31 @@ void MoveAxisScreen::onRedraw(draw_mode_t what) { widgets_t w(what); w.precision(1); w.units(GET_TEXTF(UNITS_MM)); - w.heading( GET_TEXTF(MOVE_AXIS)); + w.heading( GET_TEXTF(MOVE_AXIS)); w.home_buttons(20); - w.color(Theme::x_axis ) .adjuster( 2, GET_TEXTF(AXIS_X), getAxisPosition_mm(X), canMove(X)); - w.color(Theme::y_axis ) .adjuster( 4, GET_TEXTF(AXIS_Y), getAxisPosition_mm(Y), canMove(Y)); - w.color(Theme::z_axis ) .adjuster( 6, GET_TEXTF(AXIS_Z), getAxisPosition_mm(Z), canMove(Z)); + w.color(Theme::x_axis).adjuster( 2, GET_TEXTF(AXIS_X), getAxisPosition_mm(X), canMove(X)); + w.color(Theme::y_axis).adjuster( 4, GET_TEXTF(AXIS_Y), getAxisPosition_mm(Y), canMove(Y)); + w.color(Theme::z_axis).adjuster( 6, GET_TEXTF(AXIS_Z), getAxisPosition_mm(Z), canMove(Z)); + w.color(Theme::e_axis); #if EXTRUDERS == 1 - w.color(Theme::e_axis) .adjuster( 8, GET_TEXTF(AXIS_E), screen_data.MoveAxisScreen.e_rel[0], canMove(E0)); + w.adjuster( 8, GET_TEXTF(AXIS_E), screen_data.MoveAxisScreen.e_rel[0], canMove(E0)); #elif EXTRUDERS > 1 - w.color(Theme::e_axis) .adjuster( 8, GET_TEXTF(AXIS_E1), screen_data.MoveAxisScreen.e_rel[0], canMove(E0)); - w.color(Theme::e_axis) .adjuster( 10, GET_TEXTF(AXIS_E2), screen_data.MoveAxisScreen.e_rel[1], canMove(E1)); + w.adjuster( 8, GET_TEXTF(AXIS_E1), screen_data.MoveAxisScreen.e_rel[0], canMove(E0)); + w.adjuster( 10, GET_TEXTF(AXIS_E2), screen_data.MoveAxisScreen.e_rel[1], canMove(E1)); #if EXTRUDERS > 2 - w.color(Theme::e_axis) .adjuster( 12, GET_TEXTF(AXIS_E3), screen_data.MoveAxisScreen.e_rel[2], canMove(E2)); + w.adjuster( 12, GET_TEXTF(AXIS_E3), screen_data.MoveAxisScreen.e_rel[2], canMove(E2)); #endif #if EXTRUDERS > 3 - w.color(Theme::e_axis) .adjuster( 14, GET_TEXTF(AXIS_E4), screen_data.MoveAxisScreen.e_rel[3], canMove(E3)); + w.adjuster( 14, GET_TEXTF(AXIS_E4), screen_data.MoveAxisScreen.e_rel[3], canMove(E3)); #endif #endif w.increments(); } bool MoveAxisScreen::onTouchHeld(uint8_t tag) { - #define UI_INCREMENT_AXIS(axis) setManualFeedrate(axis, increment); UI_INCREMENT(AxisPosition_mm, axis); - #define UI_DECREMENT_AXIS(axis) setManualFeedrate(axis, increment); UI_DECREMENT(AxisPosition_mm, axis); + #define UI_INCREMENT_AXIS(axis) UI_INCREMENT(AxisPosition_mm, axis); + #define UI_DECREMENT_AXIS(axis) UI_DECREMENT(AxisPosition_mm, axis); const float increment = getIncrement(); switch (tag) { case 2: UI_DECREMENT_AXIS(X); break; @@ -93,10 +94,10 @@ bool MoveAxisScreen::onTouchHeld(uint8_t tag) { case 14: UI_DECREMENT_AXIS(E3); screen_data.MoveAxisScreen.e_rel[3] -= increment; break; case 15: UI_INCREMENT_AXIS(E3); screen_data.MoveAxisScreen.e_rel[3] += increment; break; #endif - case 20: injectCommands_P(PSTR("G28 X")); break; - case 21: injectCommands_P(PSTR("G28 Y")); break; - case 22: injectCommands_P(PSTR("G28 Z")); break; - case 23: injectCommands_P(PSTR("G28")); break; + case 20: SpinnerDialogBox::enqueueAndWait_P(F("G28 X")); break; + case 21: SpinnerDialogBox::enqueueAndWait_P(F("G28 Y")); break; + case 22: SpinnerDialogBox::enqueueAndWait_P(F("G28 Z")); break; + case 23: SpinnerDialogBox::enqueueAndWait_P(F("G28")); break; default: return false; } @@ -109,9 +110,9 @@ float MoveAxisScreen::getManualFeedrate(uint8_t axis, float increment_mm) { // Compute feedrate so that the tool lags the adjuster when it is // being held down, this allows enough margin for the planner to // connect segments and even out the motion. - constexpr float max_manual_feedrate[XYZE] = MAX_MANUAL_FEEDRATE; - return min(max_manual_feedrate[axis]/60, abs(increment_mm * TOUCH_REPEATS_PER_SECOND * 0.80)); - return min(max_manual_feedrate[axis] / 60, abs(increment_mm * TOUCH_REPEATS_PER_SECOND * 0.80)); + constexpr float manual_feedrate[XYZE] = MANUAL_FEEDRATE; + return min(manual_feedrate[axis] / 60, abs(increment_mm * TOUCH_REPEATS_PER_SECOND * 0.80)); + return min(manual_feedrate[axis] / 60, abs(increment_mm * TOUCH_REPEATS_PER_SECOND * 0.80)); } void MoveAxisScreen::setManualFeedrate(ExtUI::axis_t axis, float increment_mm) { diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h index 7ab8f0790e..c9850c0d81 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h @@ -97,6 +97,8 @@ class BaseScreen : public UIScreen { static uint32_t last_interaction; #endif + static bool buttonIsPressed(uint8_t tag); + public: static bool buttonStyleCallback(CommandProcessor &, uint8_t, uint8_t &, uint16_t &, bool); @@ -353,10 +355,18 @@ class BaseNumericAdjustmentScreen : public BaseScreen { uint32_t _color; uint8_t _decimals; progmem_str _units; + enum style_t { + BTN_NORMAL, + BTN_ACTION, + BTN_TOGGLE, + BTN_DISABLED, + TEXT_AREA + } _style; protected: - void _draw_increment_btn(uint8_t line, const uint8_t tag); - + void _draw_increment_btn(CommandProcessor &, uint8_t line, const uint8_t tag); + void _button(CommandProcessor &, uint8_t tag, int16_t x, int16_t y, int16_t w, int16_t h, progmem_str, bool enabled = true, bool highlight = false); + void _button_style(CommandProcessor &cmd, style_t style); public: widgets_t(draw_mode_t);