Skip to content

Add canvas support to pyide#1123

Open
Copilot wants to merge 7 commits intomainfrom
copilot/add-canvas-support-to-pyide
Open

Add canvas support to pyide#1123
Copilot wants to merge 7 commits intomainfrom
copilot/add-canvas-support-to-pyide

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented May 8, 2026

Pyide had no way to render graphics output, blocking use of pygame and other SDL-based libraries available in Pyodide. This adds a canvas attribute to the :::pyide directive that wires up an OffscreenCanvas to pyodide.canvas.setCanvas2D() in the web worker.

Changes

  • remarkDirectivePyide.ts — Detects canvas attribute; sets data-canvas="true", injects a <canvas> element and a Canvas tab button into the output area
  • client.js — On init, transfers the canvas to an OffscreenCanvas and posts it to the worker; adds showCanvas() tab logic; auto-switches to Canvas tab on run when in canvas mode
  • webworker.js — Handles setCanvas message, stores OffscreenCanvas per pyide ID, calls pyodide.canvas.setCanvas2D(canvas) before each run
  • style.css — Styles the canvas element with min-height: 300px
  • en.json / de.json — Adds pyide-canvas translation key

Usage

:::pyide{canvas}

```python
import pygame
pygame.init()
screen = pygame.display.set_mode((400, 300))
screen.fill((0, 128, 255))
pygame.display.flip()

:::


The canvas transfers control to an `OffscreenCanvas` once at init time (irreversible per the browser API); errors during transfer or `setCanvas2D` are caught and surfaced without crashing the worker.

@vercel
Copy link
Copy Markdown

vercel Bot commented May 8, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
hyperbook-4fwa Ready Ready Preview, Comment May 9, 2026 3:35pm

Copilot AI linked an issue May 8, 2026 that may be closed by this pull request
Copilot AI changed the title [WIP] Add canvas support to pyide Add canvas support to pyide May 8, 2026
Copilot AI requested a review from mikebarkmin May 8, 2026 21:57
@mikebarkmin
Copy link
Copy Markdown
Member

@copilot add an example to the website for element pyide.

@mikebarkmin mikebarkmin marked this pull request as ready for review May 9, 2026 15:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add canvas support to pyide

2 participants