Rive Text for WASM Runtime I had to bump some packages in order to work with the latest Node security updates. There were also some changes to how the pre-js code expects Modules to be named. I also added some extra helpers to let you run the scripts directly and grab emsdk and premake if necessary. The biggest and most important change is addition of Harfbuzz and SheenBidi to the wasm premake file. It also adds a new "clearGradient" call for Canvas 2D so that we can clear out a previously set gradient (we didn't need this previously as we never reset shaders to null). Diffs= ecbe56567 Rive Text for WASM Runtime (#5618) Co-authored-by: Luigi Rosso <luigi-rosso@users.noreply.github.com>
diff --git a/.rive_head b/.rive_head index c9b5939..7b3bd19 100644 --- a/.rive_head +++ b/.rive_head
@@ -1 +1 @@ -7b3d53e53437047637e4e68d5fb17b0b00498210 +ecbe56567ffcdb53c047c212a67002dfb255b8a5
diff --git a/canvas2d_renderer/bindings_c2d.cpp b/canvas2d_renderer/bindings_c2d.cpp index 4102024..aa2f292 100644 --- a/canvas2d_renderer/bindings_c2d.cpp +++ b/canvas2d_renderer/bindings_c2d.cpp
@@ -167,6 +167,11 @@ void shader(rive::rcp<rive::RenderShader> shader) override { + if (shader == nullptr) + { + call<void>("clearGradient"); + return; + } static_cast<GradientShader*>(shader.get())->passToJS(*this); } void invalidateStroke() override {}
diff --git a/canvas2d_renderer/canvas2d_renderer.js b/canvas2d_renderer/canvas2d_renderer.js index aeb1eed..283042b 100644 --- a/canvas2d_renderer/canvas2d_renderer.js +++ b/canvas2d_renderer/canvas2d_renderer.js
@@ -152,6 +152,9 @@ "blendMode": function (value) { this._blend = _canvasBlend(value); }, + "clearGradient": function () { + this._gradient = null; + }, "linearGradient": function (sx, sy, ex, ey) { this._gradient = { sx, @@ -251,7 +254,7 @@ this._ctx["restore"](); }, "transform": function (xx, xy, yx, yy, tx, ty) { - this._ctx["transform"](xx, xy, yx, yy, tx, ty) + this._ctx["transform"](xx, xy, yx, yy, tx, ty); }, "rotate": function (angle) { const sin = Math.sin(angle); @@ -260,12 +263,10 @@ }, "_drawPath": function (path, paint) { const fillRule = path._fillRule === evenOdd ? "evenodd" : "nonzero"; - paint["draw"](this._ctx, path._path2D, fillRule) + paint["draw"](this._ctx, path._path2D, fillRule); }, - "_drawImage": function (image, blend, opacity) { - }, - "_getMatrix": function (out) { - }, + "_drawImage": function (image, blend, opacity) {}, + "_getMatrix": function (out) {}, "_drawImageMesh": function ( image, blend, @@ -277,11 +278,10 @@ meshMinY, meshMaxX, meshMaxY - ) { - }, + ) {}, "_clipPath": function (path) { const fillRule = path._fillRule === evenOdd ? "evenodd" : "nonzero"; - this._ctx["clip"](path._path2D, fillRule) + this._ctx["clip"](path._path2D, fillRule); }, "clear": function () { this._ctx["clearRect"]( @@ -305,11 +305,13 @@ return new CanvasRenderPath(); }, makeRenderImage: function () { - return null;//new CanvasRenderImage(); + return null; //new CanvasRenderImage(); }, makeRenderer: function (canvasIDPtr, canvasIDLength) { const utf8 = new Uint8Array(canvasIDLength); - utf8.set(Module.HEAPU8.subarray(canvasIDPtr, canvasIDPtr + canvasIDLength)); + utf8.set( + Module.HEAPU8.subarray(canvasIDPtr, canvasIDPtr + canvasIDLength) + ); idString = new TextDecoder().decode(utf8); return new CanvasRenderer(document.getElementById(idString)); }, @@ -333,4 +335,4 @@ } }); }; -}; +}