From d0e4b767d305b560995fc73605e3904ad6023f54 Mon Sep 17 00:00:00 2001 From: jfrickmann Date: Thu, 12 Aug 2021 08:10:14 -0400 Subject: [PATCH] Converted literal colors to indices that can be used everywhere. Also modified lcd.setColor function so it accepts either RGB or index color as new color. That way, literal colors work as before. --- radio/src/gui/colorlcd/colors.h | 18 +++++++++ radio/src/gui/colorlcd/themes/480_default.cpp | 18 +++++++++ radio/src/gui/colorlcd/themes/flysky.cpp | 18 +++++++++ radio/src/lua/api_colorlcd.cpp | 37 +++++++++++++------ radio/src/lua/api_general.cpp | 25 ++++++++----- 5 files changed, 96 insertions(+), 20 deletions(-) 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