Skip to content

Commit 6a2246a

Browse files
ellenspLCh-77
authored andcommitted
✏️ Fix E3V2 MarlinUI draw flags (MarlinFirmware#23979)
1 parent 0308c3a commit 6a2246a

File tree

1 file changed

+68
-57
lines changed

1 file changed

+68
-57
lines changed

Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp

+68-57
Original file line numberDiff line numberDiff line change
@@ -193,11 +193,11 @@ FORCE_INLINE void _draw_heater_status(const heater_id_t heater, const uint16_t x
193193
#define HOTEND_STATS 3
194194
#elif HOTENDS > 1
195195
#define HOTEND_STATS 2
196-
#elif HAS_HOTEND
196+
#else
197197
#define HOTEND_STATS 1
198198
#endif
199199
static celsius_t old_temp[HOTEND_STATS] = ARRAY_N_1(HOTEND_STATS, 500),
200-
old_target[HOTEND_STATS] = ARRAY_N_1(HOTEND_STATS, 500);
200+
old_target[HOTEND_STATS] = ARRAY_N_1(HOTEND_STATS, 500);
201201
static bool old_on[HOTEND_STATS] = ARRAY_N_1(HOTEND_STATS, false);
202202
#endif
203203

@@ -211,24 +211,23 @@ FORCE_INLINE void _draw_heater_status(const heater_id_t heater, const uint16_t x
211211

212212
#if HAS_HOTEND && HAS_HEATED_BED
213213
const bool isBed = heater < 0;
214-
const float tc = isBed ? thermalManager.degBed() : thermalManager.degHotend(heater),
215-
tt = isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater);
216-
const bool ta = isBed ? thermalManager.isHeatingBed() : thermalManager.isHeatingHotend(heater);
217-
218-
bool c_draw = tc != (isBed ? old_bed_temp : old_temp[heater]),
219-
t_draw = tt != (isBed ? old_bed_target : old_target[heater]),
220-
i_draw = ta != (isBed ? old_bed_on : old_on[heater]);
221-
214+
bool c_draw, t_draw, i_draw;
222215
if (isBed) {
223-
#if HAS_LEVELING
224-
if (!i_draw && planner.leveling_active != old_leveling_on) i_draw = true;
225-
old_leveling_on = planner.leveling_active;
226-
#endif
216+
const float tc = thermalManager.degBed(), tt = thermalManager.degTargetBed();
217+
const bool ta = thermalManager.isHeatingBed();
218+
c_draw = tc != old_bed_temp;
219+
t_draw = tt != old_bed_target;
220+
i_draw = ta != old_bed_on;
227221
old_bed_temp = tc;
228222
old_bed_target = tt;
229223
old_bed_on = ta;
230224
}
231225
else {
226+
const float tc = thermalManager.degHotend(heater), tt = thermalManager.degTargetHotend(heater);
227+
const bool ta = thermalManager.isHeatingHotend(heater);
228+
c_draw = tc != old_temp[heater];
229+
t_draw = tt != old_target[heater];
230+
i_draw = ta != old_on[heater];
232231
old_temp[heater] = tc;
233232
old_target[heater] = tt;
234233
old_on[heater] = ta;
@@ -237,31 +236,41 @@ FORCE_INLINE void _draw_heater_status(const heater_id_t heater, const uint16_t x
237236
constexpr bool isBed = false;
238237
const float tc = thermalManager.degHotend(heater), tt = thermalManager.degTargetHotend(heater);
239238
const uint8_t ta = thermalManager.isHeatingHotend(heater);
240-
const bool c_draw = tc != old_bed_temp, t_draw = tt != old_bed_target, i_draw = ta != old_bed_on;
239+
bool c_draw = tc != old_temp[heater], t_draw = tt != old_target[heater], i_draw = ta != old_on[heater];
241240
old_temp[heater] = tc; old_target[heater] = tt; old_on[heater] = ta;
242241
#elif HAS_HEATED_BED
243242
constexpr bool isBed = true;
244243
const float tc = thermalManager.degBed(), tt = thermalManager.degTargetBed();
245244
const uint8_t ta = thermalManager.isHeatingBed();
246-
bool c_draw = tc != old_temp[heater], t_draw = tt != old_target[heater], i_draw = ta != old_on[heater];
247-
#if HAS_LEVELING
248-
if (!idraw && planner.leveling_active != old_leveling_on) i_draw = true;
249-
old_leveling_on = tl;
250-
#endif
245+
bool c_draw = tc != old_bed_temp, t_draw = tt != old_bed_target, i_draw = ta != old_bed_on;
251246
old_bed_temp = tc; old_bed_target = tt; old_bed_on = ta;
247+
#else
248+
bool c_draw = false, t_draw = false, i_draw = false;
249+
constexpr float tc = 0, tt = 0;
250+
constexpr uint8_t ta = 0;
252251
#endif
253252

253+
#if HAS_HEATED_BED && HAS_LEVELING
254+
if (isBed) {
255+
i_draw |= (planner.leveling_active != old_leveling_on);
256+
old_leveling_on = planner.leveling_active;
257+
}
258+
#endif
259+
260+
// Draw target temperature, if needed
254261
if (!ui.did_first_redraw || t_draw) {
255262
dwin_string.set(i16tostr3rj(tt + 0.5));
256263
dwin_string.add(LCD_STR_DEGREE);
257264
DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, x, y, S(dwin_string.string()));
258265
}
259266

260-
if (!ui.did_first_redraw || i_draw){
267+
// Draw heater icon with on / off / leveled states
268+
if (!ui.did_first_redraw || i_draw) {
261269
const uint8_t ico = isBed ? (TERN0(HAS_LEVELING, planner.leveling_active) ? ICON_BedLevelOff : ICON_BedOff) : ICON_HotendOff;
262270
DWIN_ICON_Show(ICON, ico + ta, x, y + STATUS_CHR_HEIGHT + 2);
263271
}
264272

273+
// Draw current temperature, if needed
265274
if (!ui.did_first_redraw || c_draw) {
266275
dwin_string.set(i16tostr3rj(tc + 0.5));
267276
dwin_string.add(LCD_STR_DEGREE);
@@ -412,43 +421,45 @@ void MarlinUI::draw_status_screen() {
412421
//
413422
// Progress Bar
414423
//
415-
constexpr int16_t pb_margin = 5,
416-
pb_left = pb_margin + TERN(DWIN_MARLINUI_PORTRAIT, 0, 90),
417-
pb_height = TERN(DWIN_MARLINUI_PORTRAIT, 60, 20),
418-
pb_right = LCD_PIXEL_WIDTH - pb_margin,
419-
pb_bottom = TERN(DWIN_MARLINUI_PORTRAIT, 410, 220),
420-
pb_top = pb_bottom - pb_height,
421-
pb_width = pb_right - pb_left;
422-
423-
const progress_t progress = TERN(HAS_PRINT_PROGRESS_PERMYRIAD, get_progress_permyriad, get_progress_percent)();
424-
425-
if (!ui.did_first_redraw)
426-
DWIN_Draw_Rectangle(0, Select_Color, pb_left, pb_top, pb_right, pb_bottom); // Outline
427-
428-
static uint16_t old_solid = 50;
429-
const uint16_t pb_solid = (pb_width - 2) * (progress / (PROGRESS_SCALE)) * 0.01f;
430-
const bool p_draw = !ui.did_first_redraw || old_solid != pb_solid;
431-
432-
if (p_draw) {
433-
//if (pb_solid)
434-
DWIN_Draw_Rectangle(1, Select_Color, pb_left + 1, pb_top + 1, pb_left + pb_solid, pb_bottom - 1); // Fill the solid part
435-
436-
//if (pb_solid < old_solid)
437-
DWIN_Draw_Rectangle(1, Color_Bg_Black, pb_left + 1 + pb_solid, pb_top + 1, pb_right - 1, pb_bottom - 1); // Erase the rest
438-
439-
#if ENABLED(SHOW_SD_PERCENT)
440-
dwin_string.set(TERN(PRINT_PROGRESS_SHOW_DECIMALS, permyriadtostr4(progress), ui8tostr3rj(progress / (PROGRESS_SCALE))));
441-
dwin_string.add(PSTR("%"));
442-
DWIN_Draw_String(
443-
false, font16x32, Percent_Color, Color_Bg_Black,
444-
pb_left + (pb_width - dwin_string.length() * 16) / 2,
445-
pb_top + (pb_height - 32) / 2,
446-
S(dwin_string.string())
447-
);
448-
#endif
424+
#if HAS_PRINT_PROGRESS
425+
constexpr int16_t pb_margin = 5,
426+
pb_left = pb_margin + TERN(DWIN_MARLINUI_PORTRAIT, 0, 90),
427+
pb_height = TERN(DWIN_MARLINUI_PORTRAIT, 60, 20),
428+
pb_right = LCD_PIXEL_WIDTH - pb_margin,
429+
pb_bottom = TERN(DWIN_MARLINUI_PORTRAIT, 410, 220),
430+
pb_top = pb_bottom - pb_height,
431+
pb_width = pb_right - pb_left;
432+
433+
const progress_t progress = TERN(HAS_PRINT_PROGRESS_PERMYRIAD, get_progress_permyriad, get_progress_percent)();
434+
435+
if (!ui.did_first_redraw)
436+
DWIN_Draw_Rectangle(0, Select_Color, pb_left, pb_top, pb_right, pb_bottom); // Outline
437+
438+
static uint16_t old_solid = 50;
439+
const uint16_t pb_solid = (pb_width - 2) * (progress / (PROGRESS_SCALE)) * 0.01f;
440+
const bool p_draw = !ui.did_first_redraw || old_solid != pb_solid;
441+
442+
if (p_draw) {
443+
//if (pb_solid)
444+
DWIN_Draw_Rectangle(1, Select_Color, pb_left + 1, pb_top + 1, pb_left + pb_solid, pb_bottom - 1); // Fill the solid part
445+
446+
//if (pb_solid < old_solid)
447+
DWIN_Draw_Rectangle(1, Color_Bg_Black, pb_left + 1 + pb_solid, pb_top + 1, pb_right - 1, pb_bottom - 1); // Erase the rest
448+
449+
#if ENABLED(SHOW_SD_PERCENT)
450+
dwin_string.set(TERN(PRINT_PROGRESS_SHOW_DECIMALS, permyriadtostr4(progress), ui8tostr3rj(progress / (PROGRESS_SCALE))));
451+
dwin_string.add(PSTR("%"));
452+
DWIN_Draw_String(
453+
false, font16x32, Percent_Color, Color_Bg_Black,
454+
pb_left + (pb_width - dwin_string.length() * 16) / 2,
455+
pb_top + (pb_height - 32) / 2,
456+
S(dwin_string.string())
457+
);
458+
#endif
449459

450-
old_solid = pb_solid;
451-
}
460+
old_solid = pb_solid;
461+
}
462+
#endif // HAS_PRINT_PROGRESS
452463

453464
//
454465
// Status Message

0 commit comments

Comments
 (0)