Commit Graph

163 Commits

Author SHA1 Message Date
Fabio Alessandrelli f73c9e555f Remove now unused FileAccessBuffered.
(cherry picked from commit 781efc26e0)
2020-12-09 11:36:58 +01:00
Fabio Alessandrelli 87e9fbc8a0 [HTML5] Use regular unix FileAccess implementation.
(cherry picked from commit 1396c74734)
2020-12-09 11:35:21 +01:00
Fabio Alessandrelli 79a1418e7d [HTML5] Make GDNative support feature-based.
This is suboptimal as it requires adding an extra flag, but rewriting
how feature tags work is beyond the scope of this work.
2020-12-05 01:14:03 +01:00
Fabio Alessandrelli 4ad95cc039 [HTML5] EditorRunNative works with GDNative.
This "breaks" our loading bar logic (libraries are not counted).
Fixing it is non trivial and probably deserves investigating a different
strategy.
2020-12-05 01:00:29 +01:00
Fabio Alessandrelli 0f40391924 [HTML5] Fix broken layout on load in HiDPI screens
This was caused by the devicePixelRatio being applied twice, once by the
HTML code, once by the OS code.
More specifically, OS.get_window_size() would return the canvas element
size, while OS.set_window_size() would set the element size to the
specified value times the devicePixelRatio.
Calling OS.set_window_size(OS.get_window_size()) would reapply the
devicePixelRatio every time.
This commit changes the behaviour so that OS.set_window_size() do not
apply the devicePixelRatio to the canvas element size, by it divides the
CSS size instead.
2020-11-30 11:29:35 +01:00
Fabio Alessandrelli e52ed6d89e [HTML5] Port JavaScript inline code to libraries.
The API is implemented in javascript, and generates C functions that can
be called from godot.
This allows much cleaner code replacing all `EM_ASM` calls in our C++
code with plain C function calls.
This also gets rid of few hacks and comes with few optimizations (e.g.
custom cursor shapes should be much faster now).
2020-11-10 10:56:13 +01:00
Fabio Alessandrelli a3179aa8fc Disable WebGL2, window maximize in editor builds. 2020-10-14 12:32:35 +02:00
Fabio Alessandrelli 35fcc1835c JS synchronous start, better persistent FS sync.
The engine now expects to emscripten FS to be setup and sync-ed before
main is called. This is exposed via `Module["initFS"]` which also allows
to setup multiple persistence paths (internal use only for now).

Additionally, FS syncing is done **once** for every loop if at least one
file in a persistent path was open for writing and closed, and if the FS
is not syncing already.

This should potentially fix issues reported by users where "autosave"
would not work on the web (never calling `syncfs` because of too many
writes).
2020-09-19 18:27:21 +02:00
Fabio Alessandrelli 40f73f74ce Better HiDPI support in HTML5. 2020-09-19 18:27:21 +02:00
Fabio Alessandrelli afb81abae5 Window event listener do not use capture. 2020-09-19 18:27:21 +02:00
Fabio Alessandrelli c0e0247f39 Small refactor to JavaScript handlers.
Crated helper class in native/utils.js.
Simplify code in OS/DisplayServer.
2020-09-19 18:27:21 +02:00
Fabio Alessandrelli c610ad3739 Move request_quit to javascript_main. 2020-09-18 18:54:11 +02:00
Fabio Alessandrelli 31c21b9750 Implement HTML5 cancel/ok button swap on Windows.
Platform is detected on init via the `navigator.platform` string.

