From 9645b287b522a9d5cc0fb35ec62a032d60cc6815 Mon Sep 17 00:00:00 2001 From: David Peer Date: Mon, 30 Jan 2023 17:38:18 +0100 Subject: [PATCH] Added styles --- apps/bwclk/README.md | 1 + apps/happyclk/happyclk.app.js | 81 +++++++++++++++++++++++++++-- apps/happyclk/happyclk.settings.js | 32 ++++++++++++ apps/happyclk/metadata.json | 9 ++-- apps/happyclk/screenshot_2.png | Bin 2501 -> 2297 bytes apps/happyclk/screenshot_4.png | Bin 0 -> 2494 bytes apps/happyclk/screenshot_5.png | Bin 0 -> 2508 bytes 7 files changed, 117 insertions(+), 6 deletions(-) create mode 100644 apps/happyclk/happyclk.settings.js create mode 100644 apps/happyclk/screenshot_4.png create mode 100644 apps/happyclk/screenshot_5.png diff --git a/apps/bwclk/README.md b/apps/bwclk/README.md index 5e2a7b55f..882d525f6 100644 --- a/apps/bwclk/README.md +++ b/apps/bwclk/README.md @@ -11,6 +11,7 @@ sub-items simply swipe up/down. To run an action (e.g. trigger home assistant), ![](screenshot_3.png) +Note: Check out the settings to change different themes. ## Settings - Screen: Normal (widgets shown), Dynamic (widgets shown if unlocked) or Full (widgets are hidden). diff --git a/apps/happyclk/happyclk.app.js b/apps/happyclk/happyclk.app.js index ad8f80cbf..5eac225e9 100644 --- a/apps/happyclk/happyclk.app.js +++ b/apps/happyclk/happyclk.app.js @@ -1,6 +1,78 @@ /************************************************ * Happy Clock */ + + +/************************************************ + * Settings + */ +const storage = require('Storage'); +const SETTINGS_FILE = "happyclk.setting.json"; + +let settings = { + color: "Dark" +}; + +let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings; +for (const key in saved_settings) { + settings[key] = saved_settings[key]; +} + +var color_map = { + "Dark":{ + fg: "#fff", + bg: "#000", + eye: "#fff", + eyePupils: "#000" + }, + "Black":{ + fg: "#fff", + bg: "#000", + eye: "#000", + eyePupils: "#fff" + }, + "White":{ + fg: "#000", + bg: "#fff", + eye: "#fff", + eyePupils: "#000" + }, + "Blue":{ + fg: "#fff", + bg: "#00f", + eye: "#fff", + eyePupils: "#000" + }, + "Green":{ + fg: "#000", + bg: "#0f0", + eye: "#fff", + eyePupils: "#000" + }, + "Red":{ + fg: "#fff", + bg: "#f00", + eye: "#fff", + eyePupils: "#000" + }, + "Purple":{ + fg: "#fff", + bg: "#f0f", + eye: "#fff", + eyePupils: "#000" + }, + "Yellow":{ + fg: "#000", + bg: "#ff0", + eye: "#fff", + eyePupils: "#000" + } +}; +var colors = color_map[settings.color]; + +/************************************************ + * Globals + */ var W = g.getWidth(),R=W/2; var H = g.getHeight(); var drawTimeout; @@ -19,11 +91,12 @@ Graphics.prototype.drawPupils = function(cx, cy, r1, dx, dy, angle) { g.setColor(g.theme.fg); g.fillCircle(cx, cy, 32); - g.setColor(g.theme.bg); + + g.setColor(colors.eye); g.fillCircle(cx, cy, 27); g.fillCircle(cx+dx, cy+dy, 28); - g.setColor(g.theme.fg); + g.setColor(colors.eyePupils); g.fillCircle(x, y, 8); g.fillCircle(x+1, y, 8); }; @@ -85,6 +158,7 @@ let drawEyes = function(){ let drawSmile = function(isLocked){ + g.setColor(colors.fg); var y = 120; var o = parseInt(E.getBattery()*0.8); @@ -100,6 +174,7 @@ let drawSmile = function(isLocked){ } let drawEyeBrow = function(){ + g.setColor(colors.fg); var w = 6; for(var i = 0; i < w; i++){ g.drawLine(25, 25+i, 70, 15+i%3); @@ -170,7 +245,7 @@ Bangle.loadWidgets(); require('widget_utils').hide(); // Clear the screen once, at startup and draw clock -// g.setTheme({bg:"#fff",fg:"#000",dark:false}); +g.setTheme({bg:colors.bg,fg:colors.fg,dark:false}); draw(); // After drawing the watch face, we can draw the widgets diff --git a/apps/happyclk/happyclk.settings.js b/apps/happyclk/happyclk.settings.js new file mode 100644 index 000000000..2cbadc9ca --- /dev/null +++ b/apps/happyclk/happyclk.settings.js @@ -0,0 +1,32 @@ +(function(back) { + const SETTINGS_FILE = "happyclk.setting.json"; + + // initialize with default settings... + const storage = require('Storage') + let settings = { + color: "Dark" + }; + let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings; + for (const key in saved_settings) { + settings[key] = saved_settings[key] + } + + function save() { + storage.write(SETTINGS_FILE, settings) + } + + var colorOptions = ["Dark", "Black", "White", "Blue", "Green", "Red", "Purple", "Yellow"]; + E.showMenu({ + '': { 'title': 'Happy Clock' }, + '< Back': back, + 'Theme': { + value: 0 | colorOptions.indexOf(settings.color), + min: 0, max: colorOptions.length, + format: v => colorOptions[v], + onchange: v => { + settings.color = colorOptions[v]; + save(); + }, + } + }); +}) diff --git a/apps/happyclk/metadata.json b/apps/happyclk/metadata.json index 2388db667..e5129b0f0 100644 --- a/apps/happyclk/metadata.json +++ b/apps/happyclk/metadata.json @@ -3,7 +3,7 @@ "name": "Happy Clock", "shortName":"Happy Clock", "icon": "happyclk.png", - "version":"0.01", + "version":"0.02", "readme": "README.md", "supports": ["BANGLEJS2"], "description": "A happy clock :)", @@ -12,10 +12,13 @@ "screenshots": [ {"url":"screenshot_1.png"}, {"url":"screenshot_2.png"}, - {"url":"screenshot_3.png"} + {"url":"screenshot_3.png"}, + {"url":"screenshot_4.png"}, + {"url":"screenshot_5.png"} ], "storage": [ {"name":"happyclk.app.js","url":"happyclk.app.js"}, - {"name":"happyclk.img","url":"happyclk.icon.js","evaluate":true} + {"name":"happyclk.img","url":"happyclk.icon.js","evaluate":true}, + {"name":"happyclk.settings.js","url":"happyclk.settings.js"} ] } diff --git a/apps/happyclk/screenshot_2.png b/apps/happyclk/screenshot_2.png index 5bb00bc38de160a0e8d86053d4e1299a93da59f3..49c09ee31d132eb8327ccada14e3948fc5c5c9e6 100644 GIT binary patch literal 2297 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 diff --git a/apps/happyclk/screenshot_4.png b/apps/happyclk/screenshot_4.png new file mode 100644 index 0000000000000000000000000000000000000000..b84e41ab128e8eb0214140d11da5665ddd43271c GIT binary patch literal 2494 zcmb7GYc!M#7k=NlnQJ5>LBQ=nli z$^T8StZ3lt>rMHjF&&m?P6_Gg&eBnwXY^RJbHSG%0TizKopsL#KgPi&1#L<8O$hi% zjS)|B=k7NyM+xIt9E`pNLTitbuU6R=(7>*~PJ zm%oXE?C*osS)%Wc_~C0RnsnI5bPONDEAffZacq>8%)7Mv{3Wf+Z9Khj>q|&JWRyc7 zGOpZcW$);JXN^*eZ6h5lk~jeNJ_}ZNkza0~{WTIJx!mu8__^G|a?uJ9S`%6faGmOr z5k+EN(8X0CqxJFX&qbsXY=$g-FtQh^GmiI*p8*pzs92*C1v$qHP0VP%t%FI>V8-9@ zVb8W1uyCy@QR8SXPG%GR%$r3?NcpsSA(RZznOl4*TYXl|EE1mErbrFBN*`@ZIAORZ zmX`%qd(c!*It|dz?F%`hAAjeV{|Z9V)4VV4$96E-JR<83!q^hRWG}Sl?@i9UU-q3BB8OW+fRYbLq}t-eo95lbm*=#*MtWJ=RMZ{ zGuWZIDo?>%t;2o4Zf*$fx4&-&Gic;^u#$stw093E3CuZ!>PeGBhLzH#*^e21?e`^t z-&4|ya)h~`}Y4kEZNa7C`N}}^QRYy2XihoVEYJ;V`7V2X61|*Jdf7E-z-}6MW*~PMK>^Jb;#=g zH>E=#WFQ1}#LO_oWxdfMxSI6=jJ)=0d+I!zc~JJiC&opw!_3O6O)KmI6g|TsVkzzB zw2xDHWzDvVT!j(LiRdlIhF*#AZW`XCT$sJh+4c8NmIJ%!J3FV7~Lz?rXT0{ZV{l^8Q?i_;iyckY zj7i}@9<*f z=skYUN6WX7wSU+OTAZ5M*183%bfBL89no~Ju2MPYzmT$#@~PPS;g&qjcUyY-3}7Mz ziHD*jF6NqW$=@ke2px8gtzD18%8JG=kPKIIElUKQ)>L4yOOSh!-h1$u&oWDdj*_9A zW2XgWYO76nxqVWMVn(-FV84Has6mlfSH0SDP8qh>Pt5nbGQa+Jji92=9ZI~f@LrJBrY1?h(@* zVrIL)Yn5N+`bgWf{%=rFA*L?CdhAoz8xeBlSmDeCBFE?Mlpj(eLKR@gpsOYBtlJ09 z7m5i=sRcL~OG@Mu{vjJsXg5 zJFIuN@cP}jUPOb1+{SF7MLtZHgm4G6&-pV3ItGG=#L> zk2ww*j3bI3aG_CCS}|?-6=AP&7h+?g4V%IPbl-}eMZg**d(Y>>c0Nl@%*t^fc0SNb zMJ$U6uo#fJq-~OHhYg;CFWa1QIzE(yJ;Lkpq48oIG43Gjk`y7cB9K_Ve|*AgBGFbC zaaFD50Jy8Gop(sn2r?)0Re2kBjn_Zuy0P-N9G>m=*>Lm!hrAAuoK!ErebGI#@sI&t M?&N(nuC(-j0LR~dGXMYp literal 0 HcmV?d00001 diff --git a/apps/happyclk/screenshot_5.png b/apps/happyclk/screenshot_5.png new file mode 100644 index 0000000000000000000000000000000000000000..1a711096e59d0bd0d8d342d4b59e400d23b88ade GIT binary patch literal 2508 zcmV;-2{ZPIP)Px;hDk(0RCr$Po!NHdAP_|3|Nm&uaS~-@S2d=kx3Ng?~_> zr~(fFT+}%<`&$733=m2y0Dw!|hsFb7Fi=_n09@KWG#&thfzk>9;L`S?@cJU006$R@A3Hg&nI3qO%M0>03Wd4 zIR${z^Sj^cls#atb^%}j9IAi>)^kGvZm4adn=e&DXo0O%@1FaJfmZl0GDcvn1nf1A zsDAGTb(sXFjN{BZE10X%VTFFT{7nh4#-v?#5oTz!642oQ&oE@C1=wu84(+N!?GEs4 z1F8zoDS7UWnXO;19Tl{70eH6P6@=9SDm`zuw$%NzXaaBwt6YB;+}6H^0&Ly6Rba~24+-4X9=if;-I;7g@7f;E$K5Uf z?`kCaZLa_Tw$~VUFjN2l8;Xld+baNo?KQ?73>5&thT`JV_6h)CdyR1iLj?e^p}4rT zy#h-BEZJB;B;8?8dIw!f0<1BH%7PVu-cgq_09%;Tg1QpSyX%r3U{8atKxYOSy8O76 z7GSACPX%oc=1mlrrYaWo=gcOnuP-?}eLIixs$%K^>XKDFE)7 z6ag;BJP(K|cq6o-N(>KO&i;f0oE_dntUKc@&C0GzmNF|8;Or(vC2l|1N|~7{yc)dT z^>8S_l~bk%u_T27uyPfBET*5&FZnA=!h5cqz9ZXetHSG0wAaZ-47T|8=G z04$tMdWTCFb60>@Dyc?hCW$5H0I!}h+FE!QU93|W0855D<5+GA?~uM8DGY!aP)ZH~ zz@KVaJa+#Z9M-!KyG)hRg&Y!C5)18PO%r%Gc)1Yori*1A41nhZ!P`}+GGeFnwXTB! zFaS1Cz^@Jlzy|gqfdQ}qR(_WRzyR2fHiJ6>U;u1@mER=+FaY+W&EQS|7yuh!<#$O> zfa!0_F@IZ@C9KucIP5~O>?BO z6wU-N=R47^mU%(ETKc+{5SF!YB)}u-d$$|Got310_JsGx>-Qga)(mV;HoGQpW{5Qg z&ooJz!vEp#{{pzCUmS3H$IR4)YKuF-RuD@QX>b?{04O zh1Xh$H7R9bl=q8Iv%$X8->P)@n}H$#wo2i<+KVzN3%n!sFx5w|&n*Tu)%K7QqGi^( zu^O<>=Tm8{xxQDzR4gST;C0`HkdzbL)i^amXMOGkZ*OpG2HmXwx31%@%e5V$3G9)? zGYpI}DSJ&ErOVq)8&v~;jHLc<(6sj^BtW;y5bK4>dnxqU;tWZg0p1iP1ZCFMJ`eMH z^|L3u)C}dJ#b?mmCryMd=>Vn-o4LrlugBZdK$Jn80qy~EhS})Wvn(Zqw4|7k%+yZB zagPk}at5~r$k}G2l#94tUD|r+A*p4x$7TXoGr%=Ka|U%LT~h2qZ~*fJIg>$@HoNOm z24GGtNSWRHyb`pneptYqU6+yoYo^oBnt25G8s}<&&JJw38n^~3Xl0ZFOC)fVc(`x8 z0suJP1GHd30RTK89!`x{0075(fEElW0DuR?!>REK0N{8J(1HO40Pui#I5l1Y037cD zS}>ph03Hwzr^YJ)fa5(t3kDPbzyspp)OZC_0sMOTq}t0Q@fPmgf;0dhZ%zT=y@8bW zJ_W$EVfpCC7zlCOJJJ5Hj0-*rke{qMj3pjpf1;PMse?#TYcI4}O_JwsS zfU$tf1#pFhbqK&H9dd!%Y7GFsQKt8YhDhK%U{~20a!p{)Uì!(?Q47mZ!f%mWu z5XV9cfG_$>;046F;C;0wbD+2+um<4l!o^}{bN7l{n;`%nBbozt=FxA1QQTE4?hd&F zdWb<6QpFYER+<80dq8`4s0yzuz?@Qm12X42u{hMbd&Sb>P}wDcC6)qW ziCW{wR!(2H1eVGSh^30@j;{`HT7bVBM*Qp+_KS7U{!P6NeXEsd=}L&REr56o(p493 zZ;WL9l_DxBuI5xr4m&jIE3Z&Gq+P_dxs(cS2=(sI~1>DE1NS9-}bIfb$v<#42WfDuU7Y#+J&I3LS5WfXvMmBDS(m2 zdo9|oy)9cpd~}5QtymjPJ%;A2HIIkVAf19v%qIVN7yYZX(e^}s6q zT&@Nl*)KkyTh(9++*N0ra!=x@9f=)5-WlF40M?Wg6%vaJ?&=S7maKtiC2_{`LIUpU z@NSd9Z$-awyX|f;MAXVsaCd-rOMtc8ZLRv-8fJjoU-@iPLbPPi0K#2NO5mQ=4#_>a z{m6XW_5hD8^0FDb8@yYW5Ecu)D4=%)_pcPp{x@+EP|TXnJ=(rAyhvbzu*@Lu4lWW{ z7>`+C2DtCWVG$<;Icm`daPN%*zzTq8KN#sX0pMaEco0$j>5{Sopz3r+0_$|cSxFQC zz)6fiGjs|7V4ZF_D~SRCIEfKxhE4$htkVr=B~btXCouxe&?x|bb-LlKBnklFBu1ba zIt2i*PB)yDL;(Pt#0WG)rvL!f>4vkCC;)(y7=dQ!6ac_F-EdYC1psgoBhU<;0{;NN WzOd{f>~Vbn0000