Move screen for Color UI (#19386)
This commit is contained in:
		
							
								
								
									
										
											BIN
										
									
								
								Marlin/src/lcd/tft/bitmaps/btn_64x52_rounded.bmp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Marlin/src/lcd/tft/bitmaps/btn_64x52_rounded.bmp
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 9.8 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Marlin/src/lcd/tft/bitmaps/home.bmp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Marlin/src/lcd/tft/bitmaps/home.bmp
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 12 KiB | 
							
								
								
									
										82
									
								
								Marlin/src/lcd/tft/images/btn_rounded_64x52x4.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								Marlin/src/lcd/tft/images/btn_rounded_64x52x4.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,82 @@ | ||||
| /** | ||||
|  * Marlin 3D Printer Firmware | ||||
|  * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] | ||||
|  * | ||||
|  * Based on Sprinter and grbl. | ||||
|  * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm | ||||
|  * | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #include "../../../inc/MarlinConfigPre.h" | ||||
|  | ||||
| #if HAS_GRAPHICAL_TFT | ||||
|  | ||||
| extern const uint8_t btn_rounded_64x52x4[1664] = { | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x88, | ||||
|   0x88, 0x88, 0x79, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x87, 0x77, 0x78, | ||||
|   0x88, 0x78, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x66, 0x78, | ||||
|   0x88, 0x8d, 0xff, 0xb8, 0x54, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x45, 0x7b, 0xff, 0xc6, 0x67, | ||||
|   0x87, 0xbf, 0xf7, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x6f, 0xf9, 0x56, | ||||
|   0x87, 0xef, 0x84, 0x44, 0x45, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x58, 0xfd, 0x46, | ||||
|   0x87, 0xff, 0x54, 0x44, 0x56, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xff, 0x45, | ||||
|   0x87, 0xff, 0x44, 0x45, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x76, 0xff, 0x45, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x77, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x77, 0x77, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x77, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xff, 0x44, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0xff, 0x44, | ||||
|   0x87, 0xef, 0x84, 0x56, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x7a, 0xfe, 0x44, | ||||
|   0x87, 0xaf, 0xf6, 0x56, 0x77, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x77, 0x9f, 0xf9, 0x44, | ||||
|   0x87, 0x7d, 0xff, 0xb8, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0x9c, 0xff, 0xd4, 0x45, | ||||
|   0x87, 0x76, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x54, 0x45, | ||||
|   0x87, 0x76, 0x56, 0xad, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x64, 0x44, 0x46, | ||||
|   0x87, 0x77, 0x65, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x56, | ||||
|   0x88, 0x77, 0x76, 0x55, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x55, 0x67, | ||||
|   0x88, 0x77, 0x77, 0x66, 0x65, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x56, 0x66, 0x78, | ||||
|   0x88, 0x88, 0x77, 0x77, 0x76, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x67, 0x77, 0x78, | ||||
| }; | ||||
|  | ||||
| #endif // HAS_GRAPHICAL_TFT | ||||
							
								
								
									
										94
									
								
								Marlin/src/lcd/tft/images/home_64x64x4.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								Marlin/src/lcd/tft/images/home_64x64x4.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | ||||
| /** | ||||
|  * Marlin 3D Printer Firmware | ||||
|  * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] | ||||
|  * | ||||
|  * Based on Sprinter and grbl. | ||||
|  * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm | ||||
|  * | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #include "../../../inc/MarlinConfigPre.h" | ||||
|  | ||||
| #if HAS_GRAPHICAL_TFT | ||||
|  | ||||
| extern const uint8_t home_64x64x4[2048] = { | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x77, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x67, 0x88, 0x76, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x86, 0x9d, 0xff, 0xea, 0x67, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x69, 0xff, 0xff, 0xff, 0xc6, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x86, 0x9f, 0xff, 0xff, 0xff, 0xfc, 0x67, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x69, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc6, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x86, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x67, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x69, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xc6, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x86, 0x9f, 0xff, 0xff, 0xff, 0x40, 0xbf, 0xff, 0xff, 0xfc, 0x67, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x69, 0xff, 0xff, 0xff, 0xf6, 0x54, 0xa, 0xff, 0xff, 0xff, 0xc6, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x86, 0x9f, 0xff, 0xff, 0xff, 0x57, 0xff, 0x80, 0xaf, 0xff, 0xff, 0xfc, 0x67, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x69, 0xff, 0xff, 0xff, 0xf5, 0x6f, 0xff, 0xf9, 0xa, 0xff, 0xff, 0xff, 0xc6, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x86, 0x9f, 0xff, 0xff, 0xff, 0x56, 0xff, 0xff, 0xff, 0x90, 0xaf, 0xff, 0xff, 0xfc, 0x67, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x69, 0xff, 0xff, 0xff, 0xf5, 0x6f, 0xff, 0xff, 0xff, 0xf9, 0xa, 0xff, 0xff, 0xff, 0xc6, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x86, 0x9f, 0xff, 0xff, 0xff, 0x56, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0xaf, 0xff, 0xff, 0xfc, 0x67, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x69, 0xff, 0xff, 0xff, 0xf5, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xa, 0xff, 0xff, 0xff, 0xc6, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x86, 0x9f, 0xff, 0xff, 0xff, 0x56, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0xaf, 0xff, 0xff, 0xfc, 0x67, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x69, 0xff, 0xff, 0xff, 0xf5, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xa, 0xff, 0xff, 0xff, 0xc6, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x86, 0x9f, 0xff, 0xff, 0xff, 0x56, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0xaf, 0xff, 0xff, 0xfc, 0x67, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x69, 0xff, 0xff, 0xff, 0xf5, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xa, 0xff, 0xff, 0xff, 0xc6, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x86, 0x9f, 0xff, 0xff, 0xff, 0x56, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0xbf, 0xff, 0xff, 0xfc, 0x67, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x69, 0xff, 0xff, 0xff, 0xf5, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xa, 0xff, 0xff, 0xff, 0xc6, 0x78, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x86, 0x9f, 0xff, 0xff, 0xff, 0x56, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0xaf, 0xff, 0xff, 0xfc, 0x67, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x69, 0xff, 0xff, 0xff, 0xf5, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xa, 0xff, 0xff, 0xff, 0xc6, 0x78, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x86, 0x9f, 0xff, 0xff, 0xff, 0x56, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0xaf, 0xff, 0xff, 0xfc, 0x67, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x69, 0xff, 0xff, 0xff, 0xf5, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xa, 0xff, 0xff, 0xff, 0xc6, 0x78, 0x88, 0x88, | ||||
|   0x88, 0x86, 0x9f, 0xff, 0xff, 0xff, 0x56, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0xaf, 0xff, 0xff, 0xfc, 0x67, 0x88, 0x88, | ||||
|   0x88, 0x69, 0xff, 0xff, 0xff, 0xf5, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xb, 0xff, 0xff, 0xff, 0xc6, 0x78, 0x88, | ||||
|   0x87, 0x7f, 0xff, 0xff, 0xff, 0x66, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0xbf, 0xff, 0xff, 0xfb, 0x68, 0x88, | ||||
|   0x87, 0x7f, 0xff, 0xff, 0xf7, 0x3c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xb, 0xff, 0xff, 0xfd, 0x67, 0x88, | ||||
|   0x87, 0x3d, 0xff, 0xff, 0x75, 0x59, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x30, 0xbf, 0xff, 0xfa, 0x68, 0x88, | ||||
|   0x88, 0x44, 0xce, 0xd7, 0x58, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x74, 0x19, 0xee, 0xa6, 0x88, 0x88, | ||||
|   0x88, 0x73, 0x24, 0x56, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x52, 0x35, 0x68, 0x88, 0x88, | ||||
|   0x88, 0x87, 0x66, 0x78, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x87, 0x67, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x55, 0x55, 0x55, 0x5d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x44, 0x44, 0x44, 0x12, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x88, 0x88, 0x88, 0x72, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0x88, 0x88, 0x88, 0x84, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0x88, 0x88, 0x88, 0x84, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0x88, 0x88, 0x88, 0x84, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0x88, 0x88, 0x88, 0x84, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0x88, 0x88, 0x88, 0x84, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0x88, 0x88, 0x88, 0x84, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0x88, 0x88, 0x88, 0x84, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0x88, 0x88, 0x88, 0x84, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0x88, 0x88, 0x88, 0x84, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0x88, 0x88, 0x88, 0x84, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0x88, 0x88, 0x88, 0x84, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0x88, 0x88, 0x88, 0x84, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x64, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0x88, 0x88, 0x88, 0x84, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x83, 0x4c, 0xee, 0xee, 0xee, 0xee, 0xee, 0xff, 0x97, 0x88, 0x88, 0x88, 0x84, 0xae, 0xee, 0xee, 0xee, 0xee, 0xee, 0xea, 0x67, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x32, 0x44, 0x44, 0x44, 0x44, 0x33, 0x57, 0x88, 0x88, 0x88, 0x88, 0x86, 0x43, 0x34, 0x44, 0x44, 0x44, 0x34, 0x55, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x76, 0x55, 0x55, 0x55, 0x55, 0x55, 0x67, 0x88, 0x88, 0x88, 0x88, 0x87, 0x65, 0x55, 0x55, 0x55, 0x55, 0x56, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, | ||||
|   0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88 | ||||
| }; | ||||
|  | ||||
| #endif // HAS_GRAPHICAL_TFT | ||||
| @@ -42,6 +42,7 @@ | ||||
| #define COLOR_SCARLET         0xF904  // #FF2020 | ||||
| #define COLOR_LIME            0x7E00  // #00FF00 | ||||
| #define COLOR_BLUE            0x001F  // #0000FF | ||||
| #define COLOR_LIGHT_BLUE      0x061F  // #00C3FF | ||||
| #define COLOR_YELLOW          0xFFE0  // #FFFF00 | ||||
| #define COLOR_MAGENTA         0xF81F  // #FF00FF | ||||
| #define COLOR_FUCHSIA         0xF81F  // #FF00FF | ||||
| @@ -66,10 +67,11 @@ | ||||
|  | ||||
| #define COLOR_DARK_PURPLE     0x9930  // #992380 | ||||
|  | ||||
|  | ||||
| #define COLOR_BACKGROUND        0x20AC  // #1E156E | ||||
| #define COLOR_SELECTION_BG      0x9930  // #992380 | ||||
| #define COLOR_WEBSITE_URL       0x03B7 | ||||
| #ifndef COLOR_BACKGROUND | ||||
|   #define COLOR_BACKGROUND    0x20AC  // #1E156E | ||||
| #endif | ||||
| #define COLOR_SELECTION_BG    0x9930  // #992380 | ||||
| #define COLOR_WEBSITE_URL     0x03B7 | ||||
|  | ||||
| #define COLOR_INACTIVE          COLOR_GREY | ||||
| #define COLOR_COLD              COLOR_AQUA | ||||
|   | ||||
| @@ -45,6 +45,8 @@ const tImage Fan_Slow1_64x64x4      = { (void *)fan_slow1_64x64x4, 64, 64, GREYS | ||||
| const tImage Fan_Fast0_64x64x4      = { (void *)fan_fast0_64x64x4, 64, 64, GREYSCALE4 }; | ||||
| const tImage Fan_Fast1_64x64x4      = { (void *)fan_fast1_64x64x4, 64, 64, GREYSCALE4 }; | ||||
| const tImage SD_64x64x4             = { (void *)sd_64x64x4, 64, 64, GREYSCALE4 }; | ||||
| const tImage Home_64x64x4           = { (void *)home_64x64x4, 64, 64, GREYSCALE4 }; | ||||
| const tImage BtnRounded_64x52x4     = { (void *)btn_rounded_64x52x4, 64, 52, GREYSCALE4 }; | ||||
| const tImage Menu_64x64x4           = { (void *)menu_64x64x4, 64, 64, GREYSCALE4 }; | ||||
| const tImage Settings_64x64x4       = { (void *)settings_64x64x4, 64, 64, GREYSCALE4 }; | ||||
| const tImage Confirm_64x64x4        = { (void *)confirm_64x64x4, 64, 64, GREYSCALE4 }; | ||||
|   | ||||
| @@ -39,6 +39,8 @@ extern const uint8_t fan0_64x64x4[], fan1_64x64x4[]; | ||||
| extern const uint8_t fan_slow0_64x64x4[], fan_slow1_64x64x4[]; | ||||
| extern const uint8_t fan_fast0_64x64x4[], fan_fast1_64x64x4[]; | ||||
| extern const uint8_t sd_64x64x4[]; | ||||
| extern const uint8_t home_64x64x4[]; | ||||
| extern const uint8_t btn_rounded_64x52x4[]; | ||||
| extern const uint8_t menu_64x64x4[]; | ||||
| extern const uint8_t settings_64x64x4[]; | ||||
| extern const uint8_t confirm_64x64x4[]; | ||||
| @@ -90,6 +92,8 @@ enum MarlinImage : uint8_t { | ||||
|   imgRefresh, | ||||
|   imgLeveling, | ||||
|   imgSlider, | ||||
|   imgHome, | ||||
|   imgBtn52Rounded, | ||||
|   imgCount, | ||||
|   noImage = imgCount, | ||||
|   imgPageUp = imgLeft, | ||||
| @@ -136,6 +140,8 @@ extern const tImage Fan_Slow1_64x64x4; | ||||
| extern const tImage Fan_Fast0_64x64x4; | ||||
| extern const tImage Fan_Fast1_64x64x4; | ||||
| extern const tImage SD_64x64x4; | ||||
| extern const tImage Home_64x64x4; | ||||
| extern const tImage BtnRounded_64x52x4; | ||||
| extern const tImage Menu_64x64x4; | ||||
| extern const tImage Settings_64x64x4; | ||||
| extern const tImage Confirm_64x64x4; | ||||
|   | ||||
| @@ -35,6 +35,7 @@ | ||||
|  | ||||
| #include "tft.h" | ||||
|  | ||||
| bool Touch::enabled = true; | ||||
| int16_t Touch::x, Touch::y; | ||||
| touch_control_t Touch::controls[]; | ||||
| touch_control_t *Touch::current_control; | ||||
| @@ -54,6 +55,7 @@ void Touch::init() { | ||||
|   calibration_reset(); | ||||
|   reset(); | ||||
|   io.Init(); | ||||
|   enable(); | ||||
| } | ||||
|  | ||||
| void Touch::add_control(TouchControlType type, uint16_t x, uint16_t y, uint16_t width, uint16_t height, int32_t data) { | ||||
| @@ -72,6 +74,8 @@ void Touch::idle() { | ||||
|   uint16_t i; | ||||
|   int16_t _x, _y; | ||||
|  | ||||
|   if (!enabled) return; | ||||
|  | ||||
|   if (now == millis()) return; | ||||
|   now = millis(); | ||||
|  | ||||
| @@ -253,6 +257,13 @@ void Touch::touch(touch_control_t *control) { | ||||
|       case UBL: hold(control, UBL_REPEAT_DELAY); ui.encoderPosition += control->data; break; | ||||
|     #endif | ||||
|  | ||||
|     case MOVE_AXIS: | ||||
|       ui.goto_screen((screenFunc_t)ui.move_axis_screen); | ||||
|       break; | ||||
|  | ||||
|     // TODO: TOUCH could receive data to pass to the callback | ||||
|     case BUTTON: ((screenFunc_t)control->data)(); break; | ||||
|  | ||||
|     default: break; | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -79,6 +79,8 @@ enum TouchControlType : uint16_t { | ||||
|   FEEDRATE, | ||||
|   FLOWRATE, | ||||
|   UBL, | ||||
|   MOVE_AXIS, | ||||
|   BUTTON, | ||||
| }; | ||||
|  | ||||
| typedef void (*screenFunc_t)(); | ||||
| @@ -132,6 +134,7 @@ class Touch { | ||||
|   private: | ||||
|     static TOUCH_DRIVER io; | ||||
|     static int16_t x, y; | ||||
|     static bool enabled; | ||||
|  | ||||
|     static touch_control_t controls[MAX_CONTROLS]; | ||||
|     static touch_control_t *current_control; | ||||
| @@ -162,6 +165,8 @@ class Touch { | ||||
|     static void clear() { controls_count = 0; } | ||||
|     static void idle(); | ||||
|     static bool is_clicked() { return touch_control_type == CLICK; } | ||||
|     static void disable() { enabled = false; } | ||||
|     static void enable() { enabled = true; } | ||||
|  | ||||
|     static void add_control(TouchControlType type, uint16_t x, uint16_t y, uint16_t width, uint16_t height, int32_t data = 0); | ||||
|  | ||||
|   | ||||
| @@ -650,4 +650,7 @@ void menu_item(const uint8_t row, bool sel ) { | ||||
|   TERN_(TOUCH_SCREEN, touch.add_control(sel ? CLICK : MENU_ITEM, 0, 2 + 34 * row, 320, 32, encoderTopLine + row)); | ||||
| } | ||||
|  | ||||
| void MarlinUI::move_axis_screen() { | ||||
| } | ||||
|  | ||||
| #endif // HAS_UI_320x240 | ||||
|   | ||||
| @@ -73,6 +73,8 @@ const tImage Images[imgCount] = { | ||||
|   Refresh_32x32x4, | ||||
|   Leveling_32x32x4, | ||||
|   Slider8x16x4, | ||||
|   Home_64x64x4, | ||||
|   BtnRounded_64x52x4, | ||||
| }; | ||||
|  | ||||
| #if HAS_TEMP_CHAMBER && HOTENDS > 1 | ||||
|   | ||||
| @@ -291,6 +291,7 @@ void MarlinUI::draw_status_screen() { | ||||
|     offset += 32 - tft_string.width(); | ||||
|   } | ||||
|   tft.add_text(455 - tft_string.width() - offset, 3, is_homed ? COLOR_AXIS_HOMED : COLOR_AXIS_NOT_HOMED, tft_string); | ||||
|   TERN_(TOUCH_SCREEN, touch.add_control(MOVE_AXIS, 4, 132, TFT_WIDTH - 8, 34)); | ||||
|  | ||||
|   // feed rate | ||||
|   tft.canvas(96, 180, 100, 32); | ||||
| @@ -654,4 +655,438 @@ void menu_item(const uint8_t row, bool sel ) { | ||||
|   TERN_(TOUCH_SCREEN, touch.add_control(sel ? CLICK : MENU_ITEM, 0, 4 + 45 * row, TFT_WIDTH, 43, encoderTopLine + row)); | ||||
| } | ||||
|  | ||||
| #if ENABLED(BABYSTEP_ZPROBE_OFFSET) | ||||
|   #include "../../feature/babystep.h" | ||||
| #endif | ||||
|  | ||||
| #if HAS_BED_PROBE | ||||
|   #include "../../module/probe.h" | ||||
| #endif | ||||
|  | ||||
| #define Z_SELECTION_Z 1 | ||||
| #define Z_SELECTION_Z_PROBE -1 | ||||
|  | ||||
| struct MotionAxisState { | ||||
|   xy_int_t xValuePos, yValuePos, zValuePos, eValuePos, stepValuePos, zTypePos, eNamePos; | ||||
|   float currentStepSize = 10.0; | ||||
|   int z_selection = Z_SELECTION_Z; | ||||
|   uint8_t e_selection = 0; | ||||
|   bool homming = false; | ||||
|   bool blocked = false; | ||||
|   char message[32]; | ||||
| }; | ||||
|  | ||||
| MotionAxisState motionAxisState; | ||||
|  | ||||
| #define E_BTN_COLOR COLOR_YELLOW | ||||
| #define X_BTN_COLOR COLOR_CORAL_RED | ||||
| #define Y_BTN_COLOR COLOR_VIVID_GREEN | ||||
| #define Z_BTN_COLOR COLOR_LIGHT_BLUE | ||||
|  | ||||
| #define BTN_WIDTH 64 | ||||
| #define BTN_HEIGHT 52 | ||||
| #define X_MARGIN 20 | ||||
| #define Y_MARGIN 15 | ||||
|  | ||||
| static void quick_feedback() { | ||||
|   #if HAS_CHIRP | ||||
|     ui.chirp(); // Buzz and wait. Is the delay needed for buttons to settle? | ||||
|     #if BOTH(HAS_LCD_MENU, USE_BEEPER) | ||||
|       for (int8_t i = 5; i--;) { buzzer.tick(); delay(2); } | ||||
|     #elif HAS_LCD_MENU | ||||
|       delay(10); | ||||
|     #endif | ||||
|   #endif | ||||
| } | ||||
|  | ||||
| #define CUR_STEP_VALUE_WIDTH 104 | ||||
| static void drawCurStepValue() { | ||||
|   tft_string.set((uint8_t *)ftostr52sp(motionAxisState.currentStepSize)); | ||||
|   tft_string.add("mm"); | ||||
|   tft.canvas(motionAxisState.stepValuePos.x, motionAxisState.stepValuePos.y, CUR_STEP_VALUE_WIDTH, BTN_HEIGHT); | ||||
|   tft.set_background(COLOR_BACKGROUND); | ||||
|   tft.add_text(tft_string.center(CUR_STEP_VALUE_WIDTH), 0, COLOR_AXIS_HOMED, tft_string); | ||||
| } | ||||
|  | ||||
| static void drawCurZSelection() { | ||||
|   tft_string.set("Z"); | ||||
|   tft.canvas(motionAxisState.zTypePos.x, motionAxisState.zTypePos.y, tft_string.width(), 34); | ||||
|   tft.set_background(COLOR_BACKGROUND); | ||||
|   tft.add_text(0, 0, Z_BTN_COLOR, tft_string); | ||||
|   tft.queue.sync(); | ||||
|   tft_string.set("Offset"); | ||||
|   tft.canvas(motionAxisState.zTypePos.x, motionAxisState.zTypePos.y + 34, tft_string.width(), 34); | ||||
|   tft.set_background(COLOR_BACKGROUND); | ||||
|   if (motionAxisState.z_selection == Z_SELECTION_Z_PROBE) { | ||||
|     tft.add_text(0, 0, Z_BTN_COLOR, tft_string); | ||||
|   } | ||||
| } | ||||
|  | ||||
| static void drawCurESelection() { | ||||
|   tft.canvas(motionAxisState.eNamePos.x, motionAxisState.eNamePos.y, BTN_WIDTH, BTN_HEIGHT); | ||||
|   tft.set_background(COLOR_BACKGROUND); | ||||
|   tft_string.set("E"); | ||||
|   tft.add_text(0, 0, E_BTN_COLOR , tft_string); | ||||
|   tft.add_text(tft_string.width(), 0, E_BTN_COLOR, ui8tostr3rj(motionAxisState.e_selection)); | ||||
| } | ||||
|  | ||||
| static void drawMessage(const char *msg) { | ||||
|   tft.canvas(X_MARGIN, TFT_HEIGHT - Y_MARGIN - 34, TFT_HEIGHT / 2, 34); | ||||
|   tft.set_background(COLOR_BACKGROUND); | ||||
|   tft.add_text(0, 0, COLOR_YELLOW, msg); | ||||
| } | ||||
|  | ||||
| static void drawAxisValue(AxisEnum axis) { | ||||
|   const float value = | ||||
|     #if HAS_BED_PROBE | ||||
|       axis == Z_AXIS && motionAxisState.z_selection == Z_SELECTION_Z_PROBE ? | ||||
|       probe.offset.z : | ||||
|     #endif | ||||
|     NATIVE_TO_LOGICAL( | ||||
|       ui.manual_move.processing ? destination[axis] : current_position[axis] + TERN0(IS_KINEMATIC, ui.manual_move.offset), | ||||
|       axis | ||||
|     ); | ||||
|   xy_int_t pos; | ||||
|   uint16_t color; | ||||
|   switch (axis) { | ||||
|     case X_AXIS: pos = motionAxisState.xValuePos; color = X_BTN_COLOR; break; | ||||
|     case Y_AXIS: pos = motionAxisState.yValuePos; color = Y_BTN_COLOR; break; | ||||
|     case Z_AXIS: pos = motionAxisState.zValuePos; color = Z_BTN_COLOR; break; | ||||
|     case E_AXIS: pos = motionAxisState.eValuePos; color = E_BTN_COLOR; break; | ||||
|     default: return; | ||||
|   } | ||||
|   tft.canvas(pos.x, pos.y, BTN_WIDTH + X_MARGIN, BTN_HEIGHT); | ||||
|   tft.set_background(COLOR_BACKGROUND); | ||||
|   tft_string.set(ftostr52sp(value)); | ||||
|   tft.add_text(0, 0, color, tft_string); | ||||
| } | ||||
|  | ||||
| static void moveAxis(AxisEnum axis, const int8_t direction) { | ||||
|   quick_feedback(); | ||||
|  | ||||
|   if (axis == E_AXIS && thermalManager.temp_hotend[motionAxisState.e_selection].celsius < EXTRUDE_MINTEMP) { | ||||
|     drawMessage("Too cold"); | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   const float diff = motionAxisState.currentStepSize * direction; | ||||
|  | ||||
|   if (axis == Z_AXIS && motionAxisState.z_selection == Z_SELECTION_Z_PROBE) { | ||||
|     #if ENABLED(BABYSTEP_ZPROBE_OFFSET) | ||||
|       const int16_t babystep_increment = direction * BABYSTEP_SIZE_Z; | ||||
|       const bool do_probe = DISABLED(BABYSTEP_HOTEND_Z_OFFSET) || active_extruder == 0; | ||||
|       const float bsDiff = planner.steps_to_mm[Z_AXIS] * babystep_increment, | ||||
|                   new_probe_offset = probe.offset.z + bsDiff, | ||||
|                   new_offs = TERN(BABYSTEP_HOTEND_Z_OFFSET | ||||
|                     , do_probe ? new_probe_offset : hotend_offset[active_extruder].z - bsDiff | ||||
|                     , new_probe_offset | ||||
|                   ); | ||||
|       if (WITHIN(new_offs, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) { | ||||
|         babystep.add_steps(Z_AXIS, babystep_increment); | ||||
|         if (do_probe) | ||||
|           probe.offset.z = new_offs; | ||||
|         else | ||||
|           TERN(BABYSTEP_HOTEND_Z_OFFSET, hotend_offset[active_extruder].z = new_offs, NOOP); | ||||
|         drawMessage(""); // clear the error | ||||
|         drawAxisValue(axis); | ||||
|       } | ||||
|       else { | ||||
|         drawMessage(GET_TEXT(MSG_LCD_SOFT_ENDSTOPS)); | ||||
|       } | ||||
|     #elif HAS_BED_PROBE | ||||
|       // only change probe.offset.z | ||||
|       probe.offset.z += diff; | ||||
|       if (direction < 0 && current_position[axis] < Z_PROBE_OFFSET_RANGE_MIN) { | ||||
|         current_position[axis] = Z_PROBE_OFFSET_RANGE_MIN; | ||||
|         drawMessage(GET_TEXT(MSG_LCD_SOFT_ENDSTOPS)); | ||||
|       } | ||||
|       else if (direction > 0 && current_position[axis] > Z_PROBE_OFFSET_RANGE_MAX) { | ||||
|         current_position[axis] = Z_PROBE_OFFSET_RANGE_MAX; | ||||
|         drawMessage(GET_TEXT(MSG_LCD_SOFT_ENDSTOPS)); | ||||
|       } | ||||
|       else { | ||||
|         drawMessage(""); // clear the error | ||||
|       } | ||||
|       drawAxisValue(axis); | ||||
|     #endif | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   if (!ui.manual_move.processing) { | ||||
|     // Start with no limits to movement | ||||
|     float min = current_position[axis] - 1000, | ||||
|           max = current_position[axis] + 1000; | ||||
|  | ||||
|     // Limit to software endstops, if enabled | ||||
|     #if HAS_SOFTWARE_ENDSTOPS | ||||
|       if (soft_endstops_enabled) switch (axis) { | ||||
|         case X_AXIS: | ||||
|           TERN_(MIN_SOFTWARE_ENDSTOP_X, min = soft_endstop.min.x); | ||||
|           TERN_(MAX_SOFTWARE_ENDSTOP_X, max = soft_endstop.max.x); | ||||
|           break; | ||||
|         case Y_AXIS: | ||||
|           TERN_(MIN_SOFTWARE_ENDSTOP_Y, min = soft_endstop.min.y); | ||||
|           TERN_(MAX_SOFTWARE_ENDSTOP_Y, max = soft_endstop.max.y); | ||||
|           break; | ||||
|         case Z_AXIS: | ||||
|           TERN_(MIN_SOFTWARE_ENDSTOP_Z, min = soft_endstop.min.z); | ||||
|           TERN_(MAX_SOFTWARE_ENDSTOP_Z, max = soft_endstop.max.z); | ||||
|         default: break; | ||||
|       } | ||||
|     #endif // HAS_SOFTWARE_ENDSTOPS | ||||
|  | ||||
|     // Delta limits XY based on the current offset from center | ||||
|     // This assumes the center is 0,0 | ||||
|     #if ENABLED(DELTA) | ||||
|       if (axis != Z_AXIS && axis != E_AXIS) { | ||||
|         max = SQRT(sq((float)(DELTA_PRINTABLE_RADIUS)) - sq(current_position[Y_AXIS - axis])); // (Y_AXIS - axis) == the other axis | ||||
|         min = -max; | ||||
|       } | ||||
|     #endif | ||||
|  | ||||
|     // Get the new position | ||||
|     #if IS_KINEMATIC | ||||
|       ui.manual_move.offset += diff; | ||||
|       if (direction < 0) | ||||
|         NOLESS(ui.manual_move.offset, min - current_position[axis]); | ||||
|       else | ||||
|         NOMORE(ui.manual_move.offset, max - current_position[axis]); | ||||
|     #else | ||||
|       current_position[axis] += diff; | ||||
|       if (direction < 0 && current_position[axis] < min) { | ||||
|         current_position[axis] = min; | ||||
|         drawMessage(GET_TEXT(MSG_LCD_SOFT_ENDSTOPS)); | ||||
|       } | ||||
|       else if (direction > 0 && current_position[axis] > max) { | ||||
|         current_position[axis] = max; | ||||
|         drawMessage(GET_TEXT(MSG_LCD_SOFT_ENDSTOPS)); | ||||
|       } | ||||
|       else { | ||||
|         drawMessage(""); // clear the error | ||||
|       } | ||||
|     #endif | ||||
|  | ||||
|     ui.manual_move.soon(axis | ||||
|       #if MULTI_MANUAL | ||||
|         , motionAxisState.e_selection | ||||
|       #endif | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   drawAxisValue(axis); | ||||
| } | ||||
|  | ||||
| static void e_plus() { | ||||
|   moveAxis(E_AXIS, 1); | ||||
| } | ||||
|  | ||||
| static void e_minus() { | ||||
|   moveAxis(E_AXIS, -1); | ||||
| } | ||||
|  | ||||
| static void x_minus() { | ||||
|   moveAxis(X_AXIS, -1); | ||||
| } | ||||
|  | ||||
| static void x_plus() { | ||||
|   moveAxis(X_AXIS, 1); | ||||
| } | ||||
|  | ||||
| static void y_plus() { | ||||
|   moveAxis(Y_AXIS, 1); | ||||
| } | ||||
|  | ||||
| static void y_minus() { | ||||
|   moveAxis(Y_AXIS, -1); | ||||
| } | ||||
|  | ||||
| static void z_plus() { | ||||
|   moveAxis(Z_AXIS, 1); | ||||
| } | ||||
|  | ||||
| static void z_minus() { | ||||
|   moveAxis(Z_AXIS, -1); | ||||
| } | ||||
|  | ||||
| static void e_select() { | ||||
|   motionAxisState.e_selection++; | ||||
|   if (motionAxisState.e_selection >= EXTRUDERS) { | ||||
|     motionAxisState.e_selection = 0; | ||||
|   } | ||||
|  | ||||
|   quick_feedback(); | ||||
|   drawCurESelection(); | ||||
|   drawAxisValue(E_AXIS); | ||||
| } | ||||
|  | ||||
| static void do_home() { | ||||
|   quick_feedback(); | ||||
|   drawMessage(GET_TEXT(MSG_LEVEL_BED_HOMING)); | ||||
|   queue.inject_P(G28_STR); | ||||
|   // Disable touch until home is done | ||||
|   touch.disable(); | ||||
|   drawAxisValue(E_AXIS); | ||||
|   drawAxisValue(X_AXIS); | ||||
|   drawAxisValue(Y_AXIS); | ||||
|   drawAxisValue(Z_AXIS); | ||||
| } | ||||
|  | ||||
| static void step_size() { | ||||
|   motionAxisState.currentStepSize = motionAxisState.currentStepSize / 10.0; | ||||
|   if (motionAxisState.currentStepSize < 0.0015) motionAxisState.currentStepSize = 10.0; | ||||
|   quick_feedback(); | ||||
|   drawCurStepValue(); | ||||
| } | ||||
|  | ||||
| #if HAS_BED_PROBE | ||||
|   static void z_select() { | ||||
|     motionAxisState.z_selection *= -1; | ||||
|     quick_feedback(); | ||||
|     drawCurZSelection(); | ||||
|     drawAxisValue(Z_AXIS); | ||||
|   } | ||||
| #endif | ||||
|  | ||||
| static void disable_steppers() { | ||||
|   quick_feedback(); | ||||
|   queue.inject_P(PSTR("M84")); | ||||
| } | ||||
|  | ||||
| static void drawBtn(int x, int y, const char* label, int32_t data, MarlinImage img, uint16_t bgColor, bool enabled = true) { | ||||
|   uint16_t width = Images[imgBtn52Rounded].width; | ||||
|   uint16_t height = Images[imgBtn52Rounded].height; | ||||
|  | ||||
|   tft.queue.sync(); //need sync to change font | ||||
|  | ||||
|   if (!enabled) bgColor = COLOR_CONTROL_DISABLED; | ||||
|  | ||||
|   tft.canvas(x, y, width, height); | ||||
|   tft.set_background(COLOR_BACKGROUND); | ||||
|   tft.add_image(0, 0, imgBtn52Rounded, bgColor, COLOR_BACKGROUND, COLOR_DARKGREY); | ||||
|  | ||||
|   if (label != NULL) { | ||||
|     tft.set_font(Helvetica12Bold); | ||||
|     tft_string.set_font(Helvetica12Bold); | ||||
|     tft_string.set(label); | ||||
|     tft_string.trim(); | ||||
|     tft.add_text(tft_string.center(width), height / 2 - tft_string.font_height() / 2, bgColor, tft_string); | ||||
|  | ||||
|     tft.queue.sync(); | ||||
|     tft_string.set_font(Helvetica18); | ||||
|     tft.set_font(Helvetica18); | ||||
|   } | ||||
|   else { | ||||
|     tft.add_image(0, 0, img, bgColor, COLOR_BACKGROUND, COLOR_DARKGREY); | ||||
|   } | ||||
|  | ||||
|   if (enabled) touch.add_control(BUTTON, x, y, width, height, data); | ||||
| } | ||||
|  | ||||
| void MarlinUI::move_axis_screen() { | ||||
|   // Reset | ||||
|   motionAxisState.blocked = false; | ||||
|   touch.enable(); | ||||
|  | ||||
|   ui.clear_lcd(); | ||||
|  | ||||
|   TERN_(TOUCH_SCREEN, touch.clear()); | ||||
|  | ||||
|   const bool busy = printingIsActive(); | ||||
|  | ||||
|   // if we have baby step and we are printing, select baby step | ||||
|   if (busy && ENABLED(BABYSTEP_ZPROBE_OFFSET)) motionAxisState.z_selection = Z_SELECTION_Z_PROBE; | ||||
|  | ||||
|   // ROW 1 -> E- Y- CurY Z+ | ||||
|   int x = X_MARGIN, y = Y_MARGIN, spacing = 0; | ||||
|  | ||||
|   drawBtn(x, y, "E+", (int32_t)e_plus, imgUp, E_BTN_COLOR, !busy); | ||||
|  | ||||
|   spacing = (TFT_WIDTH - X_MARGIN * 2 - 3 * BTN_WIDTH) / 2; | ||||
|   x += BTN_WIDTH + spacing; | ||||
|   drawBtn(x, y, "Y+", (int32_t)y_plus, imgUp, Y_BTN_COLOR, !busy); | ||||
|  | ||||
|   // Cur Y | ||||
|   x += BTN_WIDTH; | ||||
|   motionAxisState.yValuePos.x = x + 2; | ||||
|   motionAxisState.yValuePos.y = y; | ||||
|   drawAxisValue(Y_AXIS); | ||||
|  | ||||
|   x += spacing; | ||||
|   drawBtn(x, y, "Z+", (int32_t)z_plus, imgUp, Z_BTN_COLOR, !busy || ENABLED(BABYSTEP_ZPROBE_OFFSET)); //only enabled when not busy or have baby step | ||||
|  | ||||
|   // ROW 2 -> "Ex"  X-  HOME X+  "Z" | ||||
|   y += BTN_HEIGHT + (TFT_HEIGHT - Y_MARGIN * 2 - 4 * BTN_HEIGHT) / 3; | ||||
|   x = X_MARGIN; | ||||
|   spacing = (TFT_WIDTH - X_MARGIN * 2 - 5 * BTN_WIDTH) / 4; | ||||
|  | ||||
|   motionAxisState.eNamePos.x = x; | ||||
|   motionAxisState.eNamePos.y = y; | ||||
|   drawCurESelection(); | ||||
|   if (!busy) touch.add_control(BUTTON, x, y, BTN_WIDTH, BTN_HEIGHT, (int32_t)e_select); | ||||
|  | ||||
|   x += BTN_WIDTH + spacing; | ||||
|   drawBtn(x, y, "X-", (int32_t)x_minus, imgLeft, X_BTN_COLOR, !busy); | ||||
|  | ||||
|   x += BTN_WIDTH + spacing; //imgHome is 64x64 | ||||
|   add_control(TFT_WIDTH / 2 - Images[imgHome].width / 2, y - (Images[imgHome].width - BTN_HEIGHT) / 2, BUTTON, (int32_t)do_home, imgHome, !busy); | ||||
|  | ||||
|   x += BTN_WIDTH + spacing; | ||||
|   uint16_t xplus_x = x; | ||||
|   drawBtn(x, y, "X+", (int32_t)x_plus, imgRight, X_BTN_COLOR, !busy); | ||||
|  | ||||
|   x += BTN_WIDTH + spacing; | ||||
|   motionAxisState.zTypePos.x = x; | ||||
|   motionAxisState.zTypePos.y = y; | ||||
|   drawCurZSelection(); | ||||
|   #if HAS_BED_PROBE | ||||
|     if (!busy) touch.add_control(BUTTON, x, y, BTN_WIDTH, 34 * 2, (int32_t)z_select); | ||||
|   #endif | ||||
|  | ||||
|   // ROW 3 -> E- CurX Y-  Z- | ||||
|   y += BTN_HEIGHT + (TFT_HEIGHT - Y_MARGIN * 2 - 4 * BTN_HEIGHT) / 3; | ||||
|   x = X_MARGIN; | ||||
|   spacing = (TFT_WIDTH - X_MARGIN * 2 - 3 * BTN_WIDTH) / 2; | ||||
|  | ||||
|   drawBtn(x, y, "E-", (int32_t)e_minus, imgDown, E_BTN_COLOR, !busy); | ||||
|  | ||||
|   // Cur E | ||||
|   motionAxisState.eValuePos.x = x; | ||||
|   motionAxisState.eValuePos.y = y + BTN_HEIGHT + 2; | ||||
|   drawAxisValue(E_AXIS); | ||||
|  | ||||
|   // Cur X | ||||
|   motionAxisState.xValuePos.x = BTN_WIDTH + (TFT_WIDTH - X_MARGIN * 2 - 5 * BTN_WIDTH) / 4; //X- pos | ||||
|   motionAxisState.xValuePos.y = y - 10; | ||||
|   drawAxisValue(X_AXIS); | ||||
|  | ||||
|   x += BTN_WIDTH + spacing; | ||||
|   drawBtn(x, y, "Y-", (int32_t)y_minus, imgDown, Y_BTN_COLOR, !busy); | ||||
|  | ||||
|   x += BTN_WIDTH + spacing; | ||||
|   drawBtn(x, y, "Z-", (int32_t)z_minus, imgDown, Z_BTN_COLOR, !busy || ENABLED(BABYSTEP_ZPROBE_OFFSET)); //only enabled when not busy or have baby step | ||||
|  | ||||
|   // Cur Z | ||||
|   motionAxisState.zValuePos.x = x; | ||||
|   motionAxisState.zValuePos.y = y + BTN_HEIGHT + 2; | ||||
|   drawAxisValue(Z_AXIS); | ||||
|  | ||||
|   // ROW 4 -> step_size  disable steppers back | ||||
|   y = TFT_HEIGHT - Y_MARGIN - 32; // | ||||
|   x = TFT_WIDTH / 2 - CUR_STEP_VALUE_WIDTH / 2; | ||||
|   motionAxisState.stepValuePos.x = x; | ||||
|   motionAxisState.stepValuePos.y = y; | ||||
|   if (!busy) { | ||||
|     drawCurStepValue(); | ||||
|     touch.add_control(BUTTON, motionAxisState.stepValuePos.x, motionAxisState.stepValuePos.y, CUR_STEP_VALUE_WIDTH, BTN_HEIGHT, (int32_t)step_size); | ||||
|   } | ||||
|  | ||||
|   // alinged with x+ | ||||
|   drawBtn(xplus_x, TFT_HEIGHT - Y_MARGIN - BTN_HEIGHT, "off", (int32_t)disable_steppers, imgCancel, COLOR_WHITE, !busy); | ||||
|  | ||||
|   add_control(TFT_WIDTH - X_MARGIN - BTN_WIDTH, y, BACK, imgBack); | ||||
| } | ||||
|  | ||||
| #undef BTN_WIDTH | ||||
| #undef BTN_HEIGHT | ||||
|  | ||||
| #endif // HAS_UI_480x320 | ||||
|   | ||||
| @@ -73,6 +73,8 @@ const tImage Images[imgCount] = { | ||||
|   Refresh_32x32x4, | ||||
|   Leveling_32x32x4, | ||||
|   Slider8x16x4, | ||||
|   Home_64x64x4, | ||||
|   BtnRounded_64x52x4, | ||||
| }; | ||||
|  | ||||
| #if HAS_TEMP_CHAMBER && HOTENDS > 1 | ||||
|   | ||||
| @@ -682,6 +682,10 @@ public: | ||||
|     static void touch_calibration(); | ||||
|   #endif | ||||
|  | ||||
|   #if HAS_GRAPHICAL_TFT | ||||
|     static void move_axis_screen(); | ||||
|   #endif | ||||
|  | ||||
| private: | ||||
|  | ||||
|   #if HAS_DISPLAY | ||||
|   | ||||
| @@ -325,13 +325,21 @@ | ||||
|   #define LCD_PINS_RS                       PC6 | ||||
|  | ||||
| #elif ENABLED(TFT_480x320_SPI) | ||||
|   #ifndef XPT2046_X_CALIBRATION | ||||
|     #define XPT2046_X_CALIBRATION         -17253 | ||||
|   #endif | ||||
|   #ifndef XPT2046_Y_CALIBRATION | ||||
|     #define XPT2046_Y_CALIBRATION          11579 | ||||
|   #endif | ||||
|   #ifndef XPT2046_X_OFFSET | ||||
|     #define XPT2046_X_OFFSET                 514 | ||||
|   #endif | ||||
|   #ifndef XPT2046_Y_OFFSET | ||||
|     #define XPT2046_Y_OFFSET                 -24 | ||||
|   #endif | ||||
|  | ||||
|     #define TFT_DRIVER                    ST7796 | ||||
|     #define TFT_BUFFER_SIZE                14400 | ||||
|   #define TFT_DRIVER                      ST7796 | ||||
|   #define TFT_BUFFER_SIZE                  14400 | ||||
|  | ||||
| #endif | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user