openpencil/crates/op-host-web
Kayshen-X e2ca2f03de feat(panels): per-fill multi-fill Fill editor (stack/add/delete fills)
The Fill section was single-fill (header "+" only reset one solid, row "×"
cleared but a default row re-rendered). Now it's a Figma-style stacked list:
"+" appends a fill, each fill renders its own head row (swatch + type
dropdown + opacity% + ×), and "×" removes that specific fill. Built on the
indexed model ops from 17310556; mirrors the Effects multi-item pattern.

- snapshot: NodeSnapshot.fills: Vec<FillSummary>; legacy fields derived from
  fills[0]; walkers thread fills: &[FillSummary] (VisibleSections stays Copy).
- actions: RemoveFill(usize), SetFillType{index,fill_type},
  ToggleFillTypePicker(usize), OpenFillColorPicker(usize).
- state: PropertyFocus::FillHex/FillOpacity carry a fill index;
  ColorPickerState.fill_index indexes the HSV writeback (ColorTarget unchanged).
- paint/hit/height loop per fill in lockstep (paint_one_fill,
  push_fill_action_rects, fills_section_height); both hosts dispatch by index.

Backward compatible (fill is already Vec<PenFill>; old single-fill .op loads
as one row). Non-primary gradient/image fills are head-row-only for now
(editable gradient/image body stays primary-fill-only to avoid the ColorTarget
ripple); solid color/opacity/type are fully per-index.
2026-06-21 10:11:50 +08:00
..
assets/canvaskit fix(web): use browser fonts in canvaskit shell 2026-06-19 02:39:34 +08:00
pkg-ck fix(web): expand browser font fallback stack 2026-06-19 07:30:34 +08:00
pkg-webgl refactor(renderer): consolidate web shell on CanvasKit, retire skia path 2026-06-18 09:34:37 +08:00
smoke test(web): add rust web browser smoke 2026-06-20 19:24:59 +08:00
src feat(panels): per-fill multi-fill Fill editor (stack/add/delete fills) 2026-06-21 10:11:50 +08:00
tests test(web): add rust web browser smoke 2026-06-20 19:24:59 +08:00
.gitignore
Cargo.toml chore(web): snapshot in-progress web-host work (settings module + deps) 2026-06-20 23:44:25 +08:00