Initial commit: ACE-Step UI - Open source music generation interface
This commit is contained in:
Executable
+89
@@ -0,0 +1,89 @@
|
||||
(function( w, d, PKAE ) {
|
||||
'use strict';
|
||||
|
||||
function KeyHandler () {
|
||||
var q = this;
|
||||
|
||||
q.keyMap = {}; // holds a map of all the active keys
|
||||
q.callbacks = {}; // callbacks for when a key combintation becomes active
|
||||
q.singleCallbacks = {}; // callbacks to the 'keypress' event - not required
|
||||
|
||||
q.addCallback = function (callback_name, callback_function, keys) {
|
||||
q.callbacks[ callback_name ] = {
|
||||
keys : keys,
|
||||
callback : callback_function
|
||||
};
|
||||
};
|
||||
q.addSingleCallback = function (callback_name, callback_function, key) {
|
||||
q.singleCallbacks[ callback_name ] = {
|
||||
key : key,
|
||||
callback : callback_function
|
||||
};
|
||||
};
|
||||
q.removeCallback = function ( callback_name ) {
|
||||
q.callbacks[ callback_name ] = null;
|
||||
};
|
||||
|
||||
d.addEventListener ('keydown', function ( e ) {
|
||||
var keyCode = e.keyCode;
|
||||
|
||||
q.keyDown (keyCode, e);
|
||||
});
|
||||
|
||||
q.keyDown = function (keyCode, e ) {
|
||||
q.keyMap[keyCode] = 1;
|
||||
|
||||
for (var key in q.callbacks) {
|
||||
var group = q.callbacks[key];
|
||||
if (!group) continue;
|
||||
|
||||
var l = group.keys.length;
|
||||
var all_ok = true;
|
||||
while (l-- > 0) {
|
||||
if (!q.keyMap[group.keys[l]])
|
||||
{
|
||||
all_ok = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
all_ok && group.callback && group.callback ( keyCode, q.keyMap, e );
|
||||
}
|
||||
};
|
||||
|
||||
q.keyUp = function ( keyCode ) {
|
||||
q.keyMap[keyCode] = 0;
|
||||
};
|
||||
|
||||
q.keyPress = function ( keyCode, e ) {
|
||||
for (var key in q.singleCallbacks) {
|
||||
var group = q.singleCallbacks[key];
|
||||
if (!group) continue;
|
||||
|
||||
if (group.key === keyCode)
|
||||
group.callback && group.callback ( e );
|
||||
}
|
||||
};
|
||||
|
||||
d.addEventListener ('keyup', function ( e ) {
|
||||
var keyCode = e.keyCode;
|
||||
q.keyUp (keyCode);
|
||||
});
|
||||
|
||||
d.addEventListener ('keypress', function ( e ) {
|
||||
var keyCode = e.keyCode;
|
||||
|
||||
q.keyPress (keyCode, e);
|
||||
});
|
||||
|
||||
w.addEventListener ('blur', function ( e ) {
|
||||
q.keyMap = {};
|
||||
}, false);
|
||||
d.addEventListener ('contextmenu', function( e ) {
|
||||
e.preventDefault();
|
||||
}, false);
|
||||
};
|
||||
|
||||
PKAE._deps.keyhandler = KeyHandler;
|
||||
|
||||
})( window, document, PKAudioEditor );
|
||||
Reference in New Issue
Block a user