summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabio Alessandrelli <fabio.alessandrelli@gmail.com>2020-07-27 13:53:03 +0200
committerFabio Alessandrelli <fabio.alessandrelli@gmail.com>2020-07-27 14:17:10 +0200
commit0b286a287ca35275988f22a60f307521c5b08437 (patch)
tree29ace69672d491448d0eef33bc365cc36dc519d6
parent3e96ba220e749f58e1103687dd1e2b123fa69e3b (diff)
Implement HTML5 cancel/ok button swap on Windows.
Platform is detected on init via the `navigator.platform` string.
-rw-r--r--platform/javascript/display_server_javascript.cpp15
-rw-r--r--platform/javascript/display_server_javascript.h3
2 files changed, 18 insertions, 0 deletions
diff --git a/platform/javascript/display_server_javascript.cpp b/platform/javascript/display_server_javascript.cpp
index 4b69ed5814..2fd1f45939 100644
--- a/platform/javascript/display_server_javascript.cpp
+++ b/platform/javascript/display_server_javascript.cpp
@@ -831,6 +831,17 @@ DisplayServer *DisplayServerJavaScript::create_func(const String &p_rendering_dr
DisplayServerJavaScript::DisplayServerJavaScript(const String &p_rendering_driver, WindowMode p_mode, uint32_t p_flags, const Vector2i &p_resolution, Error &r_error) {
r_error = OK; // Always succeeds for now.
+ /* clang-format off */
+ swap_cancel_ok = EM_ASM_INT({
+ const win = (['Windows', 'Win64', 'Win32', 'WinCE']);
+ const plat = navigator.platform || "";
+ if (win.indexOf(plat) !== -1) {
+ return 1;
+ }
+ return 0;
+ }) == 1;
+ /* clang-format on */
+
RasterizerDummy::make_current(); // TODO GLES2 in Godot 4.0... or webgpu?
#if 0
EmscriptenWebGLContextAttributes attributes;
@@ -1183,6 +1194,10 @@ int DisplayServerJavaScript::get_current_video_driver() const {
return 1;
}
+bool DisplayServerJavaScript::get_swap_cancel_ok() {
+ return swap_cancel_ok;
+}
+
void DisplayServerJavaScript::swap_buffers() {
//emscripten_webgl_commit_frame();
}
diff --git a/platform/javascript/display_server_javascript.h b/platform/javascript/display_server_javascript.h
index b149665d67..6569ef1e42 100644
--- a/platform/javascript/display_server_javascript.h
+++ b/platform/javascript/display_server_javascript.h
@@ -56,6 +56,8 @@ class DisplayServerJavaScript : public DisplayServer {
int last_width = 0;
int last_height = 0;
+ bool swap_cancel_ok = false;
+
// utilities
static Point2 compute_position_in_canvas(int p_x, int p_y);
static void focus_canvas();
@@ -195,6 +197,7 @@ public:
virtual void set_icon(const Ref<Image> &p_icon);
// others
+ virtual bool get_swap_cancel_ok();
virtual void swap_buffers();
static void register_javascript_driver();