Browse Source

CHAMBER integration to GLCD (#14981)

Ludy 5 years ago
parent
commit
6172cd2528
2 changed files with 257 additions and 179 deletions
  1. 210
    143
      Marlin/src/lcd/dogm/dogm_Statusscreen.h
  2. 47
    36
      Marlin/src/lcd/dogm/status_screen_DOGM.cpp

+ 210
- 143
Marlin/src/lcd/dogm/dogm_Statusscreen.h View File

@@ -29,11 +29,14 @@
29 29
  */
30 30
 
31 31
 #include "../../inc/MarlinConfig.h"
32
+#include "ultralcd_DOGM.h"
32 33
 
33 34
 #define BW(N) ((N + 7) / 8)
34 35
 
35
-#if ENABLED(CUSTOM_STATUS_SCREEN_IMAGE)
36
+#if ENABLED(CUSTOM_STATUS_SCREEN_IMAGE) && DISABLED(STATUS_COMBINE_HEATERS)
36 37
 
38
+  #undef STATUS_HEATERS_X
39
+  #undef STATUS_BED_X
37 40
   /**
38 41
    * Custom _Statusscreen.h files can define:
39 42
    * - A custom logo image
@@ -50,54 +53,26 @@
50 53
 
51 54
 #endif
52 55
 
53
-#if ENABLED(STATUS_COMBINE_HEATERS)
54
-  #undef STATUS_HOTEND_ANIM
55
-  #undef STATUS_BED_ANIM
56
-#endif
57
-
58 56
 //
59 57
 // Default Status Screen Heater or Hotends bitmaps
60 58
 //
61
-
62 59
 #if !STATUS_HEATERS_WIDTH && !STATUS_HOTEND1_WIDTH
63 60
 
64 61
   #if ENABLED(STATUS_COMBINE_HEATERS)
65 62
 
63
+    #undef STATUS_HOTEND_ANIM
64
+    #undef STATUS_BED_ANIM
65
+    #define STATUS_HEATERS_XSPACE 24
66
+
66 67
     //
67 68
     // Status Screen Combined Heater bitmaps
68 69
     //
70
+    #if HAS_HEATED_BED && HOTENDS <= 4
69 71
 
70
-    #if HAS_HEATED_BED && HOTENDS == 0
71
-      #define STATUS_HEATERS_X 80
72
-    #endif
73
-
74
-    #if HAS_HEATED_BED && HOTENDS <= 3
75
-
76
-      #define STATUS_BED_WIDTH  21
77
-
78
-      #if HOTENDS == 0
79
-
80
-        #define STATUS_HEATERS_WIDTH  21
81
-
82
-        const unsigned char status_heaters_bmp[] PROGMEM = {
83
-          B00000100,B00010000,B01000000,
84
-          B00000010,B00001000,B00100000,
85
-          B00000010,B00001000,B00100000,
86
-          B00000100,B00010000,B01000000,
87
-          B00001000,B00100000,B10000000,
88
-          B00010000,B01000001,B00000000,
89
-          B00010000,B01000001,B00000000,
90
-          B00001000,B00100000,B10000000,
91
-          B00000100,B00010000,B01000000,
92
-          B00000000,B00000000,B00000000,
93
-          B00011111,B11111111,B11111000,
94
-          B00011111,B11111111,B11111000
95
-        };
96
-
97
-      #elif HOTENDS == 1
72
+      #if HOTENDS == 1
98 73
 
99
-        #define STATUS_HEATERS_WIDTH  90
100
-        #define STATUS_BED_X 80
74
+        #define STATUS_HEATERS_WIDTH 96
75
+        #define STATUS_BED_TEXT_X   (STATUS_HEATERS_WIDTH - 10)
101 76
 
102 77
         const unsigned char status_heaters_bmp[] PROGMEM = {
103 78
           B00011111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000100,B00010000,B01000000,
@@ -116,7 +91,8 @@
116 91
 
117 92
       #elif HOTENDS == 2
118 93
 
119
-        #define STATUS_HEATERS_WIDTH  90
94
+        #define STATUS_HEATERS_WIDTH 96
95
+        #define STATUS_BED_TEXT_X   (STATUS_HEATERS_WIDTH - 10)
120 96
 
121 97
         const unsigned char status_heaters_bmp[] PROGMEM = {
122 98
           B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000100,B00010000,B01000000,
@@ -133,9 +109,10 @@
133 109
           B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000000,B00000000,B00000000,B00011111,B11111111,B11111000
134 110
         };
135 111
 
136
-      #else // HOTENDS > 2
112
+      #elif HOTENDS == 3
137 113
 
138
-        #define STATUS_HEATERS_WIDTH  90
114
+        #define STATUS_HEATERS_WIDTH 96
115
+        #define STATUS_BED_TEXT_X   (STATUS_HEATERS_WIDTH - 10)
139 116
 
140 117
         const unsigned char status_heaters_bmp[] PROGMEM = {
141 118
           B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00000100,B00010000,B01000000,
@@ -152,13 +129,33 @@
152 129
           B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00011111,B11111111,B11111000
153 130
         };
154 131
 
132
+      #else // HOTENDS > 3
133
+
134
+        #define STATUS_HEATERS_WIDTH 120
135
+        #define STATUS_BED_TEXT_X   (STATUS_HEATERS_WIDTH - 10)
136
+
137
+        const unsigned char status_heaters_bmp[] PROGMEM = {
138
+          B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00000100,B00010000,B01000000,
139
+          B00111110,B11110000,B00000000,B00111100,B11110000,B00000000,B00111100,B11110000,B00000000,B00111011,B01110000,B00000000,B00000010,B00001000,B00100000,
140
+          B00111100,B11110000,B00000000,B00111011,B01110000,B00000000,B00111011,B01110000,B00000000,B00111011,B01110000,B00000000,B00000010,B00001000,B00100000,
141
+          B00111010,B11110000,B00000000,B00111111,B01110000,B00000000,B00111111,B01110000,B00000000,B00111011,B01110000,B00000000,B00000100,B00010000,B01000000,
142
+          B00011110,B11100000,B00000000,B00011110,B11100000,B00000000,B00011100,B11100000,B00000000,B00011011,B01100000,B00000000,B00001000,B00100000,B10000000,
143
+          B00011110,B11100000,B00000000,B00011101,B11100000,B00000000,B00011111,B01100000,B00000000,B00011000,B00100000,B00000000,B00010000,B01000001,B00000000,
144
+          B00111110,B11110000,B00000000,B00111011,B11110000,B00000000,B00111011,B01110000,B00000000,B00111111,B01110000,B00000000,B00010000,B01000001,B00000000,
145
+          B00111110,B11110000,B00000000,B00111000,B01110000,B00000000,B00111100,B11110000,B00000000,B00111111,B01110000,B00000000,B00001000,B00100000,B10000000,
146
+          B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00000100,B00010000,B01000000,
147
+          B00001111,B11000000,B00000000,B00001111,B11000000,B00000000,B00001111,B11000000,B00000000,B00001111,B11000000,B00000000,B00000000,B00000000,B00000000,
148
+          B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B00011111,B11111111,B11111000,
149
+          B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00011111,B11111111,B11111000
150
+        };
151
+
155 152
       #endif // HOTENDS
156 153
 
157 154
     #else // !HAS_HEATED_BED || HOTENDS > 3
158 155
 
159 156
       #if HOTENDS == 1
160 157
 
161
-        #define STATUS_HEATERS_WIDTH  11
158
+        #define STATUS_HEATERS_WIDTH  12
162 159
 
163 160
         const unsigned char status_heaters_bmp[] PROGMEM = {
164 161
           B00011111,B11100000,
@@ -213,7 +210,7 @@
213 210
           B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000
214 211
         };
215 212
 
216
-      #elif HOTENDS > 3
213
+      #elif HOTENDS == 4
217 214
 
218 215
         #define STATUS_HEATERS_WIDTH  84
219 216
 
@@ -232,6 +229,25 @@
232 229
           B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000
233 230
         };
234 231
 
232
+      #elif HOTENDS > 4
233
+
234
+        #define STATUS_HEATERS_WIDTH  108
235
+
236
+        const unsigned char status_heaters_bmp[] PROGMEM = {
237
+          B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00011111,B11100000,
238
+          B00111110,B11110000,B00000000,B00111100,B11110000,B00000000,B00111100,B11110000,B00000000,B00111011,B01110000,B00000000,B00111000,B01110000,
239
+          B00111100,B11110000,B00000000,B00111011,B01110000,B00000000,B00111011,B01110000,B00000000,B00111011,B01110000,B00000000,B00111011,B11110000,
240
+          B00111010,B11110000,B00000000,B00111111,B01110000,B00000000,B00111111,B01110000,B00000000,B00111011,B01110000,B00000000,B00111000,B11110000,
241
+          B00011110,B11100000,B00000000,B00011110,B11100000,B00000000,B00011100,B11100000,B00000000,B00011011,B01100000,B00000000,B00011111,B01100000,
242
+          B00011110,B11100000,B00000000,B00011101,B11100000,B00000000,B00011111,B01100000,B00000000,B00011000,B00100000,B00000000,B00011111,B01100000,
243
+          B00111110,B11110000,B00000000,B00111011,B11110000,B00000000,B00111011,B01110000,B00000000,B00111111,B01110000,B00000000,B00111011,B01110000,
244
+          B00111110,B11110000,B00000000,B00111000,B01110000,B00000000,B00111100,B11110000,B00000000,B00111111,B01110000,B00000000,B00111100,B11110000,
245
+          B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00111111,B11110000,
246
+          B00001111,B11000000,B00000000,B00001111,B11000000,B00000000,B00001111,B11000000,B00000000,B00001111,B11000000,B00000000,B00001111,B11000000,
247
+          B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B00000111,B10000000,
248
+          B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000
249
+        };
250
+
235 251
       #endif // HOTENDS
236 252
 
237 253
     #endif // !HAS_HEATED_BED || HOTENDS > 3
@@ -241,10 +257,16 @@
241 257
     //
242 258
     // Status Screen Hotends bitmaps
243 259
     //
244
-
245 260
     #if HOTENDS
246 261
 
247
-      #define STATUS_HOTEND1_WIDTH  12
262
+      #define STATUS_HOTEND1_WIDTH  16
263
+
264
+      #define MAX_HOTEND_BITMAPS     5
265
+      #if HOTENDS > MAX_HOTEND_BITMAPS
266
+        #define STATUS_HOTEND_BITMAPS MAX_HOTEND_BITMAPS
267
+      #else
268
+        #define STATUS_HOTEND_BITMAPS HOTENDS
269
+      #endif
248 270
 
249 271
       #if HOTENDS == 1 || ENABLED(STATUS_HOTEND_NUMBERLESS)
250 272
 
@@ -286,17 +308,6 @@
286 308
 
287 309
         #if HOTENDS >= 2
288 310
 
289
-          #if HAS_HEATED_BED
290
-            #define MAX_HOTEND_BITMAPS 3
291
-          #else
292
-            #define MAX_HOTEND_BITMAPS 4
293
-          #endif
294
-          #if HOTENDS > MAX_HOTEND_BITMAPS
295
-            #define STATUS_HOTEND_BITMAPS MAX_HOTEND_BITMAPS
296
-          #else
297
-            #define STATUS_HOTEND_BITMAPS HOTENDS
298
-          #endif
299
-
300 311
           #ifdef STATUS_HOTEND_ANIM
301 312
 
302 313
             const unsigned char status_hotend1_a_bmp[] PROGMEM = {
@@ -450,7 +461,7 @@
450 461
 
451 462
         #endif
452 463
 
453
-        #if STATUS_HOTEND_BITMAPS >= 4 && !HAS_HEATED_BED
464
+        #if STATUS_HOTEND_BITMAPS >= 4
454 465
 
455 466
           #ifdef STATUS_HOTEND_ANIM
456 467
 
@@ -505,7 +516,7 @@
505 516
 
506 517
         #endif
507 518
 
508
-        #if STATUS_HOTEND_BITMAPS >= 5 && !HAS_HEATED_BED
519
+        #if STATUS_HOTEND_BITMAPS >= 5
509 520
 
510 521
           #ifdef STATUS_HOTEND_ANIM
511 522
 
@@ -571,17 +582,16 @@
571 582
 //
572 583
 // Default Status Screen Bed bitmaps
573 584
 //
574
-
575
-#if !STATUS_BED_WIDTH && DISABLED(STATUS_COMBINE_HEATERS) && HAS_HEATED_BED && HOTENDS < 4
585
+#if !STATUS_BED_WIDTH && HAS_HEATED_BED && DISABLED(STATUS_COMBINE_HEATERS)
576 586
 
577 587
   #if ENABLED(STATUS_ALT_BED_BITMAP)
578 588
 
579 589
     #define STATUS_BED_ANIM
580 590
     #define STATUS_BED_WIDTH  24
581 591
     #ifndef STATUS_BED_X
582
-      #define STATUS_BED_X    72
592
+      #define STATUS_BED_X   (LCD_PIXEL_WIDTH - (STATUS_BED_BYTEWIDTH + STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH) * 8)
583 593
     #endif
584
-    #define STATUS_BED_TEXT_X (STATUS_BED_X + 13)
594
+    #define STATUS_BED_TEXT_X (STATUS_BED_X + 11)
585 595
 
586 596
     const unsigned char status_bed_bmp[] PROGMEM = {
587 597
       B11111111,B11111111,B11000000,
@@ -612,7 +622,7 @@
612 622
 
613 623
     #define STATUS_BED_WIDTH  21
614 624
     #ifndef STATUS_BED_X
615
-      #define STATUS_BED_X    80
625
+      #define STATUS_BED_X   (LCD_PIXEL_WIDTH - (STATUS_BED_BYTEWIDTH + STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH) * 8)
616 626
     #endif
617 627
 
618 628
     #ifdef STATUS_BED_ANIM
@@ -657,81 +667,104 @@
657 667
     #endif
658 668
 
659 669
   #endif
670
+#else
671
+  #define STATUS_BED_WIDTH 0
672
+#endif
660 673
 
661
-#endif // !STATUS_BED_WIDTH && !STATUS_COMBINE_HEATERS && HAS_HEATED_BED && HOTENDS < 4
674
+#if !STATUS_CHAMBER_WIDTH && HAS_HEATED_CHAMBER && ((HOTENDS <= 4 && !HAS_HEATED_BED) || (HOTENDS <= 3 && HAS_HEATED_BED))
662 675
 
663
-#if HAS_HEATED_CHAMBER
676
+  #define STATUS_CHAMBER_WIDTH 21
664 677
 
665
-  #define STATUS_CHAMBER_WIDTH 16
678
+  #if STATUS_HEATERS_WIDTH
679
+    #if ENABLED(STATUS_COMBINE_HEATERS)
680
+      #define STATUS_CHAMBER_X (LCD_PIXEL_WIDTH - 2 - (STATUS_CHAMBER_BYTEWIDTH) * 8)
681
+    #elif HAS_FAN0 && HAS_HEATED_BED && HOTENDS <= 2
682
+      #define STATUS_CHAMBER_X (LCD_PIXEL_WIDTH - 2 - (STATUS_HEATERS_BYTEWIDTH - STATUS_CHAMBER_BYTEWIDTH) * 8)
683
+    #elif HAS_FAN0 && !HAS_HEATED_BED
684
+      #define STATUS_CHAMBER_X (LCD_PIXEL_WIDTH - (STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH) * 8)
685
+    #else
686
+      #define STATUS_CHAMBER_X (LCD_PIXEL_WIDTH - (STATUS_CHAMBER_BYTEWIDTH) * 8)
687
+    #endif
688
+  #endif
666 689
 
667 690
   #ifdef STATUS_CHAMBER_ANIM
668 691
 
669 692
     const unsigned char status_chamber_bmp[] PROGMEM = {
670
-      B11111111,B11111111,
671
-      B10000000,B00000001,
672
-      B10000000,B00000001,
673
-      B10000000,B00000001,
674
-      B10000000,B00000001,
675
-      B10000000,B00000001,
676
-      B10000000,B00000001,
677
-      B10000000,B00000001,
678
-      B10000000,B00000001,
679
-      B10000000,B00000001,
680
-      B11111111,B11111111,
681
-      B11111111,B11111111
693
+      B00011111,B11111111,B11111000,
694
+      B00010000,B00000000,B00001000,
695
+      B00010000,B00000000,B00001000,
696
+      B00010000,B00000000,B00001000,
697
+      B00010000,B00000000,B00001000,
698
+      B00010000,B00000000,B00001000,
699
+      B00010000,B00000000,B00001000,
700
+      B00010000,B00000000,B00001000,
701
+      B00010000,B00000000,B00001000,
702
+      B00010000,B00000000,B00001000,
703
+      B00011111,B11111111,B11111000,
704
+      B00011111,B11111111,B11111000
682 705
     };
683 706
 
684 707
     const unsigned char status_chamber_on_bmp[] PROGMEM = {
685
-      B11111111,B11111111,
686
-      B10000000,B00000001,
687
-      B10000100,B00100001,
688
-      B10000010,B00010001,
689
-      B10000010,B00010001,
690
-      B10000100,B00100001,
691
-      B10001000,B01000001,
692
-      B10001000,B01000001,
693
-      B10000100,B00100001,
694
-      B10000000,B00000001,
695
-      B11111111,B11111111,
696
-      B11111111,B11111111
708
+      B00011111,B11111111,B11111000,
709
+      B00010000,B00000000,B00001000,
710
+      B00010000,B10000100,B00001000,
711
+      B00010000,B01000010,B00001000,
712
+      B00010000,B01000010,B00001000,
713
+      B00010000,B10000100,B00001000,
714
+      B00010001,B00001000,B00001000,
715
+      B00010001,B00001000,B00001000,
716
+      B00010000,B10000100,B00001000,
717
+      B00010000,B00000000,B00001000,
718
+      B00011111,B11111111,B11111000,
719
+      B00011111,B11111111,B11111000
697 720
     };
698 721
 
699 722
   #else
700 723
 
701 724
     const unsigned char status_chamber_bmp[] PROGMEM = {
702
-      B11111111,B11111111,
703
-      B10000000,B00000001,
704
-      B10000100,B00100001,
705
-      B10000010,B00010001,
706
-      B10000010,B00010001,
707
-      B10000100,B00100001,
708
-      B10001000,B01000001,
709
-      B10001000,B01000001,
710
-      B10000100,B00100001,
711
-      B10000000,B00000001,
712
-      B11111111,B11111111,
713
-      B11111111,B11111111
725
+      B00011111,B11111111,B11111000,
726
+      B00010000,B00000000,B00001000,
727
+      B00010000,B10000100,B00001000,
728
+      B00010000,B01000010,B00001000,
729
+      B00010000,B01000010,B00001000,
730
+      B00010000,B10000100,B00001000,
731
+      B00010001,B00001000,B00001000,
732
+      B00010001,B00001000,B00001000,
733
+      B00010000,B10000100,B00001000,
734
+      B00010000,B00000000,B00001000,
735
+      B00011111,B11111111,B11111000,
736
+      B00011111,B11111111,B11111000
714 737
     };
715 738
 
716 739
   #endif
740
+#else // HAS_HEATED_CHAMBER
741
+  #define STATUS_CHAMBER_WIDTH 0
742
+#endif
717 743
 
718
-#endif // HAS_HEATED_CHAMBER
744
+#define BED_CHAM (HAS_HEATED_BED || HAS_HEATED_CHAMBER)
745
+#define BED_CHAM_FAN (BED_CHAM || HAS_FAN0)
719 746
 
720
-// Can also be overridden in Configuration.h
747
+// Can also be overridden in Configuration_adv.h
721 748
 // If you can afford it, try the 3-frame fan animation!
722 749
 // Don't compile in the fan animation with no fan
723
-#if !HAS_FAN0
750
+#if !HAS_FAN0 || (HOTENDS == 5 || (HOTENDS == 4 && BED_CHAM) || (ENABLED(STATUS_COMBINE_HEATERS) && HAS_HEATED_CHAMBER))
724 751
   #undef STATUS_FAN_FRAMES
725
-#elif !defined(STATUS_FAN_FRAMES)
752
+#elif !STATUS_FAN_FRAMES
726 753
   #define STATUS_FAN_FRAMES 2
727 754
 #elif STATUS_FAN_FRAMES > 4
728 755
   #error "A maximum of 4 fan animation frames is currently supported."
729 756
 #endif
730 757
 
758
+#if HOTENDS > 4
759
+  #undef STATUS_LOGO_WIDTH
760
+  #undef STATUS_HEATERS_XSPACE
761
+  #define STATUS_HEATERS_XSPACE 24
762
+#endif
763
+
731 764
 //
732 765
 // Provide default Fan Bitmaps
733 766
 //
734
-#if !defined(STATUS_FAN_WIDTH) && STATUS_FAN_FRAMES > 0
767
+#if !STATUS_FAN_WIDTH && STATUS_FAN_FRAMES > 0
735 768
 
736 769
   // Provide a fan animation if none exists
737 770
 
@@ -836,7 +869,7 @@
836 869
 
837 870
   #elif STATUS_FAN_FRAMES == 3
838 871
 
839
-    #define STATUS_FAN_WIDTH 21
872
+    #define STATUS_FAN_WIDTH 20
840 873
 
841 874
     #if ENABLED(STATUS_ALT_FAN_BITMAP)
842 875
 
@@ -974,7 +1007,7 @@
974 1007
 
975 1008
   #elif STATUS_FAN_FRAMES == 4
976 1009
 
977
-    #define STATUS_FAN_WIDTH 21
1010
+    #define STATUS_FAN_WIDTH 20
978 1011
 
979 1012
     #if ENABLED(STATUS_ALT_FAN_BITMAP)
980 1013
 
@@ -1153,6 +1186,35 @@
1153 1186
     #endif // !STATUS_ALT_FAN_BITMAP
1154 1187
 
1155 1188
   #endif
1189
+#else
1190
+  #undef STATUS_FAN_FRAMES
1191
+  #define STATUS_FAN_WIDTH 0
1192
+#endif
1193
+
1194
+#if ENABLED(CUSTOM_STATUS_SCREEN_IMAGE)
1195
+
1196
+  #if STATUS_HOTEND1_WIDTH
1197
+    #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)
1198
+  #elif STATUS_HEATERS_WIDTH
1199
+    #define HAS_SPACES (((LCD_PIXEL_WIDTH - STATUS_HEATERS_WIDTH - STATUS_BED_WIDTH - STATUS_CHAMBER_WIDTH - STATUS_FAN_WIDTH - 20) < STATUS_LOGO_WIDTH) ? true : false)
1200
+  #endif
1201
+
1202
+  #if HAS_SPACES
1203
+    #undef STATUS_LOGO_WIDTH
1204
+  #endif
1205
+
1206
+  #if (HOTENDS > 1 && STATUS_LOGO_WIDTH && BED_CHAM_FAN) || ( HOTENDS >= 3 && !BED_CHAM_FAN)
1207
+    #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)
1208
+    #if STATUS_HOTEND1_WIDTH
1209
+      #if HOTENDS > 2
1210
+        #define STATUS_HEATERS_X _STATUS_HEATERS_X(HOTENDS, STATUS_HOTEND1_WIDTH, 6)
1211
+      #else
1212
+        #define STATUS_HEATERS_X _STATUS_HEATERS_X(HOTENDS, STATUS_HOTEND1_WIDTH, 4)
1213
+      #endif
1214
+    #else
1215
+      #define STATUS_HEATERS_X _STATUS_HEATERS_X(1, STATUS_HEATERS_WIDTH, 4)
1216
+    #endif
1217
+  #endif
1156 1218
 
1157 1219
 #endif
1158 1220
 
@@ -1187,14 +1249,25 @@
1187 1249
 #if STATUS_HOTEND1_WIDTH || STATUS_HEATERS_WIDTH
1188 1250
 
1189 1251
   #ifndef STATUS_HEATERS_XSPACE
1190
-    #define STATUS_HEATERS_XSPACE 24 // Like the included bitmaps
1252
+    #if (HOTENDS == 3 || HOTENDS == 4) && ENABLED(STATUS_COMBINE_HEATERS)
1253
+      #define STATUS_HEATERS_XSPACE 24
1254
+    #else
1255
+      #define STATUS_HEATERS_XSPACE 26 // Like the included bitmaps
1256
+    #endif
1191 1257
   #endif
1192 1258
 
1193 1259
   #ifndef STATUS_HEATERS_X
1194 1260
     #if STATUS_LOGO_BYTEWIDTH
1195
-      #define STATUS_HEATERS_X ((STATUS_LOGO_BYTEWIDTH + 0) * 8)
1261
+      #define STATUS_HEATERS_X (STATUS_LOGO_BYTEWIDTH * 8)
1262
+    #elif ((STATUS_CHAMBER_WIDTH || STATUS_FAN_WIDTH) && (STATUS_BED_WIDTH  && STATUS_HOTEND_BITMAPS == 3)) || \
1263
+          ((STATUS_CHAMBER_WIDTH || STATUS_FAN_WIDTH  ||  STATUS_BED_WIDTH) && STATUS_HOTEND_BITMAPS == 4)
1264
+      #define STATUS_HEATERS_X 5
1196 1265
     #else
1197
-      #define STATUS_HEATERS_X 8 // Like the included bitmaps
1266
+      #if ENABLED(STATUS_COMBINE_HEATERS) && HAS_HEATED_BED && HOTENDS <= 4
1267
+        #define STATUS_HEATERS_X 5
1268
+      #else
1269
+        #define STATUS_HEATERS_X 8 // Like the included bitmaps
1270
+      #endif
1198 1271
     #endif
1199 1272
   #endif
1200 1273
 
@@ -1205,7 +1278,6 @@
1205 1278
   //
1206 1279
   // Hotend images. A base hotend image and optional "ON" state image.
1207 1280
   //
1208
-
1209 1281
   #ifndef STATUS_HOTEND_BITMAPS
1210 1282
     #define STATUS_HOTEND_BITMAPS 1
1211 1283
   #endif
@@ -1257,20 +1329,21 @@
1257 1329
   #ifndef STATUS_HOTEND2_X
1258 1330
     #define STATUS_HOTEND2_X STATUS_HOTEND1_X + STATUS_HEATERS_XSPACE
1259 1331
   #endif
1260
-  #ifndef STATUS_HOTEND3_X
1261
-    #define STATUS_HOTEND3_X STATUS_HOTEND2_X + STATUS_HEATERS_XSPACE
1262
-  #endif
1263
-  #ifndef STATUS_HOTEND4_X
1264
-    #define STATUS_HOTEND4_X STATUS_HOTEND3_X + STATUS_HEATERS_XSPACE
1265
-  #endif
1266
-  #ifndef STATUS_HOTEND5_X
1267
-    #define STATUS_HOTEND5_X STATUS_HOTEND4_X + STATUS_HEATERS_XSPACE
1268
-  #endif
1269
-  #ifndef STATUS_HOTEND6_X
1270
-    #define STATUS_HOTEND6_X STATUS_HOTEND5_X + STATUS_HEATERS_XSPACE
1271
-  #endif
1272 1332
 
1273 1333
   #if HOTENDS > 2
1334
+    #ifndef STATUS_HOTEND3_X
1335
+      #define STATUS_HOTEND3_X STATUS_HOTEND2_X + STATUS_HEATERS_XSPACE
1336
+    #endif
1337
+    #ifndef STATUS_HOTEND4_X
1338
+      #define STATUS_HOTEND4_X STATUS_HOTEND3_X + STATUS_HEATERS_XSPACE
1339
+    #endif
1340
+    #ifndef STATUS_HOTEND5_X
1341
+      #define STATUS_HOTEND5_X STATUS_HOTEND4_X + STATUS_HEATERS_XSPACE
1342
+    #endif
1343
+    #ifndef STATUS_HOTEND6_X
1344
+      #define STATUS_HOTEND6_X STATUS_HOTEND5_X + STATUS_HEATERS_XSPACE
1345
+    #endif
1346
+
1274 1347
     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);
1275 1348
     #define STATUS_HOTEND_X(N) status_hotend_x[N]
1276 1349
   #elif HOTENDS > 1
@@ -1303,7 +1376,7 @@
1303 1376
     #endif
1304 1377
   #endif
1305 1378
 
1306
-  #if STATUS_HOTEND_BITMAPS > 1
1379
+  #if STATUS_HOTEND_BITMAPS > 1 && DISABLED(STATUS_HOTEND_NUMBERLESS)
1307 1380
     #define TEST_BITMAP_OFF status_hotend1_a_bmp
1308 1381
     #define TEST_BITMAP_ON  status_hotend1_b_bmp
1309 1382
   #else
@@ -1341,7 +1414,11 @@
1341 1414
     #define STATUS_HOTEND_X(N) (STATUS_HEATERS_X + 2 + (N) * (STATUS_HEATERS_XSPACE))
1342 1415
   #endif
1343 1416
   #ifndef STATUS_HOTEND_TEXT_X
1344
-    #define STATUS_HOTEND_TEXT_X(N) (STATUS_HEATERS_X + 6 + (N) * (STATUS_HEATERS_XSPACE))
1417
+    #if HOTENDS == 4 && STATUS_LOGO_WIDTH
1418
+      #define STATUS_HOTEND_TEXT_X(N) (STATUS_HEATERS_X + 6 + (N) * (STATUS_HEATERS_XSPACE))
1419
+    #else
1420
+      #define STATUS_HOTEND_TEXT_X(N) (STATUS_HEATERS_X + 6 + (N) * (STATUS_HEATERS_XSPACE))
1421
+    #endif
1345 1422
   #endif
1346 1423
   #ifndef STATUS_HEATERS_BYTEWIDTH
1347 1424
     #define STATUS_HEATERS_BYTEWIDTH BW(STATUS_HEATERS_WIDTH)
@@ -1363,16 +1440,13 @@
1363 1440
 //
1364 1441
 // Chamber Bitmap Properties
1365 1442
 //
1366
-#ifndef STATUS_CHAMBER_WIDTH
1367
-  #define STATUS_CHAMBER_WIDTH 0
1368
-#endif
1369 1443
 #ifndef STATUS_CHAMBER_BYTEWIDTH
1370 1444
   #define STATUS_CHAMBER_BYTEWIDTH BW(STATUS_CHAMBER_WIDTH)
1371 1445
 #endif
1372
-#if STATUS_CHAMBER_WIDTH && !STATUS_HEATERS_WIDTH
1446
+#if STATUS_CHAMBER_WIDTH
1373 1447
 
1374 1448
   #ifndef STATUS_CHAMBER_X
1375
-    #define STATUS_CHAMBER_X (128 - (STATUS_FAN_BYTEWIDTH + STATUS_CHAMBER_BYTEWIDTH) * 8)
1449
+    #define STATUS_CHAMBER_X (LCD_PIXEL_WIDTH - (STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH) * 8)
1376 1450
   #endif
1377 1451
 
1378 1452
   #ifndef STATUS_CHAMBER_HEIGHT
@@ -1388,7 +1462,7 @@
1388 1462
   #endif
1389 1463
 
1390 1464
   #ifndef STATUS_CHAMBER_TEXT_X
1391
-    #define STATUS_CHAMBER_TEXT_X (STATUS_CHAMBER_X + 7)
1465
+    #define STATUS_CHAMBER_TEXT_X (STATUS_CHAMBER_X + 11)
1392 1466
   #endif
1393 1467
 
1394 1468
   static_assert(
@@ -1407,16 +1481,13 @@
1407 1481
 //
1408 1482
 // Bed Bitmap Properties
1409 1483
 //
1410
-#ifndef STATUS_BED_WIDTH
1411
-  #define STATUS_BED_WIDTH 0
1412
-#endif
1413 1484
 #ifndef STATUS_BED_BYTEWIDTH
1414 1485
   #define STATUS_BED_BYTEWIDTH BW(STATUS_BED_WIDTH)
1415 1486
 #endif
1416 1487
 #if STATUS_BED_WIDTH && !STATUS_HEATERS_WIDTH
1417 1488
 
1418 1489
   #ifndef STATUS_BED_X
1419
-    #define STATUS_BED_X (128 - (STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH + STATUS_BED_BYTEWIDTH) * 8)
1490
+    #define STATUS_BED_X (LCD_PIXEL_WIDTH - (STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH + STATUS_BED_BYTEWIDTH) * 8)
1420 1491
   #endif
1421 1492
 
1422 1493
   #ifndef STATUS_BED_HEIGHT
@@ -1432,7 +1503,7 @@
1432 1503
   #endif
1433 1504
 
1434 1505
   #ifndef STATUS_BED_TEXT_X
1435
-    #define STATUS_BED_TEXT_X (STATUS_BED_X + 11)
1506
+    #define STATUS_BED_TEXT_X (STATUS_BED_X + 9)
1436 1507
   #endif
1437 1508
 
1438 1509
   static_assert(
@@ -1445,27 +1516,23 @@
1445 1516
       "Status bed bitmap (status_bed_on_bmp) dimensions don't match data."
1446 1517
     );
1447 1518
   #endif
1448
-
1449 1519
 #endif
1450 1520
 
1451 1521
 //
1452 1522
 // Fan Bitmap Properties
1453 1523
 //
1454
-#ifndef STATUS_FAN_WIDTH
1455
-  #define STATUS_FAN_WIDTH 0
1456
-#endif
1457 1524
 #ifndef STATUS_FAN_BYTEWIDTH
1458 1525
   #define STATUS_FAN_BYTEWIDTH BW(STATUS_FAN_WIDTH)
1459 1526
 #endif
1460 1527
 #if STATUS_FAN_FRAMES
1461 1528
   #ifndef STATUS_FAN_X
1462
-    #define STATUS_FAN_X (128 - (STATUS_FAN_BYTEWIDTH) * 8)
1529
+    #define STATUS_FAN_X (LCD_PIXEL_WIDTH - (STATUS_FAN_BYTEWIDTH) * 8)
1463 1530
   #endif
1464 1531
   #ifndef STATUS_FAN_Y
1465 1532
     #define STATUS_FAN_Y 1
1466 1533
   #endif
1467 1534
   #ifndef STATUS_FAN_TEXT_X
1468
-    #define STATUS_FAN_TEXT_X 103
1535
+    #define STATUS_FAN_TEXT_X (STATUS_FAN_X - 1)
1469 1536
   #endif
1470 1537
   #ifndef STATUS_FAN_TEXT_Y
1471 1538
     #define STATUS_FAN_TEXT_Y 28

+ 47
- 36
Marlin/src/lcd/dogm/status_screen_DOGM.cpp View File

@@ -63,13 +63,18 @@
63 63
 #define EXTRAS_BASELINE (40 + INFO_FONT_ASCENT)
64 64
 #define STATUS_BASELINE (LCD_PIXEL_HEIGHT - INFO_FONT_DESCENT)
65 65
 
66
-#define DO_DRAW_BED (HAS_HEATED_BED && STATUS_BED_WIDTH && HOTENDS <= 3 && DISABLED(STATUS_COMBINE_HEATERS))
67
-#define DO_DRAW_FAN (HAS_FAN0 && STATUS_FAN_WIDTH && STATUS_FAN_FRAMES)
66
+#define DO_DRAW_LOGO (STATUS_LOGO_WIDTH && ENABLED(CUSTOM_STATUS_SCREEN_IMAGE))
67
+#define DO_DRAW_BED (HAS_HEATED_BED && STATUS_BED_WIDTH && HOTENDS <= 4)
68
+#define DO_DRAW_CHAMBER (HAS_HEATED_CHAMBER && STATUS_CHAMBER_WIDTH && HOTENDS <= 4)
69
+#define DO_DRAW_FAN (HAS_FAN0 && STATUS_FAN_WIDTH && HOTENDS <= 4 && defined(STATUS_FAN_FRAMES))
70
+
68 71
 #define ANIM_HOTEND (HOTENDS && ENABLED(STATUS_HOTEND_ANIM))
69 72
 #define ANIM_BED (DO_DRAW_BED && ENABLED(STATUS_BED_ANIM))
70
-#define ANIM_CHAMBER (HAS_HEATED_CHAMBER && ENABLED(STATUS_CHAMBER_ANIM))
73
+#define ANIM_CHAMBER (DO_DRAW_CHAMBER && ENABLED(STATUS_CHAMBER_ANIM))
74
+
75
+#define ANIM_HBC (ANIM_HOTEND || ANIM_BED || ANIM_CHAMBER)
71 76
 
72
-#if ANIM_HOTEND || ANIM_BED
77
+#if ANIM_HBC
73 78
   uint8_t heat_bits;
74 79
 #endif
75 80
 #if ANIM_HOTEND
@@ -109,7 +114,7 @@ FORCE_INLINE void _draw_heater_status(const heater_ind_t heater, const bool blin
109 114
     UNUSED(blink);
110 115
   #endif
111 116
 
112
-  #if HAS_HEATED_BED
117
+  #if DO_DRAW_BED && DISABLED(STATUS_COMBINE_HEATERS) || (HAS_HEATED_BED && ENABLED(STATUS_COMBINE_HEATERS) && HOTENDS <= 4)
113 118
     const bool isBed = heater < 0;
114 119
     #define IFBED(A,B) (isBed ? (A) : (B))
115 120
   #else
@@ -125,11 +130,11 @@ FORCE_INLINE void _draw_heater_status(const heater_ind_t heater, const bool blin
125 130
   const uint8_t tx = IFBED(STATUS_BED_TEXT_X, STATUS_HOTEND_TEXT_X(heater));
126 131
 
127 132
   #if ENABLED(MARLIN_DEV_MODE)
128
-    const float temp = 20 + (millis() >> 8) % IFBED(100, 200);
129
-    const float target = IFBED(100, 200);
133
+    const float temp = 20 + (millis() >> 8) % IFBED(100, 200),
134
+              target = IFBED(100, 200);
130 135
   #else
131 136
     const float temp = IFBED(thermalManager.degBed(), thermalManager.degHotend(heater)),
132
-                target = IFBED(thermalManager.degTargetBed(), thermalManager.degTargetHotend(heater));
137
+              target = IFBED(thermalManager.degTargetBed(), thermalManager.degTargetHotend(heater));
133 138
   #endif
134 139
 
135 140
   #if DISABLED(STATUS_HOTEND_ANIM)
@@ -140,7 +145,7 @@ FORCE_INLINE void _draw_heater_status(const heater_ind_t heater, const bool blin
140 145
     #define HOTEND_DOT    false
141 146
   #endif
142 147
 
143
-  #if HAS_HEATED_BED && DISABLED(STATUS_BED_ANIM)
148
+  #if DO_DRAW_BED && DISABLED(STATUS_BED_ANIM)
144 149
     #define STATIC_BED    true
145 150
     #define BED_DOT       isHeat
146 151
   #else
@@ -148,7 +153,13 @@ FORCE_INLINE void _draw_heater_status(const heater_ind_t heater, const bool blin
148 153
     #define BED_DOT       false
149 154
   #endif
150 155
 
151
-  #if ANIM_HOTEND && ENABLED(STATUS_HOTEND_INVERTED)
156
+  #if ANIM_HOTEND && BOTH(STATUS_HOTEND_INVERTED, STATUS_HOTEND_NUMBERLESS)
157
+    #define OFF_BMP(N) status_hotend_b_bmp
158
+    #define ON_BMP(N)  status_hotend_a_bmp
159
+  #elif ANIM_HOTEND && DISABLED(STATUS_HOTEND_INVERTED) && ENABLED(STATUS_HOTEND_NUMBERLESS)
160
+    #define OFF_BMP(N) status_hotend_a_bmp
161
+    #define ON_BMP(N)  status_hotend_b_bmp
162
+  #elif ANIM_HOTEND && ENABLED(STATUS_HOTEND_INVERTED)
152 163
     #define OFF_BMP(N) status_hotend##N##_b_bmp
153 164
     #define ON_BMP(N)  status_hotend##N##_a_bmp
154 165
   #else
@@ -179,10 +190,11 @@ FORCE_INLINE void _draw_heater_status(const heater_ind_t heater, const bool blin
179 190
     uint8_t tall = uint8_t(perc * BAR_TALL + 0.5f);
180 191
     NOMORE(tall, BAR_TALL);
181 192
 
182
-    #ifdef STATUS_HOTEND_ANIM
193
+    #if ANIM_HOTEND
183 194
       // Draw hotend bitmap, either whole or split by the heating percent
184 195
       if (IFBED(0, 1)) {
185
-        const uint8_t hx = STATUS_HOTEND_X(heater), bw = STATUS_HOTEND_BYTEWIDTH(heater);
196
+        const uint8_t hx = STATUS_HOTEND_X(heater),
197
+                      bw = STATUS_HOTEND_BYTEWIDTH(heater);
186 198
         #if ENABLED(STATUS_HEAT_PERCENT)
187 199
           if (isHeat && tall <= BAR_TALL) {
188 200
             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
196 208
     #endif
197 209
 
198 210
     // Draw a heating progress bar, if specified
199
-    #if ENABLED(STATUS_HEAT_PERCENT)
211
+    #if DO_DRAW_BED && ENABLED(STATUS_HEAT_PERCENT)
200 212
 
201 213
       if (IFBED(true, STATIC_HOTEND) && isHeat) {
202
-        const uint8_t bx = IFBED(STATUS_BED_X + STATUS_BED_WIDTH, STATUS_HOTEND_X(heater) + STATUS_HOTEND_WIDTH(heater)) + 1;
214
+        const uint8_t bx = IFBED(STATUS_BED_X + STATUS_BED_WIDTH - 1, STATUS_HOTEND_X(heater) + STATUS_HOTEND_WIDTH(heater)) + 1;
203 215
         u8g.drawFrame(bx, STATUS_HEATERS_Y, 3, STATUS_HEATERS_HEIGHT);
204 216
         if (tall) {
205 217
           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
233 245
 
234 246
 }
235 247
 
236
-#if HAS_HEATED_CHAMBER
248
+#if DO_DRAW_CHAMBER
237 249
 
238 250
   FORCE_INLINE void _draw_chamber_status(const bool blink) {
239
-    const float temp = thermalManager.degChamber(),
251
+    #if ENABLED(MARLIN_DEV_MODE)
252
+	    const float temp = 10 + (millis() >> 8) % CHAMBER_MAXTEMP,
253
+                target = CHAMBER_MAXTEMP;
254
+    #else
255
+      const float temp = thermalManager.degChamber(),
240 256
                 target = thermalManager.degTargetChamber();
257
+    #endif
241 258
     #if !HEATER_IDLE_HANDLER
242 259
       UNUSED(blink);
243 260
     #endif
@@ -299,7 +316,7 @@ void MarlinUI::draw_status_screen() {
299 316
 
300 317
   // At the first page, generate new display values
301 318
   if (first_page) {
302
-    #if ANIM_HOTEND || ANIM_BED || ANIM_CHAMBER
319
+    #if ANIM_HBC
303 320
       uint8_t new_bits = 0;
304 321
       #if ANIM_HOTEND
305 322
         HOTEND_LOOP() if (thermalManager.isHeatingHotend(e) ^ SHOW_ON_STATE) SBI(new_bits, e);
@@ -307,14 +324,14 @@ void MarlinUI::draw_status_screen() {
307 324
       #if ANIM_BED
308 325
         if (thermalManager.isHeatingBed() ^ SHOW_ON_STATE) SBI(new_bits, 7);
309 326
       #endif
310
-      #if ANIM_CHAMBER
327
+      #if DO_DRAW_CHAMBER
311 328
         if (thermalManager.isHeatingChamber() ^ SHOW_ON_STATE) SBI(new_bits, 6);
312 329
       #endif
313 330
       heat_bits = new_bits;
314 331
     #endif
315 332
     strcpy(xstring, ftostr4sign(LOGICAL_X_POSITION(current_position[X_AXIS])));
316 333
     strcpy(ystring, ftostr4sign(LOGICAL_Y_POSITION(current_position[Y_AXIS])));
317
-    strcpy(zstring, ftostr52sp(LOGICAL_Z_POSITION(current_position[Z_AXIS])));
334
+    strcpy(zstring, ftostr52sp( LOGICAL_Z_POSITION(current_position[Z_AXIS])));
318 335
     #if ENABLED(FILAMENT_LCD_DISPLAY)
319 336
       strcpy(wstring, ftostr12ns(filament_width_meas));
320 337
       strcpy(mstring, i16tostr3(100.0 * (
@@ -335,7 +352,7 @@ void MarlinUI::draw_status_screen() {
335 352
     TCNT5 = 0;
336 353
   #endif
337 354
 
338
-  #if STATUS_LOGO_WIDTH
355
+  #if DO_DRAW_LOGO
339 356
     if (PAGE_CONTAINS(STATUS_LOGO_Y, STATUS_LOGO_Y + STATUS_LOGO_HEIGHT - 1))
340 357
       u8g.drawBitmapP(STATUS_LOGO_X, STATUS_LOGO_Y, STATUS_LOGO_BYTEWIDTH, STATUS_LOGO_HEIGHT, status_logo_bmp);
341 358
   #endif
@@ -346,13 +363,14 @@ void MarlinUI::draw_status_screen() {
346 363
       u8g.drawBitmapP(STATUS_HEATERS_X, STATUS_HEATERS_Y, STATUS_HEATERS_BYTEWIDTH, STATUS_HEATERS_HEIGHT, status_heaters_bmp);
347 364
   #endif
348 365
 
349
-  #if DO_DRAW_BED
366
+  #if DO_DRAW_BED && DISABLED(STATUS_COMBINE_HEATERS)
350 367
     #if ANIM_BED
351 368
       #define BED_BITMAP(S) ((S) ? status_bed_on_bmp : status_bed_bmp)
352 369
     #else
353 370
       #define BED_BITMAP(S) status_bed_bmp
354 371
     #endif
355
-    const uint8_t bedy = STATUS_BED_Y(BED_ALT()), bedh = STATUS_BED_HEIGHT(BED_ALT());
372
+    const uint8_t bedy = STATUS_BED_Y(BED_ALT()),
373
+                  bedh = STATUS_BED_HEIGHT(BED_ALT());
356 374
     if (PAGE_CONTAINS(bedy, bedy + bedh - 1))
357 375
       u8g.drawBitmapP(STATUS_BED_X, bedy, STATUS_BED_BYTEWIDTH, bedh, BED_BITMAP(BED_ALT()));
358 376
   #endif
@@ -363,12 +381,10 @@ void MarlinUI::draw_status_screen() {
363 381
     #else
364 382
       #define CHAMBER_BITMAP(S) status_chamber_bmp
365 383
     #endif
366
-    if (PAGE_CONTAINS(STATUS_CHAMBER_Y, STATUS_CHAMBER_Y + STATUS_CHAMBER_HEIGHT - 1))
367
-      u8g.drawBitmapP(
368
-        STATUS_CHAMBER_X, STATUS_CHAMBER_Y,
369
-        STATUS_CHAMBER_BYTEWIDTH, STATUS_CHAMBER_HEIGHT,
370
-        CHAMBER_BITMAP(CHAMBER_ALT())
371
-      );
384
+    const uint8_t chambery = STATUS_CHAMBER_Y(CHAMBER_ALT()),
385
+                  chamberh = STATUS_CHAMBER_HEIGHT(CHAMBER_ALT());
386
+    if (PAGE_CONTAINS(chambery, chambery + chamberh - 1))
387
+      u8g.drawBitmapP(STATUS_CHAMBER_X, chambery, STATUS_CHAMBER_BYTEWIDTH, chamberh, CHAMBER_BITMAP(CHAMBER_ALT()));
372 388
   #endif
373 389
 
374 390
   #if DO_DRAW_FAN
@@ -381,9 +397,7 @@ void MarlinUI::draw_status_screen() {
381 397
       }
382 398
     #endif
383 399
     if (PAGE_CONTAINS(STATUS_FAN_Y, STATUS_FAN_Y + STATUS_FAN_HEIGHT - 1))
384
-      u8g.drawBitmapP(
385
-        STATUS_FAN_X, STATUS_FAN_Y,
386
-        STATUS_FAN_BYTEWIDTH, STATUS_FAN_HEIGHT,
400
+      u8g.drawBitmapP(STATUS_FAN_X, STATUS_FAN_Y, STATUS_FAN_BYTEWIDTH, STATUS_FAN_HEIGHT,
387 401
         #if STATUS_FAN_FRAMES > 2
388 402
           fan_frame == 1 ? status_fan1_bmp :
389 403
           fan_frame == 2 ? status_fan2_bmp :
@@ -400,18 +414,17 @@ void MarlinUI::draw_status_screen() {
400 414
   //
401 415
   // Temperature Graphics and Info
402 416
   //
403
-
404 417
   if (PAGE_UNDER(6 + 1 + 12 + 1 + 6 + 1)) {
405 418
     // Extruders
406 419
     for (uint8_t e = 0; e < MAX_HOTEND_DRAW; ++e)
407 420
       _draw_heater_status((heater_ind_t)e, blink);
408 421
 
409 422
     // Heated bed
410
-    #if HAS_HEATED_BED && HOTENDS < 4
423
+    #if DO_DRAW_BED && DISABLED(STATUS_COMBINE_HEATERS) || (HAS_HEATED_BED && ENABLED(STATUS_COMBINE_HEATERS) && HOTENDS <= 4)
411 424
       _draw_heater_status(H_BED, blink);
412 425
     #endif
413 426
 
414
-    #if HAS_HEATED_CHAMBER
427
+    #if DO_DRAW_CHAMBER
415 428
       _draw_chamber_status(blink);
416 429
     #endif
417 430
 
@@ -575,7 +588,6 @@ void MarlinUI::draw_status_screen() {
575 588
   //
576 589
   // Feedrate
577 590
   //
578
-
579 591
   #define EXTRAS_2_BASELINE (EXTRAS_BASELINE + 3)
580 592
 
581 593
   if (PAGE_CONTAINS(EXTRAS_2_BASELINE - INFO_FONT_ASCENT, EXTRAS_2_BASELINE - 1)) {
@@ -602,7 +614,6 @@ void MarlinUI::draw_status_screen() {
602 614
   //
603 615
   // Status line
604 616
   //
605
-
606 617
   if (PAGE_CONTAINS(STATUS_BASELINE - INFO_FONT_ASCENT, STATUS_BASELINE + INFO_FONT_DESCENT)) {
607 618
     lcd_moveto(0, STATUS_BASELINE);
608 619
 

Loading…
Cancel
Save