Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #37924 > unrolled thread
| Started by | Jonas Thörnvall <jonas.thornvall@gmail.com> |
|---|---|
| First post | 2019-12-05 09:09 -0800 |
| Last post | 2019-12-05 23:22 -0800 |
| Articles | 7 — 2 participants |
Back to article view | Back to comp.lang.javascript
Remove canvas "Array Element note" as its fully drawnout beyond/outside canvas boundary? Jonas Thörnvall <jonas.thornvall@gmail.com> - 2019-12-05 09:09 -0800
Re: Remove canvas "Array Element note" as its fully drawnout beyond/outside canvas boundary? Jonas Thörnvall <jonas.thornvall@gmail.com> - 2019-12-05 13:31 -0800
Re: Remove canvas "Array Element note" as its fully drawnout beyond/outside canvas boundary? Jonas Thörnvall <jonas.thornvall@gmail.com> - 2019-12-05 13:45 -0800
Re: Remove canvas "Array Element note" as its fully drawnout beyond/outside canvas boundary? luserdroog <luser.droog@gmail.com> - 2019-12-05 18:56 -0800
Re: Remove canvas "Array Element note" as its fully drawnout beyond/outside canvas boundary? Jonas Thörnvall <jonas.thornvall@gmail.com> - 2019-12-05 19:39 -0800
Re: Remove canvas "Array Element note" as its fully drawnout beyond/outside canvas boundary? luserdroog <luser.droog@gmail.com> - 2019-12-05 19:59 -0800
Re: Remove canvas "Array Element note" as its fully drawnout beyond/outside canvas boundary? Jonas Thörnvall <jonas.thornvall@gmail.com> - 2019-12-05 23:22 -0800
| From | Jonas Thörnvall <jonas.thornvall@gmail.com> |
|---|---|
| Date | 2019-12-05 09:09 -0800 |
| Subject | Remove canvas "Array Element note" as its fully drawnout beyond/outside canvas boundary? |
| Message-ID | <7b6d7cb9-be87-41fc-8020-5988e9c6fac3@googlegroups.com> |
I realise i "probably?" draw element that are outside canvas, and should use splice to remove those. But i am doing the "printout" in one swoop and am unsure howto splice it?
BACKOFFSET.splice(midiEv,1)
AND
track[rectrack].midiMess.splice(midiEv,1)
Should take care of removing a element that is found to be drawn outside canvas.
But then where to put the check conditions and what is it, probably should be just before drawn out?
if (6+scrollBarPos-BACKOFFSET[midiEv]>"canvasWidth")???
Well i try and come back on subject, another question how do one check it works, the elements is drawn outside canvas?
Probably just check array length but there is new incoming elements during playup so it is hard to see what is going on?
function pianoSCROLL(){
console.log("pianoSCROLL");
console.log("TRACK="+rectrack+" midiMess length="+track[rectrack].midiMess.length);
nbrOfEV = track[rectrack].midiMess.length;
var x=0;
while (x<nbrOfEV){
midiEv=x;
//INSIDE KEY PRESSED
if(track[rectrack].midiMess[midiEv].data0==NOTE_ON && keyreleased[midiEv]==false){
ctm.fillStyle = pcolor[track[rectrack].midiMess[midiEv].data1];
ctm.fillRect(56,(PistartX+keyHeight*88)-(keyHeight*(track[rectrack].midiMess[midiEv].data1-8)), rightSide[midiEv],keyHeight);
//When ***A NEW*** key pressed a startvoint relative the scrollbar created ***FRONTOFFSET***
if(FRONTOFFSET[midiEv]==0) {FRONTOFFSET[midiEv]=scrollBarPos;}
rightSide[midiEv]=scrollBarPos-FRONTOFFSET[midiEv];
}
//INSIDE KEY RELEASED
else if(track[rectrack].midiMess[midiEv].data0==NOTE_OFF && keyreleased[midiEv]==false){
keyreleased[midiEv]=true;
for (var q=midiEv-1;q>=0;q--){
if(track[rectrack].midiMess[q].data1==track[rectrack].midiMess[midiEv].data1) {
barLength[q]=rightSide[q]-50;
BACKOFFSET[q]=FRONTOFFSET[q]+barLength[q];
keyreleased[q]=true;
break;
}
}
}
//INSIDE MOVE BAR
else if(track[rectrack].midiMess[midiEv].data0==NOTE_ON && keyreleased[midiEv]==true){
z=midiEv+1;
while(z<nbrOfEV){
if(track[rectrack].midiMess[z].data1==track[rectrack].midiMess[midiEv].data1){
ctm.fillStyle = "#000a4d";
ctm.fillRect(scrollBarPos-BACKOFFSET[midiEv],(PistartX+keyHeight*88)-(keyHeight*(track[rectrack].midiMess[midiEv].data1-8))-1,barLength[midiEv]+50 ,keyHeight+2);
ctm.fillStyle = pcolor[track[rectrack].midiMess[midiEv].data1];
ctm.fillRect(6+scrollBarPos-BACKOFFSET[midiEv],(PistartX+keyHeight*88)-(keyHeight*(track[rectrack].midiMess[midiEv].data1-8)), barLength[midiEv]+50,keyHeight);
break;
}
z++;
}
}
x++;
}
}
[toc] | [next] | [standalone]
| From | Jonas Thörnvall <jonas.thornvall@gmail.com> |
|---|---|
| Date | 2019-12-05 13:31 -0800 |
| Message-ID | <a827656d-032a-48d1-98a0-ff5b2e5a4707@googlegroups.com> |
| In reply to | #37924 |
Den torsdag 5 december 2019 kl. 18:09:41 UTC+1 skrev Jonas Thörnvall:
> I realise i "probably?" draw element that are outside canvas, and should use splice to remove those. But i am doing the "printout" in one swoop and am unsure howto splice it?
>
> BACKOFFSET.splice(midiEv,1)
>
> AND
>
> track[rectrack].midiMess.splice(midiEv,1)
>
> Should take care of removing a element that is found to be drawn outside canvas.
>
> But then where to put the check conditions and what is it, probably should be just before drawn out?
>
> if (6+scrollBarPos-BACKOFFSET[midiEv]>"canvasWidth")???
>
> Well i try and come back on subject, another question how do one check it works, the elements is drawn outside canvas?
>
> Probably just check array length but there is new incoming elements during playup so it is hard to see what is going on?
I think it could be that backoffset is just a buffered copy of an on note "not the actual note on", and i am not that keen to backtrack which actual note on it was.
But if someone knows the answer howto i am all ears.
I thought i was past this function by now LoL
>
> function pianoSCROLL(){
> console.log("pianoSCROLL");
> console.log("TRACK="+rectrack+" midiMess length="+track[rectrack].midiMess.length);
> nbrOfEV = track[rectrack].midiMess.length;
>
> var x=0;
> while (x<nbrOfEV){
> midiEv=x;
> //INSIDE KEY PRESSED
> if(track[rectrack].midiMess[midiEv].data0==NOTE_ON && keyreleased[midiEv]==false){
> ctm.fillStyle = pcolor[track[rectrack].midiMess[midiEv].data1];
> ctm.fillRect(56,(PistartX+keyHeight*88)-(keyHeight*(track[rectrack].midiMess[midiEv].data1-8)), rightSide[midiEv],keyHeight);
> //When ***A NEW*** key pressed a startvoint relative the scrollbar created ***FRONTOFFSET***
> if(FRONTOFFSET[midiEv]==0) {FRONTOFFSET[midiEv]=scrollBarPos;}
> rightSide[midiEv]=scrollBarPos-FRONTOFFSET[midiEv];
> }
> //INSIDE KEY RELEASED
> else if(track[rectrack].midiMess[midiEv].data0==NOTE_OFF && keyreleased[midiEv]==false){
> keyreleased[midiEv]=true;
> for (var q=midiEv-1;q>=0;q--){
> if(track[rectrack].midiMess[q].data1==track[rectrack].midiMess[midiEv].data1) {
> barLength[q]=rightSide[q]-50;
> BACKOFFSET[q]=FRONTOFFSET[q]+barLength[q];
> keyreleased[q]=true;
> break;
> }
> }
> }
> //INSIDE MOVE BAR
> else if(track[rectrack].midiMess[midiEv].data0==NOTE_ON && keyreleased[midiEv]==true){
> z=midiEv+1;
> while(z<nbrOfEV){
> if(track[rectrack].midiMess[z].data1==track[rectrack].midiMess[midiEv].data1){
> ctm.fillStyle = "#000a4d";
> ctm.fillRect(scrollBarPos-BACKOFFSET[midiEv],(PistartX+keyHeight*88)-(keyHeight*(track[rectrack].midiMess[midiEv].data1-8))-1,barLength[midiEv]+50 ,keyHeight+2);
> ctm.fillStyle = pcolor[track[rectrack].midiMess[midiEv].data1];
> ctm.fillRect(6+scrollBarPos-BACKOFFSET[midiEv],(PistartX+keyHeight*88)-(keyHeight*(track[rectrack].midiMess[midiEv].data1-8)), barLength[midiEv]+50,keyHeight);
> break;
> }
> z++;
> }
> }
> x++;
> }
> }
Well for some reason they protest when removed from arrays...
But i managed to do the second best, i do now drawthem out.
function pianoSCROLL(){
console.log("pianoSCROLL");
console.log("TRACK="+rectrack+" midiMess length="+track[rectrack].midiMess.length);
nbrOfEV = track[rectrack].midiMess.length;
var x=0;
while (x<nbrOfEV){
midiEv=x;
//INSIDE KEY PRESSED
if(track[rectrack].midiMess[midiEv].data0==NOTE_ON && keyreleased[midiEv]==false){
ctm.fillStyle = pcolor[track[rectrack].midiMess[midiEv].data1];
ctm.fillRect(56,(PistartX+keyHeight*88)-(keyHeight*(track[rectrack].midiMess[midiEv].data1-8)), rightSide[midiEv],keyHeight);
//When ***A NEW*** key pressed a startvoint relative the scrollbar created ***FRONTOFFSET***
if(FRONTOFFSET[midiEv]==0) {FRONTOFFSET[midiEv]=scrollBarPos;}
rightSide[midiEv]=scrollBarPos-FRONTOFFSET[midiEv];
}
//INSIDE KEY RELEASED
else if(track[rectrack].midiMess[midiEv].data0==NOTE_OFF && keyreleased[midiEv]==false){
keyreleased[midiEv]=true;
for (var q=midiEv-1;q>=0;q--){
if(track[rectrack].midiMess[q].data1==track[rectrack].midiMess[midiEv].data1) {
barLength[q]=rightSide[q]-50;
BACKOFFSET[q]=FRONTOFFSET[q]+barLength[q];
keyreleased[q]=true;
break;
}
}
}
//INSIDE MOVE BAR
else if(track[rectrack].midiMess[midiEv].data0==NOTE_ON && keyreleased[midiEv]==true){
z=midiEv+1;
while(z<nbrOfEV){
if(track[rectrack].midiMess[z].data1==track[rectrack].midiMess[midiEv].data1){
//Removal before next drawout
if (6+scrollBarPos-BACKOFFSET[midiEv]>Mwidth+15){
//BACKOFFSET.splice(midiEv,1);
//track[rectrack].midiMess.splice(midiEv,1);
} else {
ctm.fillStyle = "#000a4d";
ctm.fillRect(scrollBarPos-BACKOFFSET[midiEv],(PistartX+keyHeight*88)-(keyHeight*(track[rectrack].midiMess[midiEv].data1-8))-1,barLength[midiEv]+50 ,keyHeight+2);
ctm.fillStyle = pcolor[track[rectrack].midiMess[midiEv].data1];
ctm.fillRect(6+scrollBarPos-BACKOFFSET[midiEv],(PistartX+keyHeight*88)-(keyHeight*(track[rectrack].midiMess[midiEv].data1-8)), barLength[midiEv]+50,keyHeight);
break;
}
}
z++;
}
}
x++;
}
}
[toc] | [prev] | [next] | [standalone]
| From | Jonas Thörnvall <jonas.thornvall@gmail.com> |
|---|---|
| Date | 2019-12-05 13:45 -0800 |
| Message-ID | <e69b7140-b8dd-4099-b225-f752ea737752@googlegroups.com> |
| In reply to | #37924 |
Den torsdag 5 december 2019 kl. 18:09:41 UTC+1 skrev Jonas Thörnvall:
> I realise i "probably?" draw element that are outside canvas, and should use splice to remove those. But i am doing the "printout" in one swoop and am unsure howto splice it?
>
> BACKOFFSET.splice(midiEv,1)
>
> AND
>
> track[rectrack].midiMess.splice(midiEv,1)
>
> Should take care of removing a element that is found to be drawn outside canvas.
>
> But then where to put the check conditions and what is it, probably should be just before drawn out?
>
> if (6+scrollBarPos-BACKOFFSET[midiEv]>"canvasWidth")???
>
> Well i try and come back on subject, another question how do one check it works, the elements is drawn outside canvas?
>
> Probably just check array length but there is new incoming elements during playup so it is hard to see what is going on?
>
> function pianoSCROLL(){
> console.log("pianoSCROLL");
> console.log("TRACK="+rectrack+" midiMess length="+track[rectrack].midiMess.length);
> nbrOfEV = track[rectrack].midiMess.length;
>
> var x=0;
> while (x<nbrOfEV){
> midiEv=x;
> //INSIDE KEY PRESSED
> if(track[rectrack].midiMess[midiEv].data0==NOTE_ON && keyreleased[midiEv]==false){
> ctm.fillStyle = pcolor[track[rectrack].midiMess[midiEv].data1];
> ctm.fillRect(56,(PistartX+keyHeight*88)-(keyHeight*(track[rectrack].midiMess[midiEv].data1-8)), rightSide[midiEv],keyHeight);
> //When ***A NEW*** key pressed a startvoint relative the scrollbar created ***FRONTOFFSET***
> if(FRONTOFFSET[midiEv]==0) {FRONTOFFSET[midiEv]=scrollBarPos;}
> rightSide[midiEv]=scrollBarPos-FRONTOFFSET[midiEv];
> }
> //INSIDE KEY RELEASED
> else if(track[rectrack].midiMess[midiEv].data0==NOTE_OFF && keyreleased[midiEv]==false){
> keyreleased[midiEv]=true;
> for (var q=midiEv-1;q>=0;q--){
> if(track[rectrack].midiMess[q].data1==track[rectrack].midiMess[midiEv].data1) {
> barLength[q]=rightSide[q]-50;
> BACKOFFSET[q]=FRONTOFFSET[q]+barLength[q];
> keyreleased[q]=true;
> break;
> }
> }
> }
> //INSIDE MOVE BAR
> else if(track[rectrack].midiMess[midiEv].data0==NOTE_ON && keyreleased[midiEv]==true){
> z=midiEv+1;
> while(z<nbrOfEV){
> if(track[rectrack].midiMess[z].data1==track[rectrack].midiMess[midiEv].data1){
> ctm.fillStyle = "#000a4d";
> ctm.fillRect(scrollBarPos-BACKOFFSET[midiEv],(PistartX+keyHeight*88)-(keyHeight*(track[rectrack].midiMess[midiEv].data1-8))-1,barLength[midiEv]+50 ,keyHeight+2);
> ctm.fillStyle = pcolor[track[rectrack].midiMess[midiEv].data1];
> ctm.fillRect(6+scrollBarPos-BACKOFFSET[midiEv],(PistartX+keyHeight*88)-(keyHeight*(track[rectrack].midiMess[midiEv].data1-8)), barLength[midiEv]+50,keyHeight);
> break;
> }
> z++;
> }
> }
> x++;
> }
> }
Do object that is drawn outside the canvas still take up memory space in javascript, "will they be drawn to memory?"
[toc] | [prev] | [next] | [standalone]
| From | luserdroog <luser.droog@gmail.com> |
|---|---|
| Date | 2019-12-05 18:56 -0800 |
| Message-ID | <0124154a-437b-450f-ba9d-2f2e2887b7a2@googlegroups.com> |
| In reply to | #37924 |
On Thursday, December 5, 2019 at 11:09:41 AM UTC-6, Jonas Thörnvall wrote: > I realise i "probably?" draw element that are outside canvas, and should use splice to remove those. But i am doing the "printout" in one swoop and am unsure howto splice it? > This feels like a premature optimization. The canvas uses a clipping path following the tradition of the Adobe Image Model which was smuggled out of Xerox in 1981. It's very likely to be more efficient than anything you'll come up with unless you invest a ton of work into it. Just draw everything and keep adding useful features. When you get everything working, then start looking for hot spots until it's fast enough. Good candidates for hot spots are inner loops. Make it work. Make it right. Make it fast.... In that order.
[toc] | [prev] | [next] | [standalone]
| From | Jonas Thörnvall <jonas.thornvall@gmail.com> |
|---|---|
| Date | 2019-12-05 19:39 -0800 |
| Message-ID | <48234b8a-c716-4046-bedf-4b457aa2f797@googlegroups.com> |
| In reply to | #37928 |
Den fredag 6 december 2019 kl. 03:56:54 UTC+1 skrev luserdroog: > On Thursday, December 5, 2019 at 11:09:41 AM UTC-6, Jonas Thörnvall wrote: > > I realise i "probably?" draw element that are outside canvas, and should use splice to remove those. But i am doing the "printout" in one swoop and am unsure howto splice it? > > > > This feels like a premature optimization. The canvas uses a clipping path > following the tradition of the Adobe Image Model which was smuggled out of > Xerox in 1981. It's very likely to be more efficient than anything you'll > come up with unless you invest a ton of work into it. Just draw everything > and keep adding useful features. > > When you get everything working, then start looking for hot spots until > it's fast enough. Good candidates for hot spots are inner loops. > > Make it work. > Make it right. > Make it fast.... In that order. But if it is a long song with over 10 000 notes the sequenser will start to lag drawing them all out. But i already removed the actual drawing to things that are outside canvas, i just was thinking to also remove the notes from array. Now maybe it is a marginal time to scroll thru an array of some 10 000 notes everh 24 th of a second?
[toc] | [prev] | [next] | [standalone]
| From | luserdroog <luser.droog@gmail.com> |
|---|---|
| Date | 2019-12-05 19:59 -0800 |
| Message-ID | <1519fa2c-ab20-4ad4-bfb8-4d64413b3606@googlegroups.com> |
| In reply to | #37929 |
On Thursday, December 5, 2019 at 9:39:40 PM UTC-6, Jonas Thörnvall wrote: > Den fredag 6 december 2019 kl. 03:56:54 UTC+1 skrev luserdroog: > > On Thursday, December 5, 2019 at 11:09:41 AM UTC-6, Jonas Thörnvall wrote: > > > I realise i "probably?" draw element that are outside canvas, and should use splice to remove those. But i am doing the "printout" in one swoop and am unsure howto splice it? > > > > > > > This feels like a premature optimization. The canvas uses a clipping path > > following the tradition of the Adobe Image Model which was smuggled out of > > Xerox in 1981. It's very likely to be more efficient than anything you'll > > come up with unless you invest a ton of work into it. Just draw everything > > and keep adding useful features. > > > > When you get everything working, then start looking for hot spots until > > it's fast enough. Good candidates for hot spots are inner loops. > > > > Make it work. > > Make it right. > > Make it fast.... In that order. > > But if it is a long song with over 10 000 notes the sequenser will start to lag drawing them all out. But i already removed the actual drawing to things that are outside canvas, i just was thinking to also remove the notes from array. Now maybe it is a marginal time to scroll thru an array of some 10 000 notes everh 24 th of a second? If the notes are already in time sequence, then I would just bail out of the loop when it gets to the end of the viewable portion. Removing elements from the array seems like extra work (which takes more time) especially because you'd have to add the notes back again if the view moves.
[toc] | [prev] | [next] | [standalone]
| From | Jonas Thörnvall <jonas.thornvall@gmail.com> |
|---|---|
| Date | 2019-12-05 23:22 -0800 |
| Message-ID | <563b4452-35d9-4f7f-a049-5b04c33df669@googlegroups.com> |
| In reply to | #37930 |
Den fredag 6 december 2019 kl. 04:59:51 UTC+1 skrev luserdroog:
> On Thursday, December 5, 2019 at 9:39:40 PM UTC-6, Jonas Thörnvall wrote:
> > Den fredag 6 december 2019 kl. 03:56:54 UTC+1 skrev luserdroog:
> > > On Thursday, December 5, 2019 at 11:09:41 AM UTC-6, Jonas Thörnvall wrote:
> > > > I realise i "probably?" draw element that are outside canvas, and should use splice to remove those. But i am doing the "printout" in one swoop and am unsure howto splice it?
> > > >
> > >
> > > This feels like a premature optimization. The canvas uses a clipping path
> > > following the tradition of the Adobe Image Model which was smuggled out of
> > > Xerox in 1981. It's very likely to be more efficient than anything you'll
> > > come up with unless you invest a ton of work into it. Just draw everything
> > > and keep adding useful features.
> > >
> > > When you get everything working, then start looking for hot spots until
> > > it's fast enough. Good candidates for hot spots are inner loops.
> > >
> > > Make it work.
> > > Make it right.
> > > Make it fast.... In that order.
> >
> > But if it is a long song with over 10 000 notes the sequenser will start to lag drawing them all out. But i already removed the actual drawing to things that are outside canvas, i just was thinking to also remove the notes from array. Now maybe it is a marginal time to scroll thru an array of some 10 000 notes everh 24 th of a second?
>
> If the notes are already in time sequence, then I would just bail out
> of the loop when it gets to the end of the viewable portion. Removing
> elements from the array seems like extra work (which takes more time)
> especially because you'd have to add the notes back again if the view
> moves.
I think set z=nbrOfEV will do it. It is hard to say when you can't see any difference.
function pianoSCROLL(){
console.log("pianoSCROLL");
console.log("TRACK="+rectrack+" midiMess length="+track[rectrack].midiMess.length);
nbrOfEV = track[rectrack].midiMess.length;
var x=0;
while (x<nbrOfEV){
midiEv=x;
//INSIDE KEY PRESSED
if(track[rectrack].midiMess[midiEv].data0==NOTE_ON && keyreleased[midiEv]==false){
ctm.fillStyle = pcolor[track[rectrack].midiMess[midiEv].data1];
ctm.fillRect(56,(PistartX+keyHeight*88)-(keyHeight*(track[rectrack].midiMess[midiEv].data1-8)), rightSide[midiEv],keyHeight);
//When ***A NEW*** key pressed a startvoint relative the scrollbar created ***FRONTOFFSET***
if(FRONTOFFSET[midiEv]==0) {FRONTOFFSET[midiEv]=scrollBarPos;}
rightSide[midiEv]=scrollBarPos-FRONTOFFSET[midiEv];
}
//INSIDE KEY RELEASED
else if(track[rectrack].midiMess[midiEv].data0==NOTE_OFF && keyreleased[midiEv]==false){
keyreleased[midiEv]=true;
for (var q=midiEv-1;q>=0;q--){
if(track[rectrack].midiMess[q].data1==track[rectrack].midiMess[midiEv].data1) {
barLength[q]=rightSide[q]-50;
BACKOFFSET[q]=FRONTOFFSET[q]+barLength[q];
keyreleased[q]=true;
break;
}
}
}
//INSIDE MOVE BAR
else if(track[rectrack].midiMess[midiEv].data0==NOTE_ON && keyreleased[midiEv]==true){
z=midiEv+1;
while(z<nbrOfEV){
if(track[rectrack].midiMess[z].data1==track[rectrack].midiMess[midiEv].data1){
//This file was changed here the 6 december 2019
//Removal before next drawout
if (6+scrollBarPos-BACKOFFSET[midiEv]>Mwidth+15){
z=nbrOfEV;
//BACKOFFSET.splice(midiEv,1);
//track[rectrack].midiMess.splice(midiEv,1);
} else {
ctm.fillStyle = "#000a4d";
ctm.fillRect(scrollBarPos-BACKOFFSET[midiEv],(PistartX+keyHeight*88)-(keyHeight*(track[rectrack].midiMess[midiEv].data1-8))-1,barLength[midiEv]+50 ,keyHeight+2);
ctm.fillStyle = pcolor[track[rectrack].midiMess[midiEv].data1];
ctm.fillRect(6+scrollBarPos-BACKOFFSET[midiEv],(PistartX+keyHeight*88)-(keyHeight*(track[rectrack].midiMess[midiEv].data1-8)), barLength[midiEv]+50,keyHeight);
break;
}
}
z++;
}
}
x++;
}
}
[toc] | [prev] | [standalone]
Back to top | Article view | comp.lang.javascript
csiph-web