Skip to content

Commit

Permalink
Merge pull request #7435 from Rishab87/repeated-key-presses
Browse files Browse the repository at this point in the history
fixed repeated key presses when a modifier key is held
  • Loading branch information
davepagurek authored Dec 20, 2024
2 parents 69580cf + 2ed3793 commit 4443f7c
Showing 1 changed file with 24 additions and 10 deletions.
34 changes: 24 additions & 10 deletions src/events/keyboard.js
Original file line number Diff line number Diff line change
Expand Up @@ -441,15 +441,25 @@ p5.prototype.keyCode = 0;
* </div>
*/
p5.prototype._onkeydown = function(e) {
if (this._downKeys[e.which]) {
// prevent multiple firings
if (e.repeat) {
// Ignore repeated key events when holding down a key
return;
}

this._setProperty('isKeyPressed', true);
this._setProperty('keyIsPressed', true);
this._setProperty('keyCode', e.which);
this._downKeys[e.which] = true;
this._setProperty('key', e.key || String.fromCharCode(e.which) || e.which);

// Track keys pressed with meta key
if (e.metaKey) {
if (!this._metaKeys) {
this._metaKeys = [];
}
this._metaKeys.push(e.which);
}

const context = this._isGlobal ? window : this;
if (typeof context.keyPressed === 'function' && !e.charCode) {
const executeDefault = context.keyPressed(e);
Expand All @@ -458,6 +468,7 @@ p5.prototype._onkeydown = function(e) {
}
}
};

/**
* A function that's called once when any key is released.
*
Expand Down Expand Up @@ -615,18 +626,21 @@ p5.prototype._onkeydown = function(e) {
* </div>
*/
p5.prototype._onkeyup = function(e) {
this._setProperty('isKeyPressed', false);
this._setProperty('keyIsPressed', false);
this._setProperty('_lastKeyCodePressed', this._keyCode);
this._downKeys[e.which] = false;

if (!this._areDownKeys()) {
this._setProperty('isKeyPressed', false);
this._setProperty('keyIsPressed', false);
if (e.key === 'Meta') { // Meta key codes
// When meta key is released, clear all keys pressed with it
if (this._metaKeys) {
this._metaKeys.forEach(key => {
this._downKeys[key] = false;
});
this._metaKeys = [];
}
}

this._setProperty('_lastKeyCodeTyped', null);

this._setProperty('key', e.key || String.fromCharCode(e.which) || e.which);
this._setProperty('keyCode', e.which);

const context = this._isGlobal ? window : this;
if (typeof context.keyReleased === 'function') {
const executeDefault = context.keyReleased(e);
Expand Down

0 comments on commit 4443f7c

Please sign in to comment.