From f8db6f1186a1a0590a42427f9dc283d83a16c60f Mon Sep 17 00:00:00 2001 From: minjaesong Date: Thu, 8 Oct 2020 17:34:18 +0900 Subject: [PATCH] clock widget for fsh --- assets/tvdos/fsh.js | 137 +++++++++++++++++++++++++++++++++++++++++++- fsh_clockdigits.png | Bin 948 -> 1017 bytes 2 files changed, 135 insertions(+), 2 deletions(-) diff --git a/assets/tvdos/fsh.js b/assets/tvdos/fsh.js index a823acb..2aaee9d 100644 --- a/assets/tvdos/fsh.js +++ b/assets/tvdos/fsh.js @@ -1,13 +1,25 @@ graphics.setBackground(3,3,3); graphics.resetPalette(); +function captureUserInput() { + sys.poke(-40, 1); +} + +function getKeyPushed(keyOrder) { + return sys.peek(-41 - keyOrder); +} + var _fsh = {}; _fsh.titlebarTex = new GL.Texture(2, 14, base64.atob("/u/+/v3+/f39/f39/f39/f39/P39/Pz8/Pv7+w==")); _fsh.scrdim = con.getmaxyx(); _fsh.scrwidth = _fsh.scrdim[1]; _fsh.scrheight = _fsh.scrdim[0]; _fsh.brandName = "f\xb3Sh"; -_fsh.brandLogoTexSmall = new GL.Texture(24, 14, base64.atob("//////////////////////////////////////////j///////////////////////////////j////////////////////////z8/P///j///+hoaGhof+hof////////Pz//////j//6Gh//////+hof////////Pz//////j//6Gh//////+hoaGhof//8/Pz8/P///j///+hoaH///+hof//oaH///Pz//////j//////6Gh//+hof//oaH///Pz//////j///////+hof+hof//oaH///Pz//////j///////+hof+hof//oaH///Pz//////j//6GhoaGh//+hof//oaH///////////j///////////////////////////////j/////////////////////////////////////////////////////")); +_fsh.brandLogoTexSmall = new GL.Texture(24, 14, base64.atob("//////////////////////////////////////////j//////////////"+ +"/////////////////j////////////////////////z8/P///j///+hoaGhof+hof////////Pz//////j//6Gh//////+hof////////Pz//////j//6"+ +"Gh//////+hoaGhof//8/Pz8/P///j///+hoaH///+hof//oaH///Pz//////j//////6Gh//+hof//oaH///Pz//////j///////+hof+hof//oaH///P"+ +"z//////j///////+hof+hof//oaH///Pz//////j//6GhoaGh//+hof//oaH///////////j///////////////////////////////j/////////////"+ +"////////////////////////////////////////")); _fsh.scrlayout = ["com.fsh.clock","com.fsh.calendar","com.fsh.apps_n_files"]; _fsh.drawTitlebar = function(titletext) { @@ -27,10 +39,131 @@ _fsh.drawTitlebar = function(titletext) { }; -_fsh.widget = function() +_fsh.Widget = function(id, w, h) { + this.identifier = id; + this.width = w; + this.height = h; + + if (!this.identifier) { + this.identifier = ""; + } + + //this.update = function() {}; + /** + * Params charXoff and charYoff are ZERO-BASED! + */ + this.draw = function(charXoff, charYoff) {}; +} + +_fsh.widgets = {} +_fsh.registerNewWidget = function(widget) { + _fsh.widgets[widget.identifier] = widget; +} + +var clockWidget = new _fsh.Widget("com.fsh.clock", _fsh.scrwidth - 8, 7); +clockWidget.numberSheet = new GL.SpriteSheet(19, 22, new GL.Texture(190, 22, base64.atob( +"///////v7+/v7+/v7+//////////////////////7+//////////7+/v7+/v7+/v7+/v7+/v/////+/v7+/v7+/v7+/v7+/v7///////////////7+/v/"+ +"///////////7+/v7+/v7+/v7+/v7+/v7+//////////7+/v7+/v7+/v7+/////v7+/v7+/v7+/v7+/v7+/v7////////+/v7+/v7+/v7////////////+"+ +"/v7+/v7+/v7+/v/////////+/v7+/v7+/v7+/v7+/////////////////v7+/v////////7+/v7+/v7+/v7+/v7+/v7+/v/+/v7+/v7+/v7+/v7+/v7+/"+ +"v7///////////7+/v7///////////7+/v7+/v7+/v7+/v7+/v7+/v7//////v7+/v7+/v7+/v7+/v7//v7+/v7+/v7+/v7+/v7+/v7+/v////7+/v7+/v"+ +"7+/v7+/v7///////7+/v7+/v7+/v7+/v7+/v/////+/v7+/v///////v7+/v7////////////+/v7+/v7//////////////////////////v7+/v7+///"+ +"///////////////7+/v7+/v/////////+/v7////////////+/v7//////////////////////////v7+/v7/////////////////////////////////"+ +"/v7+/v////7+/v7+/v////7+/v7+/v////7+/v7+//////////7+/v7+///+/v7+/////////////v7+/v////////7+/v7+/v7+/////////////////"+ +"////////////v7+/v////////////////////7+/v7////////+/v7+/////////////v7+/////////////////////////v7+/v////////////////"+ +"////////////////////7+/v/////+/v7+//////////7+/v7///7+/v7///////////////7+/v7//v7+///////////////+/v7////////+/v7+/v7"+ +"+/v/////////////////////////////+/v7//////////////////////v7+/////////v7+//////////////7+/v///////////////////////v7+"+ +"/v////////////////////////////////////7+/v7//////v7+/////////////v7+///+/v7//////////////////v7+/v7+/v///////////////"+ +"v7+/v/////////////+/v7//////////////////////////////v7+//////////////////////7+/v///////v7+/v/////////////+/v7///////"+ +"////////////////7+/v/////////////////////////////////////+/v7///////7+/v////////////7+/v///v7+//////////////////7+/v7"+ +"+/v/////////////////+/v7//////////////v7+//////////////////////////////7+/v/////////////////////+/v7///////7+/v//////"+ +"/////////v7+//////////////////////7+/v7////////////////////////////////////+/v7+///////+/v7////////////+/v7///7+/v///"+ +"//////////////+/v7+/v7//////////////////v7+//////////////7+/v/////////////////////////////+/v7//////////////////////v"+ +"7+//////7+/v7///////////////7+/v/////////////////////+/v7//////////////////////////////////////v7+/////////v7+///////"+ +"//////v7+///+/v7//////////////////v7+/v7+//////////////////7+/v/////////////+/v7////////////////////////////+/v7+////"+ +"/////////////////v7+/v/////+/v7///////7+///////+/v7+/v7+/v7+/v7+/v7+/////v7+//7+/v7+/v7+/v7+/////////////////////v7+/"+ +"v////////7+/v7//////////v7+/v///v7+//////////////////7+/v7+/v/////////////////+/v7//////////////v7+//////////////////"+ +"////////7+/v7+/v/////////////////+/v7+/v/////+/v7+///////+/v7///////7+/v7+/v7+/v7+/v7+/v7+//7+/v7+/v7+/v7+/v7+/v7+///"+ +"///////////////7+/v/////////+/v7+/v7////+/v7+/v7///7+/v/////////////////+/v7+/v7//////////////////v7+//////////////7+"+ +"/v////////////7+/v7+/v7+/v7+/v7+/v///v7+/v7+/v7+/v7+/v7+/v///////v7+/////////v7+///////////////////////+/v7+/v7+/v7+/"+ +"v7//////////v7+/v7///////////////7+/v7////////+/v7+/v7+/v7+/v7+/v7+/v/+/v7+///////////////+/v7+/v7+//////////////////"+ +"7+/v/////////////+/v7//////////v7+/v7+/v7+/v7+/v7+//////7+/v7+/v7+/v7+/v7+/v7//////v7+/v////////7+/v/////////////////"+ +"////////+/v7+/v7+/v///////////////v7+/v/////////////+/v7//////////v7+/v7+/v7+/v7+/v7+/v7///7+/v7+//////////7+/v7+/v7+"+ +"/v/////////////////+/v7//////////////v7+/////////v7+/v7+///////////////////////////////////+/v7+/v////7+/v/////////+/"+ +"v7///////////////////////////7+/v7+/v/////////////////+/v7////////////+/v7+/////////v7+/v7+//////////7+/v7+/v///v7+/v"+ +"7+/v7+/v7+/v7+/v7+/v7//////////////////v7+//////////////7+/v////////7+/v7////////////////////////////////////////+/v7"+ +"+//7+/v7//////////v7+///////////////////////////+/v7+/v7//////////////////v7+/////////////v7+//////////7+/v7/////////"+ +"//////7+/v7//////v7+/v7+/v7+/v7//v7+/v7+//////////////////7+/v/////////////+/v7////////+/v7//////////////////////////"+ +"/////////////////7+/v/+/v7///////////7+/v///////////////////////////v7+/v7+//////////////////7+/v///////////v7+/v////"+ +"/////+/v7//////////////////v7+//////////////////////7+/v7+/v/////////////////+/v7//////////////v7+/////////v7+///////"+ +"////////////////////////////////////+/v7+/v7+///////////+/v7///////////////////////////7+/v7+/v/////////////////+/v7/"+ +"//////////7+/v///////////v7+//////////////////7+/v////////////////////7+/v7+/v7+///////////////+/v7+//////////////7+/"+ +"v////////7+/v///////////////////////////////////////////v7+/v7+/v7+/v7+/v7+/v7+/v7+/v/////////////////////+/v7+/v7///"+ +"///////////////v7+//////////7+/v7///////////7+/v/////////////////+/v7////////////////////+/v7//v7+/v///////////////v7"+ +"+///////////////+/v7////////+/v7///////////////////////////////////////////7+/v/+/v7+/v7+/v7+/v7+/v7+/v//////////////"+ +"/////////v7+/v7+//////////////////7+/v/////////+/v7////////////+/v7//////////////////v7+///////////////////+/v7+///+/"+ +"v7+/////////////v7+/v///////////////v7+/////////v7+//////////////////////////////////////////7+/v7////////////////+/v"+ +"7//////////////////////////v7+/v7+/v7///////////////7+/v7////////+/v7+/////////////v7+/v///////////////v7+/v/////////"+ +"////////+/v7+//////7+/v7+///////+/v7+/v////////////////7+/v////////7+/v///////////////////////////////////////v7+/v7+"+ +"/////////////////v7+///////////////////////+/v7+/v7//v7+/v7//////////v7+/v7//////////v7+//////////////7+/v7+/v///////"+ +"//+/v7+/v7///////////////7+/v7+/////////v7+/v7+/v7+/v7+/v/////////////////+/v7////////+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v"+ +"7+/v7+/v7+/v7+/v7+//////////////////7+/v/////+/v7+/v7+/v7+/v7+/v7+/v7////+/v7+/v7+/v7+/v7+/v7//////////v7+/v/////////"+ +"//////v7+/v7+/v7+/v7+/v7+/v7///7+/v7+/v7+/v7+/v7+/////////////v7+/v7+/v7+/////////////////////v7+//////////7+/v7+/v7+"+ +"/v7+/v7+/v7+///+/v7+/v7+/v7+/v7+/v7//////////////////////v7///////7+/v7+/v7+/v7+/v7+/v/////////+/v7+/v7+/v7+/v///////"+ +"/////7+/v///////////////////v7+/v7+/v7+/v7+/v///////v7+/v7+/v7+/v7////////w==" +))); +clockWidget.clockColon = new GL.Texture(4, 3, base64.atob("7+/v7+/v7+/v7+/v")); +clockWidget.monthNames = ["Spring", "Summer", "Autumn", "Winter"]; +clockWidget.dayNames = ["Mondag ", "Tysdag ", "Midtveke", "Torsdag ", "Fredag ", "Laurdag ", "Sundag ", "Verddag "]; +clockWidget.draw = function(charXoff, charYoff) { + con.color_pair(254, 255); + var xoff = charXoff * 7; + var yoff = charYoff * 14 + 3; + var timeInMinutes = ((sys.currentTimeInMills() / 60000)|0); + var mins = timeInMinutes % 60; + var hours = ((timeInMinutes / 60)|0) % 24; + var ordinalDay = ((timeInMinutes / (60*24))|0) % 120; + var visualDay = (ordinalDay % 30) + 1; + var months = ((timeInMinutes / (60*24*30))|0) % 4; + var dayName = ordinalDay % 7; // 0 for Mondag + if (ordinalDay == 119) dayName = 7; // Verddag + var years = ((timeInMinutes / (60*24*30*120))|0) + 125; + // draw timepiece + GL.drawSprite(clockWidget.numberSheet, (hours / 10)|0, 0, xoff, yoff); + GL.drawSprite(clockWidget.numberSheet, hours % 10, 0, xoff + 24, yoff); + GL.drawTexImage(clockWidget.clockColon, xoff + 48, yoff + 5); + GL.drawTexImage(clockWidget.clockColon, xoff + 48, yoff + 14); + GL.drawSprite(clockWidget.numberSheet, (mins / 10)|0, 0, xoff + 57, yoff); + GL.drawSprite(clockWidget.numberSheet, mins % 10, 0, xoff + 81, yoff); + // print month and date + con.move(1 + charYoff, 17 + charXoff); + print(clockWidget.monthNames[months]+" "+visualDay); + // print year and dayname + con.mvaddch(2 + charYoff, 17 + charXoff, 5); + con.move(2 + charYoff, 18 + charXoff); + print(years+" "+clockWidget.dayNames[dayName]); +}; + + +// register widgets +_fsh.registerNewWidget(clockWidget); // screen init con.color_pair(254, 255); con.clear(); con.curs_set(0); _fsh.drawTitlebar(); + + +// TEST +con.move(2,1); +print("Hit backspace to exit"); +while (true) { + captureUserInput(); + if (getKeyPushed(0) == 67) break; + + _fsh.widgets["com.fsh.clock"].draw(25, 2); +} + +con.move(3,1); +con.color_pair(201,255); +print("cya!"); \ No newline at end of file diff --git a/fsh_clockdigits.png b/fsh_clockdigits.png index 8b3b0f467d4f83e4f4233aa944c87f591ea6c718..6ec8b334d882754db9a871429a85866a9e4eb884 100644 GIT binary patch delta 995 zcmV<9104Lc2l)q(B!6*fLqkw$V`BgSD3NuMJxjw-6o%inN=vO2)Ir1{LluV>ih?+5 z9l8`LwSrZbwyQd|WWhk}FX;@99m&{c3%5ClaKaqt)TwMdEQHiZ^xPq;Y` z?>+C~-g5zeMrVfImjn#c;kk55S}m+e!FPlaf)7Io$;`GEvVYkOddANqRZ=`8M6cd; zU1OlA+6?f8h-aC_9pZW7%$8#b-Xk7iWw}UvLLBFGK;m1WD;~cIE_wVVnCEkgfM4{K zN*%0pFe`I|c#1e?=vCG_kGM%hHCL7?kI@>3jU3WQL4txRHlf2og0e|7>+VZ7eM_j2 zhtc0c4V)Y$lz+(^C$&mlRmvLaDt$U?V($OvX=^jnUiU}}=zn$H&j}#74>ano`+MrT zjWZzd0$iJIe}(2W_f2}et;LRk=nims)7F#&;A$5beYRvSH>ChAzor2n7r z>)xzd`#66B^4s)8cfjEhFiG{%jX!EeXT`fAHy!{00DlQ^NLh0L01sgR01sgSs6VG^ z0006mNkliq2(8Bd|K-lqjC(qzhOhuNecBgAKv)pTx-84S+{V5?etL{` zT^GrSdz9!<_@MHKq(za7x=z9uWuF@QS2~(}q3nw*+xh)!_#9zt9pJu)L^)LckhBo8 zp=CrmI)74M2xm&^5CLL8!%q>TZYuFkY2?t_gF{P#_S$+t(&sonMW5U`wGr=_A8L^* z{&!t-eAY(p8gE91X(}yCIgwFE`z&hyf73Zfww%3gTx9T4s5NgKT3)*GG|Bndh9UmL}CXkq(sF(=vL7(G40^;zU#;5bIKM zlw_+x);A>Po=a&Sg+_`mDX(F4gC8xor#iBv#@%WO_Z}f7*Iq(zM(>5JC4=yIpevDeo?`ry@#-@Z4Sp49xt#)Q>-Pjdh^y> z3W|tv{t%p<;9Od#? zNmh-PNUfKClIIhT#-KOZ{uzD^qo|8b+MbWNvY^>mZ)K=b`4B0aN6&4J*FOko-&Bmf RCf5J}002ovPDHLkV1hTJ+;ac` delta 912 zcmV;B18@BK2eb!}B!6#dLqkw$V`BgSD3NuMJ4*vW6otP;#aGlq1rd=HDi#W&AeI`7 zG(kd);Hyd2O(JZPWp{%FTfxRcun=v075)Ql1zQC{Py`VRe}S(?!g?ngh=|TIdq2+1 zxy+maf5gzTcI^mcbB+}Yhl2A9i^2LA8tJ8#P6iX2ZB9j_5r6(2pLh6Fy&YD){@?fK zXkO864SWs4rxMJ#co$$yAfd=t7J%!HLFOEoh6sT91PLdycQ-$2un zmsMq*lY5A-%M)G0-aZV-{Ix00009aFe3}5`O{fNkl6t@1noRO-D|DQ@0xbUL}GE~#Qo1=7iSy^ z{x^se-nSJ{Z@PDMl+I8TL-`Y?@`)}s%D_< z{_m?j6WPS?NO()F{3+U zOrpx%N{-ZK4o;@kgEA6+w!M9i8h6&ceU{aOB8b&XSz8LzBk0;wQ7M*{P^gpJ%m0Yg z1KkeqKt~enX}rt9tC#OAiN=XztB;lkp4_1fj*V2--nNZaL_n@Ynf!k2pl`KbF>bVC z;H4$a(SKKq84@3T^?C`#N0D`gEz(x|i51^^w>|RC{r5MI8n=}|J!EQ?(Vy<&EAr&lYKNCy>^HaEEkKs{l~%&H)WpLs m^o2LnmJMZ>_2MAfu0NuBw@ggHIAZ_+002ovP6b4+LSTZJio|gM