✏️ Fix E3V2 MarlinUI draw flags (#23979)

This commit is contained in:
ellensp
2022-04-01 21:01:34 +13:00
committed by GitHub
parent 72b2e2b2c7
commit 0c366d3574

View File

@@ -193,11 +193,11 @@ FORCE_INLINE void _draw_heater_status(const heater_id_t heater, const uint16_t x
#define HOTEND_STATS 3 #define HOTEND_STATS 3
#elif HOTENDS > 1 #elif HOTENDS > 1
#define HOTEND_STATS 2 #define HOTEND_STATS 2
#elif HAS_HOTEND #else
#define HOTEND_STATS 1 #define HOTEND_STATS 1
#endif #endif
static celsius_t old_temp[HOTEND_STATS] = ARRAY_N_1(HOTEND_STATS, 500), static celsius_t old_temp[HOTEND_STATS] = ARRAY_N_1(HOTEND_STATS, 500),
old_target[HOTEND_STATS] = ARRAY_N_1(HOTEND_STATS, 500); old_target[HOTEND_STATS] = ARRAY_N_1(HOTEND_STATS, 500);
static bool old_on[HOTEND_STATS] = ARRAY_N_1(HOTEND_STATS, false); static bool old_on[HOTEND_STATS] = ARRAY_N_1(HOTEND_STATS, false);
#endif #endif
@@ -211,24 +211,23 @@ FORCE_INLINE void _draw_heater_status(const heater_id_t heater, const uint16_t x
#if HAS_HOTEND && HAS_HEATED_BED #if HAS_HOTEND && HAS_HEATED_BED
const bool isBed = heater < 0; const bool isBed = heater < 0;
const float tc = isBed ? thermalManager.degBed() : thermalManager.degHotend(heater), bool c_draw, t_draw, i_draw;
tt = isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater);
const bool ta = isBed ? thermalManager.isHeatingBed() : thermalManager.isHeatingHotend(heater);
bool c_draw = tc != (isBed ? old_bed_temp : old_temp[heater]),
t_draw = tt != (isBed ? old_bed_target : old_target[heater]),
i_draw = ta != (isBed ? old_bed_on : old_on[heater]);
if (isBed) { if (isBed) {
#if HAS_LEVELING const float tc = thermalManager.degBed(), tt = thermalManager.degTargetBed();
if (!i_draw && planner.leveling_active != old_leveling_on) i_draw = true; const bool ta = thermalManager.isHeatingBed();
old_leveling_on = planner.leveling_active; c_draw = tc != old_bed_temp;
#endif t_draw = tt != old_bed_target;
i_draw = ta != old_bed_on;
old_bed_temp = tc; old_bed_temp = tc;
old_bed_target = tt; old_bed_target = tt;
old_bed_on = ta; old_bed_on = ta;
} }
else { else {
const float tc = thermalManager.degHotend(heater), tt = thermalManager.degTargetHotend(heater);
const bool ta = thermalManager.isHeatingHotend(heater);
c_draw = tc != old_temp[heater];
t_draw = tt != old_target[heater];
i_draw = ta != old_on[heater];
old_temp[heater] = tc; old_temp[heater] = tc;
old_target[heater] = tt; old_target[heater] = tt;
old_on[heater] = ta; old_on[heater] = ta;
@@ -237,31 +236,41 @@ FORCE_INLINE void _draw_heater_status(const heater_id_t heater, const uint16_t x
constexpr bool isBed = false; constexpr bool isBed = false;
const float tc = thermalManager.degHotend(heater), tt = thermalManager.degTargetHotend(heater); const float tc = thermalManager.degHotend(heater), tt = thermalManager.degTargetHotend(heater);
const uint8_t ta = thermalManager.isHeatingHotend(heater); const uint8_t ta = thermalManager.isHeatingHotend(heater);
const bool c_draw = tc != old_bed_temp, t_draw = tt != old_bed_target, i_draw = ta != old_bed_on; bool c_draw = tc != old_temp[heater], t_draw = tt != old_target[heater], i_draw = ta != old_on[heater];
old_temp[heater] = tc; old_target[heater] = tt; old_on[heater] = ta; old_temp[heater] = tc; old_target[heater] = tt; old_on[heater] = ta;
#elif HAS_HEATED_BED #elif HAS_HEATED_BED
constexpr bool isBed = true; constexpr bool isBed = true;
const float tc = thermalManager.degBed(), tt = thermalManager.degTargetBed(); const float tc = thermalManager.degBed(), tt = thermalManager.degTargetBed();
const uint8_t ta = thermalManager.isHeatingBed(); const uint8_t ta = thermalManager.isHeatingBed();
bool c_draw = tc != old_temp[heater], t_draw = tt != old_target[heater], i_draw = ta != old_on[heater]; bool c_draw = tc != old_bed_temp, t_draw = tt != old_bed_target, i_draw = ta != old_bed_on;
#if HAS_LEVELING
if (!idraw && planner.leveling_active != old_leveling_on) i_draw = true;
old_leveling_on = tl;
#endif
old_bed_temp = tc; old_bed_target = tt; old_bed_on = ta; old_bed_temp = tc; old_bed_target = tt; old_bed_on = ta;
#else
bool c_draw = false, t_draw = false, i_draw = false;
constexpr float tc = 0, tt = 0;
constexpr uint8_t ta = 0;
#endif #endif
#if HAS_HEATED_BED && HAS_LEVELING
if (isBed) {
i_draw |= (planner.leveling_active != old_leveling_on);
old_leveling_on = planner.leveling_active;
}
#endif
// Draw target temperature, if needed
if (!ui.did_first_redraw || t_draw) { if (!ui.did_first_redraw || t_draw) {
dwin_string.set(i16tostr3rj(tt + 0.5)); dwin_string.set(i16tostr3rj(tt + 0.5));
dwin_string.add(LCD_STR_DEGREE); dwin_string.add(LCD_STR_DEGREE);
DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, x, y, S(dwin_string.string())); DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, x, y, S(dwin_string.string()));
} }
if (!ui.did_first_redraw || i_draw){ // Draw heater icon with on / off / leveled states
if (!ui.did_first_redraw || i_draw) {
const uint8_t ico = isBed ? (TERN0(HAS_LEVELING, planner.leveling_active) ? ICON_BedLevelOff : ICON_BedOff) : ICON_HotendOff; const uint8_t ico = isBed ? (TERN0(HAS_LEVELING, planner.leveling_active) ? ICON_BedLevelOff : ICON_BedOff) : ICON_HotendOff;
DWIN_ICON_Show(ICON, ico + ta, x, y + STATUS_CHR_HEIGHT + 2); DWIN_ICON_Show(ICON, ico + ta, x, y + STATUS_CHR_HEIGHT + 2);
} }
// Draw current temperature, if needed
if (!ui.did_first_redraw || c_draw) { if (!ui.did_first_redraw || c_draw) {
dwin_string.set(i16tostr3rj(tc + 0.5)); dwin_string.set(i16tostr3rj(tc + 0.5));
dwin_string.add(LCD_STR_DEGREE); dwin_string.add(LCD_STR_DEGREE);
@@ -412,43 +421,45 @@ void MarlinUI::draw_status_screen() {
// //
// Progress Bar // Progress Bar
// //
constexpr int16_t pb_margin = 5, #if HAS_PRINT_PROGRESS
pb_left = pb_margin + TERN(DWIN_MARLINUI_PORTRAIT, 0, 90), constexpr int16_t pb_margin = 5,
pb_height = TERN(DWIN_MARLINUI_PORTRAIT, 60, 20), pb_left = pb_margin + TERN(DWIN_MARLINUI_PORTRAIT, 0, 90),
pb_right = LCD_PIXEL_WIDTH - pb_margin, pb_height = TERN(DWIN_MARLINUI_PORTRAIT, 60, 20),
pb_bottom = TERN(DWIN_MARLINUI_PORTRAIT, 410, 220), pb_right = LCD_PIXEL_WIDTH - pb_margin,
pb_top = pb_bottom - pb_height, pb_bottom = TERN(DWIN_MARLINUI_PORTRAIT, 410, 220),
pb_width = pb_right - pb_left; pb_top = pb_bottom - pb_height,
pb_width = pb_right - pb_left;
const progress_t progress = TERN(HAS_PRINT_PROGRESS_PERMYRIAD, get_progress_permyriad, get_progress_percent)(); const progress_t progress = TERN(HAS_PRINT_PROGRESS_PERMYRIAD, get_progress_permyriad, get_progress_percent)();
if (!ui.did_first_redraw) if (!ui.did_first_redraw)
DWIN_Draw_Rectangle(0, Select_Color, pb_left, pb_top, pb_right, pb_bottom); // Outline DWIN_Draw_Rectangle(0, Select_Color, pb_left, pb_top, pb_right, pb_bottom); // Outline
static uint16_t old_solid = 50; static uint16_t old_solid = 50;
const uint16_t pb_solid = (pb_width - 2) * (progress / (PROGRESS_SCALE)) * 0.01f; const uint16_t pb_solid = (pb_width - 2) * (progress / (PROGRESS_SCALE)) * 0.01f;
const bool p_draw = !ui.did_first_redraw || old_solid != pb_solid; const bool p_draw = !ui.did_first_redraw || old_solid != pb_solid;
if (p_draw) { if (p_draw) {
//if (pb_solid) //if (pb_solid)
DWIN_Draw_Rectangle(1, Select_Color, pb_left + 1, pb_top + 1, pb_left + pb_solid, pb_bottom - 1); // Fill the solid part DWIN_Draw_Rectangle(1, Select_Color, pb_left + 1, pb_top + 1, pb_left + pb_solid, pb_bottom - 1); // Fill the solid part
//if (pb_solid < old_solid) //if (pb_solid < old_solid)
DWIN_Draw_Rectangle(1, Color_Bg_Black, pb_left + 1 + pb_solid, pb_top + 1, pb_right - 1, pb_bottom - 1); // Erase the rest DWIN_Draw_Rectangle(1, Color_Bg_Black, pb_left + 1 + pb_solid, pb_top + 1, pb_right - 1, pb_bottom - 1); // Erase the rest
#if ENABLED(SHOW_SD_PERCENT) #if ENABLED(SHOW_SD_PERCENT)
dwin_string.set(TERN(PRINT_PROGRESS_SHOW_DECIMALS, permyriadtostr4(progress), ui8tostr3rj(progress / (PROGRESS_SCALE)))); dwin_string.set(TERN(PRINT_PROGRESS_SHOW_DECIMALS, permyriadtostr4(progress), ui8tostr3rj(progress / (PROGRESS_SCALE))));
dwin_string.add(PSTR("%")); dwin_string.add(PSTR("%"));
DWIN_Draw_String( DWIN_Draw_String(
false, font16x32, Percent_Color, Color_Bg_Black, false, font16x32, Percent_Color, Color_Bg_Black,
pb_left + (pb_width - dwin_string.length() * 16) / 2, pb_left + (pb_width - dwin_string.length() * 16) / 2,
pb_top + (pb_height - 32) / 2, pb_top + (pb_height - 32) / 2,
S(dwin_string.string()) S(dwin_string.string())
); );
#endif #endif
old_solid = pb_solid; old_solid = pb_solid;
} }
#endif // HAS_PRINT_PROGRESS
// //
// Status Message // Status Message