forked from emscripten-core/emscripten
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_html5_emscripten_exit_fullscreen.c
68 lines (50 loc) · 2.05 KB
/
test_html5_emscripten_exit_fullscreen.c
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
#include <assert.h>
#include <stdio.h>
#include <emscripten/emscripten.h>
#include <emscripten/html5.h>
bool is_fs = false;
bool fullscreen_change(int eventType, const EmscriptenFullscreenChangeEvent *fullscreenChangeEvent, void *userData) {
is_fs = fullscreenChangeEvent->isFullscreen;
printf("%s fullscreen\n", is_fs ? "entered" : "left");
return 0;
}
static int resizes = 0;
bool canvas_resize(int eventType, const void *reserved, void *userData) {
double css_w, css_h;
emscripten_get_element_css_size("#canvas", &css_w, &css_h);
printf("resized to %fx%f\n", css_w, css_h);
resizes++;
if (resizes == 2) {
REPORT_RESULT(css_w == 800 && css_h == 600); // Back to the size before fullscreen
}
return 0;
}
bool key_down(int eventType, const EmscriptenKeyboardEvent *keyEvent, void *userData) {
if (keyEvent->keyCode == 0x46/*f*/) {
if (is_fs) {
emscripten_exit_fullscreen();
} else {
EmscriptenFullscreenStrategy strategy;
strategy.scaleMode = EMSCRIPTEN_FULLSCREEN_SCALE_STRETCH;
strategy.canvasResolutionScaleMode = EMSCRIPTEN_FULLSCREEN_CANVAS_SCALE_STDDEF;
strategy.filteringMode = EMSCRIPTEN_FULLSCREEN_FILTERING_DEFAULT;
strategy.canvasResizedCallback = canvas_resize;
strategy.canvasResizedCallbackUserData = NULL;
emscripten_request_fullscreen_strategy("#canvas", 1, &strategy);
}
}
return 1;
}
void loop() {}
int main(int argc, char** argv) {
#ifdef EXIT_WITH_F
puts("Click the canvas, then enter fullscreen using 'f', then exit by pressing 'f' again.");
#else
puts("Click the canvas, then enter fullscreen using 'f', then exit by pressing the escape key.");
#endif
emscripten_set_canvas_element_size("#canvas", 800, 600);
emscripten_set_fullscreenchange_callback(EMSCRIPTEN_EVENT_TARGET_DOCUMENT, NULL, 0, fullscreen_change);
emscripten_set_keydown_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, NULL, 0, key_down);
emscripten_set_main_loop(loop, 0, 1);
return 0;
}