修复顺时针径向填充角度

让 Radial180 与 Radial360 顺时针导出起始角与编辑器预览一致

保留逆时针角度并补方向回归测试
This commit is contained in:
2026-09-01 19:57:54 +08:00
parent 13f23a1fad
commit 8ce775c08e
@@ -108,19 +108,60 @@ fn fill_clip_path(method: &FillMethod, amount: f32) -> Option<String> {
90.0,
)),
FillMethod::Radial180 { origin, clockwise } => Some(conic_mask(
radial_origin_angle_180(*origin),
radial_origin_angle_180(*origin) - if *clockwise { 90.0 } else { 0.0 },
*clockwise,
amount,
180.0,
)),
FillMethod::Radial360 { origin, clockwise } => Some(conic_mask(
radial_origin_angle_360(*origin),
radial_origin_angle_360(*origin) - if *clockwise { 90.0 } else { 0.0 },
*clockwise,
amount,
360.0,
)),
}
}
#[cfg(test)]
mod tests {
use super::{fill_clip_path, FillMethod, Radial180Origin, Radial360Origin};
#[test]
fn clockwise_radial_180_and_360_start_ninety_degrees_before_origin() {
let radial_180 = fill_clip_path(
&FillMethod::Radial180 {
origin: Radial180Origin::Top,
clockwise: true,
},
0.5,
)
.unwrap();
let radial_360 = fill_clip_path(
&FillMethod::Radial360 {
origin: Radial360Origin::Right,
clockwise: true,
},
0.25,
)
.unwrap();
assert!(radial_180.contains("from -90deg"));
assert!(radial_360.contains("from 0deg"));
}
#[test]
fn counter_clockwise_radial_start_angles_remain_unchanged() {
let radial_180 = fill_clip_path(
&FillMethod::Radial180 {
origin: Radial180Origin::Top,
clockwise: false,
},
0.5,
)
.unwrap();
assert!(radial_180.contains("from -90deg"));
}
}
fn conic_mask(origin: f32, clockwise: bool, amount: f32, max_sweep: f32) -> String {
let sweep = amount * max_sweep;
let start = if clockwise { origin } else { origin - sweep };