File: test_html5_emscripten_exit_fullscreen.c

package info (click to toggle)
emscripten 3.1.6~dfsg-5
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 114,112 kB
  • sloc: ansic: 583,052; cpp: 391,943; javascript: 79,361; python: 54,180; sh: 49,997; pascal: 4,658; makefile: 3,426; asm: 2,191; lisp: 1,869; ruby: 488; cs: 142
file content (71 lines) | stat: -rw-r--r-- 2,104 bytes parent folder | download | duplicates (2)
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
#include <assert.h>
#include <stdio.h>

#include <emscripten/emscripten.h>
#include <emscripten/html5.h>

EM_BOOL is_fs = EM_FALSE;

EM_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;

EM_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;
}

EM_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;
}