🩹 Fix DWIN Enhanced Tune menu during homing (#22773)
Co-authored-by: Scott Lahteine <github@thinkyhead.com>
This commit is contained in:
		
				
					committed by
					
						
						Scott Lahteine
					
				
			
			
				
	
			
			
			
						parent
						
							1386e78369
						
					
				
				
					commit
					84d1619127
				
			@@ -86,9 +86,6 @@
 | 
			
		||||
 | 
			
		||||
#define PAUSE_HEAT
 | 
			
		||||
 | 
			
		||||
#define USE_STRING_HEADINGS
 | 
			
		||||
#define USE_STRING_TITLES
 | 
			
		||||
 | 
			
		||||
#define MENU_CHAR_LIMIT  24
 | 
			
		||||
 | 
			
		||||
// Print speed limit
 | 
			
		||||
@@ -133,8 +130,20 @@ HMI_data_t HMI_data;
 | 
			
		||||
 | 
			
		||||
millis_t dwin_heat_time = 0;
 | 
			
		||||
 | 
			
		||||
uint8_t checkkey = MainMenu;
 | 
			
		||||
uint8_t last_checkkey = MainMenu;
 | 
			
		||||
uint8_t checkkey = MainMenu, last_checkkey = MainMenu;
 | 
			
		||||
 | 
			
		||||
enum SelectItem : uint8_t {
 | 
			
		||||
  PAGE_PRINT = 0,
 | 
			
		||||
  PAGE_PREPARE,
 | 
			
		||||
  PAGE_CONTROL,
 | 
			
		||||
  PAGE_INFO_LEVELING,
 | 
			
		||||
  PAGE_COUNT,
 | 
			
		||||
 | 
			
		||||
  PRINT_SETUP = 0,
 | 
			
		||||
  PRINT_PAUSE_RESUME,
 | 
			
		||||
  PRINT_STOP,
 | 
			
		||||
  PRINT_COUNT
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  uint8_t now, last;
 | 
			
		||||
@@ -266,7 +275,7 @@ void ICON_Print() {
 | 
			
		||||
    { 1, { 417, 449 }, 30, 14 },
 | 
			
		||||
    { 1, { 405, 447 }, 27, 15 }
 | 
			
		||||
  };
 | 
			
		||||
  ICON_Button(select_page.now == 0, ICON_Print_0, ico, txt);
 | 
			
		||||
  ICON_Button(select_page.now == PAGE_PRINT, ICON_Print_0, ico, txt);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
@@ -278,7 +287,7 @@ void ICON_Prepare() {
 | 
			
		||||
    { 33, { 417, 449 }, 51, 14 },
 | 
			
		||||
    { 31, { 405, 447 }, 27, 15 }
 | 
			
		||||
  };
 | 
			
		||||
  ICON_Button(select_page.now == 1, ICON_Prepare_0, ico, txt);
 | 
			
		||||
  ICON_Button(select_page.now == PAGE_PREPARE, ICON_Prepare_0, ico, txt);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
@@ -290,7 +299,7 @@ void ICON_Control() {
 | 
			
		||||
    { 85, { 417, 449 }, 46, 14 },
 | 
			
		||||
    { 61, { 405, 447 }, 27, 15 }
 | 
			
		||||
  };
 | 
			
		||||
  ICON_Button(select_page.now == 2, ICON_Control_0, ico, txt);
 | 
			
		||||
  ICON_Button(select_page.now == PAGE_CONTROL, ICON_Control_0, ico, txt);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
@@ -302,7 +311,7 @@ void ICON_StartInfo() {
 | 
			
		||||
    { 133, { 417, 449 }, 23, 14 },
 | 
			
		||||
    {  91, { 405, 447 }, 27, 15 }
 | 
			
		||||
  };
 | 
			
		||||
  ICON_Button(select_page.now == 3, ICON_Info_0, ico, txt);
 | 
			
		||||
  ICON_Button(select_page.now == PAGE_INFO_LEVELING, ICON_Info_0, ico, txt);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
@@ -314,7 +323,7 @@ void ICON_Leveling() {
 | 
			
		||||
    {  88, { 433, 464 }, 36, 14 },
 | 
			
		||||
    { 211, { 405, 447 }, 27, 15 }
 | 
			
		||||
  };
 | 
			
		||||
  ICON_Button(select_page.now == 3, ICON_Leveling_0, ico, txt);
 | 
			
		||||
  ICON_Button(select_page.now == PAGE_INFO_LEVELING, ICON_Leveling_0, ico, txt);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
@@ -326,7 +335,7 @@ void ICON_Tune() {
 | 
			
		||||
    {   0, { 433, 464 }, 32, 14 },
 | 
			
		||||
    { 121, { 405, 447 }, 27, 15 }
 | 
			
		||||
  };
 | 
			
		||||
  ICON_Button(select_print.now == 0, ICON_Setup_0, ico, txt);
 | 
			
		||||
  ICON_Button(select_print.now == PRINT_SETUP, ICON_Setup_0, ico, txt);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
@@ -338,7 +347,7 @@ void ICON_Pause() {
 | 
			
		||||
    { 157, { 417, 449 }, 39, 14 },
 | 
			
		||||
    { 181, { 405, 447 }, 27, 15 }
 | 
			
		||||
  };
 | 
			
		||||
  ICON_Button(select_print.now == 1, ICON_Pause_0, ico, txt);
 | 
			
		||||
  ICON_Button(select_print.now == PRINT_PAUSE_RESUME, ICON_Pause_0, ico, txt);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
@@ -350,7 +359,7 @@ void ICON_Resume() {
 | 
			
		||||
    { 33, { 433, 464 }, 53, 14 },
 | 
			
		||||
    {  1, { 405, 447 }, 27, 15 }
 | 
			
		||||
  };
 | 
			
		||||
  ICON_Button(select_print.now == 1, ICON_Continue_0, ico, txt);
 | 
			
		||||
  ICON_Button(select_print.now == PRINT_PAUSE_RESUME, ICON_Continue_0, ico, txt);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
@@ -362,7 +371,7 @@ void ICON_Stop() {
 | 
			
		||||
    { 196, { 417, 449 }, 29, 14 },
 | 
			
		||||
    { 151, { 405, 447 }, 27, 12 }
 | 
			
		||||
  };
 | 
			
		||||
  ICON_Button(select_print.now == 2, ICON_Stop_0, ico, txt);
 | 
			
		||||
  ICON_Button(select_print.now == PRINT_STOP, ICON_Stop_0, ico, txt);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Draw_Menu_Cursor(const uint8_t line) {
 | 
			
		||||
@@ -537,14 +546,14 @@ void Popup_window_PauseOrStop() {
 | 
			
		||||
  if (HMI_IsChinese()) {
 | 
			
		||||
    DWINUI::ClearMenuArea();
 | 
			
		||||
    Draw_Popup_Bkgd_60();
 | 
			
		||||
         if (select_print.now == 1) DWIN_Frame_AreaCopy(1, 237, 338, 269, 356, 98, 150);
 | 
			
		||||
    else if (select_print.now == 2) DWIN_Frame_AreaCopy(1, 221, 320, 253, 336, 98, 150);
 | 
			
		||||
         if (select_print.now == PRINT_PAUSE_RESUME) DWIN_Frame_AreaCopy(1, 237, 338, 269, 356, 98, 150);
 | 
			
		||||
    else if (select_print.now == PRINT_STOP) DWIN_Frame_AreaCopy(1, 221, 320, 253, 336, 98, 150);
 | 
			
		||||
    DWIN_Frame_AreaCopy(1, 220, 304, 264, 319, 130, 150);
 | 
			
		||||
    DWINUI::Draw_Icon(ICON_Confirm_C, 26, 280);
 | 
			
		||||
    DWINUI::Draw_Icon(ICON_Cancel_C, 146, 280);
 | 
			
		||||
  }
 | 
			
		||||
  else {
 | 
			
		||||
    DWIN_Draw_Popup(ICON_BLTouch, "Please confirm",(select_print.now == 1) ? GET_TEXT(MSG_PAUSE_PRINT) : GET_TEXT(MSG_STOP_PRINT));
 | 
			
		||||
    DWIN_Draw_Popup(ICON_BLTouch, "Please confirm", select_print.now == PRINT_PAUSE_RESUME ? GET_TEXT(MSG_PAUSE_PRINT) : GET_TEXT(MSG_STOP_PRINT));
 | 
			
		||||
    DWINUI::Draw_Icon(ICON_Confirm_E, 26, 280);
 | 
			
		||||
    DWINUI::Draw_Icon(ICON_Cancel_E, 146, 280);
 | 
			
		||||
  }
 | 
			
		||||
@@ -589,16 +598,9 @@ void Draw_Print_Labels() {
 | 
			
		||||
    DWIN_Frame_AreaCopy(1, 65, 72, 128, 86, 176, 173);  // Remain
 | 
			
		||||
  }
 | 
			
		||||
  else {
 | 
			
		||||
    #ifdef USE_STRING_TITLES
 | 
			
		||||
      Title.ShowCaption(GET_TEXT(MSG_PRINTING));
 | 
			
		||||
      DWINUI::Draw_String( 46, 173, F("Print Time"));
 | 
			
		||||
      DWINUI::Draw_String(181, 173, F("Remain"));
 | 
			
		||||
    #else
 | 
			
		||||
      const uint16_t y = 168;
 | 
			
		||||
      Title.FrameCopy(42, 0, 47, 14);                   // "Printing"
 | 
			
		||||
      DWIN_Frame_AreaCopy(1,  0, 44,  96, 58,  41, y);  // Printing Time
 | 
			
		||||
      DWIN_Frame_AreaCopy(1, 98, 44, 152, 58, 176, y);  // Remain
 | 
			
		||||
    #endif
 | 
			
		||||
    Title.ShowCaption(GET_TEXT(MSG_PRINTING));
 | 
			
		||||
    DWINUI::Draw_String( 46, 173, F("Print Time"));
 | 
			
		||||
    DWINUI::Draw_String(181, 173, F("Remain"));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -678,13 +680,8 @@ void Draw_Main_Menu() {
 | 
			
		||||
 | 
			
		||||
  if (HMI_IsChinese())
 | 
			
		||||
    Title.FrameCopy(2, 2, 26, 13);   // "Home" etc
 | 
			
		||||
  else {
 | 
			
		||||
    #ifdef USE_STRING_HEADINGS
 | 
			
		||||
      Title.ShowCaption(MACHINE_NAME);
 | 
			
		||||
    #else
 | 
			
		||||
      Title.FrameCopy(0, 2, 40, 11); // "Home"
 | 
			
		||||
    #endif
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
    Title.ShowCaption(MACHINE_NAME);
 | 
			
		||||
 | 
			
		||||
  DWINUI::Draw_Icon(ICON_LOGO, 71, 52);  // CREALITY logo
 | 
			
		||||
 | 
			
		||||
@@ -1075,11 +1072,7 @@ void Draw_Info_Menu() {
 | 
			
		||||
    DWIN_Frame_AreaCopy(1,  58, 164, 113, 176, 105, 248);   // "Contact Details"
 | 
			
		||||
  }
 | 
			
		||||
  else {
 | 
			
		||||
    #ifdef USE_STRING_HEADINGS
 | 
			
		||||
      Title.ShowCaption(GET_TEXT_F(MSG_INFO_SCREEN));
 | 
			
		||||
    #else
 | 
			
		||||
      Title.FrameCopy(192, 15, 23, 12);                     // "Info"
 | 
			
		||||
    #endif
 | 
			
		||||
    Title.ShowCaption(GET_TEXT_F(MSG_INFO_SCREEN));
 | 
			
		||||
 | 
			
		||||
    DWIN_Frame_AreaCopy(1, 120, 150, 146, 161, 124, 102);   // "Size"
 | 
			
		||||
    DWIN_Frame_AreaCopy(1, 146, 151, 254, 161,  82, 175);   // "Firmware Version"
 | 
			
		||||
@@ -1098,13 +1091,8 @@ void Draw_Info_Menu() {
 | 
			
		||||
void Draw_Print_File_Menu() {
 | 
			
		||||
  if (HMI_IsChinese())
 | 
			
		||||
    Title.FrameCopy(0, 31, 56, 14);    // "Print file"
 | 
			
		||||
  else {
 | 
			
		||||
    #ifdef USE_STRING_HEADINGS
 | 
			
		||||
      Title.ShowCaption(GET_TEXT_F(MSG_MEDIA_MENU));
 | 
			
		||||
    #else
 | 
			
		||||
      Title.FrameCopy(52, 31, 86, 11); // "Print file"
 | 
			
		||||
    #endif
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
    Title.ShowCaption(GET_TEXT_F(MSG_MEDIA_MENU));
 | 
			
		||||
  Redraw_SD_List();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1114,43 +1102,39 @@ void HMI_MainMenu() {
 | 
			
		||||
  if (encoder_diffState == ENCODER_DIFF_NO) return;
 | 
			
		||||
 | 
			
		||||
  if (encoder_diffState == ENCODER_DIFF_CW) {
 | 
			
		||||
    if (select_page.inc(4)) {
 | 
			
		||||
    if (select_page.inc(PAGE_COUNT)) {
 | 
			
		||||
      switch (select_page.now) {
 | 
			
		||||
        case 0: ICON_Print(); break;
 | 
			
		||||
        case 1: ICON_Print(); ICON_Prepare(); break;
 | 
			
		||||
        case 2: ICON_Prepare(); ICON_Control(); break;
 | 
			
		||||
        case 3: ICON_Control(); TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
 | 
			
		||||
        case PAGE_PRINT: ICON_Print(); break;
 | 
			
		||||
        case PAGE_PREPARE: ICON_Print(); ICON_Prepare(); break;
 | 
			
		||||
        case PAGE_CONTROL: ICON_Prepare(); ICON_Control(); break;
 | 
			
		||||
        case PAGE_INFO_LEVELING: ICON_Control(); TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  else if (encoder_diffState == ENCODER_DIFF_CCW) {
 | 
			
		||||
    if (select_page.dec()) {
 | 
			
		||||
      switch (select_page.now) {
 | 
			
		||||
        case 0: ICON_Print(); ICON_Prepare(); break;
 | 
			
		||||
        case 1: ICON_Prepare(); ICON_Control(); break;
 | 
			
		||||
        case 2: ICON_Control(); TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
 | 
			
		||||
        case 3: TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
 | 
			
		||||
        case PAGE_PRINT: ICON_Print(); ICON_Prepare(); break;
 | 
			
		||||
        case PAGE_PREPARE: ICON_Prepare(); ICON_Control(); break;
 | 
			
		||||
        case PAGE_CONTROL: ICON_Control(); TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
 | 
			
		||||
        case PAGE_INFO_LEVELING: TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  else if (encoder_diffState == ENCODER_DIFF_ENTER) {
 | 
			
		||||
    switch (select_page.now) {
 | 
			
		||||
      case 0: // Print File
 | 
			
		||||
      case PAGE_PRINT:
 | 
			
		||||
        checkkey = SelectFile;
 | 
			
		||||
        Draw_Print_File_Menu();
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case 1: // Prepare
 | 
			
		||||
        Draw_Prepare_Menu();
 | 
			
		||||
        break;
 | 
			
		||||
      case PAGE_PREPARE: Draw_Prepare_Menu(); break;
 | 
			
		||||
 | 
			
		||||
      case 2: // Control
 | 
			
		||||
        Draw_Control_Menu();
 | 
			
		||||
        break;
 | 
			
		||||
      case PAGE_CONTROL: Draw_Control_Menu(); break;
 | 
			
		||||
 | 
			
		||||
      case 3: // Leveling or Info
 | 
			
		||||
      case PAGE_INFO_LEVELING:
 | 
			
		||||
        #if HAS_ONESTEP_LEVELING
 | 
			
		||||
          queue.inject_P(PSTR("G28XYO\nG28Z\nG29"));
 | 
			
		||||
          queue.inject_P(PSTR("G28XYO\nG28Z\nG29"));  // TODO: 'G29' should be homing when needed. Does it make sense for every LCD to do this differently?
 | 
			
		||||
        #else
 | 
			
		||||
          checkkey = Info;
 | 
			
		||||
          Draw_Info_Menu();
 | 
			
		||||
@@ -1238,8 +1222,8 @@ void HMI_SelectFile() {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  else if (encoder_diffState == ENCODER_DIFF_ENTER) {
 | 
			
		||||
    if (select_file.now == 0) { // Back
 | 
			
		||||
      select_page.set(0);
 | 
			
		||||
    if (select_file.now == 0) {
 | 
			
		||||
      select_page.set(PAGE_PRINT);
 | 
			
		||||
      Goto_Main_Menu();
 | 
			
		||||
    }
 | 
			
		||||
    else if (hasUpDir && select_file.now == 1) { // CD-Up
 | 
			
		||||
@@ -1276,7 +1260,8 @@ void HMI_SelectFile() {
 | 
			
		||||
      DWIN_Print_Started(true);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
HMI_SelectFileExit:
 | 
			
		||||
 | 
			
		||||
  HMI_SelectFileExit:
 | 
			
		||||
  DWIN_UpdateLCD();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1286,44 +1271,30 @@ void HMI_Printing() {
 | 
			
		||||
  if (encoder_diffState == ENCODER_DIFF_NO) return;
 | 
			
		||||
  // Avoid flicker by updating only the previous menu
 | 
			
		||||
  if (encoder_diffState == ENCODER_DIFF_CW) {
 | 
			
		||||
    if (select_print.inc(3)) {
 | 
			
		||||
    if (select_print.inc(PRINT_COUNT)) {
 | 
			
		||||
      switch (select_print.now) {
 | 
			
		||||
        case 0: ICON_Tune(); break;
 | 
			
		||||
        case 1:
 | 
			
		||||
          ICON_Tune();
 | 
			
		||||
          ICON_ResumeOrPause();
 | 
			
		||||
          break;
 | 
			
		||||
        case 2:
 | 
			
		||||
          ICON_ResumeOrPause();
 | 
			
		||||
          ICON_Stop();
 | 
			
		||||
          break;
 | 
			
		||||
        case PRINT_SETUP: ICON_Tune(); break;
 | 
			
		||||
        case PRINT_PAUSE_RESUME: ICON_Tune(); ICON_ResumeOrPause(); break;
 | 
			
		||||
        case PRINT_STOP: ICON_ResumeOrPause(); ICON_Stop(); break;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  else if (encoder_diffState == ENCODER_DIFF_CCW) {
 | 
			
		||||
    if (select_print.dec()) {
 | 
			
		||||
      switch (select_print.now) {
 | 
			
		||||
        case 0:
 | 
			
		||||
          ICON_Tune();
 | 
			
		||||
          ICON_ResumeOrPause();
 | 
			
		||||
          break;
 | 
			
		||||
        case 1:
 | 
			
		||||
          ICON_ResumeOrPause();
 | 
			
		||||
          ICON_Stop();
 | 
			
		||||
          break;
 | 
			
		||||
        case 2: ICON_Stop(); break;
 | 
			
		||||
        case PRINT_SETUP: ICON_Tune(); ICON_ResumeOrPause(); break;
 | 
			
		||||
        case PRINT_PAUSE_RESUME: ICON_ResumeOrPause(); ICON_Stop(); break;
 | 
			
		||||
        case PRINT_STOP: ICON_Stop(); break;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  else if (encoder_diffState == ENCODER_DIFF_ENTER) {
 | 
			
		||||
    switch (select_print.now) {
 | 
			
		||||
      case 0: // Tune
 | 
			
		||||
        Draw_Tune_Menu();
 | 
			
		||||
        break;
 | 
			
		||||
      case 1: // Pause
 | 
			
		||||
      case PRINT_SETUP: Draw_Tune_Menu(); break;
 | 
			
		||||
      case PRINT_PAUSE_RESUME:
 | 
			
		||||
        if (HMI_flag.pause_flag) {
 | 
			
		||||
          ICON_Pause();
 | 
			
		||||
          #ifndef ADVANCED_PAUSE_FEATURE
 | 
			
		||||
          #if DISABLED(ADVANCED_PAUSE_FEATURE)
 | 
			
		||||
            char cmd[40];
 | 
			
		||||
            cmd[0] = '\0';
 | 
			
		||||
            #if BOTH(HAS_HEATED_BED, PAUSE_HEAT)
 | 
			
		||||
@@ -1346,7 +1317,7 @@ void HMI_Printing() {
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case 2: // Stop
 | 
			
		||||
      case PRINT_STOP:
 | 
			
		||||
        HMI_flag.select_flag = true;
 | 
			
		||||
        checkkey = PauseOrStop;
 | 
			
		||||
        Popup_window_PauseOrStop();
 | 
			
		||||
@@ -1378,7 +1349,7 @@ void HMI_PauseOrStop() {
 | 
			
		||||
  else if (encoder_diffState == ENCODER_DIFF_CCW)
 | 
			
		||||
    Draw_Select_Highlight(true);
 | 
			
		||||
  else if (encoder_diffState == ENCODER_DIFF_ENTER) {
 | 
			
		||||
    if (select_print.now == 1) { // pause window
 | 
			
		||||
    if (select_print.now == PRINT_PAUSE_RESUME) {
 | 
			
		||||
      if (HMI_flag.select_flag) {
 | 
			
		||||
        HMI_flag.pause_action = true;
 | 
			
		||||
        ICON_Resume();
 | 
			
		||||
@@ -1389,7 +1360,7 @@ void HMI_PauseOrStop() {
 | 
			
		||||
      }
 | 
			
		||||
      Goto_PrintProcess();
 | 
			
		||||
    }
 | 
			
		||||
    else if (select_print.now == 2) { // stop window
 | 
			
		||||
    else if (select_print.now == PRINT_STOP) {
 | 
			
		||||
      if (HMI_flag.select_flag) {
 | 
			
		||||
        checkkey = MainMenu;
 | 
			
		||||
        if (HMI_flag.home_flag) planner.synchronize(); // Wait for planner moves to finish!
 | 
			
		||||
@@ -1511,22 +1482,12 @@ void EachMomentUpdate() {
 | 
			
		||||
  if (HMI_flag.pause_action && printingIsPaused() && !planner.has_blocks_queued()) {
 | 
			
		||||
    HMI_flag.pause_action = false;
 | 
			
		||||
    #if ENABLED(PAUSE_HEAT)
 | 
			
		||||
      if (sdprint) {
 | 
			
		||||
        TERN_(HAS_HOTEND, resume_hotend_temp = thermalManager.degTargetHotend(0));
 | 
			
		||||
        TERN_(HAS_HEATED_BED, resume_bed_temp = thermalManager.degTargetBed());
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
        TERN_(HAS_HOTEND, resume_hotend_temp = thermalManager.wholeDegHotend(0));
 | 
			
		||||
        TERN_(HAS_HEATED_BED, resume_bed_temp = thermalManager.wholeDegBed());
 | 
			
		||||
      }
 | 
			
		||||
      TERN_(HAS_HOTEND, resume_hotend_temp = sdprint ? thermalManager.degTargetHotend(0) : thermalManager.wholeDegHotend(0));
 | 
			
		||||
      TERN_(HAS_HEATED_BED, resume_bed_temp = sdprint ? thermalManager.degTargetBed() : thermalManager.wholeDegBed());
 | 
			
		||||
      TERN_(HAS_FAN, resume_fan = thermalManager.fan_speed[0]);
 | 
			
		||||
    #endif
 | 
			
		||||
    #if DISABLED(ADVANCED_PAUSE_FEATURE)
 | 
			
		||||
      thermalManager.disable_all_heaters();
 | 
			
		||||
    #endif
 | 
			
		||||
    #if DISABLED(PARK_HEAD_ON_PAUSE)
 | 
			
		||||
      queue.inject_P(PSTR("G1 F1200 X0 Y0"));
 | 
			
		||||
	#endif
 | 
			
		||||
    IF_DISABLED(ADVANCED_PAUSE_FEATURE, thermalManager.disable_all_heaters());
 | 
			
		||||
    IF_DISABLED(PARK_HEAD_ON_PAUSE, queue.inject_P(PSTR("G1 F1200 X0 Y0")));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (checkkey == PrintProcess) { // print process
 | 
			
		||||
@@ -1565,7 +1526,7 @@ void EachMomentUpdate() {
 | 
			
		||||
  else if (dwin_abort_flag && !HMI_flag.home_flag) { // Print Stop
 | 
			
		||||
    dwin_abort_flag = false;
 | 
			
		||||
    dwin_zoffset = BABY_Z_VAR;
 | 
			
		||||
    select_page.set(0);
 | 
			
		||||
    select_page.set(PAGE_PRINT);
 | 
			
		||||
    Goto_Main_Menu();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -1615,7 +1576,7 @@ void EachMomentUpdate() {
 | 
			
		||||
        watchdog_refresh();
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      select_print.set(0);
 | 
			
		||||
      select_print.set(PRINT_SETUP);
 | 
			
		||||
      queue.inject_P(PSTR("M1000"));
 | 
			
		||||
      sdprint = true;
 | 
			
		||||
      Goto_PrintProcess();
 | 
			
		||||
@@ -1735,7 +1696,6 @@ void DWIN_PidTuning(pidresult_t result) {
 | 
			
		||||
 | 
			
		||||
// Update filename on print
 | 
			
		||||
void DWIN_Print_Header(const char *text = nullptr) {
 | 
			
		||||
 | 
			
		||||
  static char headertxt[31] = "";  // Print header text
 | 
			
		||||
 | 
			
		||||
  if (text != nullptr) {
 | 
			
		||||
@@ -1917,6 +1877,7 @@ void DWIN_Redraw_screen() {
 | 
			
		||||
    DWINUI::Draw_Icon(ICON_Confirm_E, 26, 280);
 | 
			
		||||
    DWINUI::Draw_Icon(ICON_Continue_E, 146, 280);
 | 
			
		||||
    Draw_Select_Highlight(true);
 | 
			
		||||
    DWIN_UpdateLCD();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Handle responses such as:
 | 
			
		||||
@@ -1981,7 +1942,6 @@ void DWIN_LockScreen(const bool flag) {
 | 
			
		||||
//  LiveUpdate: live update function when the encoder changes
 | 
			
		||||
//  Apply: update function when the encoder is pressed
 | 
			
		||||
void SetOnClick(uint8_t process, const int32_t lo, const int32_t hi, uint8_t dp, const int32_t val, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr) {
 | 
			
		||||
  last_checkkey = Menu;
 | 
			
		||||
  checkkey = process;
 | 
			
		||||
  HMI_value.MinValue = lo;
 | 
			
		||||
  HMI_value.MaxValue = hi;
 | 
			
		||||
@@ -2092,13 +2052,9 @@ void Goto_InfoMenu(){
 | 
			
		||||
  Draw_Info_Menu();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DisableMotors() {
 | 
			
		||||
  queue.inject_P(PSTR("M84"));
 | 
			
		||||
}
 | 
			
		||||
void DisableMotors() { queue.inject_P(PSTR("M84")); }
 | 
			
		||||
 | 
			
		||||
void AutoHome() {
 | 
			
		||||
  queue.inject_P(G28_STR);
 | 
			
		||||
}
 | 
			
		||||
void AutoHome() { queue.inject_P(G28_STR); }
 | 
			
		||||
 | 
			
		||||
void SetHome() {
 | 
			
		||||
  // Apply workspace offset, making the current position 0,0,0
 | 
			
		||||
@@ -2116,9 +2072,11 @@ void SetHome() {
 | 
			
		||||
      if (BABYSTEP_ALLOWED()) babystep.add_mm(Z_AXIS, dwin_zoffset - last_zoffset);
 | 
			
		||||
    #endif
 | 
			
		||||
  }
 | 
			
		||||
    #if EITHER(HAS_BED_PROBE, BABYSTEPPING)
 | 
			
		||||
    void SetZOffset() { SetPFloatOnClick(Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX, 2, ApplyZOffset, LiveZOffset); }
 | 
			
		||||
    #endif
 | 
			
		||||
  #if EITHER(HAS_BED_PROBE, BABYSTEPPING)
 | 
			
		||||
    void SetZOffset() {
 | 
			
		||||
      SetPFloatOnClick(Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX, 2, ApplyZOffset, LiveZOffset);
 | 
			
		||||
    }
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if HAS_PREHEAT
 | 
			
		||||
@@ -2233,9 +2191,7 @@ void SetPID(celsius_t t, heater_id_t h) {
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void Goto_LockScreen() {
 | 
			
		||||
  DWIN_LockScreen(true);
 | 
			
		||||
}
 | 
			
		||||
void Goto_LockScreen() { DWIN_LockScreen(true); }
 | 
			
		||||
 | 
			
		||||
#if HAS_HOME_OFFSET
 | 
			
		||||
  void ApplyHomeOffset() { set_home_offset(HMI_value.axis, HMI_value.Value / MINUNITMULT); }
 | 
			
		||||
@@ -2327,6 +2283,7 @@ void SetSpeed() { SetPIntOnClick(MIN_PRINT_SPEED, MAX_PRINT_SPEED); }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if ENABLED(ADVANCED_PAUSE_FEATURE)
 | 
			
		||||
 | 
			
		||||
  void ChangeFilament() {
 | 
			
		||||
    HMI_SaveProcessID(NothingToDo);
 | 
			
		||||
    queue.inject_P(PSTR("M600 B2"));
 | 
			
		||||
@@ -2348,7 +2305,8 @@ void SetSpeed() { SetPIntOnClick(MIN_PRINT_SPEED, MAX_PRINT_SPEED); }
 | 
			
		||||
      queue.inject_P(PSTR("M701 Z20"));
 | 
			
		||||
    }
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif // ADVANCED_PAUSE_FEATURE
 | 
			
		||||
 | 
			
		||||
void SetFlow() { SetPIntOnClick(MIN_PRINT_FLOW, MAX_PRINT_FLOW); }
 | 
			
		||||
 | 
			
		||||
@@ -2414,6 +2372,7 @@ void LevBedBL() { LevBed(3); }
 | 
			
		||||
void LevBedC () { LevBed(4); }
 | 
			
		||||
 | 
			
		||||
#if ENABLED(MESH_BED_LEVELING)
 | 
			
		||||
 | 
			
		||||
  void ManualMeshStart(){
 | 
			
		||||
    ui.set_status_P(GET_TEXT(MSG_UBL_BUILD_MESH_MENU));
 | 
			
		||||
    gcode.process_subcommands_now_P(PSTR("G28 XYO\nG28 Z\nM211 S0\nG29S1"));
 | 
			
		||||
@@ -2443,7 +2402,8 @@ void LevBedC () { LevBed(4); }
 | 
			
		||||
    ui.set_status_P(GET_TEXT(MSG_UBL_STORAGE_MESH_MENU));
 | 
			
		||||
    queue.inject_P(PSTR("M211 S1\nM500"));
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif // MESH_BED_LEVELING
 | 
			
		||||
 | 
			
		||||
#if HAS_PREHEAT
 | 
			
		||||
  #if HAS_HOTEND
 | 
			
		||||
@@ -2516,6 +2476,7 @@ void SetStepsZ() { HMI_value.axis = Z_AXIS, SetPFloatOnClick( MIN_STEP, MAX_STEP
 | 
			
		||||
    SetFloatOnClick(0, 1000, 2, value, ApplyPIDd);
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Menuitem Drawing functions =================================================
 | 
			
		||||
 | 
			
		||||
void onDrawMenuItem(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
@@ -2721,7 +2682,6 @@ void onDrawGetColorItem(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
void onDrawPIDi(MenuItemClass* menuitem, int8_t line) { onDrawFloatMenu(menuitem, line, 2, unscalePID_i(*(float*)static_cast<MenuItemPtrClass*>(menuitem)->value)); }
 | 
			
		||||
void onDrawPIDd(MenuItemClass* menuitem, int8_t line) { onDrawFloatMenu(menuitem, line, 2, unscalePID_d(*(float*)static_cast<MenuItemPtrClass*>(menuitem)->value)); }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void onDrawSpeedItem(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
  if (HMI_IsChinese()) menuitem->SetFrame(1, 116, 164, 171, 176);
 | 
			
		||||
  onDrawPIntMenu(menuitem, line);
 | 
			
		||||
@@ -2748,30 +2708,6 @@ void onDrawSpeedItem(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void onDrawSpeed(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
  if (HMI_IsChinese()) menuitem->SetFrame(1, 173, 133, 228, 147);
 | 
			
		||||
  onDrawSubMenu(menuitem, line);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void onDrawAcc(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
  if (HMI_IsChinese()) {
 | 
			
		||||
    menuitem->SetFrame(1, 173, 133, 200, 147);
 | 
			
		||||
    DWIN_Frame_AreaCopy(1, 28, 149, 69, 161, LBLX + 27, MBASE(line) + 1); // ...Acceleration
 | 
			
		||||
  }
 | 
			
		||||
  onDrawSubMenu(menuitem, line);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if HAS_CLASSIC_JERK
 | 
			
		||||
  void onDrawJerk(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
    if (HMI_IsChinese()) {
 | 
			
		||||
      menuitem->SetFrame(1, 173, 133, 200, 147);
 | 
			
		||||
      DWIN_Frame_AreaCopy(1, 1, 180, 28, 192, LBLX + 27, MBASE(line) + 1);  // ...
 | 
			
		||||
      DWIN_Frame_AreaCopy(1, 202, 133, 228, 147, LBLX + 54, MBASE(line));   // ...Jerk
 | 
			
		||||
    }
 | 
			
		||||
    onDrawSubMenu(menuitem, line);
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void onDrawSteps(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
  if (HMI_IsChinese()) menuitem->SetFrame(1, 153, 148, 194, 161);
 | 
			
		||||
  onDrawSubMenu(menuitem, line);
 | 
			
		||||
@@ -2786,10 +2722,10 @@ void onDrawSteps(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
 | 
			
		||||
#if HAS_PREHEAT
 | 
			
		||||
  #if HAS_HOTEND
 | 
			
		||||
      void onDrawSetPreheatHotend(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
        if (HMI_IsChinese()) menuitem->SetFrame(1, 1, 134, 56, 146);
 | 
			
		||||
        onDrawPIntMenu(menuitem, line);
 | 
			
		||||
      }
 | 
			
		||||
    void onDrawSetPreheatHotend(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
      if (HMI_IsChinese()) menuitem->SetFrame(1, 1, 134, 56, 146);
 | 
			
		||||
      onDrawPIntMenu(menuitem, line);
 | 
			
		||||
    }
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_HEATED_BED
 | 
			
		||||
    void onDrawSetPreheatBed(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
@@ -2811,7 +2747,13 @@ void onDrawSteps(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
    if (HMI_IsChinese()) menuitem->SetFrame(1, 180, 89, 260, 100);
 | 
			
		||||
    onDrawSubMenu(menuitem,line);
 | 
			
		||||
  }
 | 
			
		||||
#endif // HAS_HOTEND
 | 
			
		||||
#endif // HAS_PREHEAT
 | 
			
		||||
 | 
			
		||||
void onDrawSpeed(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
  if (HMI_IsChinese())
 | 
			
		||||
    menuitem->SetFrame(1, 173, 133, 228, 147);
 | 
			
		||||
  onDrawSubMenu(menuitem, line);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void onDrawMaxSpeedX(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
  if (HMI_IsChinese()) {
 | 
			
		||||
@@ -2847,9 +2789,17 @@ void onDrawMaxSpeedZ(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void onDrawAcc(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
  if (HMI_IsChinese()) {
 | 
			
		||||
    menuitem->SetFrame(1, 173, 133, 200, 147);
 | 
			
		||||
    DWIN_Frame_AreaCopy(1,  28, 149,  69, 161, LBLX + 27, MBASE(line) + 1); // ...Acceleration
 | 
			
		||||
  }
 | 
			
		||||
  onDrawSubMenu(menuitem, line);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void onDrawMaxAccelX(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
  if (HMI_IsChinese()) {
 | 
			
		||||
    menuitem->SetFrame (1, 173, 133, 200, 147);
 | 
			
		||||
    menuitem->SetFrame(1, 173, 133, 200, 147);
 | 
			
		||||
    DWIN_Frame_AreaCopy(1, 28,  149,  69, 161, LBLX + 27, MBASE(line));
 | 
			
		||||
    DWIN_Frame_AreaCopy(1, 229, 133, 236, 147, LBLX + 71, MBASE(line));      // X
 | 
			
		||||
  }
 | 
			
		||||
@@ -2858,7 +2808,7 @@ void onDrawMaxAccelX(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
 | 
			
		||||
void onDrawMaxAccelY(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
  if (HMI_IsChinese()) {
 | 
			
		||||
    menuitem->SetFrame (1, 173, 133, 200, 147);
 | 
			
		||||
    menuitem->SetFrame(1, 173, 133, 200, 147);
 | 
			
		||||
    DWIN_Frame_AreaCopy(1,  28, 149,  69, 161, LBLX + 27, MBASE(line));
 | 
			
		||||
    DWIN_Frame_AreaCopy(1,   1, 150,   7, 160, LBLX + 71, MBASE(line));          // Y
 | 
			
		||||
  }
 | 
			
		||||
@@ -2867,7 +2817,7 @@ void onDrawMaxAccelY(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
 | 
			
		||||
void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
  if (HMI_IsChinese()) {
 | 
			
		||||
    menuitem->SetFrame (1, 173, 133, 200, 147);
 | 
			
		||||
    menuitem->SetFrame(1, 173, 133, 200, 147);
 | 
			
		||||
    DWIN_Frame_AreaCopy(1,  28, 149,  69, 161, LBLX + 27, MBASE(line));
 | 
			
		||||
    DWIN_Frame_AreaCopy(1,   9, 150,  16, 160, LBLX + 71, MBASE(line));         // Z
 | 
			
		||||
  }
 | 
			
		||||
@@ -2877,7 +2827,7 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
#if HAS_HOTEND
 | 
			
		||||
  void onDrawMaxAccelE(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
    if (HMI_IsChinese()) {
 | 
			
		||||
      menuitem->SetFrame (1, 173, 133, 200, 147);
 | 
			
		||||
      menuitem->SetFrame(1, 173, 133, 200, 147);
 | 
			
		||||
      DWIN_Frame_AreaCopy(1,  28, 149,  69, 161, LBLX + 27, MBASE(line));
 | 
			
		||||
      DWIN_Frame_AreaCopy(1,  18, 150,  25, 160, LBLX + 71, MBASE(line));        // E
 | 
			
		||||
    }
 | 
			
		||||
@@ -2886,9 +2836,19 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if HAS_CLASSIC_JERK
 | 
			
		||||
 | 
			
		||||
  void onDrawJerk(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
    if (HMI_IsChinese()) {
 | 
			
		||||
      menuitem->SetFrame(1, 173, 133, 200, 147);
 | 
			
		||||
      DWIN_Frame_AreaCopy(1,   1, 180,  28, 192, LBLX + 27, MBASE(line) + 1);  // ...
 | 
			
		||||
      DWIN_Frame_AreaCopy(1, 202, 133, 228, 147, LBLX + 54, MBASE(line));   // ...Jerk
 | 
			
		||||
    }
 | 
			
		||||
    onDrawSubMenu(menuitem, line);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void onDrawMaxJerkX(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
    if (HMI_IsChinese()) {
 | 
			
		||||
      menuitem->SetFrame (1, 173, 133, 200, 147);
 | 
			
		||||
      menuitem->SetFrame(1, 173, 133, 200, 147);
 | 
			
		||||
      DWIN_Frame_AreaCopy(1,   1, 180,  28, 192, LBLX + 27, MBASE(line));
 | 
			
		||||
      DWIN_Frame_AreaCopy(1, 202, 133, 228, 147, LBLX + 53, MBASE(line));
 | 
			
		||||
      DWIN_Frame_AreaCopy(1, 229, 133, 236, 147, LBLX + 83, MBASE(line));
 | 
			
		||||
@@ -2898,7 +2858,7 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
 | 
			
		||||
  void onDrawMaxJerkY(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
    if (HMI_IsChinese()) {
 | 
			
		||||
      menuitem->SetFrame (1, 173, 133, 200, 147);
 | 
			
		||||
      menuitem->SetFrame(1, 173, 133, 200, 147);
 | 
			
		||||
      DWIN_Frame_AreaCopy(1,   1, 180,  28, 192, LBLX + 27, MBASE(line));
 | 
			
		||||
      DWIN_Frame_AreaCopy(1, 202, 133, 228, 147, LBLX + 53, MBASE(line));
 | 
			
		||||
      DWIN_Frame_AreaCopy(1,   1, 150,   7, 160, LBLX + 83, MBASE(line));
 | 
			
		||||
@@ -2908,7 +2868,7 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
 | 
			
		||||
  void onDrawMaxJerkZ(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
    if (HMI_IsChinese()) {
 | 
			
		||||
      menuitem->SetFrame (1, 173, 133, 200, 147);
 | 
			
		||||
      menuitem->SetFrame(1, 173, 133, 200, 147);
 | 
			
		||||
      DWIN_Frame_AreaCopy(1,   1, 180,  28, 192, LBLX + 27, MBASE(line));
 | 
			
		||||
      DWIN_Frame_AreaCopy(1, 202, 133, 228, 147, LBLX + 53, MBASE(line));
 | 
			
		||||
      DWIN_Frame_AreaCopy(1,   9, 150,  16, 160, LBLX + 83, MBASE(line));
 | 
			
		||||
@@ -2919,7 +2879,7 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
  #if HAS_HOTEND
 | 
			
		||||
    void onDrawMaxJerkE(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
      if (HMI_IsChinese()) {
 | 
			
		||||
        menuitem->SetFrame (1, 173, 133, 200, 147);
 | 
			
		||||
        menuitem->SetFrame(1, 173, 133, 200, 147);
 | 
			
		||||
        DWIN_Frame_AreaCopy(1,   1, 180,  28, 192, LBLX + 27, MBASE(line));
 | 
			
		||||
        DWIN_Frame_AreaCopy(1, 202, 133, 228, 147, LBLX + 53, MBASE(line));
 | 
			
		||||
        DWIN_Frame_AreaCopy(1,  18, 150,  25, 160, LBLX + 83, MBASE(line));
 | 
			
		||||
@@ -2927,11 +2887,12 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
      onDrawPFloatMenu(menuitem, line);
 | 
			
		||||
    }
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#endif // HAS_CLASSIC_JERK
 | 
			
		||||
 | 
			
		||||
void onDrawStepsX(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
  if (HMI_IsChinese()) {
 | 
			
		||||
    menuitem->SetFrame (1, 153, 148, 194, 161);
 | 
			
		||||
    menuitem->SetFrame(1, 153, 148, 194, 161);
 | 
			
		||||
    DWIN_Frame_AreaCopy(1, 229, 133, 236, 147, LBLX + 44, MBASE(line));      // X
 | 
			
		||||
  }
 | 
			
		||||
  onDrawPFloatMenu(menuitem, line);
 | 
			
		||||
@@ -2939,7 +2900,7 @@ void onDrawStepsX(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
 | 
			
		||||
void onDrawStepsY(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
  if (HMI_IsChinese()) {
 | 
			
		||||
    menuitem->SetFrame (1, 153, 148, 194, 161);
 | 
			
		||||
    menuitem->SetFrame(1, 153, 148, 194, 161);
 | 
			
		||||
    DWIN_Frame_AreaCopy(1,   1, 150,   7, 160, LBLX + 44, MBASE(line));      // Y
 | 
			
		||||
  }
 | 
			
		||||
  onDrawPFloatMenu(menuitem, line);
 | 
			
		||||
@@ -2947,7 +2908,7 @@ void onDrawStepsY(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
 | 
			
		||||
void onDrawStepsZ(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
  if (HMI_IsChinese()) {
 | 
			
		||||
    menuitem->SetFrame (1, 153, 148, 194, 161);
 | 
			
		||||
    menuitem->SetFrame(1, 153, 148, 194, 161);
 | 
			
		||||
    DWIN_Frame_AreaCopy(1,   9, 150,  16, 160, LBLX + 44, MBASE(line));      // Z
 | 
			
		||||
  }
 | 
			
		||||
  onDrawPFloatMenu(menuitem, line);
 | 
			
		||||
@@ -2956,7 +2917,7 @@ void onDrawStepsZ(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
#if HAS_HOTEND
 | 
			
		||||
  void onDrawStepsE(MenuItemClass* menuitem, int8_t line) {
 | 
			
		||||
    if (HMI_IsChinese()) {
 | 
			
		||||
      menuitem->SetFrame (1, 153, 148, 194, 161);
 | 
			
		||||
      menuitem->SetFrame(1, 153, 148, 194, 161);
 | 
			
		||||
      DWIN_Frame_AreaCopy(1,  18, 150,  25, 160, LBLX + 44, MBASE(line));    // E
 | 
			
		||||
    }
 | 
			
		||||
    onDrawPFloatMenu(menuitem, line);
 | 
			
		||||
@@ -2986,7 +2947,7 @@ int8_t HMI_GetIntNoDraw(const int32_t lo, const int32_t hi) {
 | 
			
		||||
  if (encoder_diffState != ENCODER_DIFF_NO) {
 | 
			
		||||
    if (Apply_Encoder(encoder_diffState, HMI_value.Value)) {
 | 
			
		||||
      EncoderRate.enabled = false;
 | 
			
		||||
      checkkey = last_checkkey;
 | 
			
		||||
      checkkey = Menu;
 | 
			
		||||
      return 2;
 | 
			
		||||
    }
 | 
			
		||||
    LIMIT(HMI_value.Value, lo, hi);
 | 
			
		||||
@@ -3008,7 +2969,7 @@ int8_t HMI_GetInt(const int32_t lo, const int32_t hi) {
 | 
			
		||||
    if (Apply_Encoder(encoder_diffState, HMI_value.Value)) {
 | 
			
		||||
      EncoderRate.enabled = false;
 | 
			
		||||
      DWINUI::Draw_Int(HMI_data.Text_Color, HMI_data.Background_Color, 4 , VALX, MBASE(CurrentMenu->line()) - 1, HMI_value.Value);
 | 
			
		||||
      checkkey = last_checkkey;
 | 
			
		||||
      checkkey = Menu;
 | 
			
		||||
      return 2;
 | 
			
		||||
    }
 | 
			
		||||
    LIMIT(HMI_value.Value, lo, hi);
 | 
			
		||||
@@ -3048,7 +3009,7 @@ void HMI_SetPInt() {
 | 
			
		||||
  } else if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Get an scaled float value using the encoder
 | 
			
		||||
// Get a scaled float value using the encoder
 | 
			
		||||
//  dp: decimal places
 | 
			
		||||
//  lo: scaled low limit
 | 
			
		||||
//  hi: scaled high limit
 | 
			
		||||
@@ -3062,7 +3023,7 @@ int8_t HMI_GetFloat(uint8_t dp, int32_t lo, int32_t hi) {
 | 
			
		||||
    if (Apply_Encoder(encoder_diffState, HMI_value.Value)) {
 | 
			
		||||
      EncoderRate.enabled = false;
 | 
			
		||||
      DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Background_Color, 3, dp, VALX - dp * DWINUI::Get_font_width(DWIN_FONT_MENU), MBASE(CurrentMenu->line()), HMI_value.Value / POW(10, dp));
 | 
			
		||||
      checkkey = last_checkkey;
 | 
			
		||||
      checkkey = Menu;
 | 
			
		||||
      return 2;
 | 
			
		||||
    }
 | 
			
		||||
    LIMIT(HMI_value.Value, lo, hi);
 | 
			
		||||
@@ -3072,38 +3033,34 @@ int8_t HMI_GetFloat(uint8_t dp, int32_t lo, int32_t hi) {
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Set an scaled float using the encoder
 | 
			
		||||
// Set a scaled float using the encoder
 | 
			
		||||
void HMI_SetFloat() {
 | 
			
		||||
  int8_t val = HMI_GetFloat(HMI_value.dp, HMI_value.MinValue, HMI_value.MaxValue);
 | 
			
		||||
  const int8_t val = HMI_GetFloat(HMI_value.dp, HMI_value.MinValue, HMI_value.MaxValue);
 | 
			
		||||
  switch (val) {
 | 
			
		||||
    case 0: return; break;
 | 
			
		||||
    case 0: return;
 | 
			
		||||
    case 1: if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate(); break;
 | 
			
		||||
    case 2: if (HMI_value.Apply != nullptr) HMI_value.Apply(); break;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Set an scaled float pointer variable using the encoder
 | 
			
		||||
// Set a scaled float pointer variable using the encoder
 | 
			
		||||
void HMI_SetPFloat() {
 | 
			
		||||
  int8_t val = HMI_GetFloat(HMI_value.dp, HMI_value.MinValue, HMI_value.MaxValue);
 | 
			
		||||
  const int8_t val = HMI_GetFloat(HMI_value.dp, HMI_value.MinValue, HMI_value.MaxValue);
 | 
			
		||||
  if (!val) return;
 | 
			
		||||
  else if (val == 2) {  // Apply
 | 
			
		||||
  if (val == 2) {  // Apply
 | 
			
		||||
    *HMI_value.P_Float = HMI_value.Value / POW(10, HMI_value.dp);
 | 
			
		||||
    if (HMI_value.Apply != nullptr) HMI_value.Apply();
 | 
			
		||||
  } else if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate();
 | 
			
		||||
  }
 | 
			
		||||
  else if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Menu Creation and Drawing functions ======================================================
 | 
			
		||||
 | 
			
		||||
void SetMenuTitle(frame_rect_t cn, frame_rect_t en, const __FlashStringHelper* text) {
 | 
			
		||||
    if (HMI_IsChinese() && (cn.w != 0))
 | 
			
		||||
      CurrentMenu->MenuTitle.SetFrame(cn.x, cn.y, cn.w, cn.h);
 | 
			
		||||
    else {
 | 
			
		||||
      #ifdef USE_STRING_HEADINGS
 | 
			
		||||
        CurrentMenu->MenuTitle.SetCaption(text);
 | 
			
		||||
      #else
 | 
			
		||||
        if (en.w != 0) CurrentMenu->MenuTitle.SetFrame(en.x, en.y, en.w, en.h);
 | 
			
		||||
      #endif
 | 
			
		||||
    }
 | 
			
		||||
  if (HMI_IsChinese() && (cn.w != 0))
 | 
			
		||||
    CurrentMenu->MenuTitle.SetFrame(cn.x, cn.y, cn.w, cn.h);
 | 
			
		||||
  else
 | 
			
		||||
    CurrentMenu->MenuTitle.SetCaption(text);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Draw_Prepare_Menu() {
 | 
			
		||||
@@ -3301,7 +3258,8 @@ void Draw_Move_Menu() {
 | 
			
		||||
    }
 | 
			
		||||
    CurrentMenu->Draw();
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
#endif // HAS_FILAMENT_SENSOR
 | 
			
		||||
 | 
			
		||||
void Draw_SelectColors_Menu() {
 | 
			
		||||
  checkkey = Menu;
 | 
			
		||||
  if (SelectColorMenu == nullptr) SelectColorMenu = new MenuClass();
 | 
			
		||||
@@ -3441,6 +3399,7 @@ void Draw_Motion_Menu() {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if HAS_PREHEAT
 | 
			
		||||
 | 
			
		||||
  void Draw_Preheat_Menu(frame_rect_t cn, frame_rect_t en, const __FlashStringHelper* text) {
 | 
			
		||||
    checkkey = Menu;
 | 
			
		||||
    if (CurrentMenu != PreheatMenu) {
 | 
			
		||||
@@ -3485,7 +3444,7 @@ void Draw_Motion_Menu() {
 | 
			
		||||
    }
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
#endif // HAS_PREHEAT
 | 
			
		||||
 | 
			
		||||
void Draw_Temperature_Menu() {
 | 
			
		||||
  checkkey = Menu;
 | 
			
		||||
@@ -3653,5 +3612,4 @@ void Draw_Steps_Menu() {
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // DWIN_CREALITY_LCD_ENHANCED
 | 
			
		||||
 
 | 
			
		||||
@@ -157,15 +157,9 @@ void Popup_Window_Resume();
 | 
			
		||||
void HMI_SDCardInit();
 | 
			
		||||
void HMI_SDCardUpdate();
 | 
			
		||||
 | 
			
		||||
// Main Process
 | 
			
		||||
//void Icon_print();
 | 
			
		||||
//void Icon_control();
 | 
			
		||||
//void Icon_leveling(bool value);
 | 
			
		||||
 | 
			
		||||
// Other
 | 
			
		||||
void Goto_PrintProcess();
 | 
			
		||||
void Goto_Main_Menu();
 | 
			
		||||
void update_variable();
 | 
			
		||||
void Draw_Select_Highlight(const bool sel);
 | 
			
		||||
void Draw_Status_Area(const bool with_update); // Status Area
 | 
			
		||||
void Draw_Main_Area();      // Redraw main area;
 | 
			
		||||
@@ -178,19 +172,15 @@ void HMI_ReturnScreen();    // Return to previous screen before popups
 | 
			
		||||
void ApplyExtMinT();
 | 
			
		||||
void HMI_SetLanguageCache(); // Set the languaje image cache
 | 
			
		||||
 | 
			
		||||
//void HMI_Leveling();    // Level the page
 | 
			
		||||
//void HMI_LevBedCorners();   // Tramming menu
 | 
			
		||||
//void HMI_Info();          // Information menu
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void HMI_Init();
 | 
			
		||||
void HMI_Popup();
 | 
			
		||||
void HMI_SaveProcessID(const uint8_t id);
 | 
			
		||||
void HMI_AudioFeedback(const bool success=true);
 | 
			
		||||
void EachMomentUpdate();
 | 
			
		||||
void update_variable();
 | 
			
		||||
void DWIN_HandleScreen();
 | 
			
		||||
void DWIN_Startup();
 | 
			
		||||
void DWIN_Update();
 | 
			
		||||
void EachMomentUpdate();
 | 
			
		||||
void DWIN_HandleScreen();
 | 
			
		||||
void DWIN_DrawStatusLine(const uint16_t color, const uint16_t bgcolor, const char *text);
 | 
			
		||||
void DWIN_StatusChanged(const char * const text);
 | 
			
		||||
void DWIN_StatusChanged_P(PGM_P const text);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user