(cherry picked from commit 0b286a287c)
2020-07-28 00:55:46 +02:00
Fabio Alessandrelli 357e99a31e Use dummy driver when JS AudioContext is unavailable. 2020-07-02 14:30:23 +02:00
Fabio Alessandrelli c7d2767ab9 [JS] Check canvas size each loop, force redraw.
Remove ResizeObserver, fix compatibility issues, achieve smoother
resizing.
2020-07-02 14:30:23 +02:00
Fabio Alessandrelli b146bf2528 Canvas resize callback, to update buffer size. 2020-06-18 09:21:14 +02:00
Fabio Alessandrelli 21c9f37757 [HTML5] Refactor JS, threads support, closures.
- Refactored the Engine code, splitted across files.
- Use MODULARIZE option to build emscripten code into it's own closure.
- Optional closure compiler run for JS and generated code.
- Enable lto support (saves ~2MiB in release).
- Can now build with tools=yes (not much to see yet).
- Dropped some deprecated code for older toolchains.
- Add onExit, and onExecute JS function.
- Add files drag and drop support.
- Add support for low precessor usage mode (via offscreen render, swap).
2020-06-18 09:21:14 +02:00
Fabio Alessandrelli 8b321354d8 Swtich HTML5 key detection from keyCode to code.
The value of this, does not include the layout.
The code has extra logic to map the unicode value to our keylist,
supporting ASCII and Latin-1.

(cherry picked from commit 0a35b97b62
with help of https://github.com/Faless/godot/tree/js/keyCode)
2020-06-05 12:49:50 +02:00
Christoph Schröder d70cb49eef Move mouse wheel handler from window to canvas element in HTML
Similar to https://github.com/godotengine/godot/pull/36557

At least in chrome, the following error is printed for each mouse wheel
rotation:
[Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive. See https://www.chromestatus.com/features/6662647093133312

This PR moves the handler to the canvas and thereby fixes the error.

Tested on: Chrome and Firefox (MacOS), Firefox, Chrome(Android), Safari (IPad + MacOS)

(cherry picked from commit b1e8ac7b08)
2020-05-04 16:10:22 +02:00
Christoph Schroeder 031aed3bb7 Fixes touch events for HTML
Without this patch, the following exception is thrown when the touch
screen is used: TypeError: e.getBoundingClientRect is not a function.
No touch events arrive in the engine.

From my testing, this PR fixes the issue and behaves as expected.

Tested with godot-demo-projects/misc/multitouch_view/, emscripten 1.39.8
and Firefox mobile emulator as well as FF on Android

(cherry picked from commit 5134317afc)
2020-03-04 12:40:15 +01:00
muiroc 50727d7b22 Allow per pixel transparency in javascript platform
(cherry picked from commit e51c6a0d28)
2020-02-14 16:07:03 +01:00
Fabio Alessandrelli 4a50f5ff65 HTML5 callbacks rework.
Fixes compatibility with emscripten 1.39.5+ .
Most input callbacks now require a target and no longer support NULL
defaults.

This commit changes all required null targets to the expected default in
the binding phase.
Since for canvas-related callbacks there is no default, the "#canvas"
selector is used instead.
Additionally, since canvasX and canvasY event properties are no longer
supported, event positions are computed from "clientX" and "clientY" and
the "#canvas" bounding client rect.
2020-01-17 21:42:36 +01:00
Rémi Verschelde 435f86cf87 HTML5: Address removal of 'timestamp' in Emscripten 1.39.5
It was removed as noted in the changelog:
https://github.com/emscripten-core/emscripten/blob/1.39.5/ChangeLog.md#v1395-12202019

> Removed `timestamp` field from mouse, wheel, devicemotion and
> deviceorientation events. The presence of a `timestamp` on these
> events was slightly arbitrary, and populating this field caused
> a small profileable overhead that all users might not care about.
> It is easy to get a timestamp of an event by calling
> `emscripten_get_now()` or `emscripten_performance_now()` inside
> the event handler function of any event.

Fixes #34648.
2020-01-17 14:10:52 +01:00
Rémi Verschelde a7f49ac9a1 Update copyright statements to 2020
Happy new year to the wonderful Godot community!

We're starting a new decade with a well-established, non-profit, free
and open source game engine, and tons of further improvements in the
pipeline from hundreds of contributors.

Godot will keep getting better, and we're looking forward to all the
games that the community will keep developing and releasing with it.
2020-01-01 11:16:22 +01:00
bruvzg 2ef8c5fac5 iOS modular build and export implementation. 2019-12-01 21:57:18 +02:00