Fix SD card reselect when scrolled (#13624)
- Change encoder position to 16-bit integer. - Fix `SD_REPRINT_LAST_SELECTED_FILE` when the screen is scrolled.
This commit is contained in:
@ -66,11 +66,11 @@ uint8_t screen_history_depth = 0;
|
||||
bool screen_changed;
|
||||
|
||||
// Value Editing
|
||||
PGM_P editLabel;
|
||||
void *editValue;
|
||||
int32_t minEditValue, maxEditValue;
|
||||
screenFunc_t callbackFunc;
|
||||
bool liveEdit;
|
||||
PGM_P MenuItemBase::editLabel;
|
||||
void* MenuItemBase::editValue;
|
||||
int16_t MenuItemBase::minEditValue, MenuItemBase::maxEditValue;
|
||||
screenFunc_t MenuItemBase::callbackFunc;
|
||||
bool MenuItemBase::liveEdit;
|
||||
|
||||
// Prevent recursion into screen handlers
|
||||
bool no_reentry = false;
|
||||
@ -131,8 +131,8 @@ void MenuItem_gcode::action(PGM_P pgcode) { enqueue_and_echo_commands_P(pgcode);
|
||||
*/
|
||||
void MenuItemBase::edit(strfunc_t strfunc, loadfunc_t loadfunc) {
|
||||
ui.encoder_direction_normal();
|
||||
if ((int32_t)ui.encoderPosition < 0) ui.encoderPosition = 0;
|
||||
if ((int32_t)ui.encoderPosition > maxEditValue) ui.encoderPosition = maxEditValue;
|
||||
if (int16_t(ui.encoderPosition) < 0) ui.encoderPosition = 0;
|
||||
if (int16_t(ui.encoderPosition) > maxEditValue) ui.encoderPosition = maxEditValue;
|
||||
if (ui.should_draw())
|
||||
draw_edit_screen(editLabel, strfunc(ui.encoderPosition + minEditValue));
|
||||
if (ui.lcd_clicked || (liveEdit && ui.should_draw())) {
|
||||
@ -142,7 +142,7 @@ void MenuItemBase::edit(strfunc_t strfunc, loadfunc_t loadfunc) {
|
||||
}
|
||||
}
|
||||
|
||||
void MenuItemBase::init(PGM_P const el, void * const ev, const int32_t minv, const int32_t maxv, const uint32_t ep, const screenFunc_t cs, const screenFunc_t cb, const bool le) {
|
||||
void MenuItemBase::init(PGM_P const el, void * const ev, const int16_t minv, const int16_t maxv, const uint16_t ep, const screenFunc_t cs, const screenFunc_t cb, const bool le) {
|
||||
ui.save_previous_screen();
|
||||
ui.refresh();
|
||||
editLabel = el;
|
||||
@ -193,7 +193,7 @@ bool printer_busy() {
|
||||
/**
|
||||
* General function to go directly to a screen
|
||||
*/
|
||||
void MarlinUI::goto_screen(screenFunc_t screen, const uint32_t encoder/*=0*/, const uint8_t top/*=0*/, const uint8_t items/*=0*/) {
|
||||
void MarlinUI::goto_screen(screenFunc_t screen, const uint16_t encoder/*=0*/, const uint8_t top/*=0*/, const uint8_t items/*=0*/) {
|
||||
if (currentScreen != screen) {
|
||||
|
||||
#if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
|
||||
@ -364,7 +364,7 @@ void MarlinUI::completion_feedback(const bool good/*=true*/) {
|
||||
#endif
|
||||
ui.encoder_direction_normal();
|
||||
if (ui.encoderPosition) {
|
||||
const int16_t babystep_increment = (int32_t)ui.encoderPosition * (BABYSTEP_MULTIPLICATOR);
|
||||
const int16_t babystep_increment = int16_t(ui.encoderPosition) * (BABYSTEP_MULTIPLICATOR);
|
||||
ui.encoderPosition = 0;
|
||||
|
||||
const float diff = planner.steps_to_mm[Z_AXIS] * babystep_increment,
|
||||
@ -438,7 +438,7 @@ void _lcd_draw_homing() {
|
||||
|
||||
void do_select_screen(PGM_P const yes, PGM_P const no, bool &yesno, PGM_P const pref, const char * const string, PGM_P const suff) {
|
||||
if (ui.encoderPosition) {
|
||||
yesno = int32_t(ui.encoderPosition) > 0;
|
||||
yesno = int16_t(ui.encoderPosition) > 0;
|
||||
ui.encoderPosition = 0;
|
||||
}
|
||||
draw_select_screen(yes, no, yesno, pref, string, suff);
|
||||
|
Reference in New Issue
Block a user