From 64238f4ec0e646c41a6f1590e716f02a89946700 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sat, 22 Jul 2023 12:02:34 +0200 Subject: [PATCH 01/14] iconlaunch - Better performance by less array accesses --- apps/iconlaunch/app.js | 43 +++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/apps/iconlaunch/app.js b/apps/iconlaunch/app.js index 9f8cedb0f..4eb4f5721 100644 --- a/apps/iconlaunch/app.js +++ b/apps/iconlaunch/app.js @@ -9,7 +9,6 @@ timeOut:"Off" }, s.readJSON("iconlaunch.json", true) || {}); - if (!settings.fullscreen) { Bangle.loadWidgets(); Bangle.drawWidgets(); @@ -19,9 +18,9 @@ let launchCache = s.readJSON("iconlaunch.cache.json", true)||{}; let launchHash = s.hash(/\.info/); if (launchCache.hash!=launchHash) { - launchCache = { - hash : launchHash, - apps : s.list(/\.info$/) + launchCache = { + hash : launchHash, + apps : s.list(/\.info$/) .map(app=>{let a=s.readJSON(app,1);return a&&{name:a.name,type:a.type,icon:a.icon,sortorder:a.sortorder,src:a.src};}) .filter(app=>app && (app.type=="app" || (app.type=="clock" && settings.showClocks) || !app.type)) .sort((a,b)=>{ @@ -34,6 +33,17 @@ s.writeJSON("iconlaunch.cache.json", launchCache); } + // cache items + let count = 0; + launchCache.items = []; + for (let c of launchCache.apps){ + let i = Math.floor(count/3); + if (!launchCache.items[i]) + launchCache.items.push([]); + launchCache.items[Math.floor(count/3)].push(c); + count++; + } + let selectedItem = -1; const R = Bangle.appRect; const iconSize = 48; @@ -42,18 +52,26 @@ const itemSize = iconSize + whitespace; let drawItem = function(itemI, r) { + let t = Date.now(); g.clearRect(r.x, r.y, r.x + r.w - 1, r.y + r.h - 1); let x = 0; - for (let i = itemI * appsN; i < appsN * (itemI + 1); i++) { - if (!launchCache.apps[i]) break; + let firstApp = itemI * appsN; + let numberOfApps = appsN * (itemI + 1); + let apps = launchCache.items[itemI]; + let i = firstApp - 1; + let selectedApp; + let currentApp; + for (currentApp of apps) { + i++; x += whitespace; - if (!launchCache.apps[i].icon) { + if (!currentApp.icon) { g.setFontAlign(0, 0, 0).setFont("12x20:2").drawString("?", x + r.x + iconSize / 2, r.y + iconSize / 2); } else { - if (!launchCache.apps[i].icondata) launchCache.apps[i].icondata = s.read(launchCache.apps[i].icon); - g.drawImage(launchCache.apps[i].icondata, x + r.x, r.y); + if (!currentApp.icondata) currentApp.icondata = s.read(currentApp.icon); + g.drawImage(currentApp.icondata, x + r.x, r.y); } if (selectedItem == i) { + selectedApp = currentApp; g.drawRect( x + r.x - 1, r.y - 1, @@ -63,13 +81,12 @@ } x += iconSize; } - drawText(itemI, r.y); + if (selectedApp) drawText(itemI, r.y, selectedApp); }; - let drawText = function(i, appY) { - const selectedApp = launchCache.apps[selectedItem]; + let drawText = function(i, appY, selectedApp) { const idy = (selectedItem - (selectedItem % 3)) / 3; - if (!selectedApp || i != idy) return; + if (i != idy) return; appY = appY + itemSize/2; g.setFontAlign(0, 0, 0); g.setFont("12x20"); From 76425b947b7166f047435ffe07e08b064c5545d6 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sat, 22 Jul 2023 12:24:35 +0200 Subject: [PATCH 02/14] iconlaunch - Render icons for one item at once --- apps/iconlaunch/app.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/iconlaunch/app.js b/apps/iconlaunch/app.js index 4eb4f5721..bb9574e16 100644 --- a/apps/iconlaunch/app.js +++ b/apps/iconlaunch/app.js @@ -61,6 +61,8 @@ let i = firstApp - 1; let selectedApp; let currentApp; + let layers=[]; + let selectedRect; for (currentApp of apps) { i++; x += whitespace; @@ -68,19 +70,21 @@ g.setFontAlign(0, 0, 0).setFont("12x20:2").drawString("?", x + r.x + iconSize / 2, r.y + iconSize / 2); } else { if (!currentApp.icondata) currentApp.icondata = s.read(currentApp.icon); - g.drawImage(currentApp.icondata, x + r.x, r.y); + layers.push({x:x+r.x,y:r.y,image:currentApp.icondata}); } if (selectedItem == i) { selectedApp = currentApp; - g.drawRect( + selectedRect = [ x + r.x - 1, r.y - 1, x + r.x + iconSize + 1, r.y + iconSize + 1 - ); + ]; } x += iconSize; } + g.drawImages(layers); + if (selectedRect) g.drawRect.apply(null, selectedRect); if (selectedApp) drawText(itemI, r.y, selectedApp); }; From 3adc3f8fba930b8d66be3b11a4d62c9e59f2276d Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sat, 22 Jul 2023 12:32:53 +0200 Subject: [PATCH 03/14] iconlaunch - Precache icons and only clear if needed --- apps/iconlaunch/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/iconlaunch/app.js b/apps/iconlaunch/app.js index bb9574e16..2beea919d 100644 --- a/apps/iconlaunch/app.js +++ b/apps/iconlaunch/app.js @@ -41,6 +41,7 @@ if (!launchCache.items[i]) launchCache.items.push([]); launchCache.items[Math.floor(count/3)].push(c); + c.icondata = s.read(c.icon); count++; } @@ -53,7 +54,6 @@ let drawItem = function(itemI, r) { let t = Date.now(); - g.clearRect(r.x, r.y, r.x + r.w - 1, r.y + r.h - 1); let x = 0; let firstApp = itemI * appsN; let numberOfApps = appsN * (itemI + 1); @@ -69,7 +69,6 @@ if (!currentApp.icon) { g.setFontAlign(0, 0, 0).setFont("12x20:2").drawString("?", x + r.x + iconSize / 2, r.y + iconSize / 2); } else { - if (!currentApp.icondata) currentApp.icondata = s.read(currentApp.icon); layers.push({x:x+r.x,y:r.y,image:currentApp.icondata}); } if (selectedItem == i) { @@ -83,6 +82,7 @@ } x += iconSize; } + if (selectedRect) g.clearRect(r.x, r.y, r.x + r.w - 1, r.y + r.h - 1); g.drawImages(layers); if (selectedRect) g.drawRect.apply(null, selectedRect); if (selectedApp) drawText(itemI, r.y, selectedApp); From f7590cff9f9b637132ed83588b1e79e627a15976 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sat, 22 Jul 2023 13:06:26 +0200 Subject: [PATCH 04/14] iconlaunch - Dedicated icon for apps with missing icons --- apps/iconlaunch/app.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/apps/iconlaunch/app.js b/apps/iconlaunch/app.js index 2beea919d..989c030a1 100644 --- a/apps/iconlaunch/app.js +++ b/apps/iconlaunch/app.js @@ -34,6 +34,7 @@ } // cache items + const ICON_MISSING = atob("MDABAAAAAAAAAAAAAAAAAAABAAAAAAADgAAAAAAGwAAAAAAMYAAAAAAYMAAAAAAwGAAAAABgDAAAAADABgAAAAGAAwAAAAMAAYAAAAYP4MAAAAw//GAAABh4/jAAADD4fhgAAGD8PwwAAMD8PwYAAYD8PwMAAwD8PwGABgB4fwDADAAAfgBgGAAAfgAwMAAA+AAYGAAB8AAwDAABwABgBgADgADAAwADAAGAAYADAAMAAMAAAAYAAGAAAAwAADADgBgAABgHwDAAAAwPwGAAAAYP4MAAAAMPwYAAAAGPwwAAAADHhgAAAABgDAAAAAAwGAAAAAAYMAAAAAAMYAAAAAAGwAAAAAADgAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); let count = 0; launchCache.items = []; for (let c of launchCache.apps){ @@ -41,7 +42,10 @@ if (!launchCache.items[i]) launchCache.items.push([]); launchCache.items[Math.floor(count/3)].push(c); - c.icondata = s.read(c.icon); + if (c.icon) + c.icondata = s.read(c.icon); + else + c.icondata = ICON_MISSING; count++; } @@ -55,10 +59,8 @@ let drawItem = function(itemI, r) { let t = Date.now(); let x = 0; - let firstApp = itemI * appsN; - let numberOfApps = appsN * (itemI + 1); let apps = launchCache.items[itemI]; - let i = firstApp - 1; + let i = itemI * appsN; let selectedApp; let currentApp; let layers=[]; @@ -66,11 +68,7 @@ for (currentApp of apps) { i++; x += whitespace; - if (!currentApp.icon) { - g.setFontAlign(0, 0, 0).setFont("12x20:2").drawString("?", x + r.x + iconSize / 2, r.y + iconSize / 2); - } else { - layers.push({x:x+r.x,y:r.y,image:currentApp.icondata}); - } + layers.push({x:x+r.x,y:r.y,image:currentApp.icondata}); if (selectedItem == i) { selectedApp = currentApp; selectedRect = [ From c4ae56ed169bfa4f36cd5d9ff95e6dc1ecae34fb Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sat, 22 Jul 2023 13:09:08 +0200 Subject: [PATCH 05/14] iconlaunch - Bump version --- apps/iconlaunch/ChangeLog | 3 ++- apps/iconlaunch/metadata.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/iconlaunch/ChangeLog b/apps/iconlaunch/ChangeLog index 8bad496bf..f9d143fca 100644 --- a/apps/iconlaunch/ChangeLog +++ b/apps/iconlaunch/ChangeLog @@ -21,4 +21,5 @@ 0.15: Ensure that we hide widgets if in fullscreen mode (So that widgets are still hidden if launcher is fast-loaded) 0.16: Use firmware provided E.showScroller method -0.17: fix fullscreen with oneClickExit +0.17: fix fullscreen with oneClickExit +0.18: Better performance diff --git a/apps/iconlaunch/metadata.json b/apps/iconlaunch/metadata.json index 35a7907bd..b515a88e7 100644 --- a/apps/iconlaunch/metadata.json +++ b/apps/iconlaunch/metadata.json @@ -2,7 +2,7 @@ "id": "iconlaunch", "name": "Icon Launcher", "shortName" : "Icon launcher", - "version": "0.17", + "version": "0.18", "icon": "app.png", "description": "A launcher inspired by smartphones, with an icon-only scrollable menu.", "tags": "tool,system,launcher", From aaa992ee2b4999271a3cb874c8ba6a81daec5a2e Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sat, 22 Jul 2023 13:20:57 +0200 Subject: [PATCH 06/14] iconlaunch - Use back option instead of translated entry --- apps/iconlaunch/settings.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/iconlaunch/settings.js b/apps/iconlaunch/settings.js index f4c0599f7..3278075e4 100644 --- a/apps/iconlaunch/settings.js +++ b/apps/iconlaunch/settings.js @@ -16,8 +16,7 @@ } const timeOutChoices = [/*LANG*/"Off", "10s", "15s", "20s", "30s"]; const appMenu = { - "": { "title": /*LANG*/"Launcher" }, - /*LANG*/"< Back": back, + "": { "title": /*LANG*/"Launcher", back: back }, /*LANG*/"Show Clocks": { value: settings.showClocks == true, onchange: (m) => { From f4a72b777d0b5178d0de856116aa721383a18669 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sat, 22 Jul 2023 13:22:46 +0200 Subject: [PATCH 07/14] iconlaunch - Remove debug code --- apps/iconlaunch/app.js | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/iconlaunch/app.js b/apps/iconlaunch/app.js index 989c030a1..e78cd81d8 100644 --- a/apps/iconlaunch/app.js +++ b/apps/iconlaunch/app.js @@ -57,7 +57,6 @@ const itemSize = iconSize + whitespace; let drawItem = function(itemI, r) { - let t = Date.now(); let x = 0; let apps = launchCache.items[itemI]; let i = itemI * appsN; From 91df2dc68e49c139115db797a58af7f969b99788 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sat, 22 Jul 2023 17:34:45 +0200 Subject: [PATCH 08/14] iconlaunch - Fix off by one error when selecting apps --- apps/iconlaunch/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/iconlaunch/app.js b/apps/iconlaunch/app.js index e78cd81d8..5db324163 100644 --- a/apps/iconlaunch/app.js +++ b/apps/iconlaunch/app.js @@ -59,7 +59,7 @@ let drawItem = function(itemI, r) { let x = 0; let apps = launchCache.items[itemI]; - let i = itemI * appsN; + let i = itemI * appsN - 1; let selectedApp; let currentApp; let layers=[]; From ffd967cb634258e6223e0a1f8656f817d98a6196 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sat, 22 Jul 2023 18:04:38 +0200 Subject: [PATCH 09/14] iconlauch - Center icons in items to prevent selection box beeing cut off at top --- apps/iconlaunch/app.js | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/apps/iconlaunch/app.js b/apps/iconlaunch/app.js index 5db324163..a5f0ee1d6 100644 --- a/apps/iconlaunch/app.js +++ b/apps/iconlaunch/app.js @@ -36,12 +36,21 @@ // cache items const ICON_MISSING = atob("MDABAAAAAAAAAAAAAAAAAAABAAAAAAADgAAAAAAGwAAAAAAMYAAAAAAYMAAAAAAwGAAAAABgDAAAAADABgAAAAGAAwAAAAMAAYAAAAYP4MAAAAw//GAAABh4/jAAADD4fhgAAGD8PwwAAMD8PwYAAYD8PwMAAwD8PwGABgB4fwDADAAAfgBgGAAAfgAwMAAA+AAYGAAB8AAwDAABwABgBgADgADAAwADAAGAAYADAAMAAMAAAAYAAGAAAAwAADADgBgAABgHwDAAAAwPwGAAAAYP4MAAAAMPwYAAAAGPwwAAAADHhgAAAABgDAAAAAAwGAAAAAAYMAAAAAAMYAAAAAAGwAAAAAADgAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); let count = 0; + + let selectedItem = -1; + const R = Bangle.appRect; + const iconSize = 48; + const appsN = Math.floor(R.w / iconSize); + const whitespace = Math.floor((R.w - appsN * iconSize) / (appsN + 1)); + const iconYoffset = Math.floor(whitespace/4)-1; + const itemSize = iconSize + whitespace; + launchCache.items = []; for (let c of launchCache.apps){ - let i = Math.floor(count/3); + let i = Math.floor(count/appsN); if (!launchCache.items[i]) launchCache.items.push([]); - launchCache.items[Math.floor(count/3)].push(c); + launchCache.items[Math.floor(count/appsN)].push(c); if (c.icon) c.icondata = s.read(c.icon); else @@ -49,13 +58,6 @@ count++; } - let selectedItem = -1; - const R = Bangle.appRect; - const iconSize = 48; - const appsN = Math.floor(R.w / iconSize); - const whitespace = (R.w - appsN * iconSize) / (appsN + 1); - const itemSize = iconSize + whitespace; - let drawItem = function(itemI, r) { let x = 0; let apps = launchCache.items[itemI]; @@ -67,14 +69,14 @@ for (currentApp of apps) { i++; x += whitespace; - layers.push({x:x+r.x,y:r.y,image:currentApp.icondata}); + layers.push({x:x+r.x,y:r.y + iconYoffset,image:currentApp.icondata}); if (selectedItem == i) { selectedApp = currentApp; selectedRect = [ x + r.x - 1, - r.y - 1, - x + r.x + iconSize + 1, - r.y + iconSize + 1 + r.y + iconYoffset - 1, + x + r.x + iconSize, + r.y + iconYoffset + iconSize ]; } x += iconSize; From b6459ad26aaf5d43a611ee1ce4d9164976a8ba55 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sat, 22 Jul 2023 23:21:31 +0200 Subject: [PATCH 10/14] iconlaunch - Load N/A icon from image file --- apps/iconlaunch/app.js | 2 +- apps/iconlaunch/metadata.json | 3 ++- apps/iconlaunch/na.img | Bin 0 -> 291 bytes 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 apps/iconlaunch/na.img diff --git a/apps/iconlaunch/app.js b/apps/iconlaunch/app.js index a5f0ee1d6..8f99fcae7 100644 --- a/apps/iconlaunch/app.js +++ b/apps/iconlaunch/app.js @@ -34,7 +34,7 @@ } // cache items - const ICON_MISSING = atob("MDABAAAAAAAAAAAAAAAAAAABAAAAAAADgAAAAAAGwAAAAAAMYAAAAAAYMAAAAAAwGAAAAABgDAAAAADABgAAAAGAAwAAAAMAAYAAAAYP4MAAAAw//GAAABh4/jAAADD4fhgAAGD8PwwAAMD8PwYAAYD8PwMAAwD8PwGABgB4fwDADAAAfgBgGAAAfgAwMAAA+AAYGAAB8AAwDAABwABgBgADgADAAwADAAGAAYADAAMAAMAAAAYAAGAAAAwAADADgBgAABgHwDAAAAwPwGAAAAYP4MAAAAMPwYAAAAGPwwAAAADHhgAAAABgDAAAAAAwGAAAAAAYMAAAAAAMYAAAAAAGwAAAAAADgAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); + const ICON_MISSING = s.read("iconlaunch.na.img"); let count = 0; let selectedItem = -1; diff --git a/apps/iconlaunch/metadata.json b/apps/iconlaunch/metadata.json index b515a88e7..e17830ca6 100644 --- a/apps/iconlaunch/metadata.json +++ b/apps/iconlaunch/metadata.json @@ -10,7 +10,8 @@ "supports": ["BANGLEJS2"], "storage": [ { "name": "iconlaunch.app.js", "url": "app.js" }, - { "name": "iconlaunch.settings.js", "url": "settings.js" } + { "name": "iconlaunch.settings.js", "url": "settings.js" }, + { "name": "iconlaunch.na.img", "url": "na.img" } ], "data": [{"name":"iconlaunch.json"},{"name":"iconlaunch.cache.json"}], "screenshots": [{ "url": "screenshot1.png" }, { "url": "screenshot2.png" }], diff --git a/apps/iconlaunch/na.img b/apps/iconlaunch/na.img new file mode 100644 index 0000000000000000000000000000000000000000..10f4a8f82e3098850708e4ba4bb60a6fcd7918e8 GIT binary patch literal 291 zcmZ9Iu?<2o3`8A83QeTnW(;qTRWb(EClxI#8BwqXBT)V#LOjbAxVXsno$egfBtI2x zo<1xFNF9z%9kn@*>SzT>GlQ8I`t~yDeGTa64+1@Q1Y>mswt9iKdWODwnnlhRF*dsl zSi2~SLt2yc7Oj#@MiG*jE7Ei;%&@>13zV8C%62l8bu)&MA#e9dw%bFf=hZPXNB+1a P?keWnxcBcXd_jEyDnTgg literal 0 HcmV?d00001 From 7e0dbbf6f09cf94c90b1080ae0fb0de059ad6c59 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Tue, 25 Jul 2023 19:55:18 +0200 Subject: [PATCH 11/14] iconlaunch - Go back to now faster drawImage --- apps/iconlaunch/app.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/apps/iconlaunch/app.js b/apps/iconlaunch/app.js index 8f99fcae7..92676a33a 100644 --- a/apps/iconlaunch/app.js +++ b/apps/iconlaunch/app.js @@ -57,19 +57,17 @@ c.icondata = ICON_MISSING; count++; } - let drawItem = function(itemI, r) { let x = 0; let apps = launchCache.items[itemI]; let i = itemI * appsN - 1; let selectedApp; let currentApp; - let layers=[]; let selectedRect; for (currentApp of apps) { i++; x += whitespace; - layers.push({x:x+r.x,y:r.y + iconYoffset,image:currentApp.icondata}); + g.drawImage(currentApp.icondata,x + r.x - 1, r.y + iconYoffset - 1, x + r.x + iconSize, r.y + iconYoffset + iconSize); if (selectedItem == i) { selectedApp = currentApp; selectedRect = [ @@ -82,7 +80,6 @@ x += iconSize; } if (selectedRect) g.clearRect(r.x, r.y, r.x + r.w - 1, r.y + r.h - 1); - g.drawImages(layers); if (selectedRect) g.drawRect.apply(null, selectedRect); if (selectedApp) drawText(itemI, r.y, selectedApp); }; From a9fff204779201cc21ec08ce47650a3e55c4c8bd Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Tue, 25 Jul 2023 20:43:12 +0200 Subject: [PATCH 12/14] iconlaunch - Use objects instead of arrays --- apps/iconlaunch/app.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/iconlaunch/app.js b/apps/iconlaunch/app.js index 92676a33a..cb43dd79f 100644 --- a/apps/iconlaunch/app.js +++ b/apps/iconlaunch/app.js @@ -45,18 +45,20 @@ const iconYoffset = Math.floor(whitespace/4)-1; const itemSize = iconSize + whitespace; - launchCache.items = []; + let t = Date.now(); + launchCache.items = {}; for (let c of launchCache.apps){ let i = Math.floor(count/appsN); if (!launchCache.items[i]) - launchCache.items.push([]); - launchCache.items[Math.floor(count/appsN)].push(c); + launchCache.items[i] = {}; + launchCache.items[i].push(count%3); if (c.icon) c.icondata = s.read(c.icon); else c.icondata = ICON_MISSING; count++; } + let drawItem = function(itemI, r) { let x = 0; let apps = launchCache.items[itemI]; From 94bb93c19e20f9436b4c6436ff3a5ed421f03bdf Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Tue, 25 Jul 2023 21:51:11 +0200 Subject: [PATCH 13/14] iconlaunch - Go back to caching icons on demand but keep presorting apps into items --- apps/iconlaunch/app.js | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/apps/iconlaunch/app.js b/apps/iconlaunch/app.js index cb43dd79f..c744759ac 100644 --- a/apps/iconlaunch/app.js +++ b/apps/iconlaunch/app.js @@ -45,33 +45,33 @@ const iconYoffset = Math.floor(whitespace/4)-1; const itemSize = iconSize + whitespace; - let t = Date.now(); launchCache.items = {}; for (let c of launchCache.apps){ let i = Math.floor(count/appsN); if (!launchCache.items[i]) launchCache.items[i] = {}; - launchCache.items[i].push(count%3); - if (c.icon) - c.icondata = s.read(c.icon); - else - c.icondata = ICON_MISSING; + launchCache.items[i][(count%3)] = c; count++; } + let texted; let drawItem = function(itemI, r) { - let x = 0; - let apps = launchCache.items[itemI]; + let x = whitespace; let i = itemI * appsN - 1; let selectedApp; - let currentApp; + let c; let selectedRect; - for (currentApp of apps) { + let item = launchCache.items[itemI]; + if (texted == itemI){ + g.clearRect(r.x, r.y, r.x + r.w - 1, r.y + r.h - 1); + texted = undefined; + } + for (c of item) { i++; - x += whitespace; - g.drawImage(currentApp.icondata,x + r.x - 1, r.y + iconYoffset - 1, x + r.x + iconSize, r.y + iconYoffset + iconSize); + let id = c.icondata || (c.iconData = (c.icon ? s.read(c.icon) : ICON_MISSING)); + g.drawImage(id,x + r.x - 1, r.y + iconYoffset - 1, x + r.x + iconSize, r.y + iconYoffset + iconSize); if (selectedItem == i) { - selectedApp = currentApp; + selectedApp = c; selectedRect = [ x + r.x - 1, r.y + iconYoffset - 1, @@ -79,11 +79,13 @@ r.y + iconYoffset + iconSize ]; } - x += iconSize; + x += iconSize + whitespace; + } + if (selectedRect) { + g.drawRect.apply(null, selectedRect); + drawText(itemI, r.y, selectedApp); + texted=itemI; } - if (selectedRect) g.clearRect(r.x, r.y, r.x + r.w - 1, r.y + r.h - 1); - if (selectedRect) g.drawRect.apply(null, selectedRect); - if (selectedApp) drawText(itemI, r.y, selectedApp); }; let drawText = function(i, appY, selectedApp) { From 53cb6d8126e18ad46a44ed376f34b54df78f6dc1 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Tue, 25 Jul 2023 22:24:50 +0200 Subject: [PATCH 14/14] iconlaunch - Add jit marker to drawItem and drawText --- apps/iconlaunch/app.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/iconlaunch/app.js b/apps/iconlaunch/app.js index c744759ac..03e743885 100644 --- a/apps/iconlaunch/app.js +++ b/apps/iconlaunch/app.js @@ -56,6 +56,7 @@ let texted; let drawItem = function(itemI, r) { + "jit"; let x = whitespace; let i = itemI * appsN - 1; let selectedApp; @@ -89,6 +90,7 @@ }; let drawText = function(i, appY, selectedApp) { + "jit"; const idy = (selectedItem - (selectedItem % 3)) / 3; if (i != idy) return; appY = appY + itemSize/2;