Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions Marlin/Configuration_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -2007,6 +2007,13 @@
#define DEFAULT_SHARED_VOLUME USB_FLASH_DRIVE // :[ 'SD_ONBOARD', 'USB_FLASH_DRIVE' ]
#endif

// G-code Preview for TFT Color UI uses image data embedded in G-code files
#if ENABLED(TFT_COLOR_UI)
//#define GCODE_PREVIEW_JPEG // Enable JPEG thumbnail decoding
//#define GCODE_PREVIEW_PNG // Enable PNG thumbnail decoding
//#define GCODE_PREVIEW_QOI // Enable QOI thumbnail decoding
#endif

#endif // HAS_MEDIA

/**
Expand Down
4 changes: 4 additions & 0 deletions Marlin/src/inc/Conditionals-4-adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -1007,6 +1007,10 @@
#define HAS_EXTRA_PROGRESS 1
#endif

#if ANY(GCODE_PREVIEW_JPEG, GCODE_PREVIEW_PNG, GCODE_PREVIEW_QOI)
#define HAS_TFT_GCODE_PREVIEW 1
#endif

#if HAS_PRINT_PROGRESS && ANY(PRINT_PROGRESS_SHOW_DECIMALS, SHOW_REMAINING_TIME)
#define HAS_PRINT_PROGRESS_PERMYRIAD 1
#endif
Expand Down
18 changes: 9 additions & 9 deletions Marlin/src/lcd/e3v2/proui/dwin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@
#include "../../../feature/tmc_util.h"
#endif

#if HAS_GCODE_PREVIEW
#if HAS_PROUI_GCODE_PREVIEW
#include "gcode_preview.h"
#endif

Expand Down Expand Up @@ -645,7 +645,7 @@ void drawPrintDone() {
title.showCaption(GET_TEXT_F(MSG_PRINT_DONE));
DWINUI::clearMainArea();
dwinPrintHeader();
#if HAS_GCODE_PREVIEW
#if HAS_PROUI_GCODE_PREVIEW
const bool haspreview = preview.valid();
if (haspreview) {
preview.show();
Expand Down Expand Up @@ -1797,7 +1797,7 @@ void dwinLevelingDone() {

// Started a Print Job
void dwinPrintStarted() {
TERN_(HAS_GCODE_PREVIEW, if (hostPrinting()) preview.invalidate());
TERN_(HAS_PROUI_GCODE_PREVIEW, if (hostPrinting()) preview.invalidate());
TERN_(SET_PROGRESS_PERCENT, ui.progress_reset());
TERN_(SET_REMAINING_TIME, ui.reset_remaining_time());
hmiFlag.pause_flag = false;
Expand Down Expand Up @@ -1900,7 +1900,7 @@ void dwinSetDataDefaults() {
TERN_(LED_COLOR_PRESETS, leds.set_default());
applyLEDColor();
#endif
TERN_(HAS_GCODE_PREVIEW, hmiData.enablePreview = true);
TERN_(HAS_PROUI_GCODE_PREVIEW, hmiData.enablePreview = true);
}

void dwinCopySettingsTo(char * const buff) {
Expand Down Expand Up @@ -2064,7 +2064,7 @@ void dwinRedrawScreen() {

#endif // HAS_LOCKSCREEN

#if HAS_GCODE_PREVIEW
#if HAS_PROUI_GCODE_PREVIEW

void setPreview() { toggleCheckboxLine(hmiData.enablePreview); }

Expand All @@ -2079,10 +2079,10 @@ void dwinRedrawScreen() {
hmiReturnScreen();
}

#endif // HAS_GCODE_PREVIEW
#endif // HAS_PROUI_GCODE_PREVIEW

void gotoConfirmToPrint() {
#if HAS_GCODE_PREVIEW
#if HAS_PROUI_GCODE_PREVIEW
if (hmiData.enablePreview) {
gotoPopup(preview.drawFromSD, onClickConfirmToPrint);
return;
Expand Down Expand Up @@ -3261,7 +3261,7 @@ void drawControlMenu() {
void drawAdvancedSettingsMenu() {
constexpr uint8_t items = (1
+ COUNT_ENABLED(EEPROM_SETTINGS, HAS_MESH, HAS_BED_PROBE, HAS_HOME_OFFSET, HAS_TRINAMIC_CONFIG, HAS_ESDIAG, \
HAS_LOCKSCREEN, EDITABLE_DISPLAY_TIMEOUT, SOUND_MENU_ITEM, POWER_LOSS_RECOVERY, HAS_GCODE_PREVIEW, \
HAS_LOCKSCREEN, EDITABLE_DISPLAY_TIMEOUT, SOUND_MENU_ITEM, POWER_LOSS_RECOVERY, HAS_PROUI_GCODE_PREVIEW, \
PROUI_MEDIASORT, BAUD_RATE_GCODE, HAS_CUSTOM_COLORS)
+ 1
+ (ENABLED(PIDTEMP) && ANY(PID_AUTOTUNE_MENU, PID_EDIT_MENU))
Expand Down Expand Up @@ -3318,7 +3318,7 @@ void drawAdvancedSettingsMenu() {
#if ENABLED(POWER_LOSS_RECOVERY)
EDIT_ITEM(ICON_Pwrlossr, MSG_OUTAGE_RECOVERY, onDrawChkbMenu, setPwrLossr, &recovery.enabled);
#endif
#if HAS_GCODE_PREVIEW
#if HAS_PROUI_GCODE_PREVIEW
EDIT_ITEM(ICON_File, MSG_HAS_PREVIEW, onDrawChkbMenu, setPreview, &hmiData.enablePreview);
#endif
#if ENABLED(PROUI_MEDIASORT)
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/e3v2/proui/dwin.h
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ typedef struct {
#if ALL(LED_CONTROL_MENU, HAS_COLOR_LEDS)
LED1Color_t ledColor = defColorLeds;
#endif
#if HAS_GCODE_PREVIEW
#if HAS_PROUI_GCODE_PREVIEW
bool enablePreview = true;
#endif
} hmi_data_t;
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/e3v2/proui/dwin_defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@
#if PROUI_TUNING_GRAPH
#define PROUI_ITEM_PLOT // Plot temp graph viewer
#endif
#define HAS_GCODE_PREVIEW 1 // Preview G-code model thumbnail
#define HAS_PROUI_GCODE_PREVIEW 1 // Preview G-code model thumbnail
#define HAS_CUSTOM_COLORS 1 // Change display colors
#define HAS_ESDIAG 1 // View End-stop/Runout switch continuity
#define HAS_LOCKSCREEN 1 // Simple lockscreen
Expand Down
4 changes: 2 additions & 2 deletions Marlin/src/lcd/e3v2/proui/gcode_preview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@

#include "dwin_defines.h"

#if HAS_GCODE_PREVIEW
#if HAS_PROUI_GCODE_PREVIEW

#include "gcode_preview.h"

Expand Down Expand Up @@ -234,5 +234,5 @@ void Preview::show() {
dwinIconShow(xpos, ypos, 0x00);
}

#endif // HAS_GCODE_PREVIEW
#endif // HAS_PROUI_GCODE_PREVIEW
#endif // DWIN_LCD_PROUI
4 changes: 1 addition & 3 deletions Marlin/src/lcd/extui/mks_ui/draw_dialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,7 @@ extern bool temps_update_flag;
static void btn_ok_event_cb(lv_obj_t *btn, lv_event_t event) {
if (event != LV_EVENT_RELEASED) return;
if (DIALOG_IS(TYPE_PRINT_FILE)) {
#if HAS_GCODE_PREVIEW
preview_gcode_prehandle(list_file.file_name[sel_id]);
#endif
TERN_(HAS_MKS_GCODE_PREVIEW, preview_gcode_prehandle(list_file.file_name[sel_id]));
reset_print_time();
start_print_time();

Expand Down
6 changes: 3 additions & 3 deletions Marlin/src/lcd/extui/mks_ui/draw_ui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -548,7 +548,7 @@ char *creat_title_text() {
return public_buf_m;
}

#if HAS_GCODE_PREVIEW
#if HAS_MKS_GCODE_PREVIEW

uintptr_t gPicturePreviewStart = 0;

Expand Down Expand Up @@ -701,7 +701,7 @@ char *creat_title_text() {
#endif
}

#endif // HAS_GCODE_PREVIEW
#endif // HAS_MKS_GCODE_PREVIEW

void print_time_run() {
static uint8_t lastSec = 0;
Expand Down Expand Up @@ -1364,7 +1364,7 @@ void LV_TASK_HANDLER() {
if (mks_test_flag == 0x1E) mks_hardware_test();
#endif

TERN_(HAS_GCODE_PREVIEW, disp_pre_gcode(2, 36));
TERN_(HAS_MKS_GCODE_PREVIEW, disp_pre_gcode(2, 36));

GUI_RefreshPage();

Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/lcd/extui/mks_ui/draw_ui.h
Original file line number Diff line number Diff line change
Expand Up @@ -461,7 +461,7 @@ void update_gcode_command(int addr, uint8_t *s);
void get_gcode_command(int addr, uint8_t *d);
void lv_serial_capt_hook(void *, uint8_t);
void lv_eom_hook(void *);
#if HAS_GCODE_PREVIEW
#if HAS_MKS_GCODE_PREVIEW
void disp_pre_gcode(int xpos_pixel, int ypos_pixel);
#endif
void GUI_RefreshPage();
Expand Down
4 changes: 2 additions & 2 deletions Marlin/src/lcd/extui/mks_ui/pic_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@
#ifndef HAS_SPI_FLASH_FONT
#define HAS_SPI_FLASH_FONT 1 // Disabled until fix the font load code
#endif
#ifndef HAS_GCODE_PREVIEW
#define HAS_GCODE_PREVIEW 1
#ifndef HAS_MKS_GCODE_PREVIEW
#define HAS_MKS_GCODE_PREVIEW 1
#endif
#ifndef HAS_LANG_SELECT_SCREEN
#define HAS_LANG_SELECT_SCREEN 1
Expand Down
48 changes: 31 additions & 17 deletions Marlin/src/lcd/menu/menu_media.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@
#include "menu_item.h"
#include "../../sd/cardreader.h"

#if HAS_TFT_GCODE_PREVIEW
#include "../tft/ui_common.h"
#include "../tft/ui_gcode_preview.h"
#endif

void lcd_sd_updir() {
ui.encoderPosition = card.cdup() ? ENCODER_STEPS_PER_MENU_ITEM : 0;
encoderTopLine = 0;
Expand Down Expand Up @@ -64,24 +69,33 @@ class MenuItem_sdfile : public MenuItem_sdbase {
MenuItem_sdbase::draw(sel, row, fstr, theCard, false);
}
static void action(FSTR_P const fstr, CardReader &) {
#if ENABLED(SD_REPRINT_LAST_SELECTED_FILE)
// Save menu state for the selected file
sd_encoder_position = ui.encoderPosition;
sd_top_line = encoderTopLine;
sd_items = screen_items;
#endif
#if ENABLED(SD_MENU_CONFIRM_START)
MenuItem_submenu::action(fstr, []{
char * const filename = card.longest_filename();
MenuItem_confirm::select_screen(
GET_TEXT_F(MSG_BUTTON_PRINT), GET_TEXT_F(MSG_BUTTON_CANCEL),
sdcard_start_selected_file, nullptr,
GET_TEXT_F(MSG_START_PRINT), filename, F("?")
);
});
#if HAS_TFT_GCODE_PREVIEW
// Show preview for TFT_COLOR_UI
// First process the preview data
preview.invalidate(); // Clear any previous state
preview.hasPreview(); // Process the preview data (result doesn't matter)
// Always show the preview screen - drawFromSD() handles both cases
ui.goto_screen([]{ preview.drawFromSD(); });
#else
sdcard_start_selected_file();
UNUSED(fstr);
#if ENABLED(SD_REPRINT_LAST_SELECTED_FILE)
// Save menu state for the selected file
sd_encoder_position = ui.encoderPosition;
sd_top_line = encoderTopLine;
sd_items = screen_items;
#endif
#if ENABLED(SD_MENU_CONFIRM_START)
MenuItem_submenu::action(fstr, []{
char * const filename = card.longest_filename();
MenuItem_confirm::select_screen(
GET_TEXT_F(MSG_BUTTON_PRINT), GET_TEXT_F(MSG_BUTTON_CANCEL),
sdcard_start_selected_file, nullptr,
GET_TEXT_F(MSG_START_PRINT), filename, F("?")
);
});
#else
sdcard_start_selected_file();
UNUSED(fstr);
#endif
#endif
}
};
Expand Down
Loading