diff --git a/Marlin/duration_t.h b/Marlin/duration_t.h
index 926fc1360dd082c8ee3d619329204887e78ca61f..1123b4bc4f20dab0e8804e7708e6dd8ad6b63b14 100644
--- a/Marlin/duration_t.h
+++ b/Marlin/duration_t.h
@@ -145,15 +145,22 @@ struct duration_t {
* 99:59
* 11d 12:33
*/
- void toDigital(char *buffer, bool with_days=false) const {
+ uint8_t toDigital(char *buffer, bool with_days=false) const {
uint16_t h = uint16_t(this->hour()),
m = uint16_t(this->minute() % 60UL);
- if (with_days)
- sprintf_P(buffer, PSTR("%ud %02u:%02u"), this->day(), h, m);
- else if (h < 100)
+ if (with_days) {
+ uint16_t d = this->day();
+ sprintf_P(buffer, PSTR("%ud %02u:%02u"), d, h, m);
+ return d >= 10 ? 8 : 7;
+ }
+ else if (h < 100) {
sprintf_P(buffer, PSTR("%02u:%02u"), h % 24, m);
- else
+ return 5;
+ }
+ else {
sprintf_P(buffer, PSTR("%u:%02u"), h, m);
+ return 6;
+ }
}
};
diff --git a/Marlin/ultralcd_impl_DOGM.h b/Marlin/ultralcd_impl_DOGM.h
index 50956b62b406e8138309eddc918dbd21ec56f1d7..0b943bad4af37c40170dec966021922433144d42 100644
--- a/Marlin/ultralcd_impl_DOGM.h
+++ b/Marlin/ultralcd_impl_DOGM.h
@@ -452,8 +452,14 @@ static void lcd_implementation_status_screen() {
// Progress bar frame
//
- if (PAGE_CONTAINS(49, 52 - (TALL_FONT_CORRECTION)))
- u8g.drawFrame(54, 49, 73, 4 - (TALL_FONT_CORRECTION)); // 49-52 (or 49-51)
+ #define PROGRESS_BAR_X 54
+ #define PROGRESS_BAR_WIDTH (LCD_PIXEL_WIDTH - PROGRESS_BAR_X)
+
+ if (PAGE_CONTAINS(49, 52 - (TALL_FONT_CORRECTION))) // 49-52 (or 49-51)
+ u8g.drawFrame(
+ PROGRESS_BAR_X, 49,
+ PROGRESS_BAR_WIDTH, 4 - (TALL_FONT_CORRECTION)
+ );
if (IS_SD_PRINTING) {
@@ -461,8 +467,11 @@ static void lcd_implementation_status_screen() {
// Progress bar solid part
//
- if (PAGE_CONTAINS(50, 51 - (TALL_FONT_CORRECTION)))
- u8g.drawBox(55, 50, (unsigned int)(71 * card.percentDone() * 0.01), 2 - (TALL_FONT_CORRECTION));
+ if (PAGE_CONTAINS(50, 51 - (TALL_FONT_CORRECTION))) // 50-51 (or just 50)
+ u8g.drawBox(
+ PROGRESS_BAR_X + 1, 50,
+ (unsigned int)((PROGRESS_BAR_WIDTH - 2) * card.percentDone() * 0.01), 2 - (TALL_FONT_CORRECTION)
+ );
//
// SD Percent Complete
@@ -483,9 +492,9 @@ static void lcd_implementation_status_screen() {
//
#if DISABLED(DOGM_SD_PERCENT)
- #define SD_DURATION_X 71
+ #define SD_DURATION_X (PROGRESS_BAR_X + (PROGRESS_BAR_WIDTH / 2) - len * (DOG_CHAR_WIDTH / 2))
#else
- #define SD_DURATION_X 89
+ #define SD_DURATION_X (LCD_PIXEL_WIDTH - len * DOG_CHAR_WIDTH)
#endif
if (PAGE_CONTAINS(41, 48)) {
@@ -493,9 +502,8 @@ static void lcd_implementation_status_screen() {
char buffer[10];
duration_t elapsed = print_job_timer.duration();
bool has_days = (elapsed.value > 60*60*24L);
- elapsed.toDigital(buffer, has_days);
-
- u8g.setPrintPos(SD_DURATION_X + (has_days ? 0 : 9), 48);
+ uint8_t len = elapsed.toDigital(buffer, has_days);
+ u8g.setPrintPos(SD_DURATION_X, 48);
lcd_print(buffer);
}
@@ -749,11 +757,12 @@ static void lcd_implementation_status_screen() {
#define lcd_implementation_drawmenu_setting_edit_callback_bool(sel, row, pstr, pstr2, data, callback) lcd_implementation_drawmenu_setting_edit_generic_P(sel, row, pstr, (*(data))?PSTR(MSG_ON):PSTR(MSG_OFF))
void lcd_implementation_drawedit(const char* const pstr, const char* const value=NULL) {
- const uint8_t labellen = lcd_strlen_P(pstr), vallen = lcd_strlen(value);
- uint8_t lcd_width, char_width,
- rows = (labellen > LCD_WIDTH - 2 - vallen) ? 2 : 1;
+ const uint8_t labellen = lcd_strlen_P(pstr),
+ vallen = lcd_strlen(value),
+ rows = (labellen > LCD_WIDTH - 2 - vallen) ? 2 : 1;
#if ENABLED(USE_BIG_EDIT_FONT)
+ uint8_t lcd_width, char_width;
if (labellen <= LCD_WIDTH_EDIT - 1) {
if (labellen >= LCD_WIDTH_EDIT - vallen) rows = 2;
lcd_width = LCD_WIDTH_EDIT + 1;
@@ -766,8 +775,8 @@ static void lcd_implementation_status_screen() {
lcd_setFont(FONT_MENU);
}
#else
- lcd_width = LCD_WIDTH - (START_COL);
- char_width = DOG_CHAR_WIDTH;
+ constexpr uint8_t lcd_width = LCD_WIDTH - (START_COL),
+ char_width = DOG_CHAR_WIDTH;
#endif
// Center either one or two rows
diff --git a/Marlin/ultralcd_impl_HD44780.h b/Marlin/ultralcd_impl_HD44780.h
index 8f97b28cfb4d416654adff69deee8dfd18e356e7..a5efb0e09ec9268d9c9c5d406ea6cbbab48fc7d7 100644
--- a/Marlin/ultralcd_impl_HD44780.h
+++ b/Marlin/ultralcd_impl_HD44780.h
@@ -733,12 +733,12 @@ static void lcd_implementation_status_screen() {
#endif // LCD_WIDTH >= 20 && SDSUPPORT
- lcd.setCursor(LCD_WIDTH - 6, 2);
- lcd.print(LCD_STR_CLOCK[0]);
-
char buffer[10];
duration_t elapsed = print_job_timer.duration();
- elapsed.toDigital(buffer);
+ uint8_t len = elapsed.toDigital(buffer);
+
+ lcd.setCursor(LCD_WIDTH - len - 1, 2);
+ lcd.print(LCD_STR_CLOCK[0]);
lcd_print(buffer);
#endif // LCD_HEIGHT > 3