servo/components/canvas
sagudev be0f4470c7
Use backend trait with associated types for 2d canvas backends abstraction (#36783)
Current abstraction was leaky and very hard to understand/impl because
it was so intervened with actual implementation.

Now we generalize both `CanvasState` and `CanvasData` over `B: Beckend`,
meaning that every type/method must be part of trait interface (that
lives in `beckend.rs`). Using associated trait types instead of `Box<dyn
>` allows us too remove the need for wrapper types (and `to_raquote()`
methods) as we can implement helper traits on (foreign) raquote types.
The only time we actually do dispatch (by enum) is at `Canvas` methods.

Implementation now only need to implement all backend traits and
helpers. I tried to restrain myself from actually cleaning abstraction
(where possible), to keep this change as much mechanical as possible,
but we should absolutely do that as a follow up.

Testing: Rust as we only do refactor, but there are also WPT tests

try run: https://github.com/sagudev/servo/actions/runs/14760658522

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2025-05-01 04:16:23 +00:00
..
backend.rs Use backend trait with associated types for 2d canvas backends abstraction (#36783) 2025-05-01 04:16:23 +00:00
canvas_data.rs Use backend trait with associated types for 2d canvas backends abstraction (#36783) 2025-05-01 04:16:23 +00:00
canvas_paint_thread.rs Use backend trait with associated types for 2d canvas backends abstraction (#36783) 2025-05-01 04:16:23 +00:00
Cargo.toml Split webgl into separate crate (#36718) 2025-04-30 05:27:44 +00:00
lib.rs Use backend trait with associated types for 2d canvas backends abstraction (#36783) 2025-05-01 04:16:23 +00:00
raqote_backend.rs Use backend trait with associated types for 2d canvas backends abstraction (#36783) 2025-05-01 04:16:23 +00:00