summaryrefslogtreecommitdiffstats
path: root/platform/web
diff options
context:
space:
mode:
Diffstat (limited to 'platform/web')
-rw-r--r--platform/web/display_server_web.cpp13
-rw-r--r--platform/web/godot_js.h1
-rw-r--r--platform/web/js/libs/library_godot_os.js22
-rw-r--r--platform/web/os_web.cpp3
4 files changed, 30 insertions, 9 deletions
diff --git a/platform/web/display_server_web.cpp b/platform/web/display_server_web.cpp
index 565d439a92..da55e8560a 100644
--- a/platform/web/display_server_web.cpp
+++ b/platform/web/display_server_web.cpp
@@ -398,16 +398,12 @@ void DisplayServerWeb::cursor_set_custom_image(const Ref<Resource> &p_cursor, Cu
ERR_FAIL_INDEX(p_shape, CURSOR_MAX);
if (p_cursor.is_valid()) {
Ref<Texture2D> texture = p_cursor;
+ ERR_FAIL_COND(!texture.is_valid());
Ref<AtlasTexture> atlas_texture = p_cursor;
- Ref<Image> image;
Size2 texture_size;
Rect2 atlas_rect;
- if (texture.is_valid()) {
- image = texture->get_image();
- }
-
- if (!image.is_valid() && atlas_texture.is_valid()) {
+ if (atlas_texture.is_valid()) {
texture = atlas_texture->get_atlas();
atlas_rect.size.width = texture->get_width();
@@ -417,17 +413,16 @@ void DisplayServerWeb::cursor_set_custom_image(const Ref<Resource> &p_cursor, Cu
texture_size.width = atlas_texture->get_region().size.x;
texture_size.height = atlas_texture->get_region().size.y;
- } else if (image.is_valid()) {
+ } else {
texture_size.width = texture->get_width();
texture_size.height = texture->get_height();
}
- ERR_FAIL_COND(!texture.is_valid());
ERR_FAIL_COND(p_hotspot.x < 0 || p_hotspot.y < 0);
ERR_FAIL_COND(texture_size.width > 256 || texture_size.height > 256);
ERR_FAIL_COND(p_hotspot.x > texture_size.width || p_hotspot.y > texture_size.height);
- image = texture->get_image();
+ Ref<Image> image = texture->get_image();
ERR_FAIL_COND(!image.is_valid());
diff --git a/platform/web/godot_js.h b/platform/web/godot_js.h
index 3a41f63fa3..660822e291 100644
--- a/platform/web/godot_js.h
+++ b/platform/web/godot_js.h
@@ -49,6 +49,7 @@ extern void godot_js_os_fs_sync(void (*p_callback)());
extern int godot_js_os_execute(const char *p_json);
extern void godot_js_os_shell_open(const char *p_uri);
extern int godot_js_os_hw_concurrency_get();
+extern int godot_js_os_has_feature(const char *p_ftr);
extern int godot_js_pwa_cb(void (*p_callback)());
extern int godot_js_pwa_update();
diff --git a/platform/web/js/libs/library_godot_os.js b/platform/web/js/libs/library_godot_os.js
index c4c45a3036..00ae399583 100644
--- a/platform/web/js/libs/library_godot_os.js
+++ b/platform/web/js/libs/library_godot_os.js
@@ -291,6 +291,28 @@ const GodotOS = {
});
},
+ godot_js_os_has_feature__sig: 'ii',
+ godot_js_os_has_feature: function (p_ftr) {
+ const ftr = GodotRuntime.parseString(p_ftr);
+ const ua = navigator.userAgent;
+ if (ftr === 'web_macos') {
+ return (ua.indexOf('Mac') !== -1) ? 1 : 0;
+ }
+ if (ftr === 'web_windows') {
+ return (ua.indexOf('Windows') !== -1) ? 1 : 0;
+ }
+ if (ftr === 'web_android') {
+ return (ua.indexOf('Android') !== -1) ? 1 : 0;
+ }
+ if (ftr === 'web_ios') {
+ return ((ua.indexOf('iPhone') !== -1) || (ua.indexOf('iPad') !== -1) || (ua.indexOf('iPod') !== -1)) ? 1 : 0;
+ }
+ if (ftr === 'web_linuxbsd') {
+ return ((ua.indexOf('CrOS') !== -1) || (ua.indexOf('BSD') !== -1) || (ua.indexOf('Linux') !== -1) || (ua.indexOf('X11') !== -1)) ? 1 : 0;
+ }
+ return 0;
+ },
+
godot_js_os_execute__sig: 'ii',
godot_js_os_execute: function (p_json) {
const json_args = GodotRuntime.parseString(p_json);
diff --git a/platform/web/os_web.cpp b/platform/web/os_web.cpp
index 964bce01da..0f84e7e841 100644
--- a/platform/web/os_web.cpp
+++ b/platform/web/os_web.cpp
@@ -136,6 +136,9 @@ bool OS_Web::_check_internal_feature_support(const String &p_feature) {
if (p_feature == "web") {
return true;
}
+ if (godot_js_os_has_feature(p_feature.utf8().get_data())) {
+ return true;
+ }
return false;
}