1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
// Copyright (c) 2013 Google Inc. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(function() {
var MouseLock_LockMouse = function(instance, callback) {
var res = resources.resolve(instance, INSTANCE_RESOURCE);
if (res === undefined) {
return;
}
// TODO why does targeting the enclosing element cause difficulty?
var target = res.element;
var cb_func = glue.getCompletionCallback(callback);
var makeCallback = function(return_code) {
return function(event) {
cb_func(return_code);
return true;
};
};
if('webkitRequestPointerLock' in target) {
// TODO(grosse): Figure out how to handle the callbacks properly
target.addEventListener('webkitpointerlockchange', makeCallback(ppapi.PP_OK));
target.addEventListener('webkitpointerlockerror', makeCallback(ppapi.PP_ERROR_FAILED));
target.webkitRequestPointerLock();
} else {
// Note: This may not work as Firefox currently requires fullscreen before requesting pointer lock
target.addEventListener('mozpointerlockchange', makeCallback(ppapi.PP_OK));
target.addEventListener('mozpointerlockerror', makeCallback(ppapi.PP_ERROR_FAILED));
target.mozRequestPointerLock();
}
};
var MouseLock_UnlockMouse = function(instance) {
throw "MouseLock_UnlockMouse not implemented";
};
registerInterface("PPB_MouseLock;1.0", [
MouseLock_LockMouse,
MouseLock_UnlockMouse,
], function() {
var b = document.body;
return b.webkitRequestPointerLock || b.mozRequestPointerLock;
});
var FullScreen_IsFullscreen = function(instance) {
var res = resources.resolve(instance, INSTANCE_RESOURCE);
if (res === undefined) {
return 0;
}
var element = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;
return element === res.element ? 1 : 0;
};
var FullScreen_SetFullscreen = function(instance, fullscreen) {
var res = resources.resolve(instance, INSTANCE_RESOURCE);
if (res == undefined) {
return 0;
}
var element = res.element;
if (fullscreen) {
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if (element.webkitRequestFullscreen) {
element.webkitRequestFullscreen();
} else if (element.msRequestFullscreen) {
element.msRequestFullscreen();
}
} else {
if (document.cancelFullscreen) {
document.cancelFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
}
return 1;
};
var FullScreen_GetScreenSize = function() {
throw "FullScreen_GetScreenSize not implemented";
};
registerInterface("PPB_Fullscreen;1.0", [
FullScreen_IsFullscreen,
FullScreen_SetFullscreen,
FullScreen_GetScreenSize
], function() {
var b = document.body;
return b.requestFullscreen || b.mozRequestFullScreen || b.webkitRequestFullscreen || b.msRequestFullscreen;
});
})();
|