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
+33
View File
@@ -0,0 +1,33 @@
use hcie_engine_api::Engine;
#[test]
fn test_layer_mask_api_and_editing() {
let mut engine = Engine::new(100, 100);
let layer_id = engine.active_layer_id();
// Initially layer has no mask
assert!(!engine.has_layer_mask(layer_id));
assert!(engine.get_layer_mask_pixels(layer_id).is_none());
// Add layer mask
engine.add_layer_mask(layer_id);
assert!(engine.has_layer_mask(layer_id));
let mask = engine.get_layer_mask_pixels(layer_id).expect("Mask pixels must exist");
assert_eq!(mask.len(), 100 * 100);
assert_eq!(mask[0], 255);
// Toggle mask editing mode
assert!(!engine.is_editing_mask());
engine.set_editing_mask(true);
assert!(engine.is_editing_mask());
// Set custom mask pixels
let custom_mask = vec![128u8; 100 * 100];
engine.set_layer_mask_pixels(layer_id, custom_mask.clone(), Some([0, 0, 100, 100]));
assert_eq!(engine.get_layer_mask_pixels(layer_id), Some(custom_mask.as_slice()));
// Remove layer mask
engine.remove_layer_mask(layer_id);
assert!(!engine.has_layer_mask(layer_id));
assert!(engine.get_layer_mask_pixels(layer_id).is_none());
}