Save 236B by improving functions in menu.cpp. Beware - the label now has

to come with a ':' as its last character. Changed language files along
with this commit too.
This commit is contained in:
DRracer 2019-05-16 16:43:44 +02:00
parent 8bc4952f10
commit a453c6fc9d
10 changed files with 50 additions and 48 deletions

View file

@ -306,9 +306,9 @@ const char menu_20x_space[] PROGMEM = " ";
const char menu_fmt_int3[] PROGMEM = "%c%.15S:%s%3d"; const char menu_fmt_int3[] PROGMEM = "%c%.15S:%s%3d";
const char menu_fmt_float31[] PROGMEM = "%-12.12s%+8.1f"; const char menu_fmt_float31[] PROGMEM = "%-12.12S%+8.1f";
const char menu_fmt_float13[] PROGMEM = "%c%.12S:%s%+06.3f"; const char menu_fmt_float13[] PROGMEM = "%-15.15S%+5.3f";
const char menu_fmt_float13off[] PROGMEM = "%c%.12S:%s%"; const char menu_fmt_float13off[] PROGMEM = "%c%.12S:%s%";
@ -348,39 +348,36 @@ void menu_draw_P<uint8_t*>(char chr, const char* str, int16_t val)
} }
} }
//! Draw up to 10 chars of text, ':' and float number in format from +0.0 to +12345.0. The increased range is necessary //! @brief Draw up to 10 chars of text and a float number in format from +0.0 to +12345.0. The increased range is necessary
//! for displaying large values of extruder positions, which caused text overflow in the previous implementation. //! for displaying large values of extruder positions, which caused text overflow in the previous implementation.
//!
//! @param chr first character to print on the line //! @param chr first character to print on the line
//! @param str string label to print, will be appended with ':' automatically inside the function //! @param str string label to print
//! @param val value to print aligned to the right side of the display //! @param val value to print aligned to the right side of the display
//! //!
//! Implementation comments: //! Implementation comments:
//! The text needs to be prerendered into the prerendered[] to enable left alignment of text str including the colon behind it. //! The text needs to come with a colon ":", this function does not append it anymore.
//! If we didn't want the colon behind it, the whole operation would have been solved with a single vsprintf call, //! That resulted in a much shorter implementation (234628B -> 234476B)
//! but such line would look different compared to every other similar menu item //! There are similar functions around which may be shortened in a similar way
//! So it is almost the same amount of code like before, but with added string prerendering void menu_draw_float31(const char* str, float val)
void menu_draw_float31(char chr, const char* str, float val)
{ {
uint8_t txtlen = strlen_P(str); lcd_printf_P(menu_fmt_float31, str, val);
if( txtlen > 10 )txtlen = 10;
char prerendered[21];
strcpy_P(prerendered, menu_20x_space);
prerendered[0] = chr; // start with the initial byte/space for menu navigation
strncpy_P(prerendered+1, str, 10); // render the text and limit it to max 10 characters
prerendered[txtlen+1] = ':'; // put the colon behind it
prerendered[txtlen+2] = 0; // terminate the string to be used inside the printf
lcd_printf_P(menu_fmt_float31, prerendered, val);
} }
//draw up to 12 chars of text, ':' and float number in format +1.234 //! @brief Draw up to 12 chars of text and a float number in format +1.234
void menu_draw_float13(char chr, const char* str, float val) //!
//! @param chr first character to print on the line
//! @param str string label to print
//! @param val value to print aligned to the right side of the display
//!
//! Implementation comments:
//! This function uses similar optimization principles as menu_draw_float31
//! (i.e. str must include a ':' at its end)
//! FLASH usage dropped 234476B -> 234392B
//! Moreover, this function gets inlined in the final code, so removing it doesn't really help ;)
void menu_draw_float13(const char* str, float val)
{ {
int text_len = strlen_P(str); lcd_printf_P(menu_fmt_float13, str, val);
if (text_len > 12) text_len = 12;
char spaces[21];
strcpy_P(spaces, menu_20x_space);
spaces[12 - text_len] = 0;
lcd_printf_P(menu_fmt_float13, chr, str, spaces, val);
} }
template <typename T> template <typename T>

