Mercurial > hg > forks > multipaint-js
comparison mpui.js @ 188:6fba2c255319
More work on the MP.JS launcher.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 23 Aug 2018 16:32:10 +0300 |
parents | 28caa87348d3 |
children | 283b2b657574 |
comparison
equal
deleted
inserted
replaced
187:28caa87348d3 | 188:6fba2c255319 |
---|---|
1 /* | 1 /* |
2 * Multipaint.JS - Javascript launcher | 2 * Multipaint.JS - Javascript launcher |
3 * (C) Copyright 2018 Matti 'ccr' Hämäläinen <ccr@tnsp.org> | 3 * (C) Copyright 2018 Matti 'ccr' Hämäläinen <ccr@tnsp.org> |
4 */ | 4 */ |
5 var mpMachine = 0, mpUIScale, mpForcedWidth, mpForcedHeight; | 5 var mpMachine = 0, mpUIScale, mpUIForcedWidth, mpUIForcedHeight; |
6 var mpURL; | 6 var mpURL; |
7 | 7 |
8 var mpMachines = | 8 var mpMachines = |
9 [ | 9 [ |
10 [ 0, "C64 hires" , true ], | 10 [ 0, "C64 hires" , true ], |
21 [ 21, "C64 FLI multicolor" , false ], | 21 [ 21, "C64 FLI multicolor" , false ], |
22 */ | 22 */ |
23 ]; | 23 ]; |
24 | 24 |
25 | 25 |
26 var mpResolutions = | 26 var mpUIDimensions = |
27 [ | 27 [ |
28 [ -1, -1 ], | 28 [ -1, -1 ], |
29 [ 1200, 980 ], | 29 [ 1200, 800 ], |
30 [ 1600, 1200 ], | 30 [ 1600, 1200 ], |
31 ]; | 31 ]; |
32 | 32 |
33 | |
34 var mpUIScales = | |
35 [ | |
36 2, 3, 1 | |
37 ]; | |
33 | 38 |
34 var mpSources = | 39 var mpSources = |
35 [ | 40 [ |
36 "buffers.pde", | 41 "buffers.pde", |
37 "preview.pde", | 42 "preview.pde", |
90 { | 95 { |
91 stAddEventOb(obname, stGE(obname), evtype, evcallback, evparam); | 96 stAddEventOb(obname, stGE(obname), evtype, evcallback, evparam); |
92 } | 97 } |
93 | 98 |
94 | 99 |
95 function mpShowMachineSelector() | 100 function stGetSelValue(velem, vdef) |
101 { | |
102 if (velem) | |
103 return velem.selectedIndex >= 0 ? velem.options[velem.selectedIndex].value : vdef; | |
104 else | |
105 return vdef; | |
106 } | |
107 | |
108 | |
109 function stCreateSelect(vid, vlist, vcallback) | |
110 { | |
111 var vobj = stCE("select", vid); | |
112 | |
113 for (var n = 0; n < vlist.length; n++) | |
114 { | |
115 var mp = vlist[n]; | |
116 var opt = stCE("option"); | |
117 vcallback(n, opt, mp); | |
118 vobj.appendChild(opt); | |
119 } | |
120 | |
121 return vobj; | |
122 } | |
123 | |
124 | |
125 function mpShowLauncher() | |
96 { | 126 { |
97 var mpCanvas = stGE("mpCanvas"); | 127 var mpCanvas = stGE("mpCanvas"); |
98 mpCanvas.style.display = "none"; | 128 mpCanvas.style.display = "none"; |
99 | 129 |
100 var mpUI = stGE("mpUI"); | 130 var mpUI = stGE("mpUI"); |
107 | 137 |
108 mobj = stCE("p"); | 138 mobj = stCE("p"); |
109 mobj.textContent = "Choose your target machine:"; | 139 mobj.textContent = "Choose your target machine:"; |
110 mdiv.appendChild(mobj); | 140 mdiv.appendChild(mobj); |
111 | 141 |
112 mobj = stCE("select", "machineID"); | 142 |
113 for (var n = 0; n < mpMachines.length; n++) | 143 mdiv.appendChild(stCreateSelect("machineID", mpMachines, |
114 { | 144 function (vn, vopt, val) { vopt.value = val[0]; vopt.textContent = val[1]; })); |
115 var mp = mpMachines[n]; | |
116 var opt = stCE("option"); | |
117 opt.value = mp[0]; | |
118 opt.textContent = mp[1]; | |
119 mobj.appendChild(opt); | |
120 } | |
121 mdiv.appendChild(mobj); | |
122 | 145 |
123 mobj = stCE("button", "selectID"); | 146 mobj = stCE("button", "selectID"); |
124 mobj.textContent = "RUN"; | 147 mobj.textContent = "RUN"; |
125 stAddEventOb(mobj.name, mobj, "click", mpMachineSelected); | 148 stAddEventOb(mobj.name, mobj, "click", mpLauncherDone); |
126 mdiv.appendChild(mobj); | 149 mdiv.appendChild(mobj); |
127 | 150 |
128 | 151 |
129 mdiv = stCE("div", "mresolution"); | 152 mdiv = stCE("div", "mdimensions"); |
130 mpUI.appendChild(mdiv); | 153 mpUI.appendChild(mdiv); |
131 | 154 |
132 mobj = stCE("p"); | 155 mobj = stCE("p"); |
133 mobj.textContent = "Choose optional resolution:"; | 156 mobj.textContent = "Choose optional UI size:"; |
134 mdiv.appendChild(mobj); | 157 mdiv.appendChild(mobj); |
135 | 158 |
136 mobj = stCE("select", "resolutionID"); | 159 mdiv.appendChild(stCreateSelect("dimensionsID", mpUIDimensions, |
137 for (var n = 0; n < mpResolutions.length; n++) | 160 function (vn, vopt, val) { vopt.value = vn; vopt.textContent = (vn == 0) ? "DEFAULT" : val[0] +" x "+ val[1]; })); |
138 { | 161 |
139 var mp = mpResolutions[n]; | 162 mdiv.appendChild(stCreateSelect("scalesID", mpUIScales, |
140 var opt = stCE("option"); | 163 function (vn, vopt, val) { vopt.value = val; vopt.textContent = " x "+ val; })); |
141 opt.value = n; | |
142 if (n == 0) | |
143 opt.textContent = "DEFAULT"; | |
144 else | |
145 opt.textContent = mp[0] +" x " +mp[1]; | |
146 mobj.appendChild(opt); | |
147 } | |
148 mdiv.appendChild(mobj); | |
149 | 164 |
150 | 165 |
151 mobj = stCE("div"); | 166 mobj = stCE("div"); |
152 mobj.innerHTML = | 167 mobj.innerHTML = |
153 "<p><b>Things of note:</b></p>"+ | 168 "<p><b>Things of note:</b></p>"+ |
177 mobj = stCE("hr"); | 192 mobj = stCE("hr"); |
178 mpUI.appendChild(mobj); | 193 mpUI.appendChild(mobj); |
179 } | 194 } |
180 | 195 |
181 | 196 |
182 function mpMachineSelected() | 197 function mpLauncherDone() |
183 { | 198 { |
199 // Get selected values from DOM elements | |
184 var mpUI = stGE("mpUI"); | 200 var mpUI = stGE("mpUI"); |
185 var id = stGE("machineID"); | 201 mpMachine = stGetSelValue(stGE("machineID"), 0); |
186 mpMachine = id.selectedIndex >= 0 ? id.options[id.selectedIndex].value : 0; | 202 |
187 | 203 var index = stGetSelValue(stGE("dimensionsID"), -1); |
188 id = stGE("resolutionID"); | |
189 var index = id.selectedIndex >= 0 ? id.options[id.selectedIndex].value : 0; | |
190 if (index > 0) | 204 if (index > 0) |
191 { | 205 { |
192 mpForcedWidth = mpResolutions[index][0]; | 206 mpUIForcedWidth = mpDimensions[index][0]; |
193 mpForcedHeight = mpResolutions[index][1]; | 207 mpUIForcedHeight = mpDimensions[index][1]; |
194 } | 208 } |
209 else | |
210 mpUIForcedWidth = mpUIForcedHeight = 0; | |
211 | |
212 mpUIScale = stGetSelValue(stGE("scalesID"), -1); | |
195 | 213 |
196 stClearChildren(mpUI); | 214 stClearChildren(mpUI); |
197 | 215 |
216 // Initialize the canvas etc. | |
198 var mpCanvas = stGE("mpCanvas"); | 217 var mpCanvas = stGE("mpCanvas"); |
199 mpCanvas.style.display = "block"; | 218 mpCanvas.style.display = "block"; |
200 | 219 |
201 window.location.href = mpURL +"?"+ mpMachine.toString() +":"+ mpForcedWidth +":"+ mpForcedHeight; | 220 window.location.href = mpURL +"?"+ mpMachine.toString() +":"+ mpUIForcedWidth +":"+ mpUIForcedHeight +":"+ mpUIScale; |
202 | 221 |
203 mpRunSketch(mpCanvas); | 222 mpRunSketch(mpCanvas); |
204 } | 223 } |
205 | 224 |
206 | 225 |
208 { | 227 { |
209 stGE("mpNote").innerHTML = | 228 stGE("mpNote").innerHTML = |
210 "<a href=\"http://multipaint.kameli.net/\">Multipaint</a> (C) 2016-2018 <b>Tero 'Dr. TerrorZ' Heikkinen</b>, "+ | 229 "<a href=\"http://multipaint.kameli.net/\">Multipaint</a> (C) 2016-2018 <b>Tero 'Dr. TerrorZ' Heikkinen</b>, "+ |
211 "ProcessingJS port and modifications by <b>Matti 'ccr' Hämäläinen</b> (2018)"; | 230 "ProcessingJS port and modifications by <b>Matti 'ccr' Hämäläinen</b> (2018)"; |
212 | 231 |
232 // Check for URL parameters | |
213 var slink = window.location.href; | 233 var slink = window.location.href; |
214 var spos, found = false; | 234 var spos, found = false; |
215 if ((spos = slink.indexOf("?")) >= 0) | 235 if ((spos = slink.indexOf("?")) >= 0) |
216 { | 236 { |
217 var sargs = unescape(slink.substr(spos + 1)).split(":"); | 237 var sargs = unescape(slink.substr(spos + 1)).split(":"); |
218 mpURL = slink.substr(0, spos); | 238 mpURL = slink.substr(0, spos); |
219 | 239 mpMachine = parseInt(sargs[0]); |
220 var tmp = parseInt(sargs[0]); | 240 found = true; |
221 for (var n = 0; n < mpMachines.length; n++) | |
222 { | |
223 var mp = mpMachines[n]; | |
224 if (mp[0] == tmp) | |
225 { | |
226 mpMachine = mp[0]; | |
227 found = true; | |
228 break; | |
229 } | |
230 } | |
231 | 241 |
232 if (sargs.length >= 3) | 242 if (sargs.length >= 3) |
233 { | 243 { |
234 mpForcedWidth = parseInt(sargs[1]); | 244 mpUIForcedWidth = parseInt(sargs[1]); |
235 mpForcedHeight = parseInt(sargs[2]); | 245 mpUIForcedHeight = parseInt(sargs[2]); |
236 } | 246 } |
237 if (sargs.length >= 4) | 247 if (sargs.length >= 4) |
238 mpUIScale = parseInt(sargs[3]); | 248 mpUIScale = parseInt(sargs[3]); |
239 } | 249 } |
240 else | 250 else |
241 mpURL = slink; | 251 mpURL = slink; |
242 | 252 |
253 // Either run sketch or show the launcher | |
243 if (found) | 254 if (found) |
244 { | 255 { |
245 mpRunSketch(stGE("mpCanvas")); | 256 mpRunSketch(stGE("mpCanvas")); |
246 } | 257 } |
247 else | 258 else |
248 { | 259 { |
249 stAddEventOb("DOM", document, "DOMContentLoaded", mpShowMachineSelector); | 260 stAddEventOb("DOM", document, "DOMContentLoaded", mpShowLauncher); |
250 } | 261 } |
251 } | 262 } |