From d1ef22ee47ead5434f1e07641e34da00bb37e10f Mon Sep 17 00:00:00 2001 From: 3djc Date: Fri, 23 Dec 2016 23:57:32 +0100 Subject: [PATCH] 3djc/taranis draw number review (#4157) * Move to Horus style implementation * TINSIZE handling * Fix timers * Add the option to align left on first digit (ie '-' if left of alignment point) * Compile fix * Reduce DBL font dot size * Get ready for PR * Remove unused function * Remove leftover declaration * Performance * Cosmetics --- radio/src/fonts/std/font_10x14_compressed.png | Bin 1527 -> 1536 bytes radio/src/gui/212x64/lcd.cpp | 167 ++++-------------- radio/src/gui/212x64/lcd.h | 3 +- radio/src/lua/api_lcd.cpp | 2 +- .../src/tests/prec1_dblsize_invers_212x64.png | Bin 389 -> 373 bytes 5 files changed, 41 insertions(+), 131 deletions(-) diff --git a/radio/src/fonts/std/font_10x14_compressed.png b/radio/src/fonts/std/font_10x14_compressed.png index 0549696dbd1760b1dd1f0dc8746db2368836446e..9b15f59b0c7a5d1d4ca7069cd9a8bd4c3914dd22 100644 GIT binary patch delta 1482 zcmV;*1vUEj3xEueBqa%ONLh0L01FcU01FcV0GgZ_00007bV*G`2jC182mv7MecalS zTPS~eNklp!GE^xOPy-gm6LBpoiEpgc=TO1h6eK=nAgpQj#5QqpVZMT#s$ zWa0Gcs~Pm@Vl2zI4hYKrsg#b=*sSrRHwJ%}Cn(R@x$6UDlCW-T3^eR?b&~< zdZ>h_f4w;dJ32MbMyT_(yj%mXz>M+nVzgzk;dNlWxp+b{GL~Z zamw;nEiaz>YX3ze__N3o`gMmr$-5rB^N#3-QDu`d6r!Z(j)VGUu7c5)`bH{bOaIU~ z<5qphcL=gnD)BR;k)3Pwx7z>F3f6zpzm+ywPhARx(KCN4d5NlTRo+LfjXM}KEnS($ zTvF0Gz3w`27SpUCn3A*eq;KT9hA zl{ai8uC<29vBnw_|eLct^>fH|yVeqMWs!)W#{ZQMY0> zmHNmcFNnvbwKlGH_^Bb^J$^CBAbL3U#>1mA@NE1&qobAbjN~0K@{N>HA?T>*(8FJ4 z40$ayNhN>i?JXY)|02;*g+5!;+HJ$}rkMSId7diVp9nV;Q8? zqf0&U@RoSuD36aqF4TDzGY+lg7}We7eX!nrZ}fUpEb{eIFQgr_H7&>|gLp=4=qdqW z(4gLlm{s`bDRe~4s46**okLYDkLtucavl|YRo@$lA{{+BU1bwvW7=x{?;)+MF7+ZY z>UGcF0>j9O+8cER<8*)4LDK61LHmd9$-8@0yz;eW7XJzhbC%%Ey0w6H*IZSJ-HArt zYOvB8V#aH6p^omi>PoMkJoNO2+Bn^Doh8lZL8NzOw5-pFSN7!Alx1Jm#_ym+B3&9S zfw|gUXe-?c;58_&G#1OaEeP*SUf|_L$LtMboFLALkVx=sgE=ccnV>1q+>eujQzc@ET zC(PCZE9%o(JYj!t&{60E?|tR0ae5rb@%Wtl!)#pEx4B27EwwE4XvC&$mp%O`#?eD} zy!F+T7lVK(POQwGcTtL1eczz+jdN6yMW9!z`}2_XiL5y#KUkEqRflEX**Ip!{IT~m zdiE5r%(3yJD&2t~QmA2QLAF%;WrT6MvOZw=q_B5Xce;Pp#;Mc?z4GY&@~8|w)dDt~ zR(iojjWmqNUi7}ev;yBP$yg)DGOG_>Sy^Sxd-%)Di`5-CqJJn)k^fiAKpq)KAMr}y zYICupzK>jQE7~ibTPl?LVDuhBBdFdND_U+OOO_ksnqyD1`JMhd>+4uaHlF0$&PhqB k53KtoyPq1T9!gTuFU8J(Uw_zB@Bjb+07*qoM6N<$f-Kwl)&Kwi delta 1446 zcmV;X1zGxl4EGC=Bo78+OGiWi000000Qp0^e~}>`3f=()7Az5^beiLlNhp6`Nkl zr#06%`ddM<1Yi+-uKE4;6XneexznHX^cdSf`qGzS{Rk0fKUT zDy5@zHhcV-&4J|!$}@KDW`uwC&lnm7k5SpR29VzN+IFn`Rm)3Mduo2{@|<;^s~sM1 ze_mZ_?ceg=_gLBY3xFt6(%{_G0 z_5P1mu$J-dWMn;UDG+}~&-$t4C91t$c^|bmp5V-kbY(enMMb~q{nUvgkzSNRLD48{ zJx>N27VZ3ek1N8NA0dko{oWOUP&uc+(SB3p;GI7k#RA+RF&t*)*S$|2_ghBcv9rO$Y@B~z>br_NI3T6!~@@1)q_vmbPURJ(a4>7Hf zH)UU~T&el1sv&3l@SLZ(oBtCzzxU3RNk<9P6whHJ*&)*>ea-^>p9S8-p?` zqxTu&9VLI>Q~!U~h;r3_Qah)Np&r$0D)o^?UXYB-Xm8vt_~{|vGk!71AR3%{>*3KF zc((qY(a}nIM$R2D@{PQsLeSC7p@+Z98uDIgl1l#2+goZ25by1-z23fC1u zf*K7gDpD)MXa`*_zbHC`9=5KajeY$P* zW>hTl^;U1B6HjYekWU8jj4=!DgJU`KtriYM$1ItqQ@y|0{gPOs~_UY{TTFow(e zZSH?;w54|nJsPoT`(>ja#XM%{j<>y@@?sDWMa0V7c^9RK)%Oi5zj2N#vIz7_b$=eR zKaoABijMvqPL${brSs?r?@B857J7Gz6hFC(1Oo%I33CxySG zy3@5cPo+MXy^r26kIK-WTEIN*M5WR1SPy>cIjNY@?+)v0k)s{vvT6)oS=puJ#KT`^ zU99QAjPap7MgHII1af8_eZ*G+cUy}S^?l@iTRnE~o{rQ9**1hmP`zKQP=5h~NzJj* zY(1xc&iZw%A{$TY+s;Krr4Ow3(reF44;6XnACVD)Xz^&f?EnA(07*qoM6N<$g0Ljr A`v3p{ diff --git a/radio/src/gui/212x64/lcd.cpp b/radio/src/gui/212x64/lcd.cpp index b95a3dec4..95d78d1bc 100644 --- a/radio/src/gui/212x64/lcd.cpp +++ b/radio/src/gui/212x64/lcd.cpp @@ -284,8 +284,21 @@ void lcdDrawSizedText(coord_t x, coord_t y, const char * s, uint8_t len, LcdFlag break; } else if (c >= 0x20) { - lcdDrawChar(x, y, c, flags); - x = lcdNextPos; + if ( ( c == 46) && ((FONTSIZE(flags) == TINSIZE) || (FONTSIZE(flags) == SMLSIZE))) { // '.' handling + uint8_t c_height = (FONTSIZE(flags) == TINSIZE ? 5 : 6); + if (flags & INVERS) { + lcdDrawSolidVerticalLine(x, y-1, c_height); + lcdDrawPoint(x, y + c_height); + } + else { + lcdDrawPoint(x, y + c_height -1 , flags); + } + x+=2; + } + else { + lcdDrawChar(x, y, c, flags); + x = lcdNextPos; + } } else if (c == 0x1F) { //X-coord prefix setx = true; @@ -368,135 +381,33 @@ void lcdDrawNumber(coord_t x, coord_t y, int32_t val, LcdFlags flags) void lcdDrawNumber(coord_t x, coord_t y, int32_t val, LcdFlags flags, uint8_t len) { - uint8_t fw = FWNUM; - int8_t mode = MODE(flags); - flags &= ~LEADING0; - uint32_t fontsize = FONTSIZE(flags); - bool dblsize = (fontsize == DBLSIZE); - bool xxlsize = (fontsize == XXLSIZE); - bool midsize = (fontsize == MIDSIZE); - bool smlsize = (fontsize == SMLSIZE); - bool tinsize = (fontsize == TINSIZE); - + char str[16+1]; + char *s = str+16; + *s = '\0'; + int idx = 0; + int mode = MODE(flags); bool neg = false; if (val < 0) { - neg = true; val = -val; + neg = true; } - - coord_t xn = 0; - uint8_t ln = 2; - - if (mode != MODE(LEADING0)) { - len = 1; - int32_t tmp = val / 10; - while (tmp) { - len++; - tmp /= 10; - } - if (len <= mode) { - len = mode + 1; - } - } - - if (dblsize) { - fw += FWNUM; - } - else if (xxlsize) { - fw += 4*FWNUM-1; - } - else if (midsize) { - fw += FWNUM-3; - } - else if (tinsize) { - fw -= 1; - } - else { - if (!(flags & RIGHT)) { - if (mode > 0) - x += 2; - } - if (flags & BOLD) fw += 1; - } - - if (!(flags & RIGHT)) { - x += len * fw; - if (neg) { - x += ((xxlsize|dblsize|midsize) ? 7 : FWNUM); - } - } - - lcdLastPos = x; - x -= fw; - if (dblsize) x++; - - for (uint8_t i=1; i<=len; i++) { - div_t qr = div(val, 10); - char c = qr.rem + '0'; - LcdFlags f = flags; - lcdDrawChar(x, y, c, f); - if (mode == i) { - if (dblsize) { - xn = x - 2; - if (c>='2' && c<='3') ln++; - uint8_t tn = (qr.quot % 10); - if (tn==2 || tn==4) { - if (c=='4') { - xn++; - } - else { - xn--; - ln++; - } - } - } - else if (xxlsize) { - x -= 17; - lcdDrawChar(x+2, y, '.', f); - } - else if (midsize) { - x -= 3; - xn = x; - } - else if (smlsize) { - x -= 2; - if ((flags&INVERS) && ((~flags & BLINK) || BLINK_ON_PHASE)) { - lcdDrawSolidVerticalLine(x, y-1, 8, INVERS); - } - lcdDrawPoint(x, y+5); - } - else if (tinsize) { - x -= 2; - if ((flags&INVERS) && ((~flags & BLINK) || BLINK_ON_PHASE)) { - lcdDrawSolidVerticalLine(x, y-1, 7, INVERS); - } - lcdDrawPoint(x, y+4); - } - else { - x -= (flags & BOLD) ? 3 : 2; - lcdDrawChar(x, y, '.', f); + do { + *--s = '0' + (val % 10); + ++idx; + val /= 10; + if (mode!=0 && idx==mode) { + mode = 0; + *--s = '.'; + if (val==0) { + *--s = '0'; } } - val = qr.quot; - x -= fw; - if (i==len && (flags & BOLD)) x += 1; + } while (val!=0 || mode>0 || (mode==MODE(LEADING0) && idxn5#rJl3EBeIx*fj<$18CTdZ&tza=RQGgo45^s&_V&T7W(N_6i_5;)|K0ZU zvR;eQ%57IUcec#iY@(#6mtU}GyWufuk$bPDAN&`Rm;5+U5S943BEKPgtIp{sqDPLG zy8l1>u59PLJ%3MbI&J(WE$frv>+4^?$7DFns!8#&OUq@y{Z1r?zixiLntXrBtFHl* z`(M9%b|>nd#N+`#Rk|7cIFVdQ&MBb@0P?eXqW}N^ delta 268 zcmey$)XF?TrJlLi$uoq5gX8u?{|5{V44efXk;M!Q+?^oIXnykaS_TG24Nn)xkcv5P zZy(G$;j!^Qg;{^@_5C@3$9 zO3Xa}i|NPhZMoIIw?9h0c2V}$a=rYV<+gPhH=mlnVaxio@fiQ>_ZKrvex8_7v*x44 zy?M(Xy#4U|kMYll_fMP`smX6H`+v31Fz(%<88td(bfpv>SIr>rOsNK6OTU;{QZZ)~^;8!V?$0+6nY5 NgQu&X%Q~loCIGO%gmC}>