pixi-react icon indicating copy to clipboard operation
pixi-react copied to clipboard

Check-canvas-instance-in-another-window

Open pie6k opened this issue 1 year ago • 2 comments

Description of change

Currently, when creating root and checking if target is HTMLCanvasElement we check it with target instanceof HTMLCanvasElement

It will break in quite rare-use case, when rendering content into another window (created with const newWindow = window.open() using React portal.

In this case - created canvas is instance of newWindow.HTMLCanvasElement, not global HTMLCanvasElement (or technically window.HTMLCanvasElement). As a result - the app will crash.

Use case for such a scenario is eg. creating multi-window Electron applications, when child windows are created using window.open(). I described this architecture in detail here: https://pietrasiak.com/creating-multi-window-electron-apps-using-react-portals

Fixes:

I added getIsCanvasElement function that is checking for this case and modified createRoot function to use it when checking if target is canvas.

Pre-Merge Checklist
  • [x] Tests and/or benchmarks are included
  • [x] Documentation is changed or added
  • [x] Lint process passed (npm run lint)
  • [x] Tests passed (npm run test)

pie6k avatar Jul 26 '24 13:07 pie6k

Great find! I think there's some weirdness on the branch, tho. Can you grab the latest beta branch, cherry-pick your commit onto there, and update this PR? Once you do it should be a pretty quick merge.

trezy avatar Jul 26 '24 17:07 trezy

@pie6k bumping this, as I'd love to get it merged soon. 😁

trezy avatar Jul 30 '24 03:07 trezy

Closing this PR due to inactivity.

trezy avatar Jan 29 '25 21:01 trezy