diff --git a/src/renderer.rs b/src/renderer.rs index b6901070..65523672 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -368,7 +368,7 @@ impl Renderer<'_> { return; }; let color = self.state.theme.colors.highlight.get(); - self.base.fill_boxes(slice::from_ref(bounds), &color); + self.base.fill_scaled_boxes(slice::from_ref(bounds), &color); } pub fn render_surface(&mut self, surface: &WlSurface, x: i32, y: i32, bounds: Option<&Rect>) { diff --git a/src/renderer/renderer_base.rs b/src/renderer/renderer_base.rs index e29190ac..b61af34a 100644 --- a/src/renderer/renderer_base.rs +++ b/src/renderer/renderer_base.rs @@ -66,17 +66,28 @@ impl RendererBase<'_> { rect } + pub fn fill_scaled_boxes(&mut self, boxes: &[Rect], color: &Color) { + self.fill_boxes3(boxes, color, 0, 0, true); + } + pub fn fill_boxes(&mut self, boxes: &[Rect], color: &Color) { - self.fill_boxes2(boxes, color, 0, 0); + self.fill_boxes3(boxes, color, 0, 0, false); } pub fn fill_boxes2(&mut self, boxes: &[Rect], color: &Color, dx: i32, dy: i32) { + self.fill_boxes3(boxes, color, dx, dy, false); + } + + fn fill_boxes3(&mut self, boxes: &[Rect], color: &Color, dx: i32, dy: i32, scaled: bool) { if boxes.is_empty() || *color == Color::TRANSPARENT { return; } let (dx, dy) = self.scale_point(dx, dy); for bx in boxes { - let bx = self.scale_rect(*bx); + let bx = match scaled { + false => self.scale_rect(*bx), + true => *bx, + }; self.ops.push(GfxApiOpt::FillRect(FillRect { rect: FramebufferRect::new( (bx.x1() + dx) as f32,