diff --git a/src/core/mask.rs b/src/core/mask.rs index 3cdad7d..6a7c170 100644 --- a/src/core/mask.rs +++ b/src/core/mask.rs @@ -6,6 +6,7 @@ pub struct Masked { impl Widget for Masked { fn draw(&mut self, painter: &mut Painter) { + println!("yahoo! {}", painter.region()); painter.set_mask(painter.region()); painter.widget(&self.inner); } diff --git a/src/render/shader.wgsl b/src/render/shader.wgsl index 238b601..197d101 100644 --- a/src/render/shader.wgsl +++ b/src/render/shader.wgsl @@ -21,8 +21,18 @@ struct TextureInfo { } struct Mask { - top_left: UiVec2, - bot_right: UiVec2, + x: UiSpan, + y: UiSpan, +} + +struct UiSpan { + start: UiScalar, + end: UiScalar, +} + +struct UiScalar { + rel: f32, + abs: f32, } struct UiVec2 { @@ -121,8 +131,11 @@ fn fs_main( } if in.mask_idx != 4294967295u { let mask = masks[in.mask_idx]; - let top_left = floor(mask.top_left.rel * window.dim) + floor(mask.top_left.abs); - let bot_right = floor(mask.bot_right.rel * window.dim) + floor(mask.bot_right.abs); + let tl = UiVec2(vec2(mask.x.start.rel, mask.y.start.rel), vec2(mask.x.start.abs, mask.y.start.abs)); + let br = UiVec2(vec2(mask.x.end.rel, mask.y.end.rel), vec2(mask.x.end.abs, mask.y.end.abs)); + + let top_left = floor(tl.rel * window.dim) + floor(tl.abs); + let bot_right = floor(br.rel * window.dim) + floor(br.abs); if pos.x < top_left.x || pos.x > bot_right.x || pos.y < top_left.y || pos.y > bot_right.y { color *= 0.0; }