diff --git a/packages/layout/src/canvas/measureCanvas.js b/packages/layout/src/canvas/measureCanvas.js index 669cfbeb6..5c2c6ed3f 100644 --- a/packages/layout/src/canvas/measureCanvas.js +++ b/packages/layout/src/canvas/measureCanvas.js @@ -85,6 +85,7 @@ const measureCtx = () => { ctx.strokeOpacity = nil; ctx.linearGradient = nil; ctx.radialGradient = nil; + ctx.stop = nil; ctx.getWidth = () => getMax(points.map((p) => p[0])); ctx.getHeight = () => getMax(points.map((p) => p[1])); diff --git a/packages/render/src/primitives/renderCanvas.js b/packages/render/src/primitives/renderCanvas.js index 599910bb7..0b9e6fd7d 100644 --- a/packages/render/src/primitives/renderCanvas.js +++ b/packages/render/src/primitives/renderCanvas.js @@ -35,18 +35,20 @@ const availableMethods = [ 'radialGradient', ]; +const gradientMethods = ['linearGradient', 'radialGradient']; + const painter = (ctx) => { - const p = availableMethods.reduce( - (acc, prop) => ({ - ...acc, - [prop]: (...args) => { + const p = {}; + availableMethods.forEach((prop) => { + if (gradientMethods.includes(prop)) { + p[prop] = (...args) => ctx[prop](...args); + } else { + p[prop] = (...args) => { ctx[prop](...args); return p; - }, - }), - {}, - ); - + }; + } + }); return p; }; diff --git a/packages/render/tests/ctx.js b/packages/render/tests/ctx.js index 9796e5264..b1a88e8fd 100644 --- a/packages/render/tests/ctx.js +++ b/packages/render/tests/ctx.js @@ -51,6 +51,7 @@ const createCTX = () => { instance._root = { data: { AcroForm: {} } }; instance.textInput = vi.fn().mockReturnValue(instance); instance.formField = vi.fn().mockReturnValue(instance); + instance.stop = vi.fn().mockReturnValue(instance); return instance; }; diff --git a/packages/render/tests/primitives/renderCanvas.test.js b/packages/render/tests/primitives/renderCanvas.test.js index e6eac9c02..d28e7139f 100644 --- a/packages/render/tests/primitives/renderCanvas.test.js +++ b/packages/render/tests/primitives/renderCanvas.test.js @@ -1,4 +1,4 @@ -import { describe, expect, test } from 'vitest'; +import { describe, expect, test, vi } from 'vitest'; import * as P from '@react-pdf/primitives'; @@ -67,4 +67,14 @@ describe('primitive renderCanvas', () => { renderCanvas(ctx, node); }); + test('should execute gradient.stop method correctly', () => { + const ctx = createCTX(); + const stopSpy = vi.spyOn(ctx, 'stop'); + const gradient = ctx.radialGradient(1, 2, 3, 4, 5, 6); + gradient.stop(0, 'red', 1); + gradient.stop(0, 'blue', 1); + expect(stopSpy).toHaveBeenCalledTimes(2); + expect(stopSpy).toHaveBeenCalledWith(0, 'red', 1); + expect(stopSpy).toHaveBeenCalledWith(0, 'blue', 1); + }); });