From 9381bfe7f9acfa51a69886c38d975ae1459bfa49 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Tue, 3 Feb 2015 20:15:16 +0100 Subject: [PATCH] Fixes issue #1447 - Overlapping of long descriptions with values. --- Marlin/dogm_lcd_implementation.h | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/Marlin/dogm_lcd_implementation.h b/Marlin/dogm_lcd_implementation.h index 6350684fc..27f1fadbc 100644 --- a/Marlin/dogm_lcd_implementation.h +++ b/Marlin/dogm_lcd_implementation.h @@ -51,7 +51,7 @@ #endif */ -#define USE_BIG_EDIT_FONT +#define USE_BIG_EDIT_FONT // save 3120 bytes of PROGMEM by commenting out this line #define FONT_STATUSMENU u8g_font_6x9 #define FONT_MENU u8g_font_6x10_marlin @@ -65,9 +65,9 @@ #define LCD_WIDTH_EDIT 14 #else #define FONT_MENU_EDIT u8g_font_6x10_marlin - #define DOG_CHAR_WIDTH_EDIT 6 + #define DOG_CHAR_WIDTH_EDIT 6 #define DOG_CHAR_HEIGHT_EDIT 12 - #define LCD_WIDTH_EDIT 22 + #define LCD_WIDTH_EDIT 22 #endif #define START_ROW 0 @@ -375,11 +375,28 @@ static void _drawmenu_setting_edit_generic(uint8_t row, const char* pstr, char p #define lcd_implementation_drawmenu_setting_edit_callback_bool(row, pstr, pstr2, data, callback) lcd_implementation_drawmenu_setting_edit_generic_P(row, pstr, ' ', (*(data))?PSTR(MSG_ON):PSTR(MSG_OFF)) void lcd_implementation_drawedit(const char* pstr, char* value) { - u8g.setPrintPos(0 * DOG_CHAR_WIDTH_EDIT, (u8g.getHeight() - 1 - DOG_CHAR_HEIGHT_EDIT) - (1 * DOG_CHAR_HEIGHT_EDIT) - START_ROW ); - u8g.setFont(FONT_MENU_EDIT); + uint8_t rows = 1; + uint8_t lcd_width = LCD_WIDTH; + uint8_t char_width = DOG_CHAR_WIDTH; + +#ifdef USE_BIG_EDIT_FONT + if (strlen_P(pstr) <= LCD_WIDTH_EDIT - 1) { + u8g.setFont(FONT_MENU_EDIT); + lcd_width = LCD_WIDTH_EDIT + 1; + char_width = DOG_CHAR_WIDTH_EDIT; + if (strlen_P(pstr) >= LCD_WIDTH_EDIT - strlen(value)) rows = 2; + } + else { + u8g.setFont(FONT_MENU); + } +#endif + + if ( strlen_P(pstr) > LCD_WIDTH - 2 - strlen(value) ) rows = 2; + + u8g.setPrintPos( 0, u8g.getHeight() * 1/(1+rows) + DOG_CHAR_HEIGHT_EDIT/2); //1/(1+rows) = 1/2 or 1/3 lcd_printPGM(pstr); u8g.print(':'); - u8g.setPrintPos((14 - strlen(value)) * DOG_CHAR_WIDTH_EDIT, (u8g.getHeight() - 1 - DOG_CHAR_HEIGHT_EDIT) - (1 * DOG_CHAR_HEIGHT_EDIT) - START_ROW ); + u8g.setPrintPos((lcd_width-1-strlen(value))*char_width, u8g.getHeight()*rows/(1+rows) + DOG_CHAR_HEIGHT_EDIT/2); //rows/(1+rows) = 1/2 or 2/3 u8g.print(value); }