CHAMBER integration to GLCD (#14981)

This commit is contained in:
Ludy 2019-09-07 11:52:57 +02:00 committed by Scott Lahteine
parent 94948d3dcb
commit 6172cd2528
2 changed files with 257 additions and 179 deletions

View file

@ -29,11 +29,14 @@
*/ */
#include "../../inc/MarlinConfig.h" #include "../../inc/MarlinConfig.h"
#include "ultralcd_DOGM.h"
#define BW(N) ((N + 7) / 8) #define BW(N) ((N + 7) / 8)
#if ENABLED(CUSTOM_STATUS_SCREEN_IMAGE) #if ENABLED(CUSTOM_STATUS_SCREEN_IMAGE) && DISABLED(STATUS_COMBINE_HEATERS)
#undef STATUS_HEATERS_X
#undef STATUS_BED_X
/** /**
* Custom _Statusscreen.h files can define: * Custom _Statusscreen.h files can define:
* - A custom logo image * - A custom logo image
@ -50,54 +53,26 @@
#endif #endif
#if ENABLED(STATUS_COMBINE_HEATERS)
#undef STATUS_HOTEND_ANIM
#undef STATUS_BED_ANIM
#endif
// //
// Default Status Screen Heater or Hotends bitmaps // Default Status Screen Heater or Hotends bitmaps
// //
#if !STATUS_HEATERS_WIDTH && !STATUS_HOTEND1_WIDTH #if !STATUS_HEATERS_WIDTH && !STATUS_HOTEND1_WIDTH
#if ENABLED(STATUS_COMBINE_HEATERS) #if ENABLED(STATUS_COMBINE_HEATERS)
#undef STATUS_HOTEND_ANIM
#undef STATUS_BED_ANIM
#define STATUS_HEATERS_XSPACE 24
// //
// Status Screen Combined Heater bitmaps // Status Screen Combined Heater bitmaps
// //
#if HAS_HEATED_BED && HOTENDS <= 4
#if HAS_HEATED_BED && HOTENDS == 0 #if HOTENDS == 1
#define STATUS_HEATERS_X 80
#endif
#if HAS_HEATED_BED && HOTENDS <= 3 #define STATUS_HEATERS_WIDTH 96
#define STATUS_BED_TEXT_X (STATUS_HEATERS_WIDTH - 10)
#define STATUS_BED_WIDTH 21
#if HOTENDS == 0
#define STATUS_HEATERS_WIDTH 21
const unsigned char status_heaters_bmp[] PROGMEM = {
B00000100,B00010000,B01000000,
B00000010,B00001000,B00100000,
B00000010,B00001000,B00100000,
B00000100,B00010000,B01000000,
B00001000,B00100000,B10000000,
B00010000,B01000001,B00000000,
B00010000,B01000001,B00000000,
B00001000,B00100000,B10000000,
B00000100,B00010000,B01000000,
B00000000,B00000000,B00000000,
B00011111,B11111111,B11111000,
B00011111,B11111111,B11111000
};
#elif HOTENDS == 1
#define STATUS_HEATERS_WIDTH 90
#define STATUS_BED_X 80
const unsigned char status_heaters_bmp[] PROGMEM = { const unsigned char status_heaters_bmp[] PROGMEM = {
B00011111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000100,B00010000,B01000000, B00011111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000100,B00010000,B01000000,
@ -116,7 +91,8 @@
#elif HOTENDS == 2 #elif HOTENDS == 2
#define STATUS_HEATERS_WIDTH 90 #define STATUS_HEATERS_WIDTH 96
#define STATUS_BED_TEXT_X (STATUS_HEATERS_WIDTH - 10)
const unsigned char status_heaters_bmp[] PROGMEM = { const unsigned char status_heaters_bmp[] PROGMEM = {
B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000100,B00010000,B01000000, B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000100,B00010000,B01000000,
@ -133,9 +109,10 @@
B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000000,B00000000,B00000000,B00011111,B11111111,B11111000 B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000000,B00000000,B00000000,B00011111,B11111111,B11111000
}; };
#else // HOTENDS > 2 #elif HOTENDS == 3
#define STATUS_HEATERS_WIDTH 90 #define STATUS_HEATERS_WIDTH 96
#define STATUS_BED_TEXT_X (STATUS_HEATERS_WIDTH - 10)
const unsigned char status_heaters_bmp[] PROGMEM = { const unsigned char status_heaters_bmp[] PROGMEM = {
B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00000100,B00010000,B01000000, B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00000100,B00010000,B01000000,
@ -152,13 +129,33 @@
B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00011111,B11111111,B11111000 B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00011111,B11111111,B11111000
}; };
#else // HOTENDS > 3
#define STATUS_HEATERS_WIDTH 120
#define STATUS_BED_TEXT_X (STATUS_HEATERS_WIDTH - 10)
const unsigned char status_heaters_bmp[] PROGMEM = {
B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00000100,B00010000,B01000000,
B00111110,B11110000,B00000000,B00111100,B11110000,B00000000,B00111100,B11110000,B00000000,B00111011,B01110000,B00000000,B00000010,B00001000,B00100000,
B00111100,B11110000,B00000000,B00111011,B01110000,B00000000,B00111011,B01110000,B00000000,B00111011,B01110000,B00000000,B00000010,B00001000,B00100000,
B00111010,B11110000,B00000000,B00111111,B01110000,B00000000,B00111111,B01110000,B00000000,B00111011,B01110000,B00000000,B00000100,B00010000,B01000000,
B00011110,B11100000,B00000000,B00011110,B11100000,B00000000,B00011100,B11100000,B00000000,B00011011,B01100000,B00000000,B00001000,B00100000,B10000000,
B00011110,B11100000,B00000000,B00011101,B11100000,B00000000,B00011111,B01100000,B00000000,B00011000,B00100000,B00000000,B00010000,B01000001,B00000000,
B00111110,B11110000,B00000000,B00111011,B11110000,B00000000,B00111011,B01110000,B00000000,B00111111,B01110000,B00000000,B00010000,B01000001,B00000000,
B00111110,B11110000,B00000000,B00111000,B01110000,B00000000,B00111100,B11110000,B00000000,B00111111,B01110000,B00000000,B00001000,B00100000,B10000000,
B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00000100,B00010000,B01000000,
B00001111,B11000000,B00000000,B00001111,B11000000,B00000000,B00001111,B11000000,B00000000,B00001111,B11000000,B00000000,B00000000,B00000000,B00000000,
B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B00011111,B11111111,B11111000,
B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00011111,B11111111,B11111000
};
#endif // HOTENDS #endif // HOTENDS
#else // !HAS_HEATED_BED || HOTENDS > 3 #else // !HAS_HEATED_BED || HOTENDS > 3
#if HOTENDS == 1 #if HOTENDS == 1
#define STATUS_HEATERS_WIDTH 11 #define STATUS_HEATERS_WIDTH 12
const unsigned char status_heaters_bmp[] PROGMEM = { const unsigned char status_heaters_bmp[] PROGMEM = {
B00011111,B11100000, B00011111,B11100000,
@ -213,7 +210,7 @@
B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000 B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000
}; };
#elif HOTENDS > 3 #elif HOTENDS == 4
#define STATUS_HEATERS_WIDTH 84 #define STATUS_HEATERS_WIDTH 84
@ -232,6 +229,25 @@
B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000 B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000
}; };
#elif HOTENDS > 4
#define STATUS_HEATERS_WIDTH 108
const unsigned char status_heaters_bmp[] PROGMEM = {
B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00011111,B11100000,
B00111110,B11110000,B00000000,B00111100,B11110000,B00000000,B00111100,B11110000,B00000000,B00111011,B01110000,B00000000,B00111000,B01110000,
B00111100,B11110000,B00000000,B00111011,B01110000,B00000000,B00111011,B01110000,B00000000,B00111011,B01110000,B00000000,B00111011,B11110000,
B00111010,B11110000,B00000000,B00111111,B01110000,B00000000,B00111111,B01110000,B00000000,B00111011,B01110000,B00000000,B00111000,B11110000,
B00011110,B11100000,B00000000,B00011110,B11100000,B00000000,B00011100,B11100000,B00000000,B00011011,B01100000,B00000000,B00011111,B01100000,
B00011110,B11100000,B00000000,B00011101,B11100000,B00000000,B00011111,B01100000,B00000000,B00011000,B00100000,B00000000,B00011111,B01100000,
B00111110,B11110000,B00000000,B00111011,B11110000,B00000000,B00111011,B01110000,B00000000,B00111111,B01110000,B00000000,B00111011,B01110000,
B00111110,B11110000,B00000000,B00111000,B01110000,B00000000,B00111100,B11110000,B00000000,B00111111,B01110000,B00000000,B00111100,B11110000,
B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00111111,B11110000,
B00001111,B11000000,B00000000,B00001111,B11000000,B00000000,B00001111,B11000000,B00000000,B00001111,B11000000,B00000000,B00001111,B11000000,
B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B00000111,B10000000,
B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000
};
#endif // HOTENDS #endif // HOTENDS
#endif // !HAS_HEATED_BED || HOTENDS > 3 #endif // !HAS_HEATED_BED || HOTENDS > 3
@ -241,10 +257,16 @@
// //
// Status Screen Hotends bitmaps // Status Screen Hotends bitmaps
// //
#if HOTENDS #if HOTENDS
#define STATUS_HOTEND1_WIDTH 12 #define STATUS_HOTEND1_WIDTH 16
#define MAX_HOTEND_BITMAPS 5
#if HOTENDS > MAX_HOTEND_BITMAPS
#define STATUS_HOTEND_BITMAPS MAX_HOTEND_BITMAPS
#else
#define STATUS_HOTEND_BITMAPS HOTENDS
#endif
#if HOTENDS == 1 || ENABLED(STATUS_HOTEND_NUMBERLESS) #if HOTENDS == 1 || ENABLED(STATUS_HOTEND_NUMBERLESS)
@ -286,17 +308,6 @@
#if HOTENDS >= 2 #if HOTENDS >= 2
#if HAS_HEATED_BED
#define MAX_HOTEND_BITMAPS 3
#else
#define MAX_HOTEND_BITMAPS 4
#endif
#if HOTENDS > MAX_HOTEND_BITMAPS
#define STATUS_HOTEND_BITMAPS MAX_HOTEND_BITMAPS
#else
#define STATUS_HOTEND_BITMAPS HOTENDS
#endif
#ifdef STATUS_HOTEND_ANIM #ifdef STATUS_HOTEND_ANIM
const unsigned char status_hotend1_a_bmp[] PROGMEM = { const unsigned char status_hotend1_a_bmp[] PROGMEM = {
@ -450,7 +461,7 @@
#endif #endif
#if STATUS_HOTEND_BITMAPS >= 4 && !HAS_HEATED_BED #if STATUS_HOTEND_BITMAPS >= 4
#ifdef STATUS_HOTEND_ANIM #ifdef STATUS_HOTEND_ANIM
@ -505,7 +516,7 @@
#endif #endif
#if STATUS_HOTEND_BITMAPS >= 5 && !HAS_HEATED_BED #if STATUS_HOTEND_BITMAPS >= 5
#ifdef STATUS_HOTEND_ANIM #ifdef STATUS_HOTEND_ANIM
@ -571,17 +582,16 @@
// //
// Default Status Screen Bed bitmaps // Default Status Screen Bed bitmaps
// //
#if !STATUS_BED_WIDTH && HAS_HEATED_BED && DISABLED(STATUS_COMBINE_HEATERS)
#if !STATUS_BED_WIDTH && DISABLED(STATUS_COMBINE_HEATERS) && HAS_HEATED_BED && HOTENDS < 4
#if ENABLED(STATUS_ALT_BED_BITMAP) #if ENABLED(STATUS_ALT_BED_BITMAP)
#define STATUS_BED_ANIM #define STATUS_BED_ANIM
#define STATUS_BED_WIDTH 24 #define STATUS_BED_WIDTH 24
#ifndef STATUS_BED_X #ifndef STATUS_BED_X
#define STATUS_BED_X 72 #define STATUS_BED_X (LCD_PIXEL_WIDTH - (STATUS_BED_BYTEWIDTH + STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH) * 8)
#endif #endif
#define STATUS_BED_TEXT_X (STATUS_BED_X + 13) #define STATUS_BED_TEXT_X (STATUS_BED_X + 11)
const unsigned char status_bed_bmp[] PROGMEM = { const unsigned char status_bed_bmp[] PROGMEM = {
B11111111,B11111111,B11000000, B11111111,B11111111,B11000000,
@ -612,7 +622,7 @@
#define STATUS_BED_WIDTH 21 #define STATUS_BED_WIDTH 21
#ifndef STATUS_BED_X #ifndef STATUS_BED_X
#define STATUS_BED_X 80 #define STATUS_BED_X (LCD_PIXEL_WIDTH - (STATUS_BED_BYTEWIDTH + STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH) * 8)
#endif #endif
#ifdef STATUS_BED_ANIM #ifdef STATUS_BED_ANIM
@ -657,81 +667,104 @@
#endif #endif
#endif #endif
#else
#define STATUS_BED_WIDTH 0
#endif
#endif // !STATUS_BED_WIDTH && !STATUS_COMBINE_HEATERS && HAS_HEATED_BED && HOTENDS < 4 #if !STATUS_CHAMBER_WIDTH && HAS_HEATED_CHAMBER && ((HOTENDS <= 4 && !HAS_HEATED_BED) || (HOTENDS <= 3 && HAS_HEATED_BED))
#if HAS_HEATED_CHAMBER #define STATUS_CHAMBER_WIDTH 21
#define STATUS_CHAMBER_WIDTH 16 #if STATUS_HEATERS_WIDTH
#if ENABLED(STATUS_COMBINE_HEATERS)
#define STATUS_CHAMBER_X (LCD_PIXEL_WIDTH - 2 - (STATUS_CHAMBER_BYTEWIDTH) * 8)
#elif HAS_FAN0 && HAS_HEATED_BED && HOTENDS <= 2
#define STATUS_CHAMBER_X (LCD_PIXEL_WIDTH - 2 - (STATUS_HEATERS_BYTEWIDTH - STATUS_CHAMBER_BYTEWIDTH) * 8)
#elif HAS_FAN0 && !HAS_HEATED_BED
#define STATUS_CHAMBER_X (LCD_PIXEL_WIDTH - (STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH) * 8)
#else
#define STATUS_CHAMBER_X (LCD_PIXEL_WIDTH - (STATUS_CHAMBER_BYTEWIDTH) * 8)
#endif
#endif
#ifdef STATUS_CHAMBER_ANIM #ifdef STATUS_CHAMBER_ANIM
const unsigned char status_chamber_bmp[] PROGMEM = { const unsigned char status_chamber_bmp[] PROGMEM = {
B11111111,B11111111, B00011111,B11111111,B11111000,
B10000000,B00000001, B00010000,B00000000,B00001000,
B10000000,B00000001, B00010000,B00000000,B00001000,
B10000000,B00000001, B00010000,B00000000,B00001000,
B10000000,B00000001, B00010000,B00000000,B00001000,
B10000000,B00000001, B00010000,B00000000,B00001000,
B10000000,B00000001, B00010000,B00000000,B00001000,
B10000000,B00000001, B00010000,B00000000,B00001000,
B10000000,B00000001, B00010000,B00000000,B00001000,
B10000000,B00000001, B00010000,B00000000,B00001000,
B11111111,B11111111, B00011111,B11111111,B11111000,
B11111111,B11111111 B00011111,B11111111,B11111000
}; };
const unsigned char status_chamber_on_bmp[] PROGMEM = { const unsigned char status_chamber_on_bmp[] PROGMEM = {
B11111111,B11111111, B00011111,B11111111,B11111000,
B10000000,B00000001, B00010000,B00000000,B00001000,
B10000100,B00100001, B00010000,B10000100,B00001000,
B10000010,B00010001, B00010000,B01000010,B00001000,
B10000010,B00010001, B00010000,B01000010,B00001000,
B10000100,B00100001, B00010000,B10000100,B00001000,
B10001000,B01000001, B00010001,B00001000,B00001000,
B10001000,B01000001, B00010001,B00001000,B00001000,
B10000100,B00100001, B00010000,B10000100,B00001000,
B10000000,B00000001, B00010000,B00000000,B00001000,
B11111111,B11111111, B00011111,B11111111,B11111000,
B11111111,B11111111 B00011111,B11111111,B11111000
}; };
#else #else
const unsigned char status_chamber_bmp[] PROGMEM = { const unsigned char status_chamber_bmp[] PROGMEM = {
B11111111,B11111111, B00011111,B11111111,B11111000,
B10000000,B00000001, B00010000,B00000000,B00001000,
B10000100,B00100001, B00010000,B10000100,B00001000,
B10000010,B00010001, B00010000,B01000010,B00001000,
B10000010,B00010001, B00010000,B01000010,B00001000,
B10000100,B00100001, B00010000,B10000100,B00001000,
B10001000,B01000001, B00010001,B00001000,B00001000,
B10001000,B01000001, B00010001,B00001000,B00001000,
B10000100,B00100001, B00010000,B10000100,B00001000,
B10000000,B00000001, B00010000,B00000000,B00001000,
B11111111,B11111111, B00011111,B11111111,B11111000,
B11111111,B11111111 B00011111,B11111111,B11111000
}; };
#endif #endif
#else // HAS_HEATED_CHAMBER
#define STATUS_CHAMBER_WIDTH 0
#endif
#endif // HAS_HEATED_CHAMBER #define BED_CHAM (HAS_HEATED_BED || HAS_HEATED_CHAMBER)
#define BED_CHAM_FAN (BED_CHAM || HAS_FAN0)
// Can also be overridden in Configuration.h // Can also be overridden in Configuration_adv.h
// If you can afford it, try the 3-frame fan animation! // If you can afford it, try the 3-frame fan animation!
// Don't compile in the fan animation with no fan // Don't compile in the fan animation with no fan
#if !HAS_FAN0 #if !HAS_FAN0 || (HOTENDS == 5 || (HOTENDS == 4 && BED_CHAM) || (ENABLED(STATUS_COMBINE_HEATERS) && HAS_HEATED_CHAMBER))
#undef STATUS_FAN_FRAMES #undef STATUS_FAN_FRAMES
#elif !defined(STATUS_FAN_FRAMES) #elif !STATUS_FAN_FRAMES
#define STATUS_FAN_FRAMES 2 #define STATUS_FAN_FRAMES 2
#elif STATUS_FAN_FRAMES > 4 #elif STATUS_FAN_FRAMES > 4
#error "A maximum of 4 fan animation frames is currently supported." #error "A maximum of 4 fan animation frames is currently supported."
#endif #endif
#if HOTENDS > 4
#undef STATUS_LOGO_WIDTH
#undef STATUS_HEATERS_XSPACE
#define STATUS_HEATERS_XSPACE 24
#endif
// //
// Provide default Fan Bitmaps // Provide default Fan Bitmaps
// //
#if !defined(STATUS_FAN_WIDTH) && STATUS_FAN_FRAMES > 0 #if !STATUS_FAN_WIDTH && STATUS_FAN_FRAMES > 0
// Provide a fan animation if none exists // Provide a fan animation if none exists
@ -836,7 +869,7 @@
#elif STATUS_FAN_FRAMES == 3 #elif STATUS_FAN_FRAMES == 3
#define STATUS_FAN_WIDTH 21 #define STATUS_FAN_WIDTH 20
#if ENABLED(STATUS_ALT_FAN_BITMAP) #if ENABLED(STATUS_ALT_FAN_BITMAP)
@ -974,7 +1007,7 @@
#elif STATUS_FAN_FRAMES == 4 #elif STATUS_FAN_FRAMES == 4
#define STATUS_FAN_WIDTH 21 #define STATUS_FAN_WIDTH 20
#if ENABLED(STATUS_ALT_FAN_BITMAP) #if ENABLED(STATUS_ALT_FAN_BITMAP)
@ -1153,6 +1186,35 @@
#endif // !STATUS_ALT_FAN_BITMAP #endif // !STATUS_ALT_FAN_BITMAP
#endif #endif
#else
#undef STATUS_FAN_FRAMES
#define STATUS_FAN_WIDTH 0
#endif
#if ENABLED(CUSTOM_STATUS_SCREEN_IMAGE)
#if STATUS_HOTEND1_WIDTH
#define HAS_SPACES ((LCD_PIXEL_WIDTH - (HOTENDS * STATUS_HOTEND1_WIDTH) - STATUS_BED_WIDTH - STATUS_CHAMBER_WIDTH - STATUS_FAN_WIDTH - 24) < STATUS_LOGO_WIDTH ? true : false)
#elif STATUS_HEATERS_WIDTH
#define HAS_SPACES (((LCD_PIXEL_WIDTH - STATUS_HEATERS_WIDTH - STATUS_BED_WIDTH - STATUS_CHAMBER_WIDTH - STATUS_FAN_WIDTH - 20) < STATUS_LOGO_WIDTH) ? true : false)
#endif
#if HAS_SPACES
#undef STATUS_LOGO_WIDTH
#endif
#if (HOTENDS > 1 && STATUS_LOGO_WIDTH && BED_CHAM_FAN) || ( HOTENDS >= 3 && !BED_CHAM_FAN)
#define _STATUS_HEATERS_X(H,S,N) (((LCD_PIXEL_WIDTH - (H * (S + N)) - STATUS_LOGO_WIDTH - STATUS_BED_WIDTH - STATUS_CHAMBER_WIDTH - STATUS_FAN_WIDTH) / 2) + STATUS_LOGO_WIDTH)
#if STATUS_HOTEND1_WIDTH
#if HOTENDS > 2
#define STATUS_HEATERS_X _STATUS_HEATERS_X(HOTENDS, STATUS_HOTEND1_WIDTH, 6)
#else
#define STATUS_HEATERS_X _STATUS_HEATERS_X(HOTENDS, STATUS_HOTEND1_WIDTH, 4)
#endif
#else
#define STATUS_HEATERS_X _STATUS_HEATERS_X(1, STATUS_HEATERS_WIDTH, 4)
#endif
#endif
#endif #endif
@ -1187,14 +1249,25 @@
#if STATUS_HOTEND1_WIDTH || STATUS_HEATERS_WIDTH #if STATUS_HOTEND1_WIDTH || STATUS_HEATERS_WIDTH
#ifndef STATUS_HEATERS_XSPACE #ifndef STATUS_HEATERS_XSPACE
#define STATUS_HEATERS_XSPACE 24 // Like the included bitmaps #if (HOTENDS == 3 || HOTENDS == 4) && ENABLED(STATUS_COMBINE_HEATERS)
#define STATUS_HEATERS_XSPACE 24
#else
#define STATUS_HEATERS_XSPACE 26 // Like the included bitmaps
#endif
#endif #endif
#ifndef STATUS_HEATERS_X #ifndef STATUS_HEATERS_X
#if STATUS_LOGO_BYTEWIDTH #if STATUS_LOGO_BYTEWIDTH
#define STATUS_HEATERS_X ((STATUS_LOGO_BYTEWIDTH + 0) * 8) #define STATUS_HEATERS_X (STATUS_LOGO_BYTEWIDTH * 8)
#elif ((STATUS_CHAMBER_WIDTH || STATUS_FAN_WIDTH) && (STATUS_BED_WIDTH && STATUS_HOTEND_BITMAPS == 3)) || \
((STATUS_CHAMBER_WIDTH || STATUS_FAN_WIDTH || STATUS_BED_WIDTH) && STATUS_HOTEND_BITMAPS == 4)
#define STATUS_HEATERS_X 5
#else #else
#define STATUS_HEATERS_X 8 // Like the included bitmaps #if ENABLED(STATUS_COMBINE_HEATERS) && HAS_HEATED_BED && HOTENDS <= 4
#define STATUS_HEATERS_X 5
#else
#define STATUS_HEATERS_X 8 // Like the included bitmaps
#endif
#endif #endif
#endif #endif
@ -1205,7 +1278,6 @@
// //
// Hotend images. A base hotend image and optional "ON" state image. // Hotend images. A base hotend image and optional "ON" state image.
// //
#ifndef STATUS_HOTEND_BITMAPS #ifndef STATUS_HOTEND_BITMAPS
#define STATUS_HOTEND_BITMAPS 1 #define STATUS_HOTEND_BITMAPS 1
#endif #endif
@ -1257,20 +1329,21 @@
#ifndef STATUS_HOTEND2_X #ifndef STATUS_HOTEND2_X
#define STATUS_HOTEND2_X STATUS_HOTEND1_X + STATUS_HEATERS_XSPACE #define STATUS_HOTEND2_X STATUS_HOTEND1_X + STATUS_HEATERS_XSPACE
#endif #endif
#ifndef STATUS_HOTEND3_X
#define STATUS_HOTEND3_X STATUS_HOTEND2_X + STATUS_HEATERS_XSPACE
#endif
#ifndef STATUS_HOTEND4_X
#define STATUS_HOTEND4_X STATUS_HOTEND3_X + STATUS_HEATERS_XSPACE
#endif
#ifndef STATUS_HOTEND5_X
#define STATUS_HOTEND5_X STATUS_HOTEND4_X + STATUS_HEATERS_XSPACE
#endif
#ifndef STATUS_HOTEND6_X
#define STATUS_HOTEND6_X STATUS_HOTEND5_X + STATUS_HEATERS_XSPACE
#endif
#if HOTENDS > 2 #if HOTENDS > 2
#ifndef STATUS_HOTEND3_X
#define STATUS_HOTEND3_X STATUS_HOTEND2_X + STATUS_HEATERS_XSPACE
#endif
#ifndef STATUS_HOTEND4_X
#define STATUS_HOTEND4_X STATUS_HOTEND3_X + STATUS_HEATERS_XSPACE
#endif
#ifndef STATUS_HOTEND5_X
#define STATUS_HOTEND5_X STATUS_HOTEND4_X + STATUS_HEATERS_XSPACE
#endif
#ifndef STATUS_HOTEND6_X
#define STATUS_HOTEND6_X STATUS_HOTEND5_X + STATUS_HEATERS_XSPACE
#endif
constexpr uint8_t status_hotend_x[HOTENDS] = ARRAY_N(HOTENDS, STATUS_HOTEND1_X, STATUS_HOTEND2_X, STATUS_HOTEND3_X, STATUS_HOTEND4_X, STATUS_HOTEND5_X, STATUS_HOTEND6_X); constexpr uint8_t status_hotend_x[HOTENDS] = ARRAY_N(HOTENDS, STATUS_HOTEND1_X, STATUS_HOTEND2_X, STATUS_HOTEND3_X, STATUS_HOTEND4_X, STATUS_HOTEND5_X, STATUS_HOTEND6_X);
#define STATUS_HOTEND_X(N) status_hotend_x[N] #define STATUS_HOTEND_X(N) status_hotend_x[N]
#elif HOTENDS > 1 #elif HOTENDS > 1
@ -1303,7 +1376,7 @@
#endif #endif
#endif #endif
#if STATUS_HOTEND_BITMAPS > 1 #if STATUS_HOTEND_BITMAPS > 1 && DISABLED(STATUS_HOTEND_NUMBERLESS)
#define TEST_BITMAP_OFF status_hotend1_a_bmp #define TEST_BITMAP_OFF status_hotend1_a_bmp
#define TEST_BITMAP_ON status_hotend1_b_bmp #define TEST_BITMAP_ON status_hotend1_b_bmp
#else #else
@ -1341,7 +1414,11 @@
#define STATUS_HOTEND_X(N) (STATUS_HEATERS_X + 2 + (N) * (STATUS_HEATERS_XSPACE)) #define STATUS_HOTEND_X(N) (STATUS_HEATERS_X + 2 + (N) * (STATUS_HEATERS_XSPACE))
#endif #endif
#ifndef STATUS_HOTEND_TEXT_X #ifndef STATUS_HOTEND_TEXT_X
#define STATUS_HOTEND_TEXT_X(N) (STATUS_HEATERS_X + 6 + (N) * (STATUS_HEATERS_XSPACE)) #if HOTENDS == 4 && STATUS_LOGO_WIDTH
#define STATUS_HOTEND_TEXT_X(N) (STATUS_HEATERS_X + 6 + (N) * (STATUS_HEATERS_XSPACE))
#else
#define STATUS_HOTEND_TEXT_X(N) (STATUS_HEATERS_X + 6 + (N) * (STATUS_HEATERS_XSPACE))
#endif
#endif #endif
#ifndef STATUS_HEATERS_BYTEWIDTH #ifndef STATUS_HEATERS_BYTEWIDTH
#define STATUS_HEATERS_BYTEWIDTH BW(STATUS_HEATERS_WIDTH) #define STATUS_HEATERS_BYTEWIDTH BW(STATUS_HEATERS_WIDTH)
@ -1363,16 +1440,13 @@
// //
// Chamber Bitmap Properties // Chamber Bitmap Properties
// //
#ifndef STATUS_CHAMBER_WIDTH
#define STATUS_CHAMBER_WIDTH 0
#endif
#ifndef STATUS_CHAMBER_BYTEWIDTH #ifndef STATUS_CHAMBER_BYTEWIDTH
#define STATUS_CHAMBER_BYTEWIDTH BW(STATUS_CHAMBER_WIDTH) #define STATUS_CHAMBER_BYTEWIDTH BW(STATUS_CHAMBER_WIDTH)
#endif #endif
#if STATUS_CHAMBER_WIDTH && !STATUS_HEATERS_WIDTH #if STATUS_CHAMBER_WIDTH
#ifndef STATUS_CHAMBER_X #ifndef STATUS_CHAMBER_X
#define STATUS_CHAMBER_X (128 - (STATUS_FAN_BYTEWIDTH + STATUS_CHAMBER_BYTEWIDTH) * 8) #define STATUS_CHAMBER_X (LCD_PIXEL_WIDTH - (STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH) * 8)
#endif #endif
#ifndef STATUS_CHAMBER_HEIGHT #ifndef STATUS_CHAMBER_HEIGHT
@ -1388,7 +1462,7 @@
#endif #endif
#ifndef STATUS_CHAMBER_TEXT_X #ifndef STATUS_CHAMBER_TEXT_X
#define STATUS_CHAMBER_TEXT_X (STATUS_CHAMBER_X + 7) #define STATUS_CHAMBER_TEXT_X (STATUS_CHAMBER_X + 11)
#endif #endif
static_assert( static_assert(
@ -1407,16 +1481,13 @@
// //
// Bed Bitmap Properties // Bed Bitmap Properties
// //
#ifndef STATUS_BED_WIDTH
#define STATUS_BED_WIDTH 0
#endif
#ifndef STATUS_BED_BYTEWIDTH #ifndef STATUS_BED_BYTEWIDTH
#define STATUS_BED_BYTEWIDTH BW(STATUS_BED_WIDTH) #define STATUS_BED_BYTEWIDTH BW(STATUS_BED_WIDTH)
#endif #endif
#if STATUS_BED_WIDTH && !STATUS_HEATERS_WIDTH #if STATUS_BED_WIDTH && !STATUS_HEATERS_WIDTH
#ifndef STATUS_BED_X #ifndef STATUS_BED_X
#define STATUS_BED_X (128 - (STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH + STATUS_BED_BYTEWIDTH) * 8) #define STATUS_BED_X (LCD_PIXEL_WIDTH - (STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH + STATUS_BED_BYTEWIDTH) * 8)
#endif #endif
#ifndef STATUS_BED_HEIGHT #ifndef STATUS_BED_HEIGHT
@ -1432,7 +1503,7 @@
#endif #endif
#ifndef STATUS_BED_TEXT_X #ifndef STATUS_BED_TEXT_X
#define STATUS_BED_TEXT_X (STATUS_BED_X + 11) #define STATUS_BED_TEXT_X (STATUS_BED_X + 9)
#endif #endif
static_assert( static_assert(
@ -1445,27 +1516,23 @@
"Status bed bitmap (status_bed_on_bmp) dimensions don't match data." "Status bed bitmap (status_bed_on_bmp) dimensions don't match data."
); );
#endif #endif
#endif #endif
// //
// Fan Bitmap Properties // Fan Bitmap Properties
// //
#ifndef STATUS_FAN_WIDTH
#define STATUS_FAN_WIDTH 0
#endif
#ifndef STATUS_FAN_BYTEWIDTH #ifndef STATUS_FAN_BYTEWIDTH
#define STATUS_FAN_BYTEWIDTH BW(STATUS_FAN_WIDTH) #define STATUS_FAN_BYTEWIDTH BW(STATUS_FAN_WIDTH)
#endif #endif
#if STATUS_FAN_FRAMES #if STATUS_FAN_FRAMES
#ifndef STATUS_FAN_X #ifndef STATUS_FAN_X
#define STATUS_FAN_X (128 - (STATUS_FAN_BYTEWIDTH) * 8) #define STATUS_FAN_X (LCD_PIXEL_WIDTH - (STATUS_FAN_BYTEWIDTH) * 8)
#endif #endif
#ifndef STATUS_FAN_Y #ifndef STATUS_FAN_Y
#define STATUS_FAN_Y 1 #define STATUS_FAN_Y 1
#endif #endif
#ifndef STATUS_FAN_TEXT_X #ifndef STATUS_FAN_TEXT_X
#define STATUS_FAN_TEXT_X 103 #define STATUS_FAN_TEXT_X (STATUS_FAN_X - 1)
#endif #endif
#ifndef STATUS_FAN_TEXT_Y #ifndef STATUS_FAN_TEXT_Y
#define STATUS_FAN_TEXT_Y 28 #define STATUS_FAN_TEXT_Y 28

View file

@ -63,13 +63,18 @@
#define EXTRAS_BASELINE (40 + INFO_FONT_ASCENT) #define EXTRAS_BASELINE (40 + INFO_FONT_ASCENT)
#define STATUS_BASELINE (LCD_PIXEL_HEIGHT - INFO_FONT_DESCENT) #define STATUS_BASELINE (LCD_PIXEL_HEIGHT - INFO_FONT_DESCENT)
#define DO_DRAW_BED (HAS_HEATED_BED && STATUS_BED_WIDTH && HOTENDS <= 3 && DISABLED(STATUS_COMBINE_HEATERS)) #define DO_DRAW_LOGO (STATUS_LOGO_WIDTH && ENABLED(CUSTOM_STATUS_SCREEN_IMAGE))
#define DO_DRAW_FAN (HAS_FAN0 && STATUS_FAN_WIDTH && STATUS_FAN_FRAMES) #define DO_DRAW_BED (HAS_HEATED_BED && STATUS_BED_WIDTH && HOTENDS <= 4)
#define DO_DRAW_CHAMBER (HAS_HEATED_CHAMBER && STATUS_CHAMBER_WIDTH && HOTENDS <= 4)
#define DO_DRAW_FAN (HAS_FAN0 && STATUS_FAN_WIDTH && HOTENDS <= 4 && defined(STATUS_FAN_FRAMES))
#define ANIM_HOTEND (HOTENDS && ENABLED(STATUS_HOTEND_ANIM)) #define ANIM_HOTEND (HOTENDS && ENABLED(STATUS_HOTEND_ANIM))
#define ANIM_BED (DO_DRAW_BED && ENABLED(STATUS_BED_ANIM)) #define ANIM_BED (DO_DRAW_BED && ENABLED(STATUS_BED_ANIM))
#define ANIM_CHAMBER (HAS_HEATED_CHAMBER && ENABLED(STATUS_CHAMBER_ANIM)) #define ANIM_CHAMBER (DO_DRAW_CHAMBER && ENABLED(STATUS_CHAMBER_ANIM))
#if ANIM_HOTEND || ANIM_BED #define ANIM_HBC (ANIM_HOTEND || ANIM_BED || ANIM_CHAMBER)
#if ANIM_HBC
uint8_t heat_bits; uint8_t heat_bits;
#endif #endif
#if ANIM_HOTEND #if ANIM_HOTEND
@ -109,7 +114,7 @@ FORCE_INLINE void _draw_heater_status(const heater_ind_t heater, const bool blin
UNUSED(blink); UNUSED(blink);
#endif #endif
#if HAS_HEATED_BED #if DO_DRAW_BED && DISABLED(STATUS_COMBINE_HEATERS) || (HAS_HEATED_BED && ENABLED(STATUS_COMBINE_HEATERS) && HOTENDS <= 4)
const bool isBed = heater < 0; const bool isBed = heater < 0;
#define IFBED(A,B) (isBed ? (A) : (B)) #define IFBED(A,B) (isBed ? (A) : (B))
#else #else
@ -125,11 +130,11 @@ FORCE_INLINE void _draw_heater_status(const heater_ind_t heater, const bool blin
const uint8_t tx = IFBED(STATUS_BED_TEXT_X, STATUS_HOTEND_TEXT_X(heater)); const uint8_t tx = IFBED(STATUS_BED_TEXT_X, STATUS_HOTEND_TEXT_X(heater));
#if ENABLED(MARLIN_DEV_MODE) #if ENABLED(MARLIN_DEV_MODE)
const float temp = 20 + (millis() >> 8) % IFBED(100, 200); const float temp = 20 + (millis() >> 8) % IFBED(100, 200),
const float target = IFBED(100, 200); target = IFBED(100, 200);
#else #else
const float temp = IFBED(thermalManager.degBed(), thermalManager.degHotend(heater)), const float temp = IFBED(thermalManager.degBed(), thermalManager.degHotend(heater)),
target = IFBED(thermalManager.degTargetBed(), thermalManager.degTargetHotend(heater)); target = IFBED(thermalManager.degTargetBed(), thermalManager.degTargetHotend(heater));
#endif #endif
#if DISABLED(STATUS_HOTEND_ANIM) #if DISABLED(STATUS_HOTEND_ANIM)
@ -140,7 +145,7 @@ FORCE_INLINE void _draw_heater_status(const heater_ind_t heater, const bool blin
#define HOTEND_DOT false #define HOTEND_DOT false
#endif #endif
#if HAS_HEATED_BED && DISABLED(STATUS_BED_ANIM) #if DO_DRAW_BED && DISABLED(STATUS_BED_ANIM)
#define STATIC_BED true #define STATIC_BED true
#define BED_DOT isHeat #define BED_DOT isHeat
#else #else
@ -148,7 +153,13 @@ FORCE_INLINE void _draw_heater_status(const heater_ind_t heater, const bool blin
#define BED_DOT false #define BED_DOT false
#endif #endif
#if ANIM_HOTEND && ENABLED(STATUS_HOTEND_INVERTED) #if ANIM_HOTEND && BOTH(STATUS_HOTEND_INVERTED, STATUS_HOTEND_NUMBERLESS)
#define OFF_BMP(N) status_hotend_b_bmp
#define ON_BMP(N) status_hotend_a_bmp
#elif ANIM_HOTEND && DISABLED(STATUS_HOTEND_INVERTED) && ENABLED(STATUS_HOTEND_NUMBERLESS)
#define OFF_BMP(N) status_hotend_a_bmp
#define ON_BMP(N) status_hotend_b_bmp
#elif ANIM_HOTEND && ENABLED(STATUS_HOTEND_INVERTED)
#define OFF_BMP(N) status_hotend##N##_b_bmp #define OFF_BMP(N) status_hotend##N##_b_bmp
#define ON_BMP(N) status_hotend##N##_a_bmp #define ON_BMP(N) status_hotend##N##_a_bmp
#else #else
@ -179,10 +190,11 @@ FORCE_INLINE void _draw_heater_status(const heater_ind_t heater, const bool blin
uint8_t tall = uint8_t(perc * BAR_TALL + 0.5f); uint8_t tall = uint8_t(perc * BAR_TALL + 0.5f);
NOMORE(tall, BAR_TALL); NOMORE(tall, BAR_TALL);
#ifdef STATUS_HOTEND_ANIM #if ANIM_HOTEND
// Draw hotend bitmap, either whole or split by the heating percent // Draw hotend bitmap, either whole or split by the heating percent
if (IFBED(0, 1)) { if (IFBED(0, 1)) {
const uint8_t hx = STATUS_HOTEND_X(heater), bw = STATUS_HOTEND_BYTEWIDTH(heater); const uint8_t hx = STATUS_HOTEND_X(heater),
bw = STATUS_HOTEND_BYTEWIDTH(heater);
#if ENABLED(STATUS_HEAT_PERCENT) #if ENABLED(STATUS_HEAT_PERCENT)
if (isHeat && tall <= BAR_TALL) { if (isHeat && tall <= BAR_TALL) {
const uint8_t ph = STATUS_HEATERS_HEIGHT - 1 - tall; const uint8_t ph = STATUS_HEATERS_HEIGHT - 1 - tall;
@ -196,10 +208,10 @@ FORCE_INLINE void _draw_heater_status(const heater_ind_t heater, const bool blin
#endif #endif
// Draw a heating progress bar, if specified // Draw a heating progress bar, if specified
#if ENABLED(STATUS_HEAT_PERCENT) #if DO_DRAW_BED && ENABLED(STATUS_HEAT_PERCENT)
if (IFBED(true, STATIC_HOTEND) && isHeat) { if (IFBED(true, STATIC_HOTEND) && isHeat) {
const uint8_t bx = IFBED(STATUS_BED_X + STATUS_BED_WIDTH, STATUS_HOTEND_X(heater) + STATUS_HOTEND_WIDTH(heater)) + 1; const uint8_t bx = IFBED(STATUS_BED_X + STATUS_BED_WIDTH - 1, STATUS_HOTEND_X(heater) + STATUS_HOTEND_WIDTH(heater)) + 1;
u8g.drawFrame(bx, STATUS_HEATERS_Y, 3, STATUS_HEATERS_HEIGHT); u8g.drawFrame(bx, STATUS_HEATERS_Y, 3, STATUS_HEATERS_HEIGHT);
if (tall) { if (tall) {
const uint8_t ph = STATUS_HEATERS_HEIGHT - 1 - tall; const uint8_t ph = STATUS_HEATERS_HEIGHT - 1 - tall;
@ -233,11 +245,16 @@ FORCE_INLINE void _draw_heater_status(const heater_ind_t heater, const bool blin
} }
#if HAS_HEATED_CHAMBER #if DO_DRAW_CHAMBER
FORCE_INLINE void _draw_chamber_status(const bool blink) { FORCE_INLINE void _draw_chamber_status(const bool blink) {
const float temp = thermalManager.degChamber(), #if ENABLED(MARLIN_DEV_MODE)
const float temp = 10 + (millis() >> 8) % CHAMBER_MAXTEMP,
target = CHAMBER_MAXTEMP;
#else
const float temp = thermalManager.degChamber(),
target = thermalManager.degTargetChamber(); target = thermalManager.degTargetChamber();
#endif
#if !HEATER_IDLE_HANDLER #if !HEATER_IDLE_HANDLER
UNUSED(blink); UNUSED(blink);
#endif #endif
@ -299,7 +316,7 @@ void MarlinUI::draw_status_screen() {
// At the first page, generate new display values // At the first page, generate new display values
if (first_page) { if (first_page) {
#if ANIM_HOTEND || ANIM_BED || ANIM_CHAMBER #if ANIM_HBC
uint8_t new_bits = 0; uint8_t new_bits = 0;
#if ANIM_HOTEND #if ANIM_HOTEND
HOTEND_LOOP() if (thermalManager.isHeatingHotend(e) ^ SHOW_ON_STATE) SBI(new_bits, e); HOTEND_LOOP() if (thermalManager.isHeatingHotend(e) ^ SHOW_ON_STATE) SBI(new_bits, e);
@ -307,14 +324,14 @@ void MarlinUI::draw_status_screen() {
#if ANIM_BED #if ANIM_BED
if (thermalManager.isHeatingBed() ^ SHOW_ON_STATE) SBI(new_bits, 7); if (thermalManager.isHeatingBed() ^ SHOW_ON_STATE) SBI(new_bits, 7);
#endif #endif
#if ANIM_CHAMBER #if DO_DRAW_CHAMBER
if (thermalManager.isHeatingChamber() ^ SHOW_ON_STATE) SBI(new_bits, 6); if (thermalManager.isHeatingChamber() ^ SHOW_ON_STATE) SBI(new_bits, 6);
#endif #endif
heat_bits = new_bits; heat_bits = new_bits;
#endif #endif
strcpy(xstring, ftostr4sign(LOGICAL_X_POSITION(current_position[X_AXIS]))); strcpy(xstring, ftostr4sign(LOGICAL_X_POSITION(current_position[X_AXIS])));
strcpy(ystring, ftostr4sign(LOGICAL_Y_POSITION(current_position[Y_AXIS]))); strcpy(ystring, ftostr4sign(LOGICAL_Y_POSITION(current_position[Y_AXIS])));
strcpy(zstring, ftostr52sp(LOGICAL_Z_POSITION(current_position[Z_AXIS]))); strcpy(zstring, ftostr52sp( LOGICAL_Z_POSITION(current_position[Z_AXIS])));
#if ENABLED(FILAMENT_LCD_DISPLAY) #if ENABLED(FILAMENT_LCD_DISPLAY)
strcpy(wstring, ftostr12ns(filament_width_meas)); strcpy(wstring, ftostr12ns(filament_width_meas));
strcpy(mstring, i16tostr3(100.0 * ( strcpy(mstring, i16tostr3(100.0 * (
@ -335,7 +352,7 @@ void MarlinUI::draw_status_screen() {
TCNT5 = 0; TCNT5 = 0;
#endif #endif
#if STATUS_LOGO_WIDTH #if DO_DRAW_LOGO
if (PAGE_CONTAINS(STATUS_LOGO_Y, STATUS_LOGO_Y + STATUS_LOGO_HEIGHT - 1)) if (PAGE_CONTAINS(STATUS_LOGO_Y, STATUS_LOGO_Y + STATUS_LOGO_HEIGHT - 1))
u8g.drawBitmapP(STATUS_LOGO_X, STATUS_LOGO_Y, STATUS_LOGO_BYTEWIDTH, STATUS_LOGO_HEIGHT, status_logo_bmp); u8g.drawBitmapP(STATUS_LOGO_X, STATUS_LOGO_Y, STATUS_LOGO_BYTEWIDTH, STATUS_LOGO_HEIGHT, status_logo_bmp);
#endif #endif
@ -346,13 +363,14 @@ void MarlinUI::draw_status_screen() {
u8g.drawBitmapP(STATUS_HEATERS_X, STATUS_HEATERS_Y, STATUS_HEATERS_BYTEWIDTH, STATUS_HEATERS_HEIGHT, status_heaters_bmp); u8g.drawBitmapP(STATUS_HEATERS_X, STATUS_HEATERS_Y, STATUS_HEATERS_BYTEWIDTH, STATUS_HEATERS_HEIGHT, status_heaters_bmp);
#endif #endif
#if DO_DRAW_BED #if DO_DRAW_BED && DISABLED(STATUS_COMBINE_HEATERS)
#if ANIM_BED #if ANIM_BED
#define BED_BITMAP(S) ((S) ? status_bed_on_bmp : status_bed_bmp) #define BED_BITMAP(S) ((S) ? status_bed_on_bmp : status_bed_bmp)
#else #else
#define BED_BITMAP(S) status_bed_bmp #define BED_BITMAP(S) status_bed_bmp
#endif #endif
const uint8_t bedy = STATUS_BED_Y(BED_ALT()), bedh = STATUS_BED_HEIGHT(BED_ALT()); const uint8_t bedy = STATUS_BED_Y(BED_ALT()),
bedh = STATUS_BED_HEIGHT(BED_ALT());
if (PAGE_CONTAINS(bedy, bedy + bedh - 1)) if (PAGE_CONTAINS(bedy, bedy + bedh - 1))
u8g.drawBitmapP(STATUS_BED_X, bedy, STATUS_BED_BYTEWIDTH, bedh, BED_BITMAP(BED_ALT())); u8g.drawBitmapP(STATUS_BED_X, bedy, STATUS_BED_BYTEWIDTH, bedh, BED_BITMAP(BED_ALT()));
#endif #endif
@ -363,12 +381,10 @@ void MarlinUI::draw_status_screen() {
#else #else
#define CHAMBER_BITMAP(S) status_chamber_bmp #define CHAMBER_BITMAP(S) status_chamber_bmp
#endif #endif
if (PAGE_CONTAINS(STATUS_CHAMBER_Y, STATUS_CHAMBER_Y + STATUS_CHAMBER_HEIGHT - 1)) const uint8_t chambery = STATUS_CHAMBER_Y(CHAMBER_ALT()),
u8g.drawBitmapP( chamberh = STATUS_CHAMBER_HEIGHT(CHAMBER_ALT());
STATUS_CHAMBER_X, STATUS_CHAMBER_Y, if (PAGE_CONTAINS(chambery, chambery + chamberh - 1))
STATUS_CHAMBER_BYTEWIDTH, STATUS_CHAMBER_HEIGHT, u8g.drawBitmapP(STATUS_CHAMBER_X, chambery, STATUS_CHAMBER_BYTEWIDTH, chamberh, CHAMBER_BITMAP(CHAMBER_ALT()));
CHAMBER_BITMAP(CHAMBER_ALT())
);
#endif #endif
#if DO_DRAW_FAN #if DO_DRAW_FAN
@ -381,9 +397,7 @@ void MarlinUI::draw_status_screen() {
} }
#endif #endif
if (PAGE_CONTAINS(STATUS_FAN_Y, STATUS_FAN_Y + STATUS_FAN_HEIGHT - 1)) if (PAGE_CONTAINS(STATUS_FAN_Y, STATUS_FAN_Y + STATUS_FAN_HEIGHT - 1))
u8g.drawBitmapP( u8g.drawBitmapP(STATUS_FAN_X, STATUS_FAN_Y, STATUS_FAN_BYTEWIDTH, STATUS_FAN_HEIGHT,
STATUS_FAN_X, STATUS_FAN_Y,
STATUS_FAN_BYTEWIDTH, STATUS_FAN_HEIGHT,
#if STATUS_FAN_FRAMES > 2 #if STATUS_FAN_FRAMES > 2
fan_frame == 1 ? status_fan1_bmp : fan_frame == 1 ? status_fan1_bmp :
fan_frame == 2 ? status_fan2_bmp : fan_frame == 2 ? status_fan2_bmp :
@ -400,18 +414,17 @@ void MarlinUI::draw_status_screen() {
// //
// Temperature Graphics and Info // Temperature Graphics and Info
// //
if (PAGE_UNDER(6 + 1 + 12 + 1 + 6 + 1)) { if (PAGE_UNDER(6 + 1 + 12 + 1 + 6 + 1)) {
// Extruders // Extruders
for (uint8_t e = 0; e < MAX_HOTEND_DRAW; ++e) for (uint8_t e = 0; e < MAX_HOTEND_DRAW; ++e)
_draw_heater_status((heater_ind_t)e, blink); _draw_heater_status((heater_ind_t)e, blink);
// Heated bed // Heated bed
#if HAS_HEATED_BED && HOTENDS < 4 #if DO_DRAW_BED && DISABLED(STATUS_COMBINE_HEATERS) || (HAS_HEATED_BED && ENABLED(STATUS_COMBINE_HEATERS) && HOTENDS <= 4)
_draw_heater_status(H_BED, blink); _draw_heater_status(H_BED, blink);
#endif #endif
#if HAS_HEATED_CHAMBER #if DO_DRAW_CHAMBER
_draw_chamber_status(blink); _draw_chamber_status(blink);
#endif #endif
@ -575,7 +588,6 @@ void MarlinUI::draw_status_screen() {
// //
// Feedrate // Feedrate
// //
#define EXTRAS_2_BASELINE (EXTRAS_BASELINE + 3) #define EXTRAS_2_BASELINE (EXTRAS_BASELINE + 3)
if (PAGE_CONTAINS(EXTRAS_2_BASELINE - INFO_FONT_ASCENT, EXTRAS_2_BASELINE - 1)) { if (PAGE_CONTAINS(EXTRAS_2_BASELINE - INFO_FONT_ASCENT, EXTRAS_2_BASELINE - 1)) {
@ -602,7 +614,6 @@ void MarlinUI::draw_status_screen() {
// //
// Status line // Status line
// //
if (PAGE_CONTAINS(STATUS_BASELINE - INFO_FONT_ASCENT, STATUS_BASELINE + INFO_FONT_DESCENT)) { if (PAGE_CONTAINS(STATUS_BASELINE - INFO_FONT_ASCENT, STATUS_BASELINE + INFO_FONT_DESCENT)) {
lcd_moveto(0, STATUS_BASELINE); lcd_moveto(0, STATUS_BASELINE);