## Ultralight v1.3.0 Release Notes

### Changelog

#### Major Improvements

- Rewrite CPU renderer to be faster and more accurate (parallel engine built on Skia internals).
- Add support for Xbox, PS4, and PS5 platforms.
- Improve text rendering accuracy with more intelligent snapping and hinting.
- Improve font scaling accuracy at various device scales.
- Improve box-shadow rendering accuracy and performance.
- Improve performance of layout and JavaScript execution using mimalloc.
- Improve performance of JavaScript garbage-collector, reduce per-frame stalls.
- Improve consistency of CPU and GPU renderers (both now blend in sRGB).
- Add memory profiler and memory statistics tracking.
- Add support for gamepad input devices.
- Add support for remote web inspector.
- Add support for multiple windows to AppCore.
- Add support for rendering only a subset of Views.
- Add support for dashed strokes to CPU renderer.
- Add support for SVG onclick and other events that require path picking.
- Add support for HTML5 Video / Audio (experimental) via GStreamer/FFmpeg (disabled by default).
- Update user-agent string to reflect proper Safari / WebKit version.
- Update to latest CA certificate chain.
- Unify build scripts and toolchain.

#### Major API Changes

- Unify API to use RefPtr<> everywhere (instead of Ref<> class)
- Unify API to use String everywhere (instead of String16, String8, etc.).
- Make String class use String8 natively (utf-8 is now native representation instead of utf-16).
- Make all enums use 'enum class'
- Resources now load via FileSystem API instead of fopen().
- FileSystem now required to be defined in Platform API before creating Renderer.
- Buffer class now accomodates memory-mapped files and destruction callbacks.
- FileSystem interface has been reorganized to use new Buffer API.
- Portions of Config have been moved to ViewConfig (now certain options can be set per-View).
- App::Quit() must now be called manually when using AppCore API.
- Add Bitmap::LockPixelsSafe() and LockedPixels<> utility class to manage lifetimes.
- Add WebKitVersionString() to query corresponding WebKit version.
- Extend AppCore API to enable multi-window support.
- Re-organize C API into logical header files.
- Add Renderer::StartRemoteInspectorServer
- Add Renderer::SetGamepadDetails
- Add Renderer::FireGamepadEvent
- Add Renderer::FireGamepadAxisEvent
- Add Renderer::FireGamepadButtonEvent
- Add Renderer::RenderOnly
- Modify Renderer::CreateView signature (options moved to ViewConfig param)
- Add View::device_scale
- Add View::set_device_scale
- Add View::is_accelerated
- Add View::is_transparent
- Add View::JavaScriptVM
- Rename View::inspector to View::CreateLocalInspectorView
- Modify View::LockJSContext return value (now returns RefPtr<> to manage lifetime)
- Add ViewListener::OnCreateInspectorView
- Add ViewListener::OnRequestClose
- Add WindowListener::OnKeyEvent
- Add WindowListener::OnMouseEvent
- Add WindowListener::OnScrollEvent

#### Major Bugfixes

- Fix issue managing clip in CPU and GPU renderers.
- Fix issue blending alpha in CPU renderer.
- Fix issue stroking paths in CPU renderer.
- Fix issue drawing glyphs with complex transformations.
- Fix issue drawing radial gradients with CPU renderer.
- Fix issue drawing gradients with more than 12 stops.
- Fix issue running library off the main thread on macOS.
- Fix issue rendering paths that begin with an ArcTo command.
- Fix issue where BGRA byte order was not used on all platforms.
- Fix issue painting dropdown menus.
- Fix issue calculating CSS button height.
- Fix issue displaying box-shadows on native inputs.
- Fix issue displaying context-menu in web inspector.
- Fix issue writing LocalStorage database on Windows.
- Fix issue with KeyboardEvent.key in JavaScript always returning null.
- Fix issue with LoadListener::OnBeginLoading not passing correct URL.
- Fix issue with LoadListener::OnFailLoading not being fired on non-200 HTTP status codes.
- Fix issue resizing windows with GPU acceleration enabled (AppCore).
- Fix issue calling Window::SetTitle with Unicode strings (AppCore).
- Fix issue with anti-aliasing when GPU acceleration is enabled on Linux (AppCore).
- Fix issue with automatic DPI switching on Windows (AppCore).
- Fix security issue allocating very large render layers.
- Fix major performance bug in cURL network code.
- Fix memory leak loading certain File URLs.
- Fix memory leak when constructing JSString from JSStringRef (AppCore).
- Fix various crashes and buffer overruns in Bitmap class.
- Fix crash loading certain Data URLs.
- Fix crash when Config::bitmap_alignment is 0.
- Fix crash when encountering certain text-encodings.
- Fix crash when encountering certain JavaScript code.
- Fix crash in SQLite database code.
- Fix crash at process shutdown.

### Useful Links

Website
  ultralig.ht
Support Docs
  docs.ultralig.ht
C++ API
  github.com/ultralight-ux/Ultralight-API

- Ultralight Team