Skip to content

Commit 74f8fb9

Browse files
author
thyttan
committed
dtlaunch: (WIP) Draw first UI element ASAP, cascade in the rest
1 parent 16a79c4 commit 74f8fb9

File tree

3 files changed

+74
-17
lines changed

3 files changed

+74
-17
lines changed

apps/dtlaunch/ChangeLog

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,5 @@ when moving pages. Add caching for faster startups.
3636
clearing cache when changing those settings.
3737
Bangle 2: Use a separate cache file from the standard launcher.
3838
Bangle 2: Don't leave cache file after uninstalling the app.
39+
0.29: (WIP) Bangle 2: Start drawing UI ASAP - cascading in elements to initial
40+
page.

apps/dtlaunch/app-b2.js

Lines changed: 71 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,6 @@
4444
initPageAppLast = Math.min(page*4+3, apps.length-1);
4545
}
4646

47-
for (let i = initPageAppZeroth; i <= initPageAppLast; i++) { // Initially only load icons for the current page.
48-
if (apps[i].icon)
49-
apps[i].icon = s.read(apps[i].icon); // should just be a link to a memory area
50-
}
5147

5248
let Napps = apps.length;
5349
let Npages = Math.ceil(Napps/4);
@@ -57,6 +53,36 @@
5753
const XOFF = 24;
5854
const YOFF = 30;
5955

56+
let dotIntvLen = 85;
57+
let delayTillFirstIcon = 135; //dotIntvLen*Npages;
58+
g.reset();
59+
g.clearRect(0,24,175,175);
60+
let O = 88+YOFF/2-12*(Npages/2);
61+
let j = 0;
62+
let drawDot = ()=>{
63+
let y = O+j*12;
64+
g.setColor(g.theme.fg);
65+
if (j==page) g.fillCircle(XOFF/2,y,4);
66+
else g.drawCircle(XOFF/2,y,4);
67+
g.flip();
68+
j++;
69+
if (j==Npages) {
70+
clearInterval(dotIntv);
71+
}
72+
}
73+
drawDot();
74+
let dotIntv = setInterval(drawDot, dotIntvLen)
75+
76+
77+
//
78+
// for (let j=0;j<Npages;j++){
79+
// let y = O+j*12;
80+
// g.setColor(g.theme.fg);
81+
// if (j==page) g.fillCircle(XOFF/2,y,4);
82+
// else g.drawCircle(XOFF/2,y,4);
83+
// g.flip();
84+
// }
85+
6086
let drawIcon= function(p,n,selected) {
6187
let x = (n%2)*72+XOFF;
6288
let y = n>1?72+YOFF:YOFF;
@@ -83,23 +109,48 @@
83109
g.drawString(line.trim(),x+36,y+54+lineY*8);
84110
};
85111

112+
let intv;
86113
let drawPage = function(p){
87-
g.reset();
88-
g.clearRect(0,24,175,175);
89-
let O = 88+YOFF/2-12*(Npages/2);
90-
for (let j=0;j<Npages;j++){
91-
let y = O+j*12;
92-
g.setColor(g.theme.fg);
93-
if (j==page) g.fillCircle(XOFF/2,y,4);
94-
else g.drawCircle(XOFF/2,y,4);
114+
if (!isFirstDrawPage) {
115+
g.reset();
116+
g.clearRect(0,24,175,175);
117+
let O = 88+YOFF/2-12*(Npages/2);
118+
for (let j=0;j<Npages;j++){
119+
let y = O+j*12;
120+
g.setColor(g.theme.fg);
121+
if (j==page) g.fillCircle(XOFF/2,y,4);
122+
else g.drawCircle(XOFF/2,y,4);
123+
}
95124
}
96-
for (let i=0;i<4;i++) {
125+
g.flip();
126+
setTimeout(()=>{
127+
let i=0;
128+
drawIcon(p,i,selected==i && !settings.direct);
129+
i++;
130+
intv = setInterval(()=>{
97131
if (!apps[p*4+i]) return i;
98132
drawIcon(p,i,selected==i && !settings.direct);
99-
}
100-
g.flip();
133+
g.flip();
134+
i++
135+
if (i==4) {
136+
clearInterval(intv);
137+
intv = undefined;
138+
}
139+
}, 90)
140+
}, 100);
141+
//for (let i=0;i<4;i++) {
142+
// if (!apps[p*4+i]) return i;
143+
// drawIcon(p,i,selected==i && !settings.direct);
144+
//g.flip();
145+
//}
101146
};
102147

148+
for (let i = initPageAppZeroth; i <= initPageAppLast; i++) { // Initially only load icons for the current page.
149+
if (apps[i].icon)
150+
apps[i].icon = s.read(apps[i].icon); // should just be a link to a memory area
151+
//drawPage(page);
152+
}
153+
103154
let buzzShort = function() {
104155
if (settings.interactionBuzz) Bangle.buzz(20);
105156
};
@@ -109,7 +160,10 @@
109160

110161
Bangle.drawWidgets(); // To immediately update widget field to follow current theme - remove leftovers if previous app set custom theme.
111162
Bangle.loadWidgets();
112-
drawPage(page);
163+
let isFirstDrawPage = true;
164+
//drawPage(page);
165+
//isFirstDrawPage = false;
166+
setTimeout(()=>{drawPage(page); isFirstDrawPage = false; },delayTillFirstIcon);
113167

114168
for (let i = 0; i < apps.length; i++) { // Load the rest of the app icons that were not initially.
115169
if (i >= initPageAppZeroth && i <= initPageAppLast) continue;
@@ -194,6 +248,7 @@
194248
touch : touchListenerDt,
195249
remove : ()=>{
196250
if (timeoutToClock) {clearTimeout(timeoutToClock);}
251+
if (intv) {clearInterval(intv)}
197252
global.dtlaunch.handlePagePersist(page);
198253
}
199254
});

apps/dtlaunch/metadata.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"id": "dtlaunch",
33
"name": "Desktop Launcher",
4-
"version": "0.28",
4+
"version": "0.29",
55
"description": "Desktop style App Launcher with six (four for Bangle 2) apps per page - fast access if you have lots of apps installed.",
66
"screenshots": [{"url":"shot1.png"},{"url":"shot2.png"},{"url":"shot3.png"}],
77
"icon": "icon.png",

0 commit comments

Comments
 (0)