From 8fddcab05ccc043f06014861cadbdd8475e14b7e Mon Sep 17 00:00:00 2001 From: Richard Li Date: Tue, 17 Aug 2021 20:17:06 +0800 Subject: [PATCH 1/8] Aligned the protocol selector in multiline for narrow screen. --- radio/src/gui/colorlcd/model_setup.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/radio/src/gui/colorlcd/model_setup.cpp b/radio/src/gui/colorlcd/model_setup.cpp index e7bec9ba7..184946c8e 100644 --- a/radio/src/gui/colorlcd/model_setup.cpp +++ b/radio/src/gui/colorlcd/model_setup.cpp @@ -640,10 +640,12 @@ class ModuleWindow : public FormGroup { // Multi type (CUSTOM, brand A, brand B,...) int multiRfProto = g_model.moduleData[moduleIdx].getMultiProtocol(); + + // Grid count for narrow/wide screen + int count = LCD_W < LCD_H ? 1 : (g_model.moduleData[moduleIdx].multi.customProto ? 3 : 2); rfChoice = new Choice( this, - grid.getFieldSlot( - g_model.moduleData[moduleIdx].multi.customProto ? 3 : 2, 0), + grid.getFieldSlot(count, 0), STR_MULTI_PROTOCOLS, MODULE_SUBTYPE_MULTI_FIRST, MODULE_SUBTYPE_MULTI_LAST, GET_DEFAULT(multiRfProto), [=](int32_t newValue) { @@ -658,11 +660,20 @@ class ModuleWindow : public FormGroup { if (MULTIMODULE_HAS_SUBTYPE(moduleIdx)) { // Subtype (D16, DSMX,...) + + // Grid count for narrow/wide screen + count = LCD_W < LCD_H ? 1 : 2; + int index = 1; + if (count == 1) + { + grid.nextLine(); + index = 0; + } const mm_protocol_definition *pdef = getMultiProtocolDefinition( g_model.moduleData[moduleIdx].getMultiProtocol()); if (pdef->maxSubtype > 0) { mmSubProtocol = new Choice( - this, grid.getFieldSlot(2, 1), pdef->subTypeString, 0, + this, grid.getFieldSlot(count, index), pdef->subTypeString, 0, pdef->maxSubtype, [=]() { return g_model.moduleData[moduleIdx].subType; }, [=](int16_t newValue) { From a1a5b23ff3163efcfd9a9cb7435bca0360ce03cf Mon Sep 17 00:00:00 2001 From: Richard Li Date: Tue, 17 Aug 2021 20:18:14 +0800 Subject: [PATCH 2/8] Diagnostic screen proper alignment for narrow screen. --- radio/src/gui/colorlcd/radio_diaganas.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/radio/src/gui/colorlcd/radio_diaganas.cpp b/radio/src/gui/colorlcd/radio_diaganas.cpp index 9539bfb36..9e3547fe6 100644 --- a/radio/src/gui/colorlcd/radio_diaganas.cpp +++ b/radio/src/gui/colorlcd/radio_diaganas.cpp @@ -40,8 +40,13 @@ class RadioAnalogsDiagsWindow: public Window { void paint(BitmapBuffer * dc) override { for (uint8_t i = 0; i < NUM_STICKS + NUM_POTS + NUM_SLIDERS; i++) { - coord_t y = 1 + (i / 2) * FH; - uint8_t x = i & 1 ? LCD_W / 2 + 10 : 10; +#if LCD_W > LCD_H + coord_t y = 1 + (i / 2) * FH; + uint8_t x = i & 1 ? LCD_W / 2 + 10 : 10; +#else + coord_t y = 1 + i * FH; + uint8_t x = 10; +#endif dc->drawNumber(x, y, i + 1, LEADING0 | LEFT, 2); dc->drawText(x + 2 * 15 - 2, y, ":"); drawHexNumber(dc, x + 3 * 15 - 1, y, anaIn(i)); From 67c47cf1678fe4185227d052f63a118f126eacb0 Mon Sep 17 00:00:00 2001 From: Richard Li Date: Tue, 17 Aug 2021 20:18:43 +0800 Subject: [PATCH 3/8] More layout for NV14 screen. --- radio/src/gui/colorlcd/layouts/layout1+2.cpp | 65 ++++++++++++++++++ radio/src/gui/colorlcd/layouts/layout1x2.cpp | 61 ++++++++++++++++ .../gui/colorlcd/layouts/mask_layout1+2.png | Bin 0 -> 2218 bytes .../gui/colorlcd/layouts/mask_layout1x1.png | Bin 1873 -> 1426 bytes .../gui/colorlcd/layouts/mask_layout1x2.png | Bin 0 -> 1970 bytes .../gui/colorlcd/layouts/mask_layout2+1.png | Bin 2685 -> 2223 bytes .../gui/colorlcd/layouts/mask_layout2x1.png | Bin 2075 -> 1656 bytes .../gui/colorlcd/layouts/mask_layout2x2.png | Bin 2976 -> 2469 bytes 8 files changed, 126 insertions(+) create mode 100644 radio/src/gui/colorlcd/layouts/layout1+2.cpp create mode 100644 radio/src/gui/colorlcd/layouts/layout1x2.cpp create mode 100644 radio/src/gui/colorlcd/layouts/mask_layout1+2.png create mode 100644 radio/src/gui/colorlcd/layouts/mask_layout1x2.png diff --git a/radio/src/gui/colorlcd/layouts/layout1+2.cpp b/radio/src/gui/colorlcd/layouts/layout1+2.cpp new file mode 100644 index 000000000..309156c99 --- /dev/null +++ b/radio/src/gui/colorlcd/layouts/layout1+2.cpp @@ -0,0 +1,65 @@ +/* + * Copyright (C) OpenTX + * + * Based on code named + * th9x - http://code.google.com/p/th9x + * er9x - http://code.google.com/p/er9x + * gruvin9x - http://code.google.com/p/gruvin9x + * + * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include "layout.h" +#include "layout_factory_impl.h" + +const uint8_t LBM_LAYOUT_1P2[] = { +#include "mask_layout1+2.lbm" +}; + +const ZoneOption OPTIONS_LAYOUT_1P2[] = { + LAYOUT_COMMON_OPTIONS, + LAYOUT_OPTIONS_END +}; + +class Layout1P2: public Layout +{ + public: + Layout1P2(const LayoutFactory * factory, Layout::PersistentData * persistentData): + Layout(factory, persistentData) + { + } + + unsigned int getZonesCount() const override + { + return 3; + } + + rect_t getZone(unsigned int index) const override + { + rect_t zone = getMainZone(); + + if (index == 0) { + return {zone.x, zone.y, zone.w, zone.h / 2}; + } + else if (index == 1) { + return {zone.x, zone.y + zone.h / 2, zone.w, zone.h / 4}; + } + else + { + return {zone.x, zone.y + zone.h * 3 / 4, zone.w, zone.h / 4}; + } + + return zone; + } +}; + +BaseLayoutFactory Layout1P2("Layout1P2", "1 + 2", LBM_LAYOUT_1P2, OPTIONS_LAYOUT_1P2); diff --git a/radio/src/gui/colorlcd/layouts/layout1x2.cpp b/radio/src/gui/colorlcd/layouts/layout1x2.cpp new file mode 100644 index 000000000..14f1dd265 --- /dev/null +++ b/radio/src/gui/colorlcd/layouts/layout1x2.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (C) OpenTX + * + * Based on code named + * th9x - http://code.google.com/p/th9x + * er9x - http://code.google.com/p/er9x + * gruvin9x - http://code.google.com/p/gruvin9x + * + * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include "layout.h" +#include "layout_factory_impl.h" + +const uint8_t LBM_LAYOUT_1x2[] = { +#include "mask_layout1x2.lbm" +}; + +const ZoneOption OPTIONS_LAYOUT_1x2[] = { + LAYOUT_COMMON_OPTIONS, + LAYOUT_OPTIONS_END +}; + +class Layout1x2: public Layout +{ + public: + Layout1x2(const LayoutFactory * factory, Layout::PersistentData * persistentData): + Layout(factory, persistentData) + { + } + + unsigned int getZonesCount() const override + { + return 2; + } + + rect_t getZone(unsigned int index) const override + { + rect_t zone = getMainZone(); + + if (index == 0) { + return {zone.x, zone.y, zone.w, zone.h / 2}; + } + else { + return {zone.x, zone.y + zone.h / 2, zone.w, zone.h / 2}; + } + + return zone; + } +}; + +BaseLayoutFactory Layout1x2("Layout1x2", "1 x 2", LBM_LAYOUT_1x2, OPTIONS_LAYOUT_1x2); diff --git a/radio/src/gui/colorlcd/layouts/mask_layout1+2.png b/radio/src/gui/colorlcd/layouts/mask_layout1+2.png new file mode 100644 index 0000000000000000000000000000000000000000..cef79bbbcb3fa9e5f5a5881ee876f3c98bb55ba5 GIT binary patch literal 2218 zcmV;b2vzrqP)X1^@s6oR$`P000NTdQ@0+Qek%> zaB^>EX>4U6ba`-PAZ2)IW&i+q+U;3ca_hJb{l_YL2_#5xSPsXk-oaabA5gO6A$DZt z)~o(#E0$!61i^Da3<{0^{XOX~e7xmEUSbM41cQ&yK6AlMGTW!Dvo(I5*T=d2nZ0i( zoA(EdChfF$Okr;yXlL~2y}j*n3fkpHP#*h(djFv8f;jCH?CqC{oZTicyI?B2AjkX6 ze*0awWtosuyj?=u`_KLPf&pLBlXsDW1RFiho=uD)<36$R5x8|#bY5_ayP${Pbm_{_ ziHEb!;G9%Lr(f#|t_f$0*|4B>FYD~x4h7g^Qi&J9cdcK3-f2!3)pyG8D81f2P#ya- z)3gA+ba4+1h3oa(b}L`)bW7>t?Plf>_B+0BukHbb3v2qFv!^-7wz}d2mK^p)U6#1+ z(61_5YgE7y@fDL4Y&|lLge}ovM;%61aWtDPgT`sS?Y7uy$GSG#prYr&;E|ad$Zdqi z1Tr!=r{sD)?BwXO>mZq3gE=^~@>LhRrp;@*W)mjvHW94HLYT#nUmbL$)111YtW_*Q zz1{d_-D%K5nX{IRMK>^F=MJhYfG@}6M|pK%P!`My3oNFp1khi_ei@frL_2g8T(=Eu zmlnK?#6tstGS-0s6RZ;(tclDNtp$(?1Qn>x&T|DVR)jm0Wba%6IoJi58)KqfU0HZ* zh9lHH=K{G1Zn7&N%X@+SM4wQPH{(MO3P#+YJ`g_27? zNeU^ZlyWMWvxCQ#jQyBX&bbs!S|GV#bU}wwDpyy1l^SZSspeW5Q*+HXX`#iIT5hFt zcOCnzIBSvfPwde6$7a%M7PR|rE%QF6Lf#=xK-mSx&2cVEm2 zx$tLrBM`xVf;m#^4lwu3+jp$>vI3o34CyvhP>sXxn~XDpI#(cON2oA#Sf8{R;6|pE zTBQNb?x=FfVp^%mR*^I!=B}~y81tM6hi<^LO-%zbmacbkj-b~84C6qLIav%%LBDFm z=hYoMtIPuRjT-?^Qi$-3kkE~<-f170je|s6ikrh`;1S?KNH;Wh3>n&~^>q%Vjywy0 zAdWV9zZXZh>itF>J+JnhIC=%%r{d^67stiX5o(W!qvMwHUL1XDc(26Kr-t`R9G$b{ zXL0nKZE-7(e!t89wVPINtVgFYkyE+BuGVhG96qtHrAp7W4-??K#y|yR(QF(ts~F0x zdDP*Ny!T2fmnCArnju1d=a|&96*D^^fXre?S$YRkGF0)QiNIs`*qWWyrH!@h;p(x{ zW`!{<^|Y-?D;g~9*p-fUe1ENjwiUiwU>y}Tp_Em*Vrg?h`+Xm`H`CS*9o7@r?)`X;@i*h|`ng-tbZ-7ZDzi!-5wfCCZV z-RKM@rK9dgiIWDr6)GTjp(qzwd$x*KP=DZr|s~%e$VFLB=b-QnhKmUB8e|O zPzZTKciVd%#q=;Rr>RoCjiwI?0|F2M1U@_(8F1~WKctTc-y39Fb)Bf5;|I;h@JAI|k2g+oF8ozHZLTWGT z&?`6R;7U5GL3CC)?%l0N-KX9qt1qCX=BTcrNc9IxePQ4axuj02y>eSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{ z002fwL_t(o!|m3w4S+xl1i>|;|CUV)Bm}(19ZcZWO|>0zch&CyJu}nQK?ef^0|NsC s^L7Q;X11B1fl)IxQ!@d8QL``Z0gZ4CG1pfuHUIzs07*qoM6N<$f+hYQl>h($ literal 0 HcmV?d00001 diff --git a/radio/src/gui/colorlcd/layouts/mask_layout1x1.png b/radio/src/gui/colorlcd/layouts/mask_layout1x1.png index c575226dddc475378ed39f2c7f767b5f76039ee6..d80c5cf2ced2915cc678891e13592a0c34e1ba0f 100644 GIT binary patch delta 1363 zcmV-Z1+4nf4w4IyB!Aa>R9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}-B(+d>nIHT zXBD#qBq0RL;d##8!7P6Y;-ou|?wd~fYwW~eEDEG5gzd(^f2R8f2Zx+oP)jk#=y8M` zG8a^mKOLu%eAw50h#b%8y4_Je9x$4g(P0?JVPDX$9~~?l?SJ*U-B~+u(gAclI0MQW znNd0H(g7rVYNzAgohMYnCwGqjJiBP8;`Tlmg3%Rt!j6ZKcwEyOMb@9BpiH=u7>sDw zRq}4p$FXyl>P_&hKaQO*hlN~+!ufa@#G4o$?WB)mw(~9c)&d4LTx5v?m4XRA|!JWut~E z1|E!XGjjt6t1Th?nVT#M!a8ZPfrjqD2ulNNf@Z$Vh4#34kJl(+bbl9GKaNGLfI;11PH?dJdV;7* zAKH@5v%pS$aQ?J3XwQPTN&?1KOojvu_y{pmByY?{gg7SfQ!sOuz!eOTDtB@d+=xVw zlX#7dK1SP?l~2t`Eg(WAih&v|6p$5yLO&J~G*nbHI8}{mnlx*P5<}D&qs5h@iirhN zi)NNATYpKCLednIrId0inX@2;X^z=kPC4gNFlYgELGJ>KQYu%ep=yoQYO1-G2Kltm zw8dsEwcJYQE*;Ci$8N5to_iTIAf*w8jyPeK7YeZ%)IHc;l~_bBns)V9qV-4(9H8d%#*RdqERTB|n1vrFZY)wfa;Rn;^MLsu)^EKdZxVIs(EbLI66-&f7% zh<~db5Wfvr%*pB}ezSTFd0S&)m02)*F9WG|&J+!q5eVIf8e|zkHUdN{MdqN4fJ9pD zfw-f`SoPNTHI_QywBwEUKAbz@y$|O;PwyQ#ckk_MaPF(%{S?l9&&Bg_?ip&IfpgC* z<$E~yQ{jCD=U&tCJ)C=IS$u|b@2@icKYuLRRZ@V>n0TdJ15 zxoZr3Q&3{;Sa`FtSZ2+mj(~UUUKcE@!F~^5fbVQ+WwwGCb<7!{g+|#EkG^C~CB&wR zjNPp@npM(vAqS*-INC@Vy;4snm+*Sb362&2ZutYC?;Ugr5vbT_GNLWMF?;5?_TKm(7B!1wsY4ixC#+oG;TF;qX2xbZ4umP zUKxW!fW}!-6w?C_;>FJ=(B_FQO0{EAGrI3 z@LE1_zrg%cKu_lbcb^b`m=8P!#rw2FcWglC+t=^h@4!ra)4tYGCwuJRedU3Q?-c9I}h^`EY$!206a-VK~z}7?btyL z05A;0KxZm{${mhIHiP>*z*5ox?B4ez;Zc+rF=E7s5hF&77%^hRh!G=3%(+6*H~V|P V1u+zPQ3L=0002ovPDHLkV1kmqkOBYz delta 1814 zcmV+x2kH2d3(*dcB!B&SR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}tyf!?>nIHT z*D7WSMgj!O;iYqC2ebSsu+w?obhmHp#E!8niYie!H2(Y7=pSqxcq1P)#T?^?&1avv z;78i_Z9lusujAT8j(hIDom@U{Fq&r25g5l2U(g<|52!!d>wkSaX*=?yBhhi=l2B&P zj34~~c_b3v+udkp)y9 zEnWo2Ao-a;`l9Xyf!bg5x3wceu5|2)F2jlsJRR*WyykDQbc@LG5yICSbF21M2+#ak zPiA8uUGb4XSARSPbs6INg}@3rWjz+LE4~50b?q5@+RE0TTE|c;Z50>UF&H=JU3bNq z8|&O$14Pe*6=&wgvf7d;XKqUrKX+%W1U0%OXw#sapqan0xYci-{h_mjp1VUNJ0yd~ z_d7i{oZasdnawhHZjuS<-7YZC`T~rp+&m%*f;c-k4S$PYNBe1e+@`Ps1;e5_VSoi9 zt`s%6Yi-HWS++n3_1ivQ+(N;tN<8`w0OJG-Y|%+@(QV4C&Vk1SeF~7Xc&<>u1q$4O zl2QB-;v}AZ;~8};7EZG_!(JdnkSGdiFkK*)_rXWZw}cWZ6eRc%LJS&G$e~1uK86^h z#_3Z97Fmv1?B~_cGi-DGfiuh(kvjc@#sfnV7d=(bSS24|p1^sXw%zbHhRql_v5!n5$Zv09)n$mqjIhxYlDEF+}3)OmAb}LJuISaul z98xg-jGHA@Py=aP24vO_BqNtzI2WlQ=2k-!;WGL*QbkhlhQg(47cm;3UsDkqYUc5+ z)_-9GHkZKCqV?R=hA(cw@od_7$%4q(LI6@M588m)re_zpT0oS{z_O0rMn=-q`+WKm zFwxr#IBvs*J4o5O4>12d;rrm#{=P#x5?=D1#z*%6&*P)}9?#>WcLe?hAHD1GH~8r1 z0>8&cKNt8tJ~~@~kND_p0Y2iR&rA?l?SE$`h<5tS1X&z?VuGwhXD5he*3|KuRf}zn zEY)b$Ywej`#@ku9Ry#~EbJ)g69VU-eZG)A$Ug{XGSl(nvoM~GQqbr=RQ(tcA^AH&E zNMcbJ_{<6RuXyF;;xRZZU;*w6^Oj9V8-RzN3?Hjoz;d*Mj$Ew3?&oL{KEFTH*?$Kg z2T1z}Zw83lC)}oE)>m5d8mPh3P6$h|)vmu=G1L63e+@GUcO;Ji;9WI0(SJ|`YC>4L*{h@IUz7t(BRa@R9-%p!LOZK8As| zU7%WaobO}Dsh$A-XW&Y&`->G|=9BbtT?-unJ=?&=bzM{TfXf}A|H+U|*_He>g-ix` zKcjC-0e!bX=bG1BZ6qJ34?u#tiroMQhrmddve%ouyS=fuf6vtV`vGKGa-mYbok5cX z1u$mg2^kS9JEods;s5{uL`g(JR9M69&jAepFbKe~@!Smf_ktX*gJ*Tn046ipuDc0f zW@ddRA~<}+j2Sa#%$PA_#*7&=X3Ur|V`iNTP*q=K9ul+&ucV=n(*OVf07*qoM6N<$ Eg8#c?<^TWy diff --git a/radio/src/gui/colorlcd/layouts/mask_layout1x2.png b/radio/src/gui/colorlcd/layouts/mask_layout1x2.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd05cdfaaaa5bfa1568f96401e456a5bab5da1c GIT binary patch literal 1970 zcmV;j2Tk~iP)X1^@s6oR$`P000KddQ@0+Qek%> zaB^>EX>4U6ba`-PAZ2)IW&i+q+U;3ea_c${{KqP02?W6Ba`>#eJDBB9gOU>`K6Y&9 z)YN>8RhDE5YCIYQ!Gz|&|5@}ed^Ds;KBOE=j1C`Pe36Qq?2b>}XLf#{_eb@7#$U&Y z%lSYsWJ0H4j_3HqxIkXc@qXe|jE5_rGS3I?>w|g%Nj?>v;}=EBhXQv3Q$2xHPR;)K z-43^0EID1f&`5+i$vv3T%?8 ztPbaF7OH(&E3O%5hBi2~?}HYcy_UmLuq9-Omw=yE-~BwYoGzxHlz*Z0PY1}eR zJD?X4{l-xIxc+gR!{<0%Q@VM((j4P?Ctt^rOZ|(_7uM{%*2rtk!@KGuT#lzx7Z>*( zkMkx0lpmHKgO$q!LY-e;b3*m5I}zm{Fz+3iB<>(T#pIN+X~r9 z;$cC6F|1&~Mb^NPT@s#442v;EtEe?;@(Cq2rIb@im9l1^LykG+ zoJ+1nilX9%g85i-DWz5@tw64LyF#GWCQX}fp~aS3Zl%>O)V2E_dhDs^UV0rebYLEj zIMT?Yj5>KDm8PFz#+hcGW!8mMTe|!TE3UNiDzxecYbUKY#|y0S$(n4YOfY@0hS8KR z5Nzcn7-wKiJcICL46u@japp36FUFj4=89le1c8yk$Qf*mfk8i6!r~9^KA8)o@$c|P zAVU5Ib7a&#!Q3rxe`0Oaz0m1q$fltM)hTA*5}dK9OGCtX#)d>k_JzJ8%E;o-TIdMp zP-;?3aJ{z7ErdK1bhlJTN@Xo9hdNQ&mbC!|uG?K&Gum|`hG{}#EeVcRfLwFImo1K& zRab@iPG`iE91|)d5Qg*3tH~g36o_1_uE_=Qh^QcB6IupdnI_c7KF8W-Syf(uqXX~v zaCB|nZ{XC4t=+JP&|K)Lbc(h%++5RV@vXKnN*mKf)UG+P17Zw2MQ4>_U9HSEJ(~B? z$Z#bjys$MS;15aJDqD4HAOygyJnObQx>{h0k39rb?2&rs)ifWh6^~L6Pdf*}YkB0u zC)?4$vFEPztl;Bon{;@1&%rhumYITR>n`}cgo$-w%>hB9s7yq_&8)PH3Jev=So*+7 zmg)h6wL7GtSh&=Et`&Ee3hdXmc^LfV^?9Hl93+^wK9a%AKLWMGLu3)UudsL<|8$ycdQe#`Q25Y-( zfjP0(y>o?YYlrsFGI|cvF%BE{6XfpK_ic^8djE@@UPIG+`fp+BJ^i=p={^0o>ghfG zx9aIV{kL-Tp8o&S|6im3vsirARr*p`_aiJ#1tp*sk8!EHCJgKude$Dt#QLzZ$NCyp z8g>5xW1_%Nw9SCE;pppEDJ?}TjAfZffNSH>0s1tj>Pa|nzK z1N(k#aq>j9!VU;ks5EvxV?&YqbcF$_s9P|rV}Cr|jtFG+SZO;ayXk&V%9q-1{vOpG z?jH61dLwXiMMaC2v88Cck3*@oLXG{yu6%y+K-KkUH~*lSUnT3&5TETZUHV}Z_)ACZ zoeS&(zjUQnU-)+YaF5Kt8~4&k=+wobQ5|M{8+F=Wq4#n%3mRAN5QOVSp8nX$H`|~6 zv@^1Q#+YTtl`c2Gy*>td>|TKTA2~qlBSUgMop8fq{W}TLIckoB0e33=9kmj5hmX51}RrF`l=_>i_@%07*qoM6N<$ Eg1%X{Hvj+t literal 0 HcmV?d00001 diff --git a/radio/src/gui/colorlcd/layouts/mask_layout2+1.png b/radio/src/gui/colorlcd/layouts/mask_layout2+1.png index 9c9c7a1fe47490860854dfc99b6f07f2a483c94d..d69083966ab600c25c1cbe1ac87df426bec1e3c7 100644 GIT binary patch delta 2131 zcmV-Z2(0)06t5AGB!9npR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}typb#>o5xa z&njjK0tpE%N1x}+4rcjtB|B}BHhuNWi(A`~F+yA}pwRf=e<%G1AFs(M;1qL=4xf-i zmVz5|$EWNwyRgsu$l^qpW}27>BjAD<`~aAc^tQK z1N{>@y1_SRw>ihLx)LIm9M47FmbmXASC_Z;TMj)2U>DyI4j!ZOVGHkR^PaA; zVdBn4h#rPA#w%|f^c$f$mv5PuF9AIt_{w4$tXRk~lVgYh5uT@0bvyWWJbxCh9ti4o zvtfb7)ujROSLM&(@*8LmLB;hTFmEel2T6bh3S-y<0TcgT-lC#%3?mT&2=$SC0yZEbzzRVTKPebusHoSVs!@}gW-Zaj z#jqGtTp6__pF+|UQ%aU{DrDY*sYOd>maSyT9vN3N_?Ru{TnZ*F&|L6#fj}u$s;{AH zjWt!Pxt1o>d<#umY^hnxt#s+WgU3Dg)UD@U27eEP(g;IG9BJ6dqfCU_^fOGIai(cA z(<~pTov?m6E}+IIYO;}9g6RV_jHYx`!7H8U!VHK>U;v&L0_;g-VdjiOkcHgB%w+*9 zRA8hoa5^u;Pvn$*{5QA}fRKNI94+X6f!tTzzC*2-UFiHqXwh&v)p@XQ z3V+Th>Qdn`9if_wQ7SqyQeB8t81kiS5+GcbJtXQN_kF{LqCw&=4t~n zmcH)N9C2L-e3%9#<`i`_6>`;S$XguDDzm_R=SRd7iwT(#8oCQL_$7m|@zBVn_&GSk z9}yXZ7NMo%m9d0c-{)BB$g{`=b#&-^Uw<9loA-`7`nuY`Q%A3ycU2wzjK%NO(JSX6 zR$8pn<*EbZ9oF4g)X+Y1^-Fz|UQ6kv*=UW)N(C9m2+D@?Hs;6(d+y10&~@HcNSHp% zJ(VjBQ-OS1R^;1sHK9J!WJy+Q^I&Kh;Q4?i?xpvLZXo+s(FY;udv+tB6}3@Hs(&54 zoZyB{YjA~$QrVusv>D5?uBmK4Fsfok1}cn|SG+ZHKt34ATS%tfJ*g>7k81eO{8Dhf ze^p0^zW3G9y?O7bqpz#|J9YHRc~{lZE9YHRM?Yinow|gpmDD_v=wNV-dmlzAO%yuO zu4S|iHh30G=u@g8m=-shubO&8o_|MZwzwlbOGQQ46I7@l*;7j}qq{Ttf(%H#>JBpO z{QHr8>tblnD>y^pu?&r_I?<<%K1WjYjWuC8X=b%n3GYHNO2!z`Gn}YnH#pOE z4=<@4Wl6)f94*wbK?+#eynmOYFM`{>$5S|BJw6^j>2U5*j_w7Qj%#*&%F%mve9F;# zc6^#a@7eKb2EDXHj~IDi%*hu>Z^qzTfGvtL56;L zBG8}+9dOD%q2EVy1o7E=LkZ}V;y@H0Ma5?{;;UKNwF(6U9dxi1@PD`-ZB7?kf$qTF z^|M7@#tMSGqW1S=384rm6V~r@V(7-MTq_zLLZzw)UlN+2?G-p>c63c3O2rN%qr>yt z#s)@UOE5?8+dCnHLNGH-bEGAVwJDwGpe8(_q5IKgB58Cl*hkqw#=|x%cvMDq&9G~+ zhGlV{32+5CpvnH#Z+~ltus{09#%bNOfcEb>D4(N;&Jf$yhg*cbDtJ zbZfzYcqQcF>QTst#9G{HaLFHBe_I*tcKIJDqnl~(Dx>>#zN3tuo%XlN=sN^{r)&xu zu2}~c)PX>8I>Ao5tv#>AT%-3DdvY#5fZwrX_KccR)PsA$d4Kf&*a@sO(ECv>QG<}` zY2M1^*|Q+xUsOxHu^$dv;ljR90VN6LxK~z}7?byKy05Ax}(EQT;dxG3pgSJnP~t3002ov JPDHLkV1iN+6qf)1 delta 2597 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 Hu0mjf=k)Gs diff --git a/radio/src/gui/colorlcd/layouts/mask_layout2x1.png b/radio/src/gui/colorlcd/layouts/mask_layout2x1.png index 9bb74c18e30c31b068fcee9b9a84cfee2f8ca719..8f6aca64ada5318210ea0c070890ae0eef9065eb 100644 GIT binary patch delta 1595 zcmV-B2E_TB5cmv`B!9VjR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}t(R$*>nIF` z|7#V!1SAl{av0BfJLu*26>$xza#9t)wi9DxEI^;GuxbALXVE{{q~t(BQ;sD@hb@#) zq~avI+jcA2g?-$c_s2cHuO}|Y4MCMPIvU1#w6Cbwj|WmX>VMmPJ*9rw$%moi#+yNJ zJqu2bcKI;m zjosIs&ML3$?}pa0&}BAf0zKaVi$x8FVdU(HRsh25@PDap|L&dMv3_g@)`OsKH)l++ zx^^?sls{t2Z_Xa=)CF=kY49F}>?jH7TQL~+AmAc<<;X6HBxd+AgHOfC#Rq91z^XEs z7T9E~V6pPAg1TJYCVE)+Wuj(6q&t zT5hG)j_~QBYmYtk+)J-Rh98jsh$GR+ql`LvB9vyBI^#?;&ob*mtS!I7(iK-)d6iY) zsU1}Bsqq(b&#Cc2&4`8FE`3l#bxLn0*wTp_Gk*}1z#yKC00LT!nado47&&7Gbwd;? zpvG!&1{*OD43k9{zq9)w_mmrHc!`@lB1eYq{~$+(?jZM_+X=N%_ln{-AXB0F)cJ+P zw!|-oWm1|7(ot*(bj(8gibx}iwKeVV=kQHxQP*qB+*I>S=(?pkQYs71?idI%+p@e~ zFn@PDOKV0eCxSmsv{*~jE&Nt<8p>`BVbxVJdgmun?OHh|WJXvRF0|mS5yHm9BG>BI z_?c|?=elT9c?4t^A9-(1;kYQFlu(mfV-sm7TtYVnY78{w7bGbR) z1N&u3c7oLxVA^)fiso7S@U!Ep$Q@XU(~lVFF^AVM&|?m-VW7txUc*3-Ie)x{fu8gD zJqEfWhcgUxMGj{rU6I2X2D&1LGYoV^4rdtXiX6@`&=onHVW2B=IKx0!cA z0T#0oFk1is06yv;k)BdXhZZSQI5j tj2JOu#E20iMvNFSV#J6M^If6nH#_MQ2r;6SjKu%|002ovPDHLkV1i676l4GZ delta 2042 zcmV zXBD#qOF{^i!%Go&2ebT1u=`QnRW)55_iN(VQMSPmtmTheMP^1{C~mX)!%OWgZ0Z#z8qaI z-WIe)tv5l1DaYf^7h+)prUpi}nW5>CTU@of7nI5URnP;FqUEgTJvLJY>8 zA`PnKH21wz2gJye4R_|wviq_a7w%h>xK47m05yhWXw#vbpqt;Z&>pv}@i17%$b(?X z1ZU9r_6%P;etX_Ha$jLiw8(_?bPCKXz5rt>x2~{)Ab;c+r@Hy2aNdru#}Zbcpl+Ho zCRmSlx@bxtu_aq)IW)jD9%sJLM!`EuBF0vLA%Ox%B2h|o7_$+9#|(Wckh4T?P=GWj z51?cOe}Xuf*Vy=v(Y9sfvm50FLZ~D$NP~2NSTSl$$hV9TszF7gswOqfTC^rfF=((B+M10^7gG;HKiMx8VfN;6KKY1+)Q%<70W7mu!<+&p{n`mWlg z>aA*Dm3yulU8?aGYT4O`YUnn5b3v<|=+X>|aepKzZc70KG%wALOfm9OZfSNDmLRBG zK&eZdK}#_x7$>nhy=(WO+(X?0*nL$uzNcJR()~Y_3ro6B%6-@Ej%uUsaw}V)m4)CG z6;hCX&fT*asDU(80GVw7$t-nLE>)VQ(wlY>u5%nSH#m(n4OOZQ5f2meTdv~M+#`O? z2YQB}vHtyL zu+aN5xL%_Q50G+O*O2DhVID0oV#P?tO!YE9`GyE0RiF_EVJ zH1ZMPo-rY`0>^BT*JCrl7@P}|XYB-KTG@o6B2LD;-8#vgaJmX+n&{sKf%ha}vwtk+ zdR`Vt?ljxXslI!B_jlhq%>3`8-g>-m9lnG79ma6S{8t#mPl)^p#_$s&e}Xamgvd`* z>P31g^*}=8WL=vfn#b%V9K9GNN4@ui<%vm=u4SWS@nitE#;Mt`GiEs0h#M)E36Cfv zN>SIR$&c?V1LmON&e3H%bZn1n-<1VRqXP7?HXweJ#V|Xwc+r1m@jzuEUI?R90>ah< z=1?M5+nGt{cDclY6Rcgx#^jssify1;T_0#0*Y|sP^aA?|XAGRi4hkf4-G3o57SR*h znPU0<5FtEL;Z+gBBNbj1Av{vyRT07?6)~9GMj7fs{G1q5!Wsne|D#9pk-m)LLL5rDE z9qa3DRD8u@BP#JzE8I4J(>lcpPt+=iDgtuM#(P^3c~j$~Ah-SjBHl2$2$0D<0004n zX+uL$Nkc;*aB^>EX>4Tx0C=2zkv&MmKpe$iQ^l`}h#gcMGE`kGh<}PWY88r5A=C=3 zI+$Gg1x*@~6c zv&=AU;tk^IP21qSPk$U_Iawt>Cmu8Dg2azpS3G{>oOM~?nL#rVpC=9yi`fQN8kprw zjd+SUq-r|l3rUYv&Rd+dLW$Mx$zK>q>nqD#r#XZu7O?~gA{3O6M*%j%wCbc-h|_+g ziGR@bOXO0>l?Nlo0*cTeyMFLL_}#6QnVj&F0ui9~#c@7{fq%ALpjvjE?_^bG-mnH9p#S YT#ri+Egnq$9{>OV07*qoM6N<$f(Fmsga7~l diff --git a/radio/src/gui/colorlcd/layouts/mask_layout2x2.png b/radio/src/gui/colorlcd/layouts/mask_layout2x2.png index bb958745b875a27e10f2cffda84ad63fa6b049d0..3a481c579cc28163b39f77787acd630f00bbe735 100644 GIT binary patch delta 2380 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 From 0a9bf3a92c08d0d46b34564016ac990413014215 Mon Sep 17 00:00:00 2001 From: Richard Li Date: Thu, 19 Aug 2021 13:03:34 +0800 Subject: [PATCH 4/8] Added one more 1x4 layout. --- radio/src/gui/colorlcd/layouts/layout1+2.cpp | 3 +- radio/src/gui/colorlcd/layouts/layout1x2.cpp | 3 +- radio/src/gui/colorlcd/layouts/layout1x4.cpp | 61 ++++++++++++++++++++ 3 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 radio/src/gui/colorlcd/layouts/layout1x4.cpp diff --git a/radio/src/gui/colorlcd/layouts/layout1+2.cpp b/radio/src/gui/colorlcd/layouts/layout1+2.cpp index 309156c99..df968e6fd 100644 --- a/radio/src/gui/colorlcd/layouts/layout1+2.cpp +++ b/radio/src/gui/colorlcd/layouts/layout1+2.cpp @@ -1,7 +1,8 @@ /* - * Copyright (C) OpenTX + * Copyright (C) EdgeTX * * Based on code named + * opentx - https://github.com/opentx/opentx * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x diff --git a/radio/src/gui/colorlcd/layouts/layout1x2.cpp b/radio/src/gui/colorlcd/layouts/layout1x2.cpp index 14f1dd265..6c3c728a6 100644 --- a/radio/src/gui/colorlcd/layouts/layout1x2.cpp +++ b/radio/src/gui/colorlcd/layouts/layout1x2.cpp @@ -1,7 +1,8 @@ /* - * Copyright (C) OpenTX + * Copyright (C) EdgeTX * * Based on code named + * opentx - https://github.com/opentx/opentx * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x diff --git a/radio/src/gui/colorlcd/layouts/layout1x4.cpp b/radio/src/gui/colorlcd/layouts/layout1x4.cpp new file mode 100644 index 000000000..c9eec4faa --- /dev/null +++ b/radio/src/gui/colorlcd/layouts/layout1x4.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (C) EdgeTX + * + * Based on code named + * opentx - https://github.com/opentx/opentx + * th9x - http://code.google.com/p/th9x + * er9x - http://code.google.com/p/er9x + * gruvin9x - http://code.google.com/p/gruvin9x + * + * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include "layout.h" +#include "layout_factory_impl.h" + +const uint8_t LBM_LAYOUT_1x4[] = { +#include "mask_layout1x4.lbm" +}; + +const ZoneOption OPTIONS_LAYOUT_1x4[] = { + LAYOUT_COMMON_OPTIONS, + LAYOUT_OPTIONS_END +}; + +class Layout1x4: public Layout +{ + public: + Layout1x4(const LayoutFactory * factory, Layout::PersistentData * persistentData): + Layout(factory, persistentData) + { + } + + unsigned int getZonesCount() const override + { + return 4; + } + + rect_t getZone(unsigned int index) const override + { + rect_t zone = getMainZone(); + + if (index > 3) + { + index = 3; + } + return {zone.x, zone.y + zone.h / 4 * index, zone.w, zone.h / 4}; + + return zone; + } +}; + +BaseLayoutFactory Layout1x4("Layout1x4", "1 x 4", LBM_LAYOUT_1x4, OPTIONS_LAYOUT_1x4); From 9f498e5ec4bf3ff26bea6283b954faf03aefda1b Mon Sep 17 00:00:00 2001 From: Richard Li Date: Thu, 19 Aug 2021 13:08:28 +0800 Subject: [PATCH 5/8] Datetime display does not display CN/TW translations properly. --- .../src/gui/colorlcd/layouts/topbar_impl.cpp | 35 ++++++++++--------- radio/src/gui/colorlcd/themes/480_default.cpp | 2 +- radio/src/gui/colorlcd/themes/flysky.cpp | 2 +- radio/src/targets/horus/libopenui_config.h | 3 ++ 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/radio/src/gui/colorlcd/layouts/topbar_impl.cpp b/radio/src/gui/colorlcd/layouts/topbar_impl.cpp index 7ba5bfb02..3006ccf97 100644 --- a/radio/src/gui/colorlcd/layouts/topbar_impl.cpp +++ b/radio/src/gui/colorlcd/layouts/topbar_impl.cpp @@ -83,13 +83,16 @@ void TopbarImpl::paint(BitmapBuffer * dc) struct gtm t; gettime(&t); char str[10]; - - sprintf(str, "%d %s", t.tm_mday, STR_MONTHS[t.tm_mon]); +#if defined(TRANSLATIONS_CN) || defined(TRANSLATIONS_TW) + sprintf(str, "%d" TR_MONTH "%d", t.tm_mon + 1, t.tm_mday); +#else + const char * const STR_MONTHS[] = TR_MONTHS; + sprintf(str, "%d %s", t.tm_mday, STR_MONTHS[t.tm_mon]); +#endif //dc->drawSolidVerticalLine(DATETIME_SEPARATOR_X, 7, 31, MENU_COLOR); - dc->drawText(DATETIME_MIDDLE, DATETIME_LINE1, str, FONT(XS) | CENTERED| FOCUS_COLOR); - + dc->drawText(DATETIME_MIDDLE, DATETIME_LINE1, str, FONT(XS)|FOCUS_COLOR|CENTERED); getTimerString(str, getValue(MIXSRC_TX_TIME)); - dc->drawText(DATETIME_MIDDLE, DATETIME_LINE2, str, FONT(XS) | CENTERED | FOCUS_COLOR); + dc->drawText(DATETIME_MIDDLE, DATETIME_LINE2, str, FONT(XS)|FOCUS_COLOR|CENTERED); #if defined(INTERNAL_GPS) if (gpsData.fix) { @@ -121,7 +124,7 @@ void TopbarImpl::paint(BitmapBuffer * dc) const uint8_t rssiBarsHeight[] = {5, 10, 15, 21, 31}; for (unsigned int i = 0; i < DIM(rssiBarsHeight); i++) { uint8_t height = rssiBarsHeight[i]; - dc->drawSolidFilledRect(LCD_W - 90 + i * 6, 38 - height, 4, height, + dc->drawSolidFilledRect(RSSI_X + i * 6, 38 - height, 4, height, TELEMETRY_RSSI() >= rssiBarsValue[i] ? FOCUS_COLOR : MENU_TITLE_DISABLE_COLOR); @@ -134,32 +137,32 @@ void TopbarImpl::paint(BitmapBuffer * dc) #endif /* Audio volume */ - dc->drawBitmapPattern(LCD_W - 130, 4, LBM_TOPMENU_VOLUME_SCALE, MENU_TITLE_DISABLE_COLOR); + dc->drawBitmapPattern(AUDIO_X, 4, LBM_TOPMENU_VOLUME_SCALE, MENU_TITLE_DISABLE_COLOR); if (requiredSpeakerVolume == 0 || g_eeGeneral.beepMode == e_mode_quiet) - dc->drawBitmapPattern(LCD_W - 130, 4, LBM_TOPMENU_VOLUME_0, FOCUS_COLOR); + dc->drawBitmapPattern(AUDIO_X, 4, LBM_TOPMENU_VOLUME_0, FOCUS_COLOR); else if (requiredSpeakerVolume < 7) - dc->drawBitmapPattern(LCD_W - 130, 4, LBM_TOPMENU_VOLUME_1, FOCUS_COLOR); + dc->drawBitmapPattern(AUDIO_X, 4, LBM_TOPMENU_VOLUME_1, FOCUS_COLOR); else if (requiredSpeakerVolume < 13) - dc->drawBitmapPattern(LCD_W - 130, 4, LBM_TOPMENU_VOLUME_2, FOCUS_COLOR); + dc->drawBitmapPattern(AUDIO_X, 4, LBM_TOPMENU_VOLUME_2, FOCUS_COLOR); else if (requiredSpeakerVolume < 19) - dc->drawBitmapPattern(LCD_W - 130, 4, LBM_TOPMENU_VOLUME_3, FOCUS_COLOR); + dc->drawBitmapPattern(AUDIO_X, 4, LBM_TOPMENU_VOLUME_3, FOCUS_COLOR); else - dc->drawBitmapPattern(LCD_W - 130, 4, LBM_TOPMENU_VOLUME_4, FOCUS_COLOR); + dc->drawBitmapPattern(AUDIO_X, 4, LBM_TOPMENU_VOLUME_4, FOCUS_COLOR); /* Tx battery */ uint8_t bars = GET_TXBATT_BARS(5); #if defined(USB_CHARGER) if (usbChargerLed()) { - dc->drawBitmapPattern(LCD_W - 130, 25, LBM_TOPMENU_TXBATT_CHARGING, FOCUS_COLOR); + dc->drawBitmapPattern(AUDIO_X, 25, LBM_TOPMENU_TXBATT_CHARGING, FOCUS_COLOR); } else { - dc->drawBitmapPattern(LCD_W - 130, 25, LBM_TOPMENU_TXBATT, FOCUS_COLOR); + dc->drawBitmapPattern(AUDIO_X, 25, LBM_TOPMENU_TXBATT, FOCUS_COLOR); } #else - dc->drawBitmapPattern(LCD_W - 130, 25, LBM_TOPMENU_TXBATT, FOCUS_COLOR); + dc->drawBitmapPattern(AUDIO_X, 25, LBM_TOPMENU_TXBATT, FOCUS_COLOR); #endif for (unsigned int i = 0; i < 5; i++) { - dc->drawSolidFilledRect(LCD_W - 128 + 4 * i, 30, 2, 8, i >= bars ? MENU_TITLE_DISABLE_COLOR : FOCUS_COLOR); + dc->drawSolidFilledRect(AUDIO_X - 2 + 4 * i, 30, 2, 8, i >= bars ? MENU_TITLE_DISABLE_COLOR : FOCUS_COLOR); } #if 0 diff --git a/radio/src/gui/colorlcd/themes/480_default.cpp b/radio/src/gui/colorlcd/themes/480_default.cpp index c45ae3762..6385fd7e8 100644 --- a/radio/src/gui/colorlcd/themes/480_default.cpp +++ b/radio/src/gui/colorlcd/themes/480_default.cpp @@ -424,7 +424,7 @@ class Theme480: public OpenTxTheme struct gtm t; gettime(&t); char str[10]; -#if defined(TRANSLATIONS_CN) +#if defined(TRANSLATIONS_CN) || defined(TRANSLATIONS_TW) sprintf(str, "%d" TR_MONTH "%d", t.tm_mon + 1, t.tm_mday); #else const char * const STR_MONTHS[] = TR_MONTHS; diff --git a/radio/src/gui/colorlcd/themes/flysky.cpp b/radio/src/gui/colorlcd/themes/flysky.cpp index 618a988ad..92dd227c3 100644 --- a/radio/src/gui/colorlcd/themes/flysky.cpp +++ b/radio/src/gui/colorlcd/themes/flysky.cpp @@ -416,7 +416,7 @@ class FlyskyTheme: public OpenTxTheme gettime(&t); char str[10]; -#if defined(TRANSLATIONS_CN) +#if defined(TRANSLATIONS_CN) || defined(TRANSLATIONS_TW) sprintf(str, "%d" TR_MONTH "%d", t.tm_mon + 1, t.tm_mday); #else const char * const STR_MONTHS[] = TR_MONTHS; diff --git a/radio/src/targets/horus/libopenui_config.h b/radio/src/targets/horus/libopenui_config.h index 2e89621f3..6fd32f489 100644 --- a/radio/src/targets/horus/libopenui_config.h +++ b/radio/src/targets/horus/libopenui_config.h @@ -84,6 +84,9 @@ constexpr uint32_t DATETIME_LINE1 = 7; constexpr uint32_t DATETIME_LINE2 = 22; constexpr uint32_t DATETIME_MIDDLE = (LCD_W + DATETIME_SEPARATOR_X + 1) / 2; +constexpr uint32_t RSSI_X = LCD_W - 90; +constexpr uint32_t AUDIO_X = LCD_W - 130; + constexpr uint32_t MENUS_TOOLBAR_BUTTON_WIDTH = 30; constexpr uint32_t MENUS_TOOLBAR_BUTTON_PADDING = 3; constexpr rect_t MENUS_TOOLBAR_RECT = { 100, 51, 30, 209 }; From 784b3c5ab6285a911d37792abeb36a2b040accbd Mon Sep 17 00:00:00 2001 From: Richard Li Date: Thu, 19 Aug 2021 13:08:57 +0800 Subject: [PATCH 6/8] Fine-tuned NV14 UI spacing. --- radio/src/targets/nv14/libopenui_config.h | 40 +++++++++++++---------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/radio/src/targets/nv14/libopenui_config.h b/radio/src/targets/nv14/libopenui_config.h index 72773a4e4..c4572b313 100644 --- a/radio/src/targets/nv14/libopenui_config.h +++ b/radio/src/targets/nv14/libopenui_config.h @@ -39,6 +39,7 @@ enum FontIndex FONT_XXL_INDEX, #endif + // this one MUST be last FONTS_COUNT }; @@ -47,12 +48,12 @@ typedef uint16_t pixel_t; constexpr bool WRAP_FORM_FIELDS_WITHIN_PAGE = true; constexpr short SLIDE_SPEED_REDUCTION = 5; -constexpr uint32_t MENU_HEADER_BUTTON_WIDTH = 60; -constexpr uint32_t MENU_HEADER_BUTTONS_LEFT = MENU_HEADER_BUTTON_WIDTH; +constexpr uint32_t MENU_HEADER_BUTTON_WIDTH = 33; +constexpr uint32_t MENU_HEADER_BUTTONS_LEFT = 47; -constexpr uint32_t MENU_HEADER_HEIGHT = 60; -constexpr uint32_t MENU_TITLE_TOP = 61; -constexpr uint32_t MENU_TITLE_HEIGHT = 22; +constexpr uint32_t MENU_HEADER_HEIGHT = 45; +constexpr uint32_t MENU_TITLE_TOP = 48; +constexpr uint32_t MENU_TITLE_HEIGHT = 21; constexpr uint32_t MENU_BODY_TOP = MENU_TITLE_TOP + MENU_TITLE_HEIGHT; constexpr uint32_t MENU_CONTENT_TOP = MENU_BODY_TOP + 1; constexpr uint32_t MENU_FOOTER_HEIGHT = 0; @@ -60,9 +61,9 @@ constexpr uint32_t MENU_FOOTER_TOP = LCD_H - MENU_FOOTER_HEIGHT; constexpr uint32_t MENU_BODY_HEIGHT = MENU_FOOTER_TOP - MENU_BODY_TOP; constexpr uint32_t MENUS_MARGIN_LEFT = 6; -constexpr coord_t PAGE_PADDING = 8; -constexpr uint32_t PAGE_LINE_HEIGHT = 26; -constexpr uint32_t PAGE_LINE_SPACING = 6; +constexpr coord_t PAGE_PADDING = 6; +constexpr uint32_t PAGE_LINE_HEIGHT = 20; +constexpr uint32_t PAGE_LINE_SPACING = 2; constexpr uint32_t PAGE_INDENT_WIDTH = 10; constexpr uint32_t PAGE_LABEL_WIDTH = 140; constexpr uint32_t FH = PAGE_LINE_HEIGHT; @@ -70,7 +71,7 @@ constexpr uint32_t NUM_BODY_LINES = MENU_BODY_HEIGHT / PAGE_LINE_ constexpr uint32_t TEXT_VIEWER_LINES = (MENU_FOOTER_TOP - MENU_HEADER_HEIGHT) / FH; constexpr uint32_t FIELD_PADDING_LEFT = 3; -constexpr uint32_t FIELD_PADDING_TOP = 4; +constexpr uint32_t FIELD_PADDING_TOP = 2; constexpr uint32_t CURVE_SIDE_WIDTH = 100; constexpr uint32_t CURVE_CENTER_X = LCD_W - CURVE_SIDE_WIDTH - 7; @@ -79,12 +80,15 @@ constexpr uint32_t CURVE_COORD_WIDTH = 36; constexpr uint32_t CURVE_COORD_HEIGHT = 17; constexpr uint32_t DATETIME_SEPARATOR_X = LCD_W - 53; -constexpr uint32_t DATETIME_LINE1 = 9; -constexpr uint32_t DATETIME_LINE2 = 23; -constexpr uint32_t DATETIME_MIDDLE = (LCD_W + DATETIME_SEPARATOR_X + 4) / 2; +constexpr uint32_t DATETIME_LINE1 = 7; +constexpr uint32_t DATETIME_LINE2 = 22; +constexpr uint32_t DATETIME_MIDDLE = (LCD_W + DATETIME_SEPARATOR_X + 1) / 2; -constexpr uint32_t MENUS_TOOLBAR_BUTTON_WIDTH = 50; -constexpr uint32_t MENUS_TOOLBAR_BUTTON_PADDING = 11; +constexpr uint32_t RSSI_X = LCD_W - 80; +constexpr uint32_t AUDIO_X = LCD_W - 115; + +constexpr uint32_t MENUS_TOOLBAR_BUTTON_WIDTH = 30; +constexpr uint32_t MENUS_TOOLBAR_BUTTON_PADDING = 3; constexpr uint32_t ALERT_FRAME_TOP = 70; constexpr uint32_t ALERT_FRAME_HEIGHT = (LCD_H - 2 * ALERT_FRAME_TOP); @@ -98,8 +102,8 @@ constexpr uint32_t ALERT_MESSAGE_LEFT = 15; constexpr uint32_t ALERT_ACTION_TOP = 240; constexpr uint32_t ALERT_BUTTON_TOP = 300; -constexpr uint32_t PAGE_TITLE_TOP = 4; -constexpr uint32_t PAGE_TITLE_LEFT = 70; +constexpr uint32_t PAGE_TITLE_TOP = 2; +constexpr uint32_t PAGE_TITLE_LEFT = 50; /*enum LcdColorIndex { @@ -156,9 +160,9 @@ constexpr coord_t INPUT_EDIT_CURVE_TOP = MENU_HEADER_HEIGHT; constexpr coord_t MENUS_LINE_HEIGHT = 40; constexpr coord_t MENUS_WIDTH = 200; constexpr coord_t MENUS_OFFSET_TOP = 20; -constexpr coord_t POPUP_HEADER_HEIGHT = 40; +constexpr coord_t POPUP_HEADER_HEIGHT = 30; constexpr coord_t MENUS_MIN_HEIGHT = 2 * MENUS_LINE_HEIGHT - 1; -constexpr coord_t MENUS_MAX_HEIGHT = 8 * MENUS_LINE_HEIGHT - 1; +constexpr coord_t MENUS_MAX_HEIGHT = 7 * MENUS_LINE_HEIGHT - 1; constexpr rect_t MENUS_TOOLBAR_RECT = { 35, (LCD_H - MENUS_MAX_HEIGHT) / 2, 50, MENUS_MAX_HEIGHT }; From 0a13c7f182f539f2a3553b7515222a8535379b41 Mon Sep 17 00:00:00 2001 From: Richard Li Date: Thu, 19 Aug 2021 13:09:25 +0800 Subject: [PATCH 7/8] Missing image for 1x4 layout. --- .../src/gui/colorlcd/layouts/mask_layout1x4.png | Bin 0 -> 2642 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 radio/src/gui/colorlcd/layouts/mask_layout1x4.png diff --git a/radio/src/gui/colorlcd/layouts/mask_layout1x4.png b/radio/src/gui/colorlcd/layouts/mask_layout1x4.png new file mode 100644 index 0000000000000000000000000000000000000000..28bb3f3c047df377bf83b1ade551f44454c427fc GIT binary patch literal 2642 zcmV-Y3a#~tP)X1^@s6oR$`P000STdQ@0+Qek%> zaB^>EX>4U6ba`-PAZ2)IW&i+q+U;6vj`KJU{LfSD5kyJU<2ZT(bAvtp79}U0PCETL z$pE_pY=U+iTc%1?6iKN=U&r-w?zqR_ zuM_9vhQ%dqbTmxixIS>*qP;z?x5G}sb-6K=$8n>6zflfDHXR)t*DoD8-W{03FqOlQ zvq#Tmm=vMYKXwJ52}gD?toQf%I);rDYFSc?7s3zJPhYrXjhf3^;Ez+;!jLcvh|(uPM8u6e$?S)74OEGEo7SPxpU#kV|_MmfavY85uesJ zh}#Gk6U4~2IThFIo2QK~yAF}9Yj6jLtM-b8SGRd}*Epf$&WYeX3}cK(K6=xcMsw32!kqH77K)24@3Rzghc7U|rxd3r63(z;7iM*Ox zvHLOtA%qYY$VF(AU4dBM3;ZYg1RpBm#EVFfC`q!E;DXMu5Mt1XTB3_SN(?c^6mu+; zT=Gd$NHL|9Q^__vL|n<3k2&R>OF^dvmJ6OPXi!SE)m2}mh8kG-#p$eyK|zmcFO#p@ zeJLm8!r!ACK?wVIC`T&Y3FRJj`$@H4R-$uDA)SUws&SZo)8dGvZYvn$5h@%V-Y0Da zgptWot2EHr9aUShm{w}yDw0M--!+yVW1bV~&<#YksbxUM(Df|N5%hC_!#L1lPAi6{ zpj|cM^JqxT zjy#Kf!5nRSpPQpwc%PV~$I-rLj-HYCsyX^yi}U8_jI?LW(Rok#-5kB@c+bqytB&`~ z9KGkqkLKu;X>n_gKA&a(vy)a&*rU;ysHxnruGVhG96niJOO>8$A0{Anje!*q#Nwqj-n1+ZCol!ZH(k^#ksCW46FW6Q{_;u_LX zaWQ!eP*4iYg7_YLwmo>n|G^Tc&BM2vk?JgxqG6!%bBGMEpfy#k5lKA~2Hem`1}fgn zD432_Q9+u}D@l5t246-}I$O3i?U;?cHc?{ssd;S?t?_*zku@bw*G1EtVryH52FEaw zu~tmyodB#a8uU}|+Pi`xpgKSqbHKU-r7NNDpn!YBx&cK=(~jRM=K@NXfw!<$t$%^F zK^>4V@C^!;|3TKLT+xNBPr0HCS)X!6Hwu2l6M1hd;%Mz_JN_CL<6*apI_ReyBSwcl=j!M5_ zDUF49v{?EEM*TW{nZX^w-z+LL{7XB+|5BJV0}PbH+6WpY)Z-v0+2Yp&SW-yrsHhF^ z;q6M-%uA(P^R9Gh@U_$hFD}i5_9Iy-%JyO=ZhpWjR-uQ*xwev)#kH4|X_-W(V0FuH z)?oh2o?5%J^&K7E!utdr-NO3>9X%uORdn=>yjRiDGxAUhu4 z(W{R43>|$kEpE}#C)47eIB8`df-)mQ#t_$eA4LlHcl7ivQj;0`YTVNth%!O{j`lrs^o+b$&C%~#oHs{jq&;Jf&U?!5=IB+&duEQ_^W#Tz z^vSfiHAkP%vVZQRojJH+u{srm$Gle9xw>kqPqy2R#jbV1J2F04=cP5~?2>TPJt41! zDHg=2;1UYRy2`v6>M97s*iq4=vP9+Sc~+FKx)b4DM|>QO1+jdjp7z%2Oej2A5V4VG zeCZ*Cj97}tdmY8}Fwmu`Qau*solu<)7(jXu1o&uVAnxaZv@&#mBgo{nEFZDQy+8+c zyD)KH83~aW_ts0$En(m%B)GLR z>{}gfh4?nh*p+v(R(9p>{0+PdxD8D=g#eAN*uFtC<~un31JVmqL% zyt%<$plx7xuldyJ?I8G#O`NRS9?`Y(Ab ze|ynbZ<1h%%-#+`_i1KtXBe?)TrK`teM#2>bB+2>|0~j;rwQve>HQ}?yYcGhqam5r zVENy5pS1Qe^k+v)vys_CX>@2H zM@dakSAh-}0000*NklJg5CpL~ME@-x6_6tF@^&!6daCV^-Br8)@0ppd z4w@J-U;Ktu0Tp8x;=07*qoM6N<$g6~xS AS^xk5 literal 0 HcmV?d00001 From 68e5f1df88af3d67a6edede127993c4d78c00b16 Mon Sep 17 00:00:00 2001 From: Richard Li Date: Fri, 20 Aug 2021 15:50:08 +0800 Subject: [PATCH 8/8] Better implementation of CN/TW date. --- radio/src/gui/colorlcd/layouts/topbar_impl.cpp | 2 +- radio/src/gui/colorlcd/themes/480_default.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/radio/src/gui/colorlcd/layouts/topbar_impl.cpp b/radio/src/gui/colorlcd/layouts/topbar_impl.cpp index 3006ccf97..d56a6a0fc 100644 --- a/radio/src/gui/colorlcd/layouts/topbar_impl.cpp +++ b/radio/src/gui/colorlcd/layouts/topbar_impl.cpp @@ -84,7 +84,7 @@ void TopbarImpl::paint(BitmapBuffer * dc) gettime(&t); char str[10]; #if defined(TRANSLATIONS_CN) || defined(TRANSLATIONS_TW) - sprintf(str, "%d" TR_MONTH "%d", t.tm_mon + 1, t.tm_mday); + sprintf(str, "%d-%d", t.tm_mon + 1, t.tm_mday); #else const char * const STR_MONTHS[] = TR_MONTHS; sprintf(str, "%d %s", t.tm_mday, STR_MONTHS[t.tm_mon]); diff --git a/radio/src/gui/colorlcd/themes/480_default.cpp b/radio/src/gui/colorlcd/themes/480_default.cpp index 6385fd7e8..386e3a97b 100644 --- a/radio/src/gui/colorlcd/themes/480_default.cpp +++ b/radio/src/gui/colorlcd/themes/480_default.cpp @@ -425,7 +425,7 @@ class Theme480: public OpenTxTheme gettime(&t); char str[10]; #if defined(TRANSLATIONS_CN) || defined(TRANSLATIONS_TW) - sprintf(str, "%d" TR_MONTH "%d", t.tm_mon + 1, t.tm_mday); + sprintf(str, "%d-%d", t.tm_mon + 1, t.tm_mday); #else const char * const STR_MONTHS[] = TR_MONTHS; sprintf(str, "%d %s", t.tm_mday, STR_MONTHS[t.tm_mon]);