feat: implement layer mask editing support with scratch buffer and coordinate normalization
mandatory-regression-gate / deterministic-tests (push) Has been cancelled
mandatory-regression-gate / protected-performance-path (push) Has been cancelled

This commit is contained in:
Your Name
2026-07-24 06:01:30 +03:00
parent 7496f5e208
commit 505562424b
16 changed files with 1224 additions and 155 deletions
@@ -724,6 +724,11 @@ pub enum Message {
LayerSetFillOpacity(u64, f32),
LayerAddGroup,
LayerToggleCollapse(u64),
LayerAddMask(u64),
LayerRemoveMask(u64),
LayerToggleMask(u64),
LayerSetEditMask(bool),
LayerToggleEditMask,
// ── History ─────────────────────────────────────────
HistoryJumpTo(i32),
@@ -3686,6 +3691,45 @@ impl HcieIcedApp {
return Task::perform(async {}, |_| Message::CompositeRefresh);
}
Message::LayerAddMask(id) => {
self.documents[self.active_doc].engine.add_layer_mask(id);
self.documents[self.active_doc].modified = true;
self.documents[self.active_doc].cached_layers =
self.documents[self.active_doc].engine.layer_infos();
self.refresh_composite_if_needed();
return Task::perform(async {}, |_| Message::CompositeRefresh);
}
Message::LayerRemoveMask(id) => {
self.documents[self.active_doc].engine.remove_layer_mask(id);
self.documents[self.active_doc].modified = true;
self.documents[self.active_doc].cached_layers =
self.documents[self.active_doc].engine.layer_infos();
self.refresh_composite_if_needed();
return Task::perform(async {}, |_| Message::CompositeRefresh);
}
Message::LayerToggleMask(id) => {
self.documents[self.active_doc].engine.toggle_layer_mask(id);
self.documents[self.active_doc].modified = true;
self.documents[self.active_doc].cached_layers =
self.documents[self.active_doc].engine.layer_infos();
self.refresh_composite_if_needed();
return Task::perform(async {}, |_| Message::CompositeRefresh);
}
Message::LayerSetEditMask(editing) => {
self.documents[self.active_doc].engine.set_editing_mask(editing);
self.documents[self.active_doc].cached_layers =
self.documents[self.active_doc].engine.layer_infos();
}
Message::LayerToggleEditMask => {
self.documents[self.active_doc].engine.toggle_editing_mask();
self.documents[self.active_doc].cached_layers =
self.documents[self.active_doc].engine.layer_infos();
}
Message::LayerDelete(id) => {
self.documents[self.active_doc].engine.delete_layer(id);
self.documents[self.active_doc].modified = true;