Skip to content

Commit 634fa65

Browse files
committed
Revert "Remove singletons from Emscripten code"
This reverts commit 6164da4.
1 parent 00c3db9 commit 634fa65

File tree

4 files changed

+65
-184
lines changed

4 files changed

+65
-184
lines changed

src/video/emscripten/SDL_emscriptenevents.c

Lines changed: 47 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -794,26 +794,14 @@ EMSCRIPTEN_KEEPALIVE void Emscripten_HandlePointerGeneric(SDL_WindowData *window
794794
static void Emscripten_set_pointer_event_callbacks(SDL_WindowData *data)
795795
{
796796
MAIN_THREAD_EM_ASM({
797-
var id = UTF8ToString($1);
798-
var target = document.querySelector(id);
797+
var target = document.querySelector(UTF8ToString($1));
799798
if (target) {
800799
var data = $0;
801800

802-
if (!Module['SDL3']) {
801+
if (typeof(Module['SDL3']) === 'undefined') {
803802
Module['SDL3'] = {};
804803
}
805-
806804
var SDL3 = Module['SDL3'];
807-
if (!SDL3['window_data']) {
808-
SDL3['window_data'] = {};
809-
}
810-
811-
var window_datas = SDL3['window_data'];
812-
if (!window_datas[id]) {
813-
window_datas[id] = {};
814-
}
815-
816-
var window_data = window_datas[id];
817805

818806
var makePointerEventCStruct = function(event) {
819807
var ptr = 0;
@@ -839,45 +827,42 @@ static void Emscripten_set_pointer_event_callbacks(SDL_WindowData *data)
839827
return ptr;
840828
};
841829

842-
window_data.eventHandlerPointerEnter = function(event) {
830+
SDL3.eventHandlerPointerEnter = function(event) {
843831
var d = makePointerEventCStruct(event); if (d != 0) { _Emscripten_HandlePointerEnter(data, d); _SDL_free(d); }
844832
};
845-
target.addEventListener("pointerenter", window_data.eventHandlerPointerEnter);
833+
target.addEventListener("pointerenter", SDL3.eventHandlerPointerEnter);
846834

847-
window_data.eventHandlerPointerLeave = function(event) {
835+
SDL3.eventHandlerPointerLeave = function(event) {
848836
var d = makePointerEventCStruct(event); if (d != 0) { _Emscripten_HandlePointerLeave(data, d); _SDL_free(d); }
849837
};
850-
target.addEventListener("pointerleave", window_data.eventHandlerPointerLeave);
851-
target.addEventListener("pointercancel", window_data.eventHandlerPointerLeave); // catch this, just in case.
838+
target.addEventListener("pointerleave", SDL3.eventHandlerPointerLeave);
839+
target.addEventListener("pointercancel", SDL3.eventHandlerPointerLeave); // catch this, just in case.
852840

853-
window_data.eventHandlerPointerGeneric = function(event) {
841+
SDL3.eventHandlerPointerGeneric = function(event) {
854842
var d = makePointerEventCStruct(event); if (d != 0) { _Emscripten_HandlePointerGeneric(data, d); _SDL_free(d); }
855843
};
856-
target.addEventListener("pointerdown", window_data.eventHandlerPointerGeneric);
857-
target.addEventListener("pointerup", window_data.eventHandlerPointerGeneric);
858-
target.addEventListener("pointermove", window_data.eventHandlerPointerGeneric);
844+
target.addEventListener("pointerdown", SDL3.eventHandlerPointerGeneric);
845+
target.addEventListener("pointerup", SDL3.eventHandlerPointerGeneric);
846+
target.addEventListener("pointermove", SDL3.eventHandlerPointerGeneric);
859847
}
860848
}, data, data->canvas_id, sizeof (Emscripten_PointerEvent));
861849
}
862850

863851
static void Emscripten_unset_pointer_event_callbacks(SDL_WindowData *data)
864852
{
865853
MAIN_THREAD_EM_ASM({
866-
var id = UTF8ToString($0);
867-
var target = document.querySelector(id);
854+
var target = document.querySelector(UTF8ToString($0));
868855
if (target) {
869856
var SDL3 = Module['SDL3'];
870-
var window_datas = SDL3['window_data'];
871-
var window_data = window_datas[id];
872-
target.removeEventListener("pointerenter", window_data.eventHandlerPointerEnter);
873-
target.removeEventListener("pointerleave", window_data.eventHandlerPointerLeave);
874-
target.removeEventListener("pointercancel", window_data.eventHandlerPointerLeave);
875-
target.removeEventListener("pointerdown", window_data.eventHandlerPointerGeneric);
876-
target.removeEventListener("pointerup", window_data.eventHandlerPointerGeneric);
877-
target.removeEventListener("pointermove", window_data.eventHandlerPointerGeneric);
878-
window_data.eventHandlerPointerEnter = undefined;
879-
window_data.eventHandlerPointerLeave = undefined;
880-
window_data.eventHandlerPointerGeneric = undefined;
857+
target.removeEventListener("pointerenter", SDL3.eventHandlerPointerEnter);
858+
target.removeEventListener("pointerleave", SDL3.eventHandlerPointerLeave);
859+
target.removeEventListener("pointercancel", SDL3.eventHandlerPointerLeave);
860+
target.removeEventListener("pointerdown", SDL3.eventHandlerPointerGeneric);
861+
target.removeEventListener("pointerup", SDL3.eventHandlerPointerGeneric);
862+
target.removeEventListener("pointermove", SDL3.eventHandlerPointerGeneric);
863+
SDL3.eventHandlerPointerEnter = undefined;
864+
SDL3.eventHandlerPointerLeave = undefined;
865+
SDL3.eventHandlerPointerGeneric = undefined;
881866
}
882867
}, data->canvas_id);
883868
}
@@ -914,26 +899,14 @@ EM_JS_DEPS(dragndrop, "$writeArrayToMemory");
914899
static void Emscripten_set_drag_event_callbacks(SDL_WindowData *data)
915900
{
916901
MAIN_THREAD_EM_ASM({
917-
var id = UTF8ToString($1);
918-
var target = document.querySelector(id);
902+
var target = document.querySelector(UTF8ToString($1));
919903
if (target) {
920904
var data = $0;
921905

922-
if (!Module['SDL3']) {
906+
if (typeof(Module['SDL3']) === 'undefined') {
923907
Module['SDL3'] = {};
924908
}
925-
926909
var SDL3 = Module['SDL3'];
927-
if (!SDL3['window_data']) {
928-
SDL3['window_data'] = {};
929-
}
930-
931-
var window_datas = SDL3['window_data'];
932-
if (!window_datas[id]) {
933-
window_datas[id] = {};
934-
}
935-
936-
var window_data = window_datas[id];
937910

938911
var makeDropEventCStruct = function(event) {
939912
var ptr = 0;
@@ -947,23 +920,15 @@ static void Emscripten_set_drag_event_callbacks(SDL_WindowData *data)
947920
return ptr;
948921
};
949922

950-
window_data.eventHandlerDropDragover = function(event) {
923+
SDL3.eventHandlerDropDragover = function(event) {
951924
event.preventDefault();
952925
var d = makeDropEventCStruct(event); if (d != 0) { _Emscripten_SendDragEvent(data, d); _SDL_free(d); }
953926
};
954-
target.addEventListener("dragover", window_data.eventHandlerDropDragover);
955-
956-
window_data.drop_count = 0;
957-
try
958-
{
959-
FS.mkdir("/tmp/filedrop")
960-
}
961-
catch(e)
962-
{
963-
// Throws if the directory already exists
964-
}
927+
target.addEventListener("dragover", SDL3.eventHandlerDropDragover);
965928

966-
window_data.eventHandlerDropDrop = function(event) {
929+
SDL3.drop_count = 0;
930+
FS.mkdir("/tmp/filedrop");
931+
SDL3.eventHandlerDropDrop = function(event) {
967932
event.preventDefault();
968933
if (event.dataTransfer.types.includes("text/plain")) {
969934
let plain_text = stringToNewUTF8(event.dataTransfer.getData("text/plain"));
@@ -975,8 +940,8 @@ static void Emscripten_set_drag_event_callbacks(SDL_WindowData *data)
975940
const file_reader = new FileReader();
976941
file_reader.readAsArrayBuffer(file);
977942
file_reader.onload = function(event) {
978-
const fs_dropdir = `/tmp/filedrop/${window_data.drop_count}`;
979-
window_data.drop_count += 1;
943+
const fs_dropdir = `/tmp/filedrop/${SDL3.drop_count}`;
944+
SDL3.drop_count += 1;
980945

981946
const fs_filepath = `${fs_dropdir}/${file.name}`;
982947
const c_fs_filepath = stringToNewUTF8(fs_filepath);
@@ -995,44 +960,29 @@ static void Emscripten_set_drag_event_callbacks(SDL_WindowData *data)
995960
}
996961
_Emscripten_SendDragCompleteEvent(data);
997962
};
998-
target.addEventListener("drop", window_data.eventHandlerDropDrop);
963+
target.addEventListener("drop", SDL3.eventHandlerDropDrop);
999964

1000-
window_data.eventHandlerDropDragend = function(event) {
965+
SDL3.eventHandlerDropDragend = function(event) {
1001966
event.preventDefault();
1002967
_Emscripten_SendDragCompleteEvent(data);
1003968
};
1004-
target.addEventListener("dragend", window_data.eventHandlerDropDragend);
1005-
target.addEventListener("dragleave", window_data.eventHandlerDropDragend);
969+
target.addEventListener("dragend", SDL3.eventHandlerDropDragend);
970+
target.addEventListener("dragleave", SDL3.eventHandlerDropDragend);
1006971
}
1007972
}, data, data->canvas_id, sizeof (Emscripten_DropEvent));
1008973
}
1009974

1010975
static void Emscripten_unset_drag_event_callbacks(SDL_WindowData *data)
1011976
{
1012977
MAIN_THREAD_EM_ASM({
1013-
var id = UTF8ToString($0);
1014-
var target = document.querySelector(id);
978+
var target = document.querySelector(UTF8ToString($0));
1015979
if (target) {
1016980
var SDL3 = Module['SDL3'];
1017-
var window_datas = SDL3['window_data'];
1018-
var window_data = window_datas[id];
1019-
target.removeEventListener("dragleave", window_data.eventHandlerDropDragend);
1020-
target.removeEventListener("dragend", window_data.eventHandlerDropDragend);
1021-
target.removeEventListener("drop", window_data.eventHandlerDropDrop);
1022-
window_data.drop_count = undefined;
1023-
1024-
function safeRemoveDir(path) {
1025-
try
1026-
{
1027-
FS.rmdir(path);
1028-
}
1029-
catch(e)
1030-
{
1031-
// Throws if directory doesn't exist
1032-
}
1033-
}
981+
target.removeEventListener("dragleave", SDL3.eventHandlerDropDragend);
982+
target.removeEventListener("dragend", SDL3.eventHandlerDropDragend);
983+
target.removeEventListener("drop", SDL3.eventHandlerDropDrop);
984+
SDL3.drop_count = undefined;
1034985

1035-
const path = "/tmp/filedrop";
1036986
function recursive_remove(dirpath) {
1037987
FS.readdir(dirpath).forEach((filename) => {
1038988
const p = `${dirpath}/${filename}`;
@@ -1043,14 +993,14 @@ static void Emscripten_unset_drag_event_callbacks(SDL_WindowData *data)
1043993
recursive_remove(p);
1044994
}
1045995
});
1046-
safeRemoveDir(dirpath);
1047-
}(path);
1048-
1049-
safeRemoveDir(path);
1050-
target.removeEventListener("dragover", window_data.eventHandlerDropDragover);
1051-
window_data.eventHandlerDropDragover = undefined;
1052-
window_data.eventHandlerDropDrop = undefined;
1053-
window_data.eventHandlerDropDragend = undefined;
996+
FS.rmdir(dirpath);
997+
}("/tmp/filedrop");
998+
999+
FS.rmdir("/tmp/filedrop");
1000+
target.removeEventListener("dragover", SDL3.eventHandlerDropDragover);
1001+
SDL3.eventHandlerDropDragover = undefined;
1002+
SDL3.eventHandlerDropDrop = undefined;
1003+
SDL3.eventHandlerDropDragend = undefined;
10541004
}
10551005
}, data->canvas_id);
10561006
}

src/video/emscripten/SDL_emscriptenframebuffer.c

Lines changed: 18 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -74,43 +74,30 @@ bool Emscripten_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *wind
7474
var canvasId = UTF8ToString($3);
7575
var canvas = document.querySelector(canvasId);
7676

77-
if (!Module['SDL3']) {
78-
Module['SDL3'] = {};
79-
}
80-
77+
//TODO: this should store a context per canvas
78+
if (!Module['SDL3']) Module['SDL3'] = {};
8179
var SDL3 = Module['SDL3'];
82-
if (!SDL3['window_data']) {
83-
SDL3['window_data'] = {};
84-
}
85-
86-
var window_datas = SDL3['window_data'];
87-
if (!window_datas[canvasId]) {
88-
window_datas[canvasId] = {};
80+
if (SDL3.ctxCanvas !== canvas) {
81+
SDL3.ctx = Module['createContext'](canvas, false, true);
82+
SDL3.ctxCanvas = canvas;
8983
}
90-
91-
var window_data = window_datas[canvasId];
92-
93-
if (window_data.canvas !== canvas) {
94-
window_data.ctx = Module['createContext'](canvas, false, true);
95-
window_data.canvas = canvas;
84+
if (SDL3.w !== w || SDL3.h !== h || SDL3.imageCtx !== SDL3.ctx) {
85+
SDL3.image = SDL3.ctx.createImageData(w, h);
86+
SDL3.w = w;
87+
SDL3.h = h;
88+
SDL3.imageCtx = SDL3.ctx;
9689
}
97-
if (window_data.w !== w || window_data.h !== h) {
98-
window_data.image = window_data.ctx.createImageData(w, h);
99-
window_data.w = w;
100-
window_data.h = h;
101-
}
102-
103-
var data = window_data.image.data;
90+
var data = SDL3.image.data;
10491
var src = pixels / 4;
10592
var dst = 0;
10693
var num;
10794

108-
if (window_data.data32Data !== data) {
109-
window_data.data32 = new Int32Array(data.buffer);
110-
window_data.data8 = new Uint8Array(data.buffer);
111-
window_data.data32Data = data;
95+
if (SDL3.data32Data !== data) {
96+
SDL3.data32 = new Int32Array(data.buffer);
97+
SDL3.data8 = new Uint8Array(data.buffer);
98+
SDL3.data32Data = data;
11299
}
113-
var data32 = window_data.data32;
100+
var data32 = SDL3.data32;
114101
num = data32.length;
115102
// logically we need to do
116103
// while (dst < num) {
@@ -121,7 +108,7 @@ bool Emscripten_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *wind
121108
// native SDL_memcpy efficiencies, and the remaining loop
122109
// just stores, not load + store, so it is faster
123110
data32.set(HEAP32.subarray(src, src + num));
124-
var data8 = window_data.data8;
111+
var data8 = SDL3.data8;
125112
var i = 3;
126113
var j = i + 4*num;
127114
if (num % 8 == 0) {
@@ -151,7 +138,7 @@ bool Emscripten_UpdateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *wind
151138
}
152139
}
153140

154-
window_data.ctx.putImageData(window_data.image, 0, 0);
141+
SDL3.ctx.putImageData(SDL3.image, 0, 0);
155142
}, surface->w, surface->h, surface->pixels, data->canvas_id);
156143
/* *INDENT-ON* */ // clang-format on
157144

0 commit comments

Comments
 (0)