Skip to content

Commit

Permalink
🚸 More TFT Color UI fixes (MarlinFirmware#27388)
Browse files Browse the repository at this point in the history
  • Loading branch information
thinkyhead authored Sep 1, 2024
1 parent 0876bcd commit 80bd100
Show file tree
Hide file tree
Showing 21 changed files with 2,911 additions and 4,209 deletions.
2 changes: 2 additions & 0 deletions Marlin/src/inc/Conditionals_post.h
Original file line number Diff line number Diff line change
Expand Up @@ -3513,6 +3513,8 @@
#define LCD_WIDTH 21
#elif IS_DWIN_MARLINUI
// Defined by header
#elif HAS_GRAPHICAL_TFT
#define LCD_WIDTH ((TFT_WIDTH) / 16)
#else
#define LCD_WIDTH TERN(IS_ULTIPANEL, 20, 16)
#endif
Expand Down
6 changes: 3 additions & 3 deletions Marlin/src/lcd/marlinui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -375,9 +375,9 @@ void MarlinUI::init() {
}
}
#else
theCard.longFilename[
TERN(UTF_FILENAME_SUPPORT, utf8_byte_pos_by_char_num(theCard.longFilename, maxlen), maxlen)
] = '\0'; // cutoff at screen edge
// Simply cut off at maxlen
const uint8_t chop = TERN(UTF_FILENAME_SUPPORT, utf8_byte_pos_by_char_num(theCard.longFilename, maxlen), maxlen);
theCard.longFilename[_MAX(chop, LONG_FILENAME_LENGTH - 1)] = '\0';
#endif
}
return outstr;
Expand Down
5,944 changes: 1,796 additions & 4,148 deletions Marlin/src/lcd/tft/images/bootscreen_1024x600x16.cpp

Large diffs are not rendered by default.

1,049 changes: 1,049 additions & 0 deletions Marlin/src/lcd/tft/images/bootscreen_576x478x16.cpp

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions Marlin/src/lcd/tft/tft.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,10 @@ class TFT {
static void fill(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) { queue.fill(x, y, width, height, color); }
static void canvas(uint16_t x, uint16_t y, uint16_t width, uint16_t height) { queue.canvas(x, y, width, height); }
static void set_background(uint16_t color) { queue.set_background(color); }
static void add_text(uint16_t x, uint16_t y, uint16_t color, TFT_String tft_string, uint16_t maxWidth = 0) { queue.add_text(x, y, color, tft_string.string(), maxWidth); }
static void add_text(uint16_t x, uint16_t y, uint16_t color, const char *string, uint16_t maxWidth = 0) { queue.add_text(x, y, color, string, maxWidth); }
static void add_text(uint16_t x, uint16_t y, uint16_t color, TFT_String tft_string, uint16_t maxWidth=0) { queue.add_text(x, y, color, tft_string.string(), maxWidth); }
static void add_text(uint16_t x, uint16_t y, uint16_t color, const char *string, uint16_t maxWidth=0) { queue.add_text(x, y, color, string, maxWidth); }
static void add_image(int16_t x, int16_t y, MarlinImage image, uint16_t *colors) { queue.add_image(x, y, image, colors); }
static void add_image(int16_t x, int16_t y, MarlinImage image, uint16_t color_main = COLOR_WHITE, uint16_t color_background = COLOR_BACKGROUND, uint16_t color_shadow = COLOR_BLACK) { queue.add_image(x, y, image, color_main, color_background, color_shadow); }
static void add_image(int16_t x, int16_t y, MarlinImage image, uint16_t color_main = COLOR_WHITE, uint16_t color_background = COLOR_BACKGROUND, uint16_t color_shadow = COLOR_BLACK) { queue.add_image(x, y, image, color_main, color_background, color_shadow); }
static void add_bar(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) { queue.add_bar(x, y, width, height, color); }
static void add_rectangle(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) { queue.add_rectangle(x, y, width, height, color); }
static void draw_edit_screen_buttons();
Expand Down
1 change: 1 addition & 0 deletions Marlin/src/lcd/tft/tft_image.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ extern const tImage NoLogo;
extern const tImage MarlinLogo240x250x16;
extern const tImage MarlinLogo320x240x16;
extern const tImage MarlinLogo480x320x16;
extern const tImage MarlinLogo576x478x16;
extern const tImage MarlinLogo1024x600x16;
#endif
extern const tImage Background320x30x16;
Expand Down
1 change: 1 addition & 0 deletions Marlin/src/lcd/tft/themes/theme_ANET_BLACK.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
#define COLOR_MENU_TEXT COLOR_WHITE
#define COLOR_MENU_STATIC_TEXT COLOR_WHITE
#define COLOR_MENU_BACK_TEXT COLOR_YELLOW
#define COLOR_MENU_EDIT_TEXT COLOR_LIME2
#define COLOR_MENU_VALUE_FONT COLOR_ORANGE2
#define COLOR_SLIDER COLOR_ORANGE2
#define COLOR_INCREASE COLOR_WHITE
Expand Down
3 changes: 3 additions & 0 deletions Marlin/src/lcd/tft/themes/theme_BLUE_MARLIN.h
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,9 @@
#ifndef COLOR_MENU_BACK_TEXT
#define COLOR_MENU_BACK_TEXT COLOR_CYAN
#endif
#ifndef COLOR_MENU_EDIT_TEXT
#define COLOR_MENU_EDIT_TEXT COLOR_LIGHT_BLUE
#endif
#ifndef COLOR_MENU_VALUE
#define COLOR_MENU_VALUE COLOR_WHITE
#endif
Expand Down
3 changes: 3 additions & 0 deletions Marlin/src/lcd/tft/themes/theme_default.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@
#ifndef COLOR_MENU_BACK_TEXT
#define COLOR_MENU_BACK_TEXT COLOR_WHITE
#endif
#ifndef COLOR_MENU_EDIT_TEXT
#define COLOR_MENU_EDIT_TEXT COLOR_VIVID_GREEN
#endif
#ifndef COLOR_MENU_VALUE
#define COLOR_MENU_VALUE COLOR_WHITE
#endif
Expand Down
40 changes: 21 additions & 19 deletions Marlin/src/lcd/tft/ui_1024x600.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,27 +58,29 @@
// MarlinUI::show_bootscreen()
#ifndef BOOTSCREEN_LOGO
#if ENABLED(BOOT_MARLIN_LOGO_SMALL)
#define BOOTSCREEN_LOGO MarlinLogo195x59x16
#define BOOTSCREEN_LOGO_W 195
#define BOOTSCREEN_LOGO_H 59
#define BOOTSCREEN_SITE_URL_Y (TFT_HEIGHT - 70)
#define BOOTSCREEN_LOGO MarlinLogo195x59x16
#define BOOTSCREEN_LOGO_W 195
#define BOOTSCREEN_LOGO_H 59
#define BOOTSCREEN_SITE_URL_Y (TFT_HEIGHT - 70)
#elif ENABLED(BOOT_MARLIN_LOGO_HUGE)
#define BOOTSCREEN_LOGO MarlinLogo1024x600x16
#define BOOTSCREEN_LOGO_W TFT_WIDTH
#define BOOTSCREEN_LOGO_H TFT_HEIGHT
#define BOOTSCREEN_SITE_URL_Y (TFT_HEIGHT - 40)
#elif ENABLED(BOOT_MARLIN_LOGO_ROUND)
#define BOOTSCREEN_LOGO MarlinLogo576x478x16
#define BOOTSCREEN_LOGO_W 576
#define BOOTSCREEN_LOGO_H 478
#define BOOTSCREEN_LOGO_Y ((TFT_HEIGHT - BOOTSCREEN_LOGO_H) / 2 - 10)
#define BOOTSCREEN_SITE_URL_Y (TFT_HEIGHT - 50)
#else
#if ENABLED(BOOT_MARLIN_LOGO_HUGE)
#define BOOTSCREEN_LOGO MarlinLogo1024x600x16
#define BOOTSCREEN_LOGO_W TFT_WIDTH
#define BOOTSCREEN_LOGO_H TFT_HEIGHT
#else
#define BOOTSCREEN_LOGO MarlinLogo480x320x16
#define BOOTSCREEN_LOGO_W 480
#define BOOTSCREEN_LOGO_H 320
#endif
#define BOOTSCREEN_SITE_URL_Y (TFT_HEIGHT - 90)
#define BOOTSCREEN_LOGO MarlinLogo480x320x16
#define BOOTSCREEN_LOGO_W 480
#define BOOTSCREEN_LOGO_H 320
#endif
#ifndef BOOTSCREEN_SITE_URL_Y
#define BOOTSCREEN_SITE_URL_Y (TFT_HEIGHT - 90)
#endif
#endif

#if !defined(BOOTSCREEN_LOGO_X) && !defined(BOOTSCREEN_LOGO_Y)
#define BOOTSCREEN_LOGO_X (TFT_WIDTH - BOOTSCREEN_LOGO_W) / 2
#define BOOTSCREEN_LOGO_Y (TFT_HEIGHT - BOOTSCREEN_LOGO_H) / 2
#endif

#if !defined(NAVIGATION_PAGE_UP_X) && !defined(NAVIGATION_PAGE_UP_Y) && !defined(NAVIGATION_PAGE_DOWN_X) && !defined(NAVIGATION_PAGE_DOWN_Y) && !defined(NAVIGATION_BACK_X) && !defined(NAVIGATION_BACK_Y)
Expand Down
5 changes: 0 additions & 5 deletions Marlin/src/lcd/tft/ui_240x320.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,6 @@
#endif
#endif

#if !defined(BOOTSCREEN_LOGO_X) && !defined(BOOTSCREEN_LOGO_Y)
#define BOOTSCREEN_LOGO_X (TFT_WIDTH - BOOTSCREEN_LOGO_W) / 2
#define BOOTSCREEN_LOGO_Y (TFT_HEIGHT - BOOTSCREEN_LOGO_H) / 2
#endif

#if !defined(NAVIGATION_PAGE_UP_X) && !defined(NAVIGATION_PAGE_UP_Y) && !defined(NAVIGATION_PAGE_DOWN_X) && !defined(NAVIGATION_PAGE_DOWN_Y) && !defined(NAVIGATION_BACK_X) && !defined(NAVIGATION_BACK_Y)
#define NAVIGATION_PAGE_UP_X 24
#define NAVIGATION_PAGE_UP_Y TFT_HEIGHT - 34
Expand Down
5 changes: 0 additions & 5 deletions Marlin/src/lcd/tft/ui_320x240.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,6 @@
#endif
#endif

#if !defined(BOOTSCREEN_LOGO_X) && !defined(BOOTSCREEN_LOGO_Y)
#define BOOTSCREEN_LOGO_X (TFT_WIDTH - BOOTSCREEN_LOGO_W) / 2
#define BOOTSCREEN_LOGO_Y (TFT_HEIGHT - BOOTSCREEN_LOGO_H) / 2
#endif

#if !defined(NAVIGATION_PAGE_UP_X) && !defined(NAVIGATION_PAGE_UP_Y) && !defined(NAVIGATION_PAGE_DOWN_X) && !defined(NAVIGATION_PAGE_DOWN_Y) && !defined(NAVIGATION_BACK_X) && !defined(NAVIGATION_BACK_Y)
#define NAVIGATION_PAGE_UP_X 48
#define NAVIGATION_PAGE_UP_Y TFT_HEIGHT - 34
Expand Down
5 changes: 0 additions & 5 deletions Marlin/src/lcd/tft/ui_320x480.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,6 @@
#endif
#endif

#if !defined(BOOTSCREEN_LOGO_X) && !defined(BOOTSCREEN_LOGO_Y)
#define BOOTSCREEN_LOGO_X (TFT_WIDTH - BOOTSCREEN_LOGO_W) / 2
#define BOOTSCREEN_LOGO_Y (TFT_HEIGHT - BOOTSCREEN_LOGO_H) / 2
#endif

#if !defined(NAVIGATION_PAGE_UP_X) && !defined(NAVIGATION_PAGE_UP_Y) && !defined(NAVIGATION_PAGE_DOWN_X) && !defined(NAVIGATION_PAGE_DOWN_Y) && !defined(NAVIGATION_BACK_X) && !defined(NAVIGATION_BACK_Y)
#define NAVIGATION_PAGE_UP_X 48
#define NAVIGATION_PAGE_UP_Y TFT_HEIGHT - 38
Expand Down
5 changes: 0 additions & 5 deletions Marlin/src/lcd/tft/ui_480x272.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,6 @@
#endif
#endif

#if !defined(BOOTSCREEN_LOGO_X) && !defined(BOOTSCREEN_LOGO_Y)
#define BOOTSCREEN_LOGO_X (TFT_WIDTH - BOOTSCREEN_LOGO_W) / 2
#define BOOTSCREEN_LOGO_Y (TFT_HEIGHT - BOOTSCREEN_LOGO_H) / 2
#endif

#if !defined(NAVIGATION_PAGE_UP_X) && !defined(NAVIGATION_PAGE_UP_Y) && !defined(NAVIGATION_PAGE_DOWN_X) && !defined(NAVIGATION_PAGE_DOWN_Y) && !defined(NAVIGATION_BACK_X) && !defined(NAVIGATION_BACK_Y)
#define NAVIGATION_PAGE_UP_X 104
#define NAVIGATION_PAGE_UP_Y TFT_HEIGHT - 34
Expand Down
5 changes: 0 additions & 5 deletions Marlin/src/lcd/tft/ui_480x320.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,6 @@
#endif
#endif

#if !defined(BOOTSCREEN_LOGO_X) && !defined(BOOTSCREEN_LOGO_Y)
#define BOOTSCREEN_LOGO_X (TFT_WIDTH - BOOTSCREEN_LOGO_W) / 2
#define BOOTSCREEN_LOGO_Y (TFT_HEIGHT - BOOTSCREEN_LOGO_H) / 2
#endif

#if !defined(NAVIGATION_PAGE_UP_X) && !defined(NAVIGATION_PAGE_UP_Y) && !defined(NAVIGATION_PAGE_DOWN_X) && !defined(NAVIGATION_PAGE_DOWN_Y) && !defined(NAVIGATION_BACK_X) && !defined(NAVIGATION_BACK_Y)
#define NAVIGATION_PAGE_UP_X 104
#define NAVIGATION_PAGE_UP_Y TFT_HEIGHT - 34
Expand Down
4 changes: 2 additions & 2 deletions Marlin/src/lcd/tft/ui_color_ui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ void MarlinUI::draw_status_screen() {
tft.add_image(0, 0, imgFeedRate, color);
tft_string.set(i16tostr3rj(feedrate_percentage));
tft_string.add('%');
tft.add_text(36, tft_string.vcenter(30), color , tft_string);
tft.add_text(36, tft_string.vcenter(30), color, tft_string);
TERN_(TOUCH_SCREEN, touch.add_control(FEEDRATE, FEEDRATE_X, FEEDRATE_Y, FEEDRATE_W, FEEDRATE_H));

#if HAS_EXTRUDERS
Expand All @@ -312,7 +312,7 @@ void MarlinUI::draw_status_screen() {
tft.add_image(FLOWRATE_ICON_X, FLOWRATE_ICON_X, imgFlowRate, color);
tft_string.set(i16tostr3rj(planner.flow_percentage[active_extruder]));
tft_string.add('%');
tft.add_text(FLOWRATE_TEXT_X, FLOWRATE_TEXT_Y, color , tft_string);
tft.add_text(FLOWRATE_TEXT_X, FLOWRATE_TEXT_Y, color, tft_string);
TERN_(TOUCH_SCREEN, touch.add_control(FLOWRATE, FLOWRATE_X, FLOWRATE_Y, FLOWRATE_W, FLOWRATE_H, active_extruder));
#endif

Expand Down
13 changes: 6 additions & 7 deletions Marlin/src/lcd/tft/ui_common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -364,9 +364,6 @@ void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const ftpl, c
tft_string.set(string, itemIndex, itemStringC, itemStringF);
tft.add_text(text_x + line_shift, MENU_TEXT_Y, color, tft_string);

#ifndef MENU_ITEM_SUBMENU_ICON_X
#define MENU_ITEM_SUBMENU_ICON_X (TFT_WIDTH - 32)
#endif
if (post_char == LCD_STR_ARROW_RIGHT[0])
tft.add_image(MENU_ITEM_SUBMENU_ICON_X, MENU_ITEM_ICON_Y, imgRight, color, lineColor);
}
Expand All @@ -375,11 +372,12 @@ void MenuItemBase::_draw(const bool sel, const uint8_t row, FSTR_P const ftpl, c
void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const ftpl, const char * const inStr, const bool pgm) {
(void)menu_item(row, sel);

constexpr uint8_t text_x = (TFT_WIDTH >= 480) ? MENU_ITEM_ICON_SPACE : MENU_TEXT_X;
tft_string.set(ftpl, itemIndex, itemStringC, itemStringF);
tft.add_text(MENU_TEXT_X, MENU_TEXT_Y, COLOR_MENU_TEXT, tft_string);
tft.add_text(text_x, MENU_TEXT_Y, COLOR_MENU_EDIT_TEXT, tft_string);
if (inStr) {
tft_string.set(inStr);
tft.add_text(TFT_WIDTH - MENU_TEXT_X - tft_string.width(), MENU_TEXT_Y, COLOR_MENU_VALUE, tft_string);
tft.add_text(MENU_EDIT_ITEM_RIGHT_X - tft_string.width(), MENU_TEXT_Y, COLOR_MENU_VALUE, tft_string);
}
}

Expand Down Expand Up @@ -417,8 +415,9 @@ void MenuItem_static::draw(const uint8_t row, FSTR_P const ftpl, const uint8_t s
const uint16_t lineColor = menu_item(row, sel);
constexpr uint8_t line_shift = (TFT_WIDTH >= 480) ? MENU_ITEM_ICON_SPACE : 0;
if (isDir) tft.add_image(MENU_ITEM_ICON_X + line_shift, MENU_ITEM_ICON_Y, imgDirectory, COLOR_MENU_TEXT, lineColor);
uint8_t maxlen = (MENU_ITEM_HEIGHT) - (MENU_TEXT_Y) + 1;
tft.add_text(MENU_ITEM_ICON_SPACE + line_shift, MENU_TEXT_Y, COLOR_MENU_TEXT, ui.scrolled_filename(theCard, maxlen, sel));
const char * const filename = ui.scrolled_filename(theCard, LCD_WIDTH - 1, sel);
//SERIAL_ECHOLNPGM("Drawing filename: ", filename);
tft.add_text(MENU_ITEM_ICON_SPACE + line_shift, MENU_TEXT_Y, COLOR_MENU_TEXT, filename);
}

#endif
Expand Down
16 changes: 15 additions & 1 deletion Marlin/src/lcd/tft/ui_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,25 @@
#define UI_INCL_(W, H) STRINGIFY_(ui_##W##x##H.h)
#define UI_INCL(W, H) UI_INCL_(W, H)

#include "ui_theme.h"
#include UI_INCL(TFT_WIDTH, TFT_HEIGHT)
#include "ui_theme.h"
#include "tft_font.h"
#include "tft_color.h"

#ifndef BOOTSCREEN_LOGO_X
#define BOOTSCREEN_LOGO_X (TFT_WIDTH - BOOTSCREEN_LOGO_W) / 2
#endif
#ifndef BOOTSCREEN_LOGO_Y
#define BOOTSCREEN_LOGO_Y (TFT_HEIGHT - BOOTSCREEN_LOGO_H) / 2
#endif

#ifndef MENU_EDIT_ITEM_RIGHT_X
#define MENU_EDIT_ITEM_RIGHT_X ((TFT_WIDTH) - (MENU_TEXT_X))
#endif
#ifndef MENU_ITEM_SUBMENU_ICON_X
#define MENU_ITEM_SUBMENU_ICON_X (TFT_WIDTH - 32)
#endif

// Common Implementation
#define Z_SELECTION_Z 1
#define Z_SELECTION_Z_PROBE -1
Expand Down
5 changes: 5 additions & 0 deletions Marlin/src/lcd/tft/ui_theme.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,10 @@
#define TFT_THEME_INCL(M) TFT_THEME_INCL_(M)

#include "tft_color.h"

#if ENABLED(BOOT_MARLIN_LOGO_HUGE)
#define COLOR_WEBSITE_URL COLOR_YELLOW
#endif

#include TFT_THEME_INCL(TFT_THEME)
#include "themes/theme_default.h"
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ def image2bin(image, output_file, transparency):
print("Utility to export a image in Marlin TFT friendly format.")
print("It will dump a raw bin RGB565 image or create a CPP file with an array of 16 bit image pixels.")
print("Usage: gen-tft-image.py INPUT_IMAGE.(png|bmp|jpg) OUTPUT_FILE.(cpp|bin) [--transparency]")
print("Author: rhapsodyv")
print("Authors: rhapsodyv, thinkyhead")
exit(1)

transparency = len(sys.argv) > 3 and sys.argv[3] == "--transparency"
Expand Down

0 comments on commit 80bd100

Please sign in to comment.