pianoroll optimizations

- fix flickering due to global alpha mutation
- change default inactive color
- add smear option
- add playheadColor option
This commit is contained in:
Felix Roos 2022-07-28 22:27:54 +02:00
parent 1ddf968750
commit f38718004f

View file

@ -22,10 +22,14 @@ Pattern.prototype.pianoroll = function ({
flipTime = 0, flipTime = 0,
flipValues = 0, flipValues = 0,
hideNegative = false, hideNegative = false,
inactive = '#C9E597', // inactive = '#C9E597',
// inactive = '#FFCA28',
inactive = '#7491D2',
active = '#FFCA28', active = '#FFCA28',
// background = '#2A3236', // background = '#2A3236',
background = 'transparent', background = 'transparent',
smear = 0,
playheadColor = 'white',
minMidi = 10, minMidi = 10,
maxMidi = 90, maxMidi = 90,
autorange = 0, autorange = 0,
@ -61,8 +65,11 @@ Pattern.prototype.pianoroll = function ({
this.draw( this.draw(
(ctx, events, t) => { (ctx, events, t) => {
ctx.fillStyle = background; ctx.fillStyle = background;
ctx.clearRect(0, 0, w, h); ctx.globalAlpha = 1; // reset!
ctx.fillRect(0, 0, w, h); if (!smear) {
ctx.clearRect(0, 0, w, h);
ctx.fillRect(0, 0, w, h);
}
const inFrame = (event) => const inFrame = (event) =>
(!hideNegative || event.whole.begin >= 0) && event.whole.begin <= t + to && event.whole.end >= t + from; (!hideNegative || event.whole.begin >= 0) && event.whole.begin <= t + to && event.whole.end >= t + from;
events.filter(inFrame).forEach((event) => { events.filter(inFrame).forEach((event) => {
@ -97,9 +104,10 @@ Pattern.prototype.pianoroll = function ({
} }
isActive ? ctx.strokeRect(...coords) : ctx.fillRect(...coords); isActive ? ctx.strokeRect(...coords) : ctx.fillRect(...coords);
}); });
ctx.globalAlpha = 1; // reset!
const playheadPosition = scale(-from / timeExtent, ...timeRange); const playheadPosition = scale(-from / timeExtent, ...timeRange);
// draw playhead // draw playhead
ctx.strokeStyle = 'white'; ctx.strokeStyle = playheadColor;
ctx.beginPath(); ctx.beginPath();
if (vertical) { if (vertical) {
ctx.moveTo(0, playheadPosition); ctx.moveTo(0, playheadPosition);