View file

@ -97,11 +97,12 @@ extern uint8_t menu_item_gcode_P(const char* str, const char* str_gcode);
extern const char menu_fmt_int3[]; extern const char menu_fmt_int3[];
extern const char menu_fmt_float31[]; extern const char menu_fmt_float31[];
extern const char menu_fmt_float13[];
extern void menu_draw_float31(char chr, const char* str, float val); extern void menu_draw_float31(const char* str, float val);
extern void menu_draw_float13(char chr, const char* str, float val); extern void menu_draw_float13(const char* str, float val);
#define MENU_ITEM_EDIT_int3_P(str, pval, minval, maxval) do { if (menu_item_edit_P(str, pval, minval, maxval)) return; } while (0) #define MENU_ITEM_EDIT_int3_P(str, pval, minval, maxval) do { if (menu_item_edit_P(str, pval, minval, maxval)) return; } while (0)

18
Firmware/ultralcd.cpp Normal file → Executable file
View file

@ -3079,7 +3079,7 @@ static void _lcd_move(const char *name, int axis, int min, int max)
if (lcd_draw_update) if (lcd_draw_update)
{ {
lcd_set_cursor(0, 1); lcd_set_cursor(0, 1);
menu_draw_float31(' ', name, current_position[axis]); menu_draw_float31(name, current_position[axis]);
} }
if (menu_leaving || LCD_CLICKED) (void)enable_endstops(_md->endstopsEnabledPrevious); if (menu_leaving || LCD_CLICKED) (void)enable_endstops(_md->endstopsEnabledPrevious);
if (LCD_CLICKED) menu_back(); if (LCD_CLICKED) menu_back();
@ -3104,7 +3104,9 @@ static void lcd_move_e()
if (lcd_draw_update) if (lcd_draw_update)
{ {
lcd_set_cursor(0, 1); lcd_set_cursor(0, 1);
menu_draw_float31(' ', PSTR("Extruder"), current_position[E_AXIS]); // Note: the colon behind the text is necessary to greatly shorten
// the implementation of menu_draw_float31
menu_draw_float31(PSTR("Extruder:"), current_position[E_AXIS]);
} }
if (LCD_CLICKED) menu_back(); if (LCD_CLICKED) menu_back();
} }
@ -3224,14 +3226,16 @@ void EEPROM_read_B(int pos, int* value)
} }
// Note: the colon behind the text (X, Y, Z) is necessary to greatly shorten
// the implementation of menu_draw_float31
static void lcd_move_x() { static void lcd_move_x() {
_lcd_move(PSTR("X"), X_AXIS, X_MIN_POS, X_MAX_POS); _lcd_move(PSTR("X:"), X_AXIS, X_MIN_POS, X_MAX_POS);
} }
static void lcd_move_y() { static void lcd_move_y() {
_lcd_move(PSTR("Y"), Y_AXIS, Y_MIN_POS, Y_MAX_POS); _lcd_move(PSTR("Y:"), Y_AXIS, Y_MIN_POS, Y_MAX_POS);
} }
static void lcd_move_z() { static void lcd_move_z() {
_lcd_move(PSTR("Z"), Z_AXIS, Z_MIN_POS, Z_MAX_POS); _lcd_move(PSTR("Z:"), Z_AXIS, Z_MIN_POS, Z_MAX_POS);
} }
@ -3304,7 +3308,7 @@ static void _lcd_babystep(int axis, const char *msg)
if (lcd_draw_update) if (lcd_draw_update)
{ {
lcd_set_cursor(0, 1); lcd_set_cursor(0, 1);
menu_draw_float13(' ', msg, _md->babystepMemMM[axis]); menu_draw_float13(msg, _md->babystepMemMM[axis]);
} }
if (LCD_CLICKED || menu_leaving) if (LCD_CLICKED || menu_leaving)
{ {
@ -3320,7 +3324,7 @@ static void _lcd_babystep(int axis, const char *msg)
static void lcd_babystep_z() static void lcd_babystep_z()
{ {
_lcd_babystep(Z_AXIS, (_i("Adjusting Z")));////MSG_BABYSTEPPING_Z c=20 _lcd_babystep(Z_AXIS, (_i("Adjusting Z:")));////MSG_BABYSTEPPING_Z c=20 Beware: must include the ':' as its last character
} }

2
lang/lang_en.txt Normal file → Executable file
View file

@ -17,7 +17,7 @@
">Cancel" ">Cancel"
#MSG_BABYSTEPPING_Z c=20 #MSG_BABYSTEPPING_Z c=20
"Adjusting Z" "Adjusting Z:"
#MSG_SELFTEST_CHECK_ALLCORRECT c=20 #MSG_SELFTEST_CHECK_ALLCORRECT c=20
"All correct " "All correct "

4
lang/lang_en_cz.txt Normal file → Executable file
View file

@ -23,8 +23,8 @@
">Zrusit" ">Zrusit"
#MSG_BABYSTEPPING_Z c=20 #MSG_BABYSTEPPING_Z c=20
"Adjusting Z" "Adjusting Z:"
"Dostavovani Z" "Dostavovani Z:"
#MSG_SELFTEST_CHECK_ALLCORRECT c=20 #MSG_SELFTEST_CHECK_ALLCORRECT c=20
"All correct " "All correct "

4
lang/lang_en_de.txt Normal file → Executable file
View file

@ -23,8 +23,8 @@
">Abbruch" ">Abbruch"
#MSG_BABYSTEPPING_Z c=20 #MSG_BABYSTEPPING_Z c=20
"Adjusting Z" "Adjusting Z:"
"Z wurde eingestellt" "Z Einstellung:"
#MSG_SELFTEST_CHECK_ALLCORRECT c=20 #MSG_SELFTEST_CHECK_ALLCORRECT c=20
"All correct " "All correct "

4
lang/lang_en_es.txt Normal file → Executable file
View file

@ -23,8 +23,8 @@
">Cancelar" ">Cancelar"
#MSG_BABYSTEPPING_Z c=20 #MSG_BABYSTEPPING_Z c=20
"Adjusting Z" "Adjusting Z:"
"Ajustar Z" "Ajustar Z:"
#MSG_SELFTEST_CHECK_ALLCORRECT c=20 #MSG_SELFTEST_CHECK_ALLCORRECT c=20
"All correct " "All correct "

4
lang/lang_en_fr.txt Normal file → Executable file
View file

@ -23,8 +23,8 @@
">Annuler" ">Annuler"
#MSG_BABYSTEPPING_Z c=20 #MSG_BABYSTEPPING_Z c=20
"Adjusting Z" "Adjusting Z:"
"Ajustement de Z" "Ajust. de Z:"
#MSG_SELFTEST_CHECK_ALLCORRECT c=20 #MSG_SELFTEST_CHECK_ALLCORRECT c=20
"All correct " "All correct "

4
lang/lang_en_it.txt Normal file → Executable file
View file

@ -23,8 +23,8 @@
">Annulla" ">Annulla"
#MSG_BABYSTEPPING_Z c=20 #MSG_BABYSTEPPING_Z c=20
"Adjusting Z" "Adjusting Z:"
"Compensazione Z" "Compensaz. Z:"
#MSG_SELFTEST_CHECK_ALLCORRECT c=20 #MSG_SELFTEST_CHECK_ALLCORRECT c=20
"All correct " "All correct "

4
lang/lang_en_pl.txt Normal file → Executable file
View file

@ -23,8 +23,8 @@
">Anuluj" ">Anuluj"
#MSG_BABYSTEPPING_Z c=20 #MSG_BABYSTEPPING_Z c=20
"Adjusting Z" "Adjusting Z:"
"Dostrajanie Z" "Dostrajanie Z:"
#MSG_SELFTEST_CHECK_ALLCORRECT c=20 #MSG_SELFTEST_CHECK_ALLCORRECT c=20
"All correct " "All correct "