diff --git a/radio/src/gui/colorlcd/colors.h b/radio/src/gui/colorlcd/colors.h index e8cd5e0c0..f95c85358 100644 --- a/radio/src/gui/colorlcd/colors.h +++ b/radio/src/gui/colorlcd/colors.h @@ -43,6 +43,24 @@ enum LcdColorIndex COLOR_THEME_DISABLED_INDEX, CUSTOM_COLOR_INDEX, + // Literal colors + COLOR_BLACK_INDEX, + COLOR_WHITE_INDEX, + COLOR_LIGHTWHITE_INDEX, + COLOR_YELLOW_INDEX, + COLOR_BLUE_INDEX, + COLOR_DARKBLUE_INDEX, + COLOR_GREY_INDEX, + COLOR_DARKGREY_INDEX, + COLOR_LIGHTGREY_INDEX, + COLOR_RED_INDEX, + COLOR_DARKRED_INDEX, + COLOR_GREEN_INDEX, + COLOR_LIGHTBROWN_INDEX, + COLOR_DARKBROWN_INDEX, + COLOR_BRIGHTGREEN_INDEX, + COLOR_ORANGE_INDEX, + // this one MUST be last LCD_COLOR_COUNT, }; diff --git a/radio/src/gui/colorlcd/themes/480_default.cpp b/radio/src/gui/colorlcd/themes/480_default.cpp index c5019376d..8a215c9c8 100644 --- a/radio/src/gui/colorlcd/themes/480_default.cpp +++ b/radio/src/gui/colorlcd/themes/480_default.cpp @@ -54,6 +54,24 @@ class Theme480: public OpenTxTheme lcdColorTable[COLOR_THEME_ACTIVE_INDEX] = RGB(255, 222, 0); lcdColorTable[COLOR_THEME_WARNING_INDEX] = RGB(224, 0, 0); lcdColorTable[COLOR_THEME_DISABLED_INDEX] = RGB(140, 140, 140); + + // Literal colors + lcdColorTable[COLOR_BLACK_INDEX] = BLACK; + lcdColorTable[COLOR_WHITE_INDEX] = WHITE; + lcdColorTable[COLOR_LIGHTWHITE_INDEX] = LIGHTWHITE; + lcdColorTable[COLOR_YELLOW_INDEX] = YELLOW; + lcdColorTable[COLOR_BLUE_INDEX] = BLUE; + lcdColorTable[COLOR_DARKBLUE_INDEX] = DARKBLUE; + lcdColorTable[COLOR_GREY_INDEX] = GREY; + lcdColorTable[COLOR_DARKGREY_INDEX] = DARKGREY; + lcdColorTable[COLOR_LIGHTGREY_INDEX] = LIGHTGREY; + lcdColorTable[COLOR_RED_INDEX] = RED; + lcdColorTable[COLOR_DARKRED_INDEX] = DARKRED; + lcdColorTable[COLOR_GREEN_INDEX] = GREEN; + lcdColorTable[COLOR_LIGHTBROWN_INDEX] = LIGHTBROWN; + lcdColorTable[COLOR_DARKBROWN_INDEX] = DARKBROWN; + lcdColorTable[COLOR_BRIGHTGREEN_INDEX] = BRIGHTGREEN; + lcdColorTable[COLOR_ORANGE_INDEX] = ORANGE; } void loadMenuIcon(uint8_t index, const uint8_t * lbm) const diff --git a/radio/src/gui/colorlcd/themes/flysky.cpp b/radio/src/gui/colorlcd/themes/flysky.cpp index d060eb5e5..3a9be7695 100644 --- a/radio/src/gui/colorlcd/themes/flysky.cpp +++ b/radio/src/gui/colorlcd/themes/flysky.cpp @@ -53,6 +53,24 @@ class FlyskyTheme: public OpenTxTheme lcdColorTable[COLOR_THEME_ACTIVE_INDEX] = RGB(255, 222, 0); lcdColorTable[COLOR_THEME_WARNING_INDEX] = RGB(224, 0, 0); lcdColorTable[COLOR_THEME_DISABLED_INDEX] = RGB(140, 140, 140); + + // Literal colors + lcdColorTable[COLOR_BLACK_INDEX] = BLACK; + lcdColorTable[COLOR_WHITE_INDEX] = WHITE; + lcdColorTable[COLOR_LIGHTWHITE_INDEX] = LIGHTWHITE; + lcdColorTable[COLOR_YELLOW_INDEX] = YELLOW; + lcdColorTable[COLOR_BLUE_INDEX] = BLUE; + lcdColorTable[COLOR_DARKBLUE_INDEX] = DARKBLUE; + lcdColorTable[COLOR_GREY_INDEX] = GREY; + lcdColorTable[COLOR_DARKGREY_INDEX] = DARKGREY; + lcdColorTable[COLOR_LIGHTGREY_INDEX] = LIGHTGREY; + lcdColorTable[COLOR_RED_INDEX] = RED; + lcdColorTable[COLOR_DARKRED_INDEX] = DARKRED; + lcdColorTable[COLOR_GREEN_INDEX] = GREEN; + lcdColorTable[COLOR_LIGHTBROWN_INDEX] = LIGHTBROWN; + lcdColorTable[COLOR_DARKBROWN_INDEX] = DARKBROWN; + lcdColorTable[COLOR_BRIGHTGREEN_INDEX] = BRIGHTGREEN; + lcdColorTable[COLOR_ORANGE_INDEX] = ORANGE; } void loadMenuIcon(uint8_t index, const char * filename, uint32_t color=COLOR_THEME_SECONDARY1) const diff --git a/radio/src/lua/api_colorlcd.cpp b/radio/src/lua/api_colorlcd.cpp index fa6b6fd58..c4548e522 100644 --- a/radio/src/lua/api_colorlcd.cpp +++ b/radio/src/lua/api_colorlcd.cpp @@ -769,16 +769,23 @@ Set a color for specific area * `COLOR_THEME_DISABLED` * `CUSTOM_COLOR` -@param color (number) color in 5/6/5 rgb format. The following prefined colors are available - * `WHITE` - * `GREY` - * `LIGHTGREY` - * `DARKGREY` - * `BLACK` - * `YELLOW` - * `BLUE` - * `RED` - * `DARKRED` +@param color (number) color in 5/6/5 rgb format (see lcd.RGB function). The following prefined colors are also available: + * `BLACK` + * `WHITE` + * `LIGHTWHITE` + * `YELLOW` + * `BLUE` + * `DARKBLUE` + * `GREY` + * `DARKGREY` + * `LIGHTGREY` + * `RED` + * `DARKRED` + * `GREEN` + * `LIGHTBROWN` + * `DARKBROWN` + * `BRIGHTGREEN` + * `ORANGE` @notice Only available on Colorlcd radios @@ -789,7 +796,15 @@ static int luaLcdSetColor(lua_State *L) unsigned int index = COLOR_VAL(luaL_checkunsigned(L, 1)); unsigned int color = luaL_checkunsigned(L, 2); - if (index < LCD_COLOR_COUNT) + // Boundary check - also, do not change literal colors + if (index >= COLOR_BLACK_INDEX) + return 0; + + // RGB value or color flag? + unsigned int idx = COLOR_VAL(color); + if (idx > DEFAULT_COLOR_INDEX && idx < LCD_COLOR_COUNT) + lcdColorTable[index] = lcdColorTable[idx]; + else lcdColorTable[index] = color; return 0; diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index d16ef99d9..2fb994b40 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -1950,15 +1950,22 @@ const luaR_value_entry opentxConstants[] = { { "WARNING_COLOR", COLOR2FLAGS(COLOR_THEME_WARNING_INDEX) }, // Literal colors - { "WHITE", (double)WHITE }, - { "GREY", (double)GREY }, - { "DARKGREY", (double)DARKGREY }, - { "BLACK", (double)BLACK }, - { "YELLOW", (double)YELLOW }, - { "BLUE", (double)BLUE }, - { "LIGHTGREY", (double)LIGHTGREY }, - { "RED", (double)RED }, - { "DARKRED", (double)DARKRED }, + { "BLACK", COLOR2FLAGS(COLOR_BLACK_INDEX) }, + { "WHITE", COLOR2FLAGS(COLOR_WHITE_INDEX) }, + { "LIGHTWHITE", COLOR2FLAGS(COLOR_LIGHTWHITE_INDEX) }, + { "YELLOW", COLOR2FLAGS(COLOR_YELLOW_INDEX) }, + { "BLUE", COLOR2FLAGS(COLOR_BLUE_INDEX) }, + { "DARKBLUE", COLOR2FLAGS(COLOR_DARKBLUE_INDEX) }, + { "GREY", COLOR2FLAGS(COLOR_GREY_INDEX) }, + { "DARKGREY", COLOR2FLAGS(COLOR_DARKGREY_INDEX) }, + { "LIGHTGREY", COLOR2FLAGS(COLOR_LIGHTGREY_INDEX) }, + { "RED", COLOR2FLAGS(COLOR_RED_INDEX) }, + { "DARKRED", COLOR2FLAGS(COLOR_DARKRED_INDEX) }, + { "GREEN", COLOR2FLAGS(COLOR_GREEN_INDEX) }, + { "LIGHTBROWN", COLOR2FLAGS(COLOR_LIGHTBROWN_INDEX) }, + { "DARKBROWN", COLOR2FLAGS(COLOR_DARKBROWN_INDEX) }, + { "BRIGHTGREEN", COLOR2FLAGS(COLOR_BRIGHTGREEN_INDEX) }, + { "ORANGE", COLOR2FLAGS(COLOR_ORANGE_INDEX) }, #else { "FIXEDWIDTH", FIXEDWIDTH }, #endif