|
|
@ -73,13 +73,18 @@ TFT_IO tftio; |
|
|
|
#define HEIGHT LCD_PIXEL_HEIGHT |
|
|
|
#define PAGE_HEIGHT 8 |
|
|
|
|
|
|
|
#include "../touch/touch_buttons.h" |
|
|
|
|
|
|
|
#if ENABLED(TOUCH_SCREEN_CALIBRATION) |
|
|
|
#include "../tft_io/touch_calibration.h" |
|
|
|
#include "../marlinui.h" |
|
|
|
#endif |
|
|
|
|
|
|
|
#if HAS_TOUCH_BUTTONS |
|
|
|
#include "../touch/touch_buttons.h" |
|
|
|
#if HAS_TOUCH_SLEEP |
|
|
|
#define HAS_TOUCH_BUTTONS_SLEEP 1 |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
#define X_HI (UPSCALE(TFT_PIXEL_OFFSET_X, WIDTH) - 1) |
|
|
|
#define Y_HI (UPSCALE(TFT_PIXEL_OFFSET_Y, HEIGHT) - 1) |
|
|
|
|
|
|
@ -340,6 +345,18 @@ static uint8_t page; |
|
|
|
} |
|
|
|
#endif // HAS_TOUCH_BUTTONS
|
|
|
|
|
|
|
|
static void u8g_upscale_clear_lcd(u8g_t *u8g, u8g_dev_t *dev, uint16_t *buffer) { |
|
|
|
setWindow(u8g, dev, 0, 0, (TFT_WIDTH) - 1, (TFT_HEIGHT) - 1); |
|
|
|
#if HAS_LCD_IO |
|
|
|
UNUSED(buffer); |
|
|
|
tftio.WriteMultiple(TFT_MARLINBG_COLOR, (TFT_WIDTH) * (TFT_HEIGHT)); |
|
|
|
#else |
|
|
|
memset2(buffer, TFT_MARLINBG_COLOR, (TFT_WIDTH) / 2); |
|
|
|
for (uint16_t i = 0; i < (TFT_HEIGHT) * sq(GRAPHICAL_TFT_UPSCALE); i++) |
|
|
|
u8g_WriteSequence(u8g, dev, (TFT_WIDTH) / 2, (uint8_t *)buffer); |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
static uint8_t msgInitCount = 2; // Ignore all messages until 2nd U8G_COM_MSG_INIT
|
|
|
|
|
|
|
|
uint8_t u8g_dev_tft_320x240_upscale_from_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) { |
|
|
@ -365,27 +382,32 @@ uint8_t u8g_dev_tft_320x240_upscale_from_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, u |
|
|
|
tftio.Init(); |
|
|
|
tftio.InitTFT(); |
|
|
|
TERN_(TOUCH_SCREEN_CALIBRATION, touch_calibration.calibration_reset()); |
|
|
|
|
|
|
|
// Clear Screen
|
|
|
|
setWindow(u8g, dev, 0, 0, (TFT_WIDTH) - 1, (TFT_HEIGHT) - 1); |
|
|
|
#if HAS_LCD_IO |
|
|
|
tftio.WriteMultiple(TFT_MARLINBG_COLOR, (TFT_WIDTH) * (TFT_HEIGHT)); |
|
|
|
#else |
|
|
|
memset2(buffer, TFT_MARLINBG_COLOR, (TFT_WIDTH) / 2); |
|
|
|
for (uint16_t i = 0; i < (TFT_HEIGHT) * sq(GRAPHICAL_TFT_UPSCALE); i++) |
|
|
|
u8g_WriteSequence(u8g, dev, (TFT_WIDTH) / 2, (uint8_t *)buffer); |
|
|
|
#endif |
|
|
|
u8g_upscale_clear_lcd(u8g, dev, buffer); |
|
|
|
return 0; |
|
|
|
|
|
|
|
case U8G_DEV_MSG_STOP: preinit = true; break; |
|
|
|
|
|
|
|
case U8G_DEV_MSG_PAGE_FIRST: |
|
|
|
case U8G_DEV_MSG_PAGE_FIRST: { |
|
|
|
page = 0; |
|
|
|
#if HAS_TOUCH_BUTTONS_SLEEP |
|
|
|
static bool sleepCleared; |
|
|
|
if (touchBt.isSleeping()) { |
|
|
|
if (!sleepCleared) { |
|
|
|
sleepCleared = true; |
|
|
|
u8g_upscale_clear_lcd(u8g, dev, buffer); |
|
|
|
IF_ENABLED(HAS_TOUCH_BUTTONS, redrawTouchButtons = true); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
else |
|
|
|
sleepCleared = false; |
|
|
|
#endif |
|
|
|
TERN_(HAS_TOUCH_BUTTONS, drawTouchButtons(u8g, dev)); |
|
|
|
setWindow(u8g, dev, TFT_PIXEL_OFFSET_X, TFT_PIXEL_OFFSET_Y, X_HI, Y_HI); |
|
|
|
break; |
|
|
|
} break; |
|
|
|
|
|
|
|
case U8G_DEV_MSG_PAGE_NEXT: |
|
|
|
if (TERN0(HAS_TOUCH_BUTTONS_SLEEP, touchBt.isSleeping())) break; |
|
|
|
if (++page > (HEIGHT / PAGE_HEIGHT)) return 1; |
|
|
|
|
|
|
|
LOOP_L_N(y, PAGE_HEIGHT) { |
|
|
|