1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-15 04:15:26 +03:00

Horus Shadowed (#4979)

* Introduce SHADOWED and use it for BattCheck

* numbers too

* For drawTimer too

* Compilation fix
This commit is contained in:
3djc 2017-06-02 16:36:27 +02:00 committed by Bertrand Songis
parent 5f76e61240
commit 726b989f6c
4 changed files with 33 additions and 21 deletions

View file

@ -182,8 +182,8 @@ local function zoneSmall(zone)
if type(mySensor) == "table" then if type(mySensor) == "table" then
local myString = string.format("%2.1fV", getCellSum(mySensor)).." ("..getCellCount(mySensor).."S)" local myString = string.format("%2.1fV", getCellSum(mySensor)).." ("..getCellCount(mySensor).."S)"
local percent = getCellPercent(getCellAvg(mySensor)) local percent = getCellPercent(getCellAvg(mySensor))
lcd.drawText(zone.zone.x + zone.zone.w, zone.zone.y + 22, myString, RIGHT + SMLSIZE + CUSTOM_COLOR) lcd.drawText(zone.zone.x + zone.zone.w, zone.zone.y + 22, myString, RIGHT + SMLSIZE + CUSTOM_COLOR + SHADOWED)
lcd.drawText(zone.zone.x + zone.zone.w, zone.zone.y, percent.."%", RIGHT + MIDSIZE + CUSTOM_COLOR) lcd.drawText(zone.zone.x + zone.zone.w, zone.zone.y, percent.."%", RIGHT + MIDSIZE + CUSTOM_COLOR + SHADOWED)
-- fils batt -- fils batt
lcd.setColor(CUSTOM_COLOR, getPercentColor(percent)) lcd.setColor(CUSTOM_COLOR, getPercentColor(percent))
lcd.drawGauge(zone.zone.x+2, zone.zone.y+2, 75, zone.zone.h - 4, percent, 100, CUSTOM_COLOR) lcd.drawGauge(zone.zone.x+2, zone.zone.y+2, 75, zone.zone.h - 4, percent, 100, CUSTOM_COLOR)
@ -195,7 +195,7 @@ local function zoneSmall(zone)
lcd.drawRectangle(zone.zone.x + myBatt.x + i, zone.zone.y + myBatt.y, myBatt.segments_w, myBatt.h, CUSTOM_COLOR, 1) lcd.drawRectangle(zone.zone.x + myBatt.x + i, zone.zone.y + myBatt.y, myBatt.segments_w, myBatt.h, CUSTOM_COLOR, 1)
end end
else else
lcd.drawText(zone.zone.x, zone.zone.y+10, "No FLVSS sensor data", LEFT + SMLSIZE + INVERS + CUSTOM_COLOR) lcd.drawText(zone.zone.x, zone.zone.y+10, "No FLVSS sensor data", LEFT + SMLSIZE + INVERS + CUSTOM_COLOR + SHADOWED)
end end
return return
end end
@ -208,7 +208,7 @@ local function zoneMedium(zone)
lcd.setColor(CUSTOM_COLOR, zone.options.Color) lcd.setColor(CUSTOM_COLOR, zone.options.Color)
if type(mySensor) == "table" then if type(mySensor) == "table" then
local percent = getCellPercent(getCellAvg(mySensor)) local percent = getCellPercent(getCellAvg(mySensor))
lcd.drawText(zone.zone.x + zone.zone.w, zone.zone.y+5, percent.."% ", RIGHT + MIDSIZE + CUSTOM_COLOR) lcd.drawText(zone.zone.x + zone.zone.w, zone.zone.y+5, percent.."% ", RIGHT + MIDSIZE + CUSTOM_COLOR + SHADOWED)
-- fils batt -- fils batt
lcd.setColor(CUSTOM_COLOR, getPercentColor(percent)) lcd.setColor(CUSTOM_COLOR, getPercentColor(percent))
@ -219,7 +219,7 @@ local function zoneMedium(zone)
lcd.setColor(CUSTOM_COLOR, getRangeColor(mySensor[i], getCellMax(mySensor), getCellMax(mySensor) - 0.2)) lcd.setColor(CUSTOM_COLOR, getRangeColor(mySensor[i], getCellMax(mySensor), getCellMax(mySensor) - 0.2))
lcd.drawFilledRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 58, 20, CUSTOM_COLOR) lcd.drawFilledRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 58, 20, CUSTOM_COLOR)
lcd.setColor(CUSTOM_COLOR, WHITE) lcd.setColor(CUSTOM_COLOR, WHITE)
lcd.drawText(zone.zone.x + pos[i].x+10, zone.zone.y + pos[i].y, string.format("%.2f", mySensor[i]), CUSTOM_COLOR) lcd.drawText(zone.zone.x + pos[i].x+10, zone.zone.y + pos[i].y, string.format("%.2f", mySensor[i]), CUSTOM_COLOR + SHADOWED)
lcd.drawRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 59, 20, CUSTOM_COLOR,1) lcd.drawRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 59, 20, CUSTOM_COLOR,1)
end end
else else
@ -229,7 +229,7 @@ local function zoneMedium(zone)
lcd.setColor(CUSTOM_COLOR, WHITE) lcd.setColor(CUSTOM_COLOR, WHITE)
lcd.drawRectangle(zone.zone.x + myBatt.x , zone.zone.y + myBatt.y, myBatt.w, myBatt.h, CUSTOM_COLOR, 2) lcd.drawRectangle(zone.zone.x + myBatt.x , zone.zone.y + myBatt.y, myBatt.w, myBatt.h, CUSTOM_COLOR, 2)
lcd.drawFilledRectangle(zone.zone.x + myBatt.x + myBatt.w, zone.zone.y + myBatt.h/2 - myBatt.cath_h/2, myBatt.cath_w, myBatt.cath_h, CUSTOM_COLOR) lcd.drawFilledRectangle(zone.zone.x + myBatt.x + myBatt.w, zone.zone.y + myBatt.h/2 - myBatt.cath_h/2, myBatt.cath_w, myBatt.cath_h, CUSTOM_COLOR)
lcd.drawText(zone.zone.x + myBatt.x + 5 , zone.zone.y + myBatt.y + 5, string.format("%2.1fV", getCellSum(mySensor)), LEFT + MIDSIZE + CUSTOM_COLOR) lcd.drawText(zone.zone.x + myBatt.x + 5 , zone.zone.y + myBatt.y + 5, string.format("%2.1fV", getCellSum(mySensor)), LEFT + MIDSIZE + CUSTOM_COLOR + SHADOWED)
--for i=1, myBatt.w - myBatt.segments_w, myBatt.segments_w do --for i=1, myBatt.w - myBatt.segments_w, myBatt.segments_w do
-- lcd.drawRectangle(zone.zone.x + myBatt.x + i, zone.zone.y + myBatt.y, myBatt.segments_w, myBatt.h, CUSTOM_COLOR, 1) -- lcd.drawRectangle(zone.zone.x + myBatt.x + i, zone.zone.y + myBatt.y, myBatt.segments_w, myBatt.h, CUSTOM_COLOR, 1)
--end --end
@ -244,9 +244,9 @@ local function zoneLarge(zone)
lcd.setColor(CUSTOM_COLOR, zone.options.Color) lcd.setColor(CUSTOM_COLOR, zone.options.Color)
if type(mySensor) == "table" then if type(mySensor) == "table" then
local percent = getCellPercent(getCellAvg(mySensor)) local percent = getCellPercent(getCellAvg(mySensor))
lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y+15, percent.."%", RIGHT + DBLSIZE + CUSTOM_COLOR) lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y+15, percent.."%", RIGHT + DBLSIZE + CUSTOM_COLOR + SHADOWED)
lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y+44, string.format("%2.1fV", getCellSum(mySensor)), RIGHT + MIDSIZE + CUSTOM_COLOR) lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y+44, string.format("%2.1fV", getCellSum(mySensor)), RIGHT + MIDSIZE + CUSTOM_COLOR + SHADOWED)
lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y+65, getCellCount(mySensor).."S", RIGHT + MIDSIZE + CUSTOM_COLOR) lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y+65, getCellCount(mySensor).."S", RIGHT + MIDSIZE + CUSTOM_COLOR + SHADOWED)
-- fils batt -- fils batt
lcd.setColor(CUSTOM_COLOR, getPercentColor(percent)) lcd.setColor(CUSTOM_COLOR, getPercentColor(percent))
lcd.drawFilledRectangle(zone.zone.x + myBatt.x, zone.zone.y + myBatt.y + myBatt.h + myBatt.cath_h - math.floor(percent/100 * myBatt.h), myBatt.w, math.floor(percent/100 * myBatt.h), CUSTOM_COLOR) lcd.drawFilledRectangle(zone.zone.x + myBatt.x, zone.zone.y + myBatt.y + myBatt.h + myBatt.cath_h - math.floor(percent/100 * myBatt.h), myBatt.w, math.floor(percent/100 * myBatt.h), CUSTOM_COLOR)
@ -256,11 +256,11 @@ local function zoneLarge(zone)
lcd.setColor(CUSTOM_COLOR, getRangeColor(mySensor[i], getCellMax(mySensor), getCellMax(mySensor) - 0.2)) lcd.setColor(CUSTOM_COLOR, getRangeColor(mySensor[i], getCellMax(mySensor), getCellMax(mySensor) - 0.2))
lcd.drawFilledRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 58, 20, CUSTOM_COLOR) lcd.drawFilledRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 58, 20, CUSTOM_COLOR)
lcd.setColor(CUSTOM_COLOR, WHITE) lcd.setColor(CUSTOM_COLOR, WHITE)
lcd.drawText(zone.zone.x + pos[i].x+10, zone.zone.y + pos[i].y, string.format("%.2f", mySensor[i]), CUSTOM_COLOR) lcd.drawText(zone.zone.x + pos[i].x+10, zone.zone.y + pos[i].y, string.format("%.2f", mySensor[i]), CUSTOM_COLOR + SHADOWED)
lcd.drawRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 59, 20, CUSTOM_COLOR, 1) lcd.drawRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 59, 20, CUSTOM_COLOR, 1)
end end
else else
lcd.drawText(zone.zone.x+5, zone.zone.y, "No FLVSS sensor data", LEFT + SMLSIZE + INVERS + CUSTOM_COLOR) lcd.drawText(zone.zone.x+5, zone.zone.y, "No FLVSS sensor data", LEFT + SMLSIZE + INVERS + CUSTOM_COLOR + SHADOWED)
end end
-- draws bat -- draws bat
lcd.setColor(CUSTOM_COLOR, WHITE) lcd.setColor(CUSTOM_COLOR, WHITE)
@ -285,16 +285,16 @@ local function zoneXLarge(zone)
lcd.drawFilledRectangle(zone.zone.x + myBatt.x, zone.zone.y + myBatt.y + myBatt.h + myBatt.cath_h - math.floor(percent/100 * myBatt.h), myBatt.w, math.floor(percent/100 * myBatt.h), CUSTOM_COLOR) lcd.drawFilledRectangle(zone.zone.x + myBatt.x, zone.zone.y + myBatt.y + myBatt.h + myBatt.cath_h - math.floor(percent/100 * myBatt.h), myBatt.w, math.floor(percent/100 * myBatt.h), CUSTOM_COLOR)
-- draw right text section -- draw right text section
lcd.setColor(CUSTOM_COLOR, zone.options.Color) lcd.setColor(CUSTOM_COLOR, zone.options.Color)
lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y + myBatt.y, percent.."%", RIGHT + DBLSIZE + CUSTOM_COLOR) lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y + myBatt.y, percent.."%", RIGHT + DBLSIZE + CUSTOM_COLOR + SHADOWED)
lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y + myBatt.y + 63, string.format("%2.1fV", getCellSum(mySensor)), RIGHT + MIDSIZE + CUSTOM_COLOR) lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y + myBatt.y + 63, string.format("%2.1fV", getCellSum(mySensor)), RIGHT + MIDSIZE + CUSTOM_COLOR + SHADOWED)
lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y + myBatt.y + 105, getCellCount(mySensor).."S", RIGHT + MIDSIZE + CUSTOM_COLOR) lcd.drawText(zone.zone.x+zone.zone.w, zone.zone.y + myBatt.y + 105, getCellCount(mySensor).."S", RIGHT + MIDSIZE + CUSTOM_COLOR + SHADOWED)
-- draw cells -- draw cells
local pos = {{x=111, y=38}, {x=164, y=38}, {x=217, y=38}, {x=111, y=57}, {x=164, y=57}, {x=217, y=57}} local pos = {{x=111, y=38}, {x=164, y=38}, {x=217, y=38}, {x=111, y=57}, {x=164, y=57}, {x=217, y=57}}
for i=1, getCellCount(mySensor), 1 do for i=1, getCellCount(mySensor), 1 do
lcd.setColor(CUSTOM_COLOR, getRangeColor(mySensor[i], getCellMax(mySensor), getCellMax(mySensor) - 0.2)) lcd.setColor(CUSTOM_COLOR, getRangeColor(mySensor[i], getCellMax(mySensor), getCellMax(mySensor) - 0.2))
lcd.drawFilledRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 53, 20, CUSTOM_COLOR) lcd.drawFilledRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 53, 20, CUSTOM_COLOR)
lcd.setColor(CUSTOM_COLOR, WHITE) lcd.setColor(CUSTOM_COLOR, WHITE)
lcd.drawText(zone.zone.x + pos[i].x+10, zone.zone.y + pos[i].y, string.format("%.2f", mySensor[i]), CUSTOM_COLOR) lcd.drawText(zone.zone.x + pos[i].x+10, zone.zone.y + pos[i].y, string.format("%.2f", mySensor[i]), CUSTOM_COLOR + SHADOWED)
lcd.drawRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 54, 20, CUSTOM_COLOR, 1) lcd.drawRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 54, 20, CUSTOM_COLOR, 1)
end end
-- draw cells for lowest cells -- draw cells for lowest cells
@ -304,7 +304,7 @@ local function zoneXLarge(zone)
lcd.drawFilledRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 53, 20, CUSTOM_COLOR) lcd.drawFilledRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 53, 20, CUSTOM_COLOR)
lcd.setColor(CUSTOM_COLOR, WHITE) lcd.setColor(CUSTOM_COLOR, WHITE)
lcd.drawRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 54, 20, CUSTOM_COLOR, 1) lcd.drawRectangle(zone.zone.x + pos[i].x, zone.zone.y + pos[i].y, 54, 20, CUSTOM_COLOR, 1)
lcd.drawText(zone.zone.x + pos[i].x+10, zone.zone.y + pos[i].y, string.format("%.2f", histCellData[i]), CUSTOM_COLOR) lcd.drawText(zone.zone.x + pos[i].x+10, zone.zone.y + pos[i].y, string.format("%.2f", histCellData[i]), CUSTOM_COLOR + SHADOWED)
end end
else else
lcd.drawText(zone.zone.x+5, zone.zone.y, "No FLVSS sensor data", LEFT + SMLSIZE + INVERS + CUSTOM_COLOR) lcd.drawText(zone.zone.x+5, zone.zone.y, "No FLVSS sensor data", LEFT + SMLSIZE + INVERS + CUSTOM_COLOR)
@ -318,9 +318,9 @@ local function zoneXLarge(zone)
end end
-- draw middle rectangles -- draw middle rectangles
lcd.drawRectangle(zone.zone.x + 110, zone.zone.y + 38, 161, 40, CUSTOM_COLOR, 1) lcd.drawRectangle(zone.zone.x + 110, zone.zone.y + 38, 161, 40, CUSTOM_COLOR, 1)
lcd.drawText(zone.zone.x + 270, zone.zone.y + 21, "Live data", RIGHT + SMLSIZE + INVERS + CUSTOM_COLOR) lcd.drawText(zone.zone.x + 270, zone.zone.y + 21, "Live data", RIGHT + SMLSIZE + INVERS + CUSTOM_COLOR + SHADOWED)
lcd.drawRectangle(zone.zone.x + 110, zone.zone.y + 110, 161, 40, CUSTOM_COLOR, 1) lcd.drawRectangle(zone.zone.x + 110, zone.zone.y + 110, 161, 40, CUSTOM_COLOR, 1)
lcd.drawText(zone.zone.x + 270, zone.zone.y + 93, "Lowest data", RIGHT + SMLSIZE + INVERS + CUSTOM_COLOR) lcd.drawText(zone.zone.x + 270, zone.zone.y + 93, "Lowest data", RIGHT + SMLSIZE + INVERS + CUSTOM_COLOR + SHADOWED)
return return
end end

View file

@ -44,6 +44,7 @@
#define LEFT 0x00 /* align left */ #define LEFT 0x00 /* align left */
#define CENTERED 0x04 /* align center */ #define CENTERED 0x04 /* align center */
#define RIGHT 0x08 /* align right */ #define RIGHT 0x08 /* align right */
#define SHADOWED 0x80 /* black copy at +1 +1 */
/* drawNumber flags */ /* drawNumber flags */
#define LEADING0 0x10 #define LEADING0 0x10

View file

@ -1238,6 +1238,7 @@ const luaR_value_entry opentxConstants[] = {
{ "MIXSRC_CH1", MIXSRC_CH1 }, { "MIXSRC_CH1", MIXSRC_CH1 },
{ "SWSRC_LAST", SWSRC_LAST_LOGICAL_SWITCH }, { "SWSRC_LAST", SWSRC_LAST_LOGICAL_SWITCH },
#if defined(COLORLCD) #if defined(COLORLCD)
{ "SHADOWED", SHADOWED },
{ "COLOR", ZoneOption::Color }, { "COLOR", ZoneOption::Color },
{ "CUSTOM_COLOR", CUSTOM_COLOR }, { "CUSTOM_COLOR", CUSTOM_COLOR },
{ "TEXT_COLOR", TEXT_COLOR }, { "TEXT_COLOR", TEXT_COLOR },

View file

@ -205,8 +205,9 @@ See the [Appendix](../appendix/fonts.md) for available characters in each font s
* `SMLSIZE` small font * `SMLSIZE` small font
* `INVERS` inverted display * `INVERS` inverted display
* `BLINK` blinking text * `BLINK` blinking text
* `SHADOWED` Horus only, apply a shadow effect
@status current Introduced in 2.0.0 @status current Introduced in 2.0.0, `SHADOWED` introduced in 2.2.1
*/ */
static int luaLcdDrawText(lua_State *L) static int luaLcdDrawText(lua_State *L)
{ {
@ -215,6 +216,9 @@ static int luaLcdDrawText(lua_State *L)
int y = luaL_checkinteger(L, 2); int y = luaL_checkinteger(L, 2);
const char * s = luaL_checkstring(L, 3); const char * s = luaL_checkstring(L, 3);
unsigned int att = luaL_optunsigned(L, 4, 0); unsigned int att = luaL_optunsigned(L, 4, 0);
#if defined(COLORLCD)
if ((att&SHADOWED) && !(att&INVERS)) lcdDrawText(x+1, y+1, s, att&0xFFFF);
#endif
lcdDrawText(x, y, s, att); lcdDrawText(x, y, s, att);
return 0; return 0;
} }
@ -232,8 +236,9 @@ Display a value formatted as time at (x,y)
* `0 or not specified` normal representation (minutes and seconds) * `0 or not specified` normal representation (minutes and seconds)
* `TIMEHOUR` display hours * `TIMEHOUR` display hours
* other general LCD flag also apply * other general LCD flag also apply
* `SHADOWED` Horus only, apply a shadow effect
@status current Introduced in 2.0.0 @status current Introduced in 2.0.0, `SHADOWED` introduced in 2.2.1
*/ */
static int luaLcdDrawTimer(lua_State *L) static int luaLcdDrawTimer(lua_State *L)
{ {
@ -243,6 +248,7 @@ static int luaLcdDrawTimer(lua_State *L)
int seconds = luaL_checkinteger(L, 3); int seconds = luaL_checkinteger(L, 3);
unsigned int att = luaL_optunsigned(L, 4, 0); unsigned int att = luaL_optunsigned(L, 4, 0);
#if defined(COLORLCD) #if defined(COLORLCD)
if (att&SHADOWED) drawTimer(x+1, y+1, seconds, (att&0xFFFF)|LEFT);
drawTimer(x, y, seconds, att|LEFT); drawTimer(x, y, seconds, att|LEFT);
#else #else
drawTimer(x, y, seconds, att|LEFT, att); drawTimer(x, y, seconds, att|LEFT, att);
@ -264,8 +270,9 @@ Display a number at (x,y)
* `PREC1` display with one decimal place (number 386 is displayed as 38.6) * `PREC1` display with one decimal place (number 386 is displayed as 38.6)
* `PREC2` display with tow decimal places (number 386 is displayed as 3.86) * `PREC2` display with tow decimal places (number 386 is displayed as 3.86)
* other general LCD flag also apply * other general LCD flag also apply
* `SHADOWED` Horus only, apply a shadow effect
@status current Introduced in 2.0.0 @status current Introduced in 2.0.0, `SHADOWED` introduced in 2.2.1
*/ */
static int luaLcdDrawNumber(lua_State *L) static int luaLcdDrawNumber(lua_State *L)
{ {
@ -274,6 +281,9 @@ static int luaLcdDrawNumber(lua_State *L)
int y = luaL_checkinteger(L, 2); int y = luaL_checkinteger(L, 2);
int val = luaL_checkinteger(L, 3); int val = luaL_checkinteger(L, 3);
unsigned int att = luaL_optunsigned(L, 4, 0); unsigned int att = luaL_optunsigned(L, 4, 0);
#if defined(COLORLCD)
if ((att&SHADOWED) && !(att&INVERS)) lcdDrawNumber(x, y, val, att&0xFFFF);
#endif
lcdDrawNumber(x, y, val, att); lcdDrawNumber(x, y, val, att);
return 0; return 0;
} }