> This PR adds a `getDrawingContext` method to `WritableImage`, which works 
> similar to `Canvas::getGraphicsContext` and shares the same signatures. Key 
> features include:
> 
> - **Shape rendering**: `strokeRect`, `fillRect`, `strokeOval`, `fillOval`, 
> `strokeArc`, `fillArc`, `strokePolyline`, `fillPolygon`, etc.
> - **Stroke and fill attributes**: `lineWidth`, `lineCap`, `lineJoin`, 
> `miterLimit`, `fillRule`, `stroke` and `fill` paints.
> - **Global graphics settings**: `globalAlpha` and `globalBlendMode`.
> - **Image drawing**: draw other `Image` instances with scaling and 
> source/destination rectangles.
> - **Text rendering**: render text
> - **Save/Restore**: store current stroke, font, dashes, etc and restore them 
> later
> - **Paths**: begin a path, with lines, curves, etc, then stroke or fill it
> - **Clips**: support rectangular clips in the SW renderer
> 
> This feature enables direct software rendering to `WritableImage` without 
> requiring a `Canvas` + snapshot.
> 
> **Additional notes**:
> 
> - The implementation leverages the software stack consisting of the Marlin 
> rasterizer and Pisces compositor/painter.
> 
> **Example usage**:
> 
> 
> WritableImage img = new WritableImage(400, 400);
> DrawingContext ctx = img.getDrawingContext();
> ctx.setFill(Color.RED);
> ctx.fillRect(50, 50, 100, 100);
> 
> 
> See the sample program `RandomShapesDemo` to see a `WritableImage` and 
> `Canvas` side by side performing the same operations:
> 
> <img width="1249" height="741" alt="image" 
> src="https://github.com/user-attachments/assets/4a0b9dcc-8f96-4faa-99cf-83c66d2c851e";
>  />
> 
> Newer version:
> 
> <img width="1249" height="741" alt="image" 
> src="https://github.com/user-attachments/assets/c0502620-3d02-4fbd-8c33-43bd5138b42c";
>  />
> 
> ---------
> - [x] I confirm that I make this contribution in accordance with the [OpenJDK 
> Interim AI Policy](https://openjdk.org/legal/ai).

John Hendrikx has updated the pull request incrementally with six additional 
commits since the last revision:

 - Remove weak reference for drawing context
 - Fix stroke width / dash lengths when scale != 1.0, and fix clips
 - Keep user set global alpha as-is
 - GraphicsContext#clipRect no longer clobbers existing path
 - Support direct buffers and slices for WritableImage#getDrawingContext
 - Extend tests for dirty rect, and fix dirty rect for stroked text

-------------

Changes:
  - all: https://git.openjdk.org/jfx/pull/1969/files
  - new: https://git.openjdk.org/jfx/pull/1969/files/4b5ad66f..b36a7c18

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jfx&pr=1969&range=01
 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=1969&range=00-01

  Stats: 1017 lines in 17 files changed: 825 ins; 116 del; 76 mod
  Patch: https://git.openjdk.org/jfx/pull/1969.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1969/head:pull/1969

PR: https://git.openjdk.org/jfx/pull/1969

Reply via email to