b09795ccff
- Add `persistence.rs` for stable serialization of dock layouts without runtime identifiers. - Introduce `preview.rs` for geometry handling of dock drop previews. - Create `sizing.rs` to manage content-aware sizing policies and constraint solving for dock panels. - Implement `welcome.rs` to provide a welcome surface when no documents are open, featuring New and Open actions.
118 lines
3.3 KiB
Rust
118 lines
3.3 KiB
Rust
use std::sync::atomic::AtomicBool;
|
|
use std::sync::Mutex;
|
|
|
|
#[test]
|
|
fn test_composite_basic() {
|
|
use hcie_protocol::BlendMode;
|
|
|
|
let layer = hcie_protocol::Layer {
|
|
name: "Red".into(),
|
|
layer_type: hcie_protocol::LayerType::Raster,
|
|
data: hcie_protocol::LayerData::Raster,
|
|
pixels: vec![
|
|
255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255,
|
|
],
|
|
width: 2,
|
|
height: 2,
|
|
visible: true,
|
|
opacity: 1.0,
|
|
blend_mode: BlendMode::Normal,
|
|
locked: false,
|
|
dirty: false,
|
|
id: 0,
|
|
parent_id: None,
|
|
styles: vec![],
|
|
clipping_mask: false,
|
|
collapsed: false,
|
|
adjustment: None,
|
|
mask_pixels: None,
|
|
mask_bounds: None,
|
|
mask_default_color: 0,
|
|
curve_points: vec![],
|
|
fill_opacity: 1.0,
|
|
effects: vec![],
|
|
effects_dirty: AtomicBool::new(true),
|
|
effects_cache: Mutex::new(None),
|
|
adjustment_raw: None,
|
|
is_section_divider: false,
|
|
image_resources_raw: None,
|
|
};
|
|
let layers = vec![layer];
|
|
let out = crate::composite_layers(&layers, 2, 2);
|
|
assert_eq!(
|
|
out,
|
|
vec![255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255]
|
|
);
|
|
|
|
let layer0 = hcie_protocol::Layer {
|
|
name: "Red".into(),
|
|
layer_type: hcie_protocol::LayerType::Raster,
|
|
data: hcie_protocol::LayerData::Raster,
|
|
pixels: vec![
|
|
255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255,
|
|
],
|
|
width: 2,
|
|
height: 2,
|
|
visible: true,
|
|
opacity: 1.0,
|
|
blend_mode: BlendMode::Normal,
|
|
locked: false,
|
|
dirty: false,
|
|
id: 0,
|
|
parent_id: None,
|
|
styles: vec![],
|
|
clipping_mask: false,
|
|
collapsed: false,
|
|
adjustment: None,
|
|
mask_pixels: None,
|
|
mask_bounds: None,
|
|
mask_default_color: 0,
|
|
curve_points: vec![],
|
|
fill_opacity: 1.0,
|
|
effects: vec![],
|
|
effects_dirty: AtomicBool::new(true),
|
|
effects_cache: Mutex::new(None),
|
|
adjustment_raw: None,
|
|
is_section_divider: false,
|
|
image_resources_raw: None,
|
|
};
|
|
let layer1 = hcie_protocol::Layer {
|
|
name: "Blue".into(),
|
|
layer_type: hcie_protocol::LayerType::Raster,
|
|
data: hcie_protocol::LayerData::Raster,
|
|
pixels: vec![
|
|
0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255,
|
|
],
|
|
width: 2,
|
|
height: 2,
|
|
visible: true,
|
|
opacity: 1.0,
|
|
blend_mode: BlendMode::Normal,
|
|
locked: false,
|
|
dirty: false,
|
|
id: 0,
|
|
parent_id: None,
|
|
styles: vec![],
|
|
clipping_mask: false,
|
|
collapsed: false,
|
|
adjustment: None,
|
|
mask_pixels: None,
|
|
mask_bounds: None,
|
|
mask_default_color: 0,
|
|
curve_points: vec![],
|
|
fill_opacity: 1.0,
|
|
effects: vec![],
|
|
effects_dirty: AtomicBool::new(true),
|
|
effects_cache: Mutex::new(None),
|
|
adjustment_raw: None,
|
|
is_section_divider: false,
|
|
image_resources_raw: None,
|
|
};
|
|
let layers2 = vec![layer0, layer1];
|
|
let out2 = crate::composite_layers(&layers2, 2, 2);
|
|
assert_eq!(
|
|
out2,
|
|
vec![0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255]
|
|
);
|
|
}
|