mirror of
https://github.com/opentx/opentx.git
synced 2025-07-26 17:55:19 +03:00
[Horus] UI continued
This commit is contained in:
parent
ba2d03b3ad
commit
9db8005f71
10 changed files with 37 additions and 53 deletions
|
@ -13,12 +13,12 @@ macro(add_bitmaps_target targetname filter width format)
|
||||||
add_custom_target(${targetname} DEPENDS ${bitmaps_files})
|
add_custom_target(${targetname} DEPENDS ${bitmaps_files})
|
||||||
endmacro(add_bitmaps_target)
|
endmacro(add_bitmaps_target)
|
||||||
|
|
||||||
macro(add_truetype_font_target radio name font size)
|
macro(add_truetype_font_target radio name font size bold)
|
||||||
set(target ${RADIO_SRC_DIRECTORY}/fonts/${radio}/font_${name})
|
set(target ${RADIO_SRC_DIRECTORY}/fonts/${radio}/font_${name})
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${target}.png
|
OUTPUT ${target}.png
|
||||||
OUTPUT ${target}.specs
|
OUTPUT ${target}.specs
|
||||||
COMMAND ${RADIO_DIRECTORY}/util/font2png.py ${font} ${size} False ${target}
|
COMMAND ${RADIO_DIRECTORY}/util/font2png.py ${font} ${size} ${bold} ${target}
|
||||||
WORKING_DIRECTORY ${RADIO_SRC_DIRECTORY}
|
WORKING_DIRECTORY ${RADIO_SRC_DIRECTORY}
|
||||||
)
|
)
|
||||||
add_custom_target(ttf_${radio}_${name} DEPENDS ${target}.png ${target}.specs)
|
add_custom_target(ttf_${radio}_${name} DEPENDS ${target}.png ${target}.specs)
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
add_truetype_font_target(horus tinsize "DejaVu Sans" 9)
|
add_truetype_font_target(horus tinsize "DejaVu Sans" 9 False)
|
||||||
add_truetype_font_target(horus smlsize "DejaVu Sans" 13)
|
add_truetype_font_target(horus smlsize "DejaVu Sans" 13 False)
|
||||||
add_truetype_font_target(horus stdsize "DejaVu Sans" 16)
|
add_truetype_font_target(horus stdsize "DejaVu Sans" 16 False)
|
||||||
add_truetype_font_target(horus midsize "DejaVu Sans" 24)
|
add_truetype_font_target(horus midsize "DejaVu Sans" 24 False)
|
||||||
add_truetype_font_target(horus xxlsize "DejaVu Sans" 48)
|
add_truetype_font_target(horus dblsize "DejaVu Sans" 32 True)
|
||||||
|
add_truetype_font_target(horus xxlsize "DejaVu Sans" 48 False)
|
||||||
add_custom_target(ttf_horus_fonts DEPENDS ttf_horus_tinsize ttf_horus_smlsize ttf_horus_stdsize ttf_horus_midsize ttf_horus_dblsize ttf_horus_xxlsize)
|
add_custom_target(ttf_horus_fonts DEPENDS ttf_horus_tinsize ttf_horus_smlsize ttf_horus_stdsize ttf_horus_midsize ttf_horus_dblsize ttf_horus_xxlsize)
|
||||||
|
|
||||||
add_bitmaps_target(horus_bitmaps "${RADIO_SRC_DIRECTORY}/bitmaps/horus/????[^_]*.png" 480 5/6/5/8)
|
add_bitmaps_target(horus_bitmaps "${RADIO_SRC_DIRECTORY}/bitmaps/horus/????[^_]*.png" 480 5/6/5/8)
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
@ -1 +1 @@
|
||||||
{ 0,4,11,23,49,68,99,124,130,141,152,171,195,204,216,223,237,257,275,294,313,334,353,373,392,412,432,440,449,473,497,521,537,550,575,595,618,641,660,677,702,723,730,742,764,782,807,828,854,873,899,921,941,965,987,1012,1045,1069,1093,1116,1127,1141,1151,1175,1196,1208,1227,1247,1265,1285,1305,1320,1340,1359,1365,1375,1395,1401,1431,1450,1470,1490,1510,1525,1543,1558,1577,1598,1625,1646,1667,1685,1709,1712,1736,1764,1791,1809,1827,1849,1871,1893,1915,1943 }
|
{ 0,4,14,28,54,76,110,139,146,160,173,193,217,228,242,251,266,289,310,331,352,375,397,420,441,464,487,497,508,532,556,580,598,613,641,665,689,715,736,757,783,808,818,832,859,880,910,935,963,987,1015,1040,1062,1087,1112,1140,1178,1206,1234,1258,1272,1287,1300,1324,1343,1356,1378,1401,1420,1443,1466,1484,1507,1529,1539,1553,1576,1586,1618,1640,1663,1686,1709,1726,1746,1764,1786,1810,1841,1865,1889,1909,1933,1936,1960,1988,2015,2033,2051,2074,2097,2120,2143,2171 }
|
|
@ -20,46 +20,45 @@
|
||||||
|
|
||||||
#include "../../opentx.h"
|
#include "../../opentx.h"
|
||||||
|
|
||||||
coord_t getCurveYCoord(FnFuncP fn, coord_t x)
|
coord_t getCurveYCoord(FnFuncP fn, int x, int width)
|
||||||
{
|
{
|
||||||
return limit(CURVE_CENTER_Y-CURVE_SIDE_WIDTH, CURVE_CENTER_Y - divRoundClosest(fn(divRoundClosest(x * RESX, CURVE_SIDE_WIDTH)) * CURVE_SIDE_WIDTH, RESX), CURVE_CENTER_Y+CURVE_SIDE_WIDTH);
|
return limit(-width, -divRoundClosest(fn(divRoundClosest(x * RESX, width)) * width, RESX), +width);
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawFunction(FnFuncP fn, int offset)
|
void drawFunction(FnFuncP fn, int x, int y, int width)
|
||||||
{
|
{
|
||||||
int left = CURVE_CENTER_X-offset-CURVE_SIDE_WIDTH;
|
int left = x - width;
|
||||||
int right = CURVE_CENTER_X-offset+CURVE_SIDE_WIDTH;
|
int right = x + width;
|
||||||
int center = CURVE_CENTER_X-offset;
|
|
||||||
|
|
||||||
// Axis
|
// Axis
|
||||||
lcdDrawSolidHorizontalLine(left, CURVE_CENTER_Y, CURVE_SIDE_WIDTH*2+1, CURVE_AXIS_COLOR);
|
lcdDrawSolidHorizontalLine(left, y, width*2+1, CURVE_AXIS_COLOR);
|
||||||
lcdDrawSolidVerticalLine(center, CURVE_CENTER_Y-CURVE_SIDE_WIDTH, CURVE_SIDE_WIDTH*2, CURVE_AXIS_COLOR);
|
lcdDrawSolidVerticalLine(x, y-width, width*2, CURVE_AXIS_COLOR);
|
||||||
|
|
||||||
// Extra lines
|
// Extra lines
|
||||||
lcdDrawVerticalLine(left+CURVE_SIDE_WIDTH/2, CURVE_CENTER_Y-CURVE_SIDE_WIDTH, CURVE_SIDE_WIDTH*2, STASHED, CURVE_AXIS_COLOR);
|
lcdDrawVerticalLine(left+width/2, y-width, width*2, STASHED, CURVE_AXIS_COLOR);
|
||||||
lcdDrawVerticalLine(right-CURVE_SIDE_WIDTH/2, CURVE_CENTER_Y-CURVE_SIDE_WIDTH, CURVE_SIDE_WIDTH*2, STASHED, CURVE_AXIS_COLOR);
|
lcdDrawVerticalLine(right-width/2, y-width, width*2, STASHED, CURVE_AXIS_COLOR);
|
||||||
lcdDrawHorizontalLine(left, CURVE_CENTER_Y-CURVE_SIDE_WIDTH/2, CURVE_SIDE_WIDTH*2+1, STASHED, CURVE_AXIS_COLOR);
|
lcdDrawHorizontalLine(left, y-width/2, width*2+1, STASHED, CURVE_AXIS_COLOR);
|
||||||
lcdDrawHorizontalLine(left, CURVE_CENTER_Y+CURVE_SIDE_WIDTH/2, CURVE_SIDE_WIDTH*2+1, STASHED, CURVE_AXIS_COLOR);
|
lcdDrawHorizontalLine(left, y+width/2, width*2+1, STASHED, CURVE_AXIS_COLOR);
|
||||||
|
|
||||||
// Outside border
|
// Outside border
|
||||||
lcdDrawSolidVerticalLine(left, CURVE_CENTER_Y-CURVE_SIDE_WIDTH, CURVE_SIDE_WIDTH*2, TEXT_COLOR);
|
lcdDrawSolidVerticalLine(left, y-width, width*2, TEXT_COLOR);
|
||||||
lcdDrawSolidVerticalLine(right, CURVE_CENTER_Y-CURVE_SIDE_WIDTH, CURVE_SIDE_WIDTH*2, TEXT_COLOR);
|
lcdDrawSolidVerticalLine(right, y-width, width*2, TEXT_COLOR);
|
||||||
lcdDrawSolidHorizontalLine(left, CURVE_CENTER_Y-CURVE_SIDE_WIDTH, CURVE_SIDE_WIDTH*2+1, TEXT_COLOR);
|
lcdDrawSolidHorizontalLine(left, y-width, width*2+1, TEXT_COLOR);
|
||||||
lcdDrawSolidHorizontalLine(left, CURVE_CENTER_Y+CURVE_SIDE_WIDTH, CURVE_SIDE_WIDTH*2+1, TEXT_COLOR);
|
lcdDrawSolidHorizontalLine(left, y+width, width*2+1, TEXT_COLOR);
|
||||||
|
|
||||||
coord_t prev_yv = (coord_t)-1;
|
coord_t prev_yv = (coord_t)-1;
|
||||||
|
|
||||||
for (int xv=-CURVE_SIDE_WIDTH; xv<=CURVE_SIDE_WIDTH; xv+=1) {
|
for (int xv=-width; xv<=width; xv+=1) {
|
||||||
coord_t yv = getCurveYCoord(fn, xv);
|
coord_t yv = y + getCurveYCoord(fn, xv, width);
|
||||||
if (prev_yv != (coord_t)-1) {
|
if (prev_yv != (coord_t)-1) {
|
||||||
if (prev_yv < yv) {
|
if (prev_yv < yv) {
|
||||||
for (int y=prev_yv; y<=yv; y+=1) {
|
for (int y=prev_yv; y<=yv; y+=1) {
|
||||||
lcdDrawBitmapPattern(CURVE_CENTER_X+xv-offset-2, y-2, LBM_POINT, TEXT_COLOR);
|
lcdDrawBitmapPattern(x+xv-2, y-2, LBM_POINT, TEXT_COLOR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (int y=yv; y<=prev_yv; y+=1) {
|
for (int y=yv; y<=prev_yv; y+=1) {
|
||||||
lcdDrawBitmapPattern(CURVE_CENTER_X+xv-offset-2, y-2, LBM_POINT, TEXT_COLOR);
|
lcdDrawBitmapPattern(x+xv-2, y-2, LBM_POINT, TEXT_COLOR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,7 +79,7 @@ void drawStick(coord_t centrex, int16_t xval, int16_t yval);
|
||||||
void drawSticks();
|
void drawSticks();
|
||||||
|
|
||||||
// Curve functions
|
// Curve functions
|
||||||
coord_t getCurveYCoord(FnFuncP fn, coord_t x);
|
coord_t getCurveYCoord(FnFuncP fn, int x, int width);
|
||||||
void drawFunction(FnFuncP fn, int offset);
|
void drawFunction(FnFuncP fn, int offset);
|
||||||
void drawCurveVerticalScale(int x);
|
void drawCurveVerticalScale(int x);
|
||||||
void drawCurveHorizontalScale();
|
void drawCurveHorizontalScale();
|
||||||
|
|
|
@ -49,9 +49,9 @@ point_t getPoint(uint8_t i)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawCurve(int offset=0)
|
void drawCurve(int x, int y, int width)
|
||||||
{
|
{
|
||||||
drawFunction(curveFn, offset);
|
drawFunction(curveFn, x, y, width);
|
||||||
|
|
||||||
/*int i = 0;
|
/*int i = 0;
|
||||||
do {
|
do {
|
||||||
|
@ -209,7 +209,7 @@ bool menuModelCurveOne(evt_t event)
|
||||||
killEvents(event);
|
killEvents(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawCurve();
|
drawCurve(CURVE_CENTER_X, CURVE_CENTER_Y, CURVE_SIDE_WIDTH);
|
||||||
drawCurveHorizontalScale();
|
drawCurveHorizontalScale();
|
||||||
if (menuVerticalPosition < ITEM_CURVE_COORDS1) drawCurveVerticalScale(CURVE_CENTER_X-CURVE_SIDE_WIDTH-15);
|
if (menuVerticalPosition < ITEM_CURVE_COORDS1) drawCurveVerticalScale(CURVE_CENTER_X-CURVE_SIDE_WIDTH-15);
|
||||||
|
|
||||||
|
@ -351,13 +351,13 @@ bool menuModelCurvesAll(evt_t event)
|
||||||
putsStrIdx(MENUS_MARGIN_LEFT, y, STR_CV, k+1, attr);
|
putsStrIdx(MENUS_MARGIN_LEFT, y, STR_CV, k+1, attr);
|
||||||
editName(50, y, g_model.curveNames[k], sizeof(g_model.curveNames[k]), 0, 0);
|
editName(50, y, g_model.curveNames[k], sizeof(g_model.curveNames[k]), 0, 0);
|
||||||
CurveInfo & crv = g_model.curves[k];
|
CurveInfo & crv = g_model.curves[k];
|
||||||
lcdDrawNumber(100, y, 5+crv.points, LEFT, 0, NULL, STR_PTS);
|
lcdDrawNumber(120, y, 5+crv.points, LEFT, 0, NULL, STR_PTS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sub >= 0) {
|
if (sub >= 0) {
|
||||||
s_curveChan = sub;
|
s_curveChan = sub;
|
||||||
DrawCurve(23);
|
drawCurve(CURVE_CENTER_X, CURVE_CENTER_Y+10, 80);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -296,8 +296,7 @@ bool menuModelExpoOne(evt_t event)
|
||||||
|
|
||||||
coord_t y = MENU_CONTENT_TOP;
|
coord_t y = MENU_CONTENT_TOP;
|
||||||
|
|
||||||
drawFunction(expoFn);
|
drawFunction(expoFn, CURVE_CENTER_X, CURVE_CENTER_Y, CURVE_SIDE_WIDTH);
|
||||||
|
|
||||||
drawCurveHorizontalScale();
|
drawCurveHorizontalScale();
|
||||||
drawCurveVerticalScale(CURVE_CENTER_X-CURVE_SIDE_WIDTH-15);
|
drawCurveVerticalScale(CURVE_CENTER_X-CURVE_SIDE_WIDTH-15);
|
||||||
|
|
||||||
|
@ -319,7 +318,7 @@ bool menuModelExpoOne(evt_t event)
|
||||||
sprintf(texty, "%d", calcRESXto100(y));
|
sprintf(texty, "%d", calcRESXto100(y));
|
||||||
|
|
||||||
x = divRoundClosest(x*CURVE_SIDE_WIDTH, RESX);
|
x = divRoundClosest(x*CURVE_SIDE_WIDTH, RESX);
|
||||||
y = getCurveYCoord(expoFn, x);
|
y = CURVE_CENTER_Y + getCurveYCoord(expoFn, x, CURVE_SIDE_WIDTH);
|
||||||
|
|
||||||
lcdDrawSolidFilledRect(CURVE_CENTER_X+x, CURVE_CENTER_Y-CURVE_SIDE_WIDTH, 2, 2*CURVE_SIDE_WIDTH+2, CURVE_CURSOR_COLOR);
|
lcdDrawSolidFilledRect(CURVE_CENTER_X+x, CURVE_CENTER_Y-CURVE_SIDE_WIDTH, 2, 2*CURVE_SIDE_WIDTH+2, CURVE_CURSOR_COLOR);
|
||||||
lcdDrawSolidFilledRect(CURVE_CENTER_X-CURVE_SIDE_WIDTH-2, y-1, 2*CURVE_SIDE_WIDTH+2, 2, CURVE_CURSOR_COLOR);
|
lcdDrawSolidFilledRect(CURVE_CENTER_X-CURVE_SIDE_WIDTH-2, y-1, 2*CURVE_SIDE_WIDTH+2, 2, CURVE_CURSOR_COLOR);
|
||||||
|
|
|
@ -49,7 +49,6 @@ enum LimitsItems {
|
||||||
ITEM_LIMITS_MAXROW = ITEM_LIMITS_COUNT-1
|
ITEM_LIMITS_MAXROW = ITEM_LIMITS_COUNT-1
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(PPM_CENTER_ADJUSTABLE)
|
|
||||||
#define LIMITS_NAME_POS 52
|
#define LIMITS_NAME_POS 52
|
||||||
#define LIMITS_OFFSET_POS 160
|
#define LIMITS_OFFSET_POS 160
|
||||||
#define LIMITS_MIN_POS 220
|
#define LIMITS_MIN_POS 220
|
||||||
|
@ -59,16 +58,6 @@ enum LimitsItems {
|
||||||
#define LIMITS_CURVE_POS 350
|
#define LIMITS_CURVE_POS 350
|
||||||
#define LIMITS_PPM_CENTER_POS 440
|
#define LIMITS_PPM_CENTER_POS 440
|
||||||
#define LIMITS_SYMETRICAL_POS 450
|
#define LIMITS_SYMETRICAL_POS 450
|
||||||
#else
|
|
||||||
#define LIMITS_NAME_POS 44
|
|
||||||
#define LIMITS_OFFSET_POS 136
|
|
||||||
#define LIMITS_MIN_POS 178
|
|
||||||
#define LIMITS_DIRECTION_POS 181
|
|
||||||
#define LIMITS_MAX_POS 218
|
|
||||||
#define LIMITS_REVERT_POS 228
|
|
||||||
#define LIMITS_CURVE_POS 258
|
|
||||||
#define LIMITS_SYMETRICAL_POS 294
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define LIMITS_MIN_MAX_OFFSET 1000
|
#define LIMITS_MIN_MAX_OFFSET 1000
|
||||||
#define CONVERT_US_MIN_MAX(x) (((x)*1280)/250)
|
#define CONVERT_US_MIN_MAX(x) (((x)*1280)/250)
|
||||||
|
@ -222,11 +211,7 @@ bool menuModelLimits(evt_t event)
|
||||||
case ITEM_LIMITS_DIRECTION:
|
case ITEM_LIMITS_DIRECTION:
|
||||||
{
|
{
|
||||||
uint8_t revert = ld->revert;
|
uint8_t revert = ld->revert;
|
||||||
#if defined(PPM_CENTER_ADJUSTABLE)
|
|
||||||
lcdDrawText(LIMITS_REVERT_POS, y, revert ? "\177" : "\176", attr);
|
lcdDrawText(LIMITS_REVERT_POS, y, revert ? "\177" : "\176", attr);
|
||||||
#else
|
|
||||||
lcdDrawTextAtIndex(LIMITS_REVERT_POS, y, STR_MMMINV, revert, attr);
|
|
||||||
#endif
|
|
||||||
if (active) {
|
if (active) {
|
||||||
uint8_t revert_new = checkIncDecModel(event, revert, 0, 1);
|
uint8_t revert_new = checkIncDecModel(event, revert, 0, 1);
|
||||||
if (checkIncDec_Ret && isThrottleOutput(k)) {
|
if (checkIncDec_Ret && isThrottleOutput(k)) {
|
||||||
|
|
|
@ -400,7 +400,7 @@ void pushModelNotes();
|
||||||
#define EDIT_MODE_INIT 0 // TODO enum
|
#define EDIT_MODE_INIT 0 // TODO enum
|
||||||
|
|
||||||
typedef int (*FnFuncP) (int x);
|
typedef int (*FnFuncP) (int x);
|
||||||
void drawFunction(FnFuncP fn, int offset=0);
|
void drawFunction(FnFuncP fn, int x, int y, int width);
|
||||||
|
|
||||||
uint8_t switchToMix(uint8_t source);
|
uint8_t switchToMix(uint8_t source);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue