diff --git a/Marlin/ultralcd_implementation_hitachi_HD44780.h b/Marlin/ultralcd_implementation_hitachi_HD44780.h index a0efa4be5..7c2d76223 100644 --- a/Marlin/ultralcd_implementation_hitachi_HD44780.h +++ b/Marlin/ultralcd_implementation_hitachi_HD44780.h @@ -445,6 +445,13 @@ unsigned lcd_print(char c) { return charset_mapper(c); } } } + inline void logo_lines(const char *extra) { + int indent = (LCD_WIDTH - 8 - lcd_strlen_P(extra)) / 2; + lcd.setCursor(indent, 0); lcd.print('\x00'); lcd_printPGM(PSTR( "------" )); lcd.print('\x01'); + lcd.setCursor(indent, 1); lcd_printPGM(PSTR("|Marlin|")); lcd_printPGM(extra); + lcd.setCursor(indent, 2); lcd.print('\x02'); lcd_printPGM(PSTR( "------" )); lcd.print('\x03'); + } + static void bootscreen() { show_bootscreen = false; byte top_left[8] = { @@ -494,22 +501,44 @@ unsigned lcd_print(char c) { return charset_mapper(c); } lcd.clear(); - #define TEXT_SCREEN_LOGO_SHIFT ((LCD_WIDTH/2) - 4) - lcd.setCursor(TEXT_SCREEN_LOGO_SHIFT, 0); lcd.print('\x00'); lcd_printPGM(PSTR( "------" )); lcd.print('\x01'); - lcd.setCursor(TEXT_SCREEN_LOGO_SHIFT, 1); lcd_printPGM(PSTR("|Marlin|")); - lcd.setCursor(TEXT_SCREEN_LOGO_SHIFT, 2); lcd.print('\x02'); lcd_printPGM(PSTR( "------" )); lcd.print('\x03'); - - delay(2000); + #define LCD_EXTRA_SPACE (LCD_WIDTH-8) #ifdef STRING_SPLASH_LINE1 - lcd_erase_line(3); - lcd_scroll(0, 3, PSTR(STRING_SPLASH_LINE1), LCD_WIDTH, 1000); + // Combine into a single splash screen if possible + if (LCD_EXTRA_SPACE >= strlen(STRING_SPLASH_LINE1) + 1) { + logo_lines(PSTR(" " STRING_SPLASH_LINE1)); + #ifdef STRING_SPLASH_LINE2 + lcd_erase_line(3); + lcd_scroll(0, 3, PSTR(STRING_SPLASH_LINE2), LCD_WIDTH, 2000); + #else + delay(2000); + #endif + } + else { + logo_lines(PSTR("")); + lcd_erase_line(3); + lcd_scroll(0, 3, PSTR(STRING_SPLASH_LINE1), LCD_WIDTH, 1500); + #ifdef STRING_SPLASH_LINE2 + lcd_erase_line(3); + lcd_scroll(0, 3, PSTR(STRING_SPLASH_LINE2), LCD_WIDTH, 1500); + #endif + } + #elif defined(STRING_SPLASH_LINE2) + // Combine into a single splash screen if possible + if (LCD_EXTRA_SPACE >= strlen(STRING_SPLASH_LINE2) + 1) { + logo_lines(PSTR(" " STRING_SPLASH_LINE2)); + delay(2000); + } + else { + logo_lines(PSTR("")); + lcd_erase_line(3); + lcd_scroll(0, 3, PSTR(STRING_SPLASH_LINE2), LCD_WIDTH, 2000); + } + #else + logo_lines(PSTR("")); + delay(2000); #endif - #ifdef STRING_SPLASH_LINE2 - lcd_erase_line(3); - lcd_scroll(0, 3, PSTR(STRING_SPLASH_LINE2), LCD_WIDTH, 1000); - #endif } #endif // SHOW_BOOTSCREEN