From b97ee0a056811ecd653a2a2ac9de43c3d278c4b7 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 6 Feb 2024 15:57:55 +0000 Subject: [PATCH] Added icons library for easy in-app icons --- apps/icons/ChangeLog | 1 + apps/icons/README.md | 21 ++++++++ apps/icons/app.png | Bin 0 -> 2890 bytes apps/icons/gen/bike.png | Bin 0 -> 510 bytes apps/icons/gen/car.png | Bin 0 -> 350 bytes apps/icons/gen/close.png | Bin 0 -> 228 bytes apps/icons/gen/down.png | Bin 0 -> 268 bytes apps/icons/gen/fan.png | Bin 0 -> 646 bytes apps/icons/gen/generate.js | 92 +++++++++++++++++++++++++++++++++ apps/icons/gen/home.png | Bin 0 -> 326 bytes apps/icons/gen/icon_names.json | 16 ++++++ apps/icons/gen/left.png | Bin 0 -> 256 bytes apps/icons/gen/light.png | Bin 0 -> 452 bytes apps/icons/gen/plug.png | Bin 0 -> 264 bytes apps/icons/gen/right.png | Bin 0 -> 247 bytes apps/icons/gen/rocket.png | Bin 0 -> 675 bytes apps/icons/gen/switch.png | Bin 0 -> 344 bytes apps/icons/gen/sync.png | Bin 0 -> 445 bytes apps/icons/gen/up.png | Bin 0 -> 271 bytes apps/icons/icons.img | Bin 0 -> 1064 bytes apps/icons/lib.js | 25 +++++++++ apps/icons/metadata.json | 17 ++++++ 22 files changed, 172 insertions(+) create mode 100644 apps/icons/ChangeLog create mode 100644 apps/icons/README.md create mode 100644 apps/icons/app.png create mode 100644 apps/icons/gen/bike.png create mode 100644 apps/icons/gen/car.png create mode 100644 apps/icons/gen/close.png create mode 100644 apps/icons/gen/down.png create mode 100644 apps/icons/gen/fan.png create mode 100755 apps/icons/gen/generate.js create mode 100644 apps/icons/gen/home.png create mode 100644 apps/icons/gen/icon_names.json create mode 100644 apps/icons/gen/left.png create mode 100644 apps/icons/gen/light.png create mode 100644 apps/icons/gen/plug.png create mode 100644 apps/icons/gen/right.png create mode 100644 apps/icons/gen/rocket.png create mode 100644 apps/icons/gen/switch.png create mode 100644 apps/icons/gen/sync.png create mode 100644 apps/icons/gen/up.png create mode 100644 apps/icons/icons.img create mode 100644 apps/icons/lib.js create mode 100644 apps/icons/metadata.json diff --git a/apps/icons/ChangeLog b/apps/icons/ChangeLog new file mode 100644 index 000000000..73fce0974 --- /dev/null +++ b/apps/icons/ChangeLog @@ -0,0 +1 @@ +0.01: New library diff --git a/apps/icons/README.md b/apps/icons/README.md new file mode 100644 index 000000000..3eb420b62 --- /dev/null +++ b/apps/icons/README.md @@ -0,0 +1,21 @@ +# Icons Library + +This library contains a set of icons that might be useful in your application, as well as a chooser for those icons: + +```JS +// get a list of available icons +require("icons").getIconNames() + +// draw an icon +g.drawImage(require("icons").getIcon("light"),0,0); + +// Allow the user to request an icon +require("icons").showIconChooser().then(function(iconName) { + console.log("User chose "+iconName); +}, function() { + console.log("User Cancelled"); +}); +``` + +To ensure the app loader auto-installs this module along with your app, just add the line +```"dependencies" : { "messageicons":"module" },``` to your `metadata.json` file. \ No newline at end of file diff --git a/apps/icons/app.png b/apps/icons/app.png new file mode 100644 index 0000000000000000000000000000000000000000..1afe0b05b4a861abd2709a443e459604d2ccf2a6 GIT binary patch literal 2890 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 literal 0 HcmV?d00001 diff --git a/apps/icons/gen/bike.png b/apps/icons/gen/bike.png new file mode 100644 index 0000000000000000000000000000000000000000..65c3d6eaa8e81d5a3d978f01c8683b34d7a01a57 GIT binary patch literal 510 zcmVPx$xJg7oR7gv;mA@;8K^(_l->en}n=**ONJ0vwEFy|B7*Hq%MHzjqex(#;kTNKP z!XLn55jF$ajEcc5?p=2}PxpME^Wc{6_1xY2_4&L%pSy2?e;$P#`XAnzOP~*UNz?f) zK)Tz&%wGbWRxfa7#GehMDlfpd!)f?gzX9dI6tEkDWLcC2*a4=23!p0xz@2fRCg8>s zY6DbgjbO0;$2njGs0H55{NAR0U?c2^=s0!LBX9_8`qUz@lp-)@qua{>+yM>Vo@FyH zDuW^5$VPbu90Mv|53pem^aCe$-fnH_1kMvs0lI+!qo?&@0j^EEH3AF3dg8zqFl*sY zz$l!xgOfmWc#*6{T& z04}gf@5!k10kIY(`&<#rqL8)UEQ&4iX~H8taw@zonQIPh83daBBI{#To9?F+VAW<2 zTK;NNw^-_;mAV4z9(9*$QI>YmA}(pZEm@CUQdNaj>he8m{1o8shX7HaEP&cjZPx$7)eAyR7gv`l}io*K@f&N2eGqcB_2yI;TA4{1PKn{8Vwb#{zC z{{;}cX=Cu}Q|NLCq?{(We-5?Y4e`V=Jk#~)<1$rF12gEEGj~6A1IczaM5bBuK zU|Qg5s@QNPP24D+@%u5$2&V1RcGPU=o7JY%kS;&B%z#~P+75P&xn~-}g|2*FAMs_M z>pHHtOWtS&+dNX>zNWD5hk%1*xJQkKg7cT#d!v=AA9O{q3Lofw&wPVTL(=Z7$ZDXE O7(8A5T-G@yGywpjLTBLs literal 0 HcmV?d00001 diff --git a/apps/icons/gen/fan.png b/apps/icons/gen/fan.png new file mode 100644 index 0000000000000000000000000000000000000000..bff383de5bdcda71609bdd94d8d56d8a8b8d3a5e GIT binary patch literal 646 zcmV;10(t$3P)Px%KuJVFR7gw3)yeBlaTEsd4;jl)qRbf<6j>k{7KW4|5|N=42?+};S@;VmiG^Xo zLWW3Y3n61j*&r5%h%#grk@y~+w_ZO#{OTp&&3o@X?>)~s&-0vf8~Mkl(Lc_wp#Y7s z81v8_t#KAhaqo9UHUywKPGNXGiOyhDtpFRa3=gp$=kOLc@gA*e1$czc=$A>`;21{W zGKSU)@EVb{L+Ru>j$=HYBt5rk1vrX{Nz>Jm{1QHtE{5RxpIlfiaz_N;n_4R8Wut11dngXfocik4Ne&v=!z)omg=o>G9m zM4%cVoDq)bhIOU=>4-%8^Mw{TiLX_KTqxr2#qRP>TO2|kOvQn^0C&&}UCIDGE6&-H z^i(R`gIRgAE3e~sO)217K96`jJA%n|0b-a&V^01l;sdcNyNN1iXQH^CS;ftEEX?BW z<1TvF1&Cn^kz@43hC$hkOjMcTuxOkK$?-l+L(`;b5#Hcku9F`$Xja+|Pxq|HdLeQ< zG^vVxM0@m4zQcu;6NQAee_D2tWOG?$V>025BK%tH#3szoL5raqoHpH&!X8eF!W1iV zC>y*@2jp4^CxtFy-=H%rIjPo3jvaJ5JzsH0Cp`XJ%P!W#pyK`W$!mz;Bh3(tuxqUy z#NG*N`ld5td&Y+*?n9R)wE|qkuzHfj(hD<00lz#A`J%;iZ!9{DOpiY(6vbf0q<`Nx gwF3Mp$NvTR2IMz(8Nu;TqW}N^07*qoM6N<$g86(Q7ytkO literal 0 HcmV?d00001 diff --git a/apps/icons/gen/generate.js b/apps/icons/gen/generate.js new file mode 100755 index 000000000..387826903 --- /dev/null +++ b/apps/icons/gen/generate.js @@ -0,0 +1,92 @@ +#!/usr/bin/node + +// Creates lib.js from icons +// npm install png-js + +// Icons from https://fonts.google.com/icons + +var imageconverter = require("../../../webtools/imageconverter.js").imageconverter; +var icons = JSON.parse(require("fs").readFileSync(__dirname+"/icon_names.json")); +const imgOptions = { + mode : "1bit", + inverted : true, + transparent : true, + output: "raw" +}; +var PNG = require('png-js'); +var IMAGE_BYTES = 76; + +var iconTests = []; + +var promises = []; + +icons.forEach((icon,iconIndex) => { + // create image + console.log("Loading "+icon.name); + var fn = __dirname+"/"+icon.name+".png"; + console.log(fn); + var png = new PNG(require("fs").readFileSync(fn)); + if (png.width!=24 || png.height!=24) { + console.warn(icon.name+" should be 24x24px"); + } + + promises.push(new Promise(r => { + png.decode(function (pixels) { + var rgba = new Uint8Array(pixels); + var isTransparent = false; + for (var i=0;i { + iconData.set(Array.prototype.slice.call(Buffer.from(icon.img,"binary")), idx*IMAGE_BYTES) + }); + + console.log("Saving images"); + require("fs").writeFileSync(__dirname+"/../icons.img", Buffer.from(iconData,"binary")); + + console.log("Saving library"); + require("fs").writeFileSync(__dirname+"/../lib.js", ` +// Auto-generated by apps/icons/gen/generate.js + +/// Get an icon based on a name from getIconNames that can be drawn with g.drawImage +exports.getIcon = function(name) { + let match = ${JSON.stringify(","+icons.map(icon=>icon.name+"|"+icon.index).join(",")+",")}.match(new RegExp(\`,\${name.toLowerCase()}\\\\|(\\\\d+)\`)) + return require("Storage").read("icons.img", (match===null)?0:match[1]*${IMAGE_BYTES}, ${IMAGE_BYTES}); +}; + +/// Get a list of available icon names +exports.getIconNames = function() { + return ${JSON.stringify(icons.map(i=>i.name))}; +}; + +/// Show a menu to allow an icon to be chosen - its name is returned +exports.showIconChooser = function() { + return new Promise((resolve,reject) => { + var menu = { "" : { title : /*LANG*/"Icons", back : ()=>{E.showMenu();reject();}}} + exports.getIconNames().forEach(name => { + menu[\`\\0\${exports.getIcon(name)} \${name}\`] = ()=>{E.showMenu();resolve(name);}; + }); + E.showMenu(menu); + }); +}; + `); +}); diff --git a/apps/icons/gen/home.png b/apps/icons/gen/home.png new file mode 100644 index 0000000000000000000000000000000000000000..3125c07497b618386e6d8829922c73986697b066 GIT binary patch literal 326 zcmV-M0lEH(P)Px$07*naR7gwh)vrziK@i9BPeXVBGz#5>2OvS?QFst77%(6Sk{W9GBU)dDN0aaX zBxn?x2OtDOGnc?|ce|vtfxxNF?ac4{o0;9amMK52DeL=jfTO7RFt_sD3YKt=wGh5S z7xyVp4qyXkSinOFF5(f}7&SpsfD`P7z$JEKeTwy1_pw(8sRJxWOI9NB0KJmPK91wv zO|i_a-|Mvr4 Y0TiP<89QN-qyPW_07*qoM6N<$g3bho5C8xG literal 0 HcmV?d00001 diff --git a/apps/icons/gen/icon_names.json b/apps/icons/gen/icon_names.json new file mode 100644 index 000000000..d0b3f540c --- /dev/null +++ b/apps/icons/gen/icon_names.json @@ -0,0 +1,16 @@ +[ + {"name":"home"}, + {"name":"bike"}, + {"name":"car"}, + {"name":"fan"}, + {"name":"light"}, + {"name":"plug"}, + {"name":"rocket"}, + {"name":"switch"}, + {"name":"sync"}, + {"name":"up"}, + {"name":"down"}, + {"name":"left"}, + {"name":"right"}, + {"name":"close"} +] diff --git a/apps/icons/gen/left.png b/apps/icons/gen/left.png new file mode 100644 index 0000000000000000000000000000000000000000..d602f1076ca3db03fea4168525f31d0fc2011254 GIT binary patch literal 256 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 VC>b(7Hevt(002ovPDHLkV1ns}X>b4l literal 0 HcmV?d00001 diff --git a/apps/icons/icons.img b/apps/icons/icons.img new file mode 100644 index 0000000000000000000000000000000000000000..9bc112c97b9ac7e6a272bac2aaff373054676bfd GIT binary patch literal 1064 zcma)*KWp1S7{;IL1*wCOI$o%-^AQ9d>Y+G=ei1>TT^%~4gR!N((6t@>ZIWUK+GM$T$GQ>1M(rKOq z)a$LHs;2Iin~oI$Q3jQ%pOhe#!D78Q-kf~7I{W=gsntyM_m?Kn-G4(f=n;QTN;1XB@=fDc_tez~^&#W0$ zK~k-Z{W09kqRAK|;BD{Rpv`idmt)Oc!m7wLgbB7{z3yU;E1S8GV&iWcu)b8&`g*m! z0_df!IALG8a5GfR#@xGAhwAIqbZ1aE@ZTd0^iAOZGU1z#arJdl)RClGN?Zy~#hXZE z { + var menu = { "" : { title : /*LANG*/"Icons", back : ()=>{E.showMenu();reject();}}} + exports.getIconNames().forEach(name => { + menu[`\0${exports.getIcon(name)} ${name}`] = ()=>{E.showMenu();resolve(name);}; + }); + E.showMenu(menu); + }); +}; + \ No newline at end of file diff --git a/apps/icons/metadata.json b/apps/icons/metadata.json new file mode 100644 index 000000000..77b24d98c --- /dev/null +++ b/apps/icons/metadata.json @@ -0,0 +1,17 @@ +{ + "id": "icons", + "name": "Icons", + "version": "0.01", + "description": "Library containing useful icons for apps", + "icon": "app.png", + "type": "module", + "tags": "tool,system", + "supports": ["BANGLEJS","BANGLEJS2"], + "provides_modules" : ["icons"], + "default": true, + "readme": "README.md", + "storage": [ + {"name":"icons","url":"lib.js"}, + {"name":"icons.img","url":"icons.img"} + ] +}