diff --git a/cmake/Bitmaps.cmake b/cmake/Bitmaps.cmake index 9702c8e0a..b5cfcc651 100644 --- a/cmake/Bitmaps.cmake +++ b/cmake/Bitmaps.cmake @@ -13,12 +13,12 @@ macro(add_bitmaps_target targetname filter width format) add_custom_target(${targetname} DEPENDS ${bitmaps_files}) 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}) add_custom_command( OUTPUT ${target}.png 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} ) add_custom_target(ttf_${radio}_${name} DEPENDS ${target}.png ${target}.specs) diff --git a/radio/src/bitmaps/horus/CMakeLists.txt b/radio/src/bitmaps/horus/CMakeLists.txt index 1c033ed2e..1a03f6dd6 100644 --- a/radio/src/bitmaps/horus/CMakeLists.txt +++ b/radio/src/bitmaps/horus/CMakeLists.txt @@ -1,8 +1,9 @@ -add_truetype_font_target(horus tinsize "DejaVu Sans" 9) -add_truetype_font_target(horus smlsize "DejaVu Sans" 13) -add_truetype_font_target(horus stdsize "DejaVu Sans" 16) -add_truetype_font_target(horus midsize "DejaVu Sans" 24) -add_truetype_font_target(horus xxlsize "DejaVu Sans" 48) +add_truetype_font_target(horus tinsize "DejaVu Sans" 9 False) +add_truetype_font_target(horus smlsize "DejaVu Sans" 13 False) +add_truetype_font_target(horus stdsize "DejaVu Sans" 16 False) +add_truetype_font_target(horus midsize "DejaVu Sans" 24 False) +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_bitmaps_target(horus_bitmaps "${RADIO_SRC_DIRECTORY}/bitmaps/horus/????[^_]*.png" 480 5/6/5/8) diff --git a/radio/src/fonts/horus/font_dblsize.png b/radio/src/fonts/horus/font_dblsize.png index 2eb8ec6a2..686dcc9a5 100644 Binary files a/radio/src/fonts/horus/font_dblsize.png and b/radio/src/fonts/horus/font_dblsize.png differ diff --git a/radio/src/fonts/horus/font_dblsize.specs b/radio/src/fonts/horus/font_dblsize.specs index 44eca3c72..8129cf4ed 100644 --- a/radio/src/fonts/horus/font_dblsize.specs +++ b/radio/src/fonts/horus/font_dblsize.specs @@ -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 } \ No newline at end of file +{ 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 } \ No newline at end of file diff --git a/radio/src/gui/horus/curves.cpp b/radio/src/gui/horus/curves.cpp index e3e550b43..2be86be34 100644 --- a/radio/src/gui/horus/curves.cpp +++ b/radio/src/gui/horus/curves.cpp @@ -20,46 +20,45 @@ #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 right = CURVE_CENTER_X-offset+CURVE_SIDE_WIDTH; - int center = CURVE_CENTER_X-offset; + int left = x - width; + int right = x + width; // Axis - lcdDrawSolidHorizontalLine(left, CURVE_CENTER_Y, CURVE_SIDE_WIDTH*2+1, CURVE_AXIS_COLOR); - lcdDrawSolidVerticalLine(center, CURVE_CENTER_Y-CURVE_SIDE_WIDTH, CURVE_SIDE_WIDTH*2, CURVE_AXIS_COLOR); + lcdDrawSolidHorizontalLine(left, y, width*2+1, CURVE_AXIS_COLOR); + lcdDrawSolidVerticalLine(x, y-width, width*2, CURVE_AXIS_COLOR); // Extra lines - lcdDrawVerticalLine(left+CURVE_SIDE_WIDTH/2, CURVE_CENTER_Y-CURVE_SIDE_WIDTH, CURVE_SIDE_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); - lcdDrawHorizontalLine(left, CURVE_CENTER_Y-CURVE_SIDE_WIDTH/2, CURVE_SIDE_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); + lcdDrawVerticalLine(left+width/2, y-width, width*2, STASHED, CURVE_AXIS_COLOR); + lcdDrawVerticalLine(right-width/2, y-width, width*2, STASHED, CURVE_AXIS_COLOR); + lcdDrawHorizontalLine(left, y-width/2, width*2+1, STASHED, CURVE_AXIS_COLOR); + lcdDrawHorizontalLine(left, y+width/2, width*2+1, STASHED, CURVE_AXIS_COLOR); // Outside border - lcdDrawSolidVerticalLine(left, CURVE_CENTER_Y-CURVE_SIDE_WIDTH, CURVE_SIDE_WIDTH*2, TEXT_COLOR); - lcdDrawSolidVerticalLine(right, CURVE_CENTER_Y-CURVE_SIDE_WIDTH, CURVE_SIDE_WIDTH*2, TEXT_COLOR); - lcdDrawSolidHorizontalLine(left, CURVE_CENTER_Y-CURVE_SIDE_WIDTH, CURVE_SIDE_WIDTH*2+1, TEXT_COLOR); - lcdDrawSolidHorizontalLine(left, CURVE_CENTER_Y+CURVE_SIDE_WIDTH, CURVE_SIDE_WIDTH*2+1, TEXT_COLOR); + lcdDrawSolidVerticalLine(left, y-width, width*2, TEXT_COLOR); + lcdDrawSolidVerticalLine(right, y-width, width*2, TEXT_COLOR); + lcdDrawSolidHorizontalLine(left, y-width, width*2+1, TEXT_COLOR); + lcdDrawSolidHorizontalLine(left, y+width, width*2+1, TEXT_COLOR); coord_t prev_yv = (coord_t)-1; - for (int xv=-CURVE_SIDE_WIDTH; xv<=CURVE_SIDE_WIDTH; xv+=1) { - coord_t yv = getCurveYCoord(fn, xv); + for (int xv=-width; xv<=width; xv+=1) { + coord_t yv = y + getCurveYCoord(fn, xv, width); if (prev_yv != (coord_t)-1) { if (prev_yv < yv) { 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 { 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); } } } diff --git a/radio/src/gui/horus/gui.h b/radio/src/gui/horus/gui.h index c6fcd7c80..67f12d256 100644 --- a/radio/src/gui/horus/gui.h +++ b/radio/src/gui/horus/gui.h @@ -79,7 +79,7 @@ void drawStick(coord_t centrex, int16_t xval, int16_t yval); void drawSticks(); // 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 drawCurveVerticalScale(int x); void drawCurveHorizontalScale(); diff --git a/radio/src/gui/horus/menu_model_curves.cpp b/radio/src/gui/horus/menu_model_curves.cpp index 3678806c5..5d390c2a3 100644 --- a/radio/src/gui/horus/menu_model_curves.cpp +++ b/radio/src/gui/horus/menu_model_curves.cpp @@ -49,9 +49,9 @@ point_t getPoint(uint8_t i) 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; do { @@ -209,7 +209,7 @@ bool menuModelCurveOne(evt_t event) killEvents(event); } - DrawCurve(); + drawCurve(CURVE_CENTER_X, CURVE_CENTER_Y, CURVE_SIDE_WIDTH); drawCurveHorizontalScale(); 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); editName(50, y, g_model.curveNames[k], sizeof(g_model.curveNames[k]), 0, 0); 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) { s_curveChan = sub; - DrawCurve(23); + drawCurve(CURVE_CENTER_X, CURVE_CENTER_Y+10, 80); } return true; diff --git a/radio/src/gui/horus/menu_model_inputs_mixes.cpp b/radio/src/gui/horus/menu_model_inputs_mixes.cpp index 3bef86f58..9645c6a16 100644 --- a/radio/src/gui/horus/menu_model_inputs_mixes.cpp +++ b/radio/src/gui/horus/menu_model_inputs_mixes.cpp @@ -296,8 +296,7 @@ bool menuModelExpoOne(evt_t event) coord_t y = MENU_CONTENT_TOP; - drawFunction(expoFn); - + drawFunction(expoFn, CURVE_CENTER_X, CURVE_CENTER_Y, CURVE_SIDE_WIDTH); drawCurveHorizontalScale(); drawCurveVerticalScale(CURVE_CENTER_X-CURVE_SIDE_WIDTH-15); @@ -319,7 +318,7 @@ bool menuModelExpoOne(evt_t event) sprintf(texty, "%d", calcRESXto100(y)); 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-CURVE_SIDE_WIDTH-2, y-1, 2*CURVE_SIDE_WIDTH+2, 2, CURVE_CURSOR_COLOR); diff --git a/radio/src/gui/horus/menu_model_limits.cpp b/radio/src/gui/horus/menu_model_limits.cpp index d1f7d794e..58b5d09aa 100644 --- a/radio/src/gui/horus/menu_model_limits.cpp +++ b/radio/src/gui/horus/menu_model_limits.cpp @@ -49,7 +49,6 @@ enum LimitsItems { ITEM_LIMITS_MAXROW = ITEM_LIMITS_COUNT-1 }; -#if defined(PPM_CENTER_ADJUSTABLE) #define LIMITS_NAME_POS 52 #define LIMITS_OFFSET_POS 160 #define LIMITS_MIN_POS 220 @@ -59,16 +58,6 @@ enum LimitsItems { #define LIMITS_CURVE_POS 350 #define LIMITS_PPM_CENTER_POS 440 #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 CONVERT_US_MIN_MAX(x) (((x)*1280)/250) @@ -222,11 +211,7 @@ bool menuModelLimits(evt_t event) case ITEM_LIMITS_DIRECTION: { uint8_t revert = ld->revert; -#if defined(PPM_CENTER_ADJUSTABLE) lcdDrawText(LIMITS_REVERT_POS, y, revert ? "\177" : "\176", attr); -#else - lcdDrawTextAtIndex(LIMITS_REVERT_POS, y, STR_MMMINV, revert, attr); -#endif if (active) { uint8_t revert_new = checkIncDecModel(event, revert, 0, 1); if (checkIncDec_Ret && isThrottleOutput(k)) { diff --git a/radio/src/gui/horus/menus.h b/radio/src/gui/horus/menus.h index dffd70c95..5f0782944 100644 --- a/radio/src/gui/horus/menus.h +++ b/radio/src/gui/horus/menus.h @@ -400,7 +400,7 @@ void pushModelNotes(); #define EDIT_MODE_INIT 0 // TODO enum 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);