89 lines
2.1 KiB
JavaScript
Executable File
89 lines
2.1 KiB
JavaScript
Executable File
(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 ); |