-
Notifications
You must be signed in to change notification settings - Fork 3
Canvas 2D API (CanvasRenderingContext2D) #32
Copy link
Copy link
Closed
Labels
ai-readyWell-defined, AI can pick up immediatelyWell-defined, AI can pick up immediatelydifficulty:hardComplex taskComplex taskdifficulty:mediumMedium complexityMedium complexityenhancementNew feature or requestNew feature or requestmodule:domw3cos-dom cratew3cos-dom cratemodule:runtimew3cos-runtime cratew3cos-runtime crate
Metadata
Metadata
Assignees
Labels
ai-readyWell-defined, AI can pick up immediatelyWell-defined, AI can pick up immediatelydifficulty:hardComplex taskComplex taskdifficulty:mediumMedium complexityMedium complexityenhancementNew feature or requestNew feature or requestmodule:domw3cos-dom cratew3cos-dom cratemodule:runtimew3cos-runtime cratew3cos-runtime crate
Context
Per
docs/vscode-compat.mdPhase A (P1). Monaco Editor uses Canvas 2D for the minimap, diff decorations, and some rendering optimizations. Many charting/drawing libraries also depend on it.Requirements
Implement
<canvas>element withCanvasRenderingContext2D:Drawing
fillRect(x, y, w, h)/strokeRect(x, y, w, h)/clearRect(x, y, w, h)beginPath()/moveTo()/lineTo()/closePath()/arc()fill()/stroke()fillStyle/strokeStyle(color string or gradient)lineWidth/lineCap/lineJoinText
fillText(text, x, y)/strokeText(text, x, y)measureText(text)→TextMetrics(width)fontproperty (CSS font shorthand)textAlign/textBaselineImages
drawImage(image, dx, dy)/drawImage(image, dx, dy, dw, dh)getImageData()/putImageData()/createImageData()Transform
save()/restore()translate()/rotate()/scale()globalAlpha/globalCompositeOperationImplementation
The backing store is already a
tiny_skia::Pixmap. Canvas 2D operations map almost directly to tiny-skia drawing calls. The main work is:ComponentKind::Canvas { width, height }tow3cos-stdPixmapper canvas elementrender_frame()References
crates/w3cos-runtime/src/render.rs— tiny-skia rendering