From 9b404159c526a96aeff99191f12fc42d41537c1d Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Wed, 22 Apr 2020 19:40:22 +0200 Subject: [PATCH] Expand clip_rects slightly to allow widgets just on the border --- emigui/README.md | 14 +++----------- emigui/src/region.rs | 6 +++++- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/emigui/README.md b/emigui/README.md index 84527677..674a0055 100644 --- a/emigui/README.md +++ b/emigui/README.md @@ -7,7 +7,8 @@ This is the core library crate Emigui. It is fully platform independent without * [x] Button * [x] Checkbox * [x] Radiobutton -* [x] Slider +* [x] Horizontal slider +* [ ] Vertical slider * [x] Collapsing header region * [x] Tooltip * [x] Movable/resizable windows @@ -32,16 +33,7 @@ Add extremely quick animations for some things, maybe 2-3 frames. For instance: * [x] Separate Region::clip_rect from Region::rect * [x] Use clip rectangles when painting * [ ] Use clip rectangles when interacting - -When drawing children, they are drawn just on the edge of the clip rect. -This means e.g. the leftmost side of a button or slider handle is clipped. -We can fix this in three ways: - -* A) Each component minds its bounds, so button offset their position by their outline width + one pixel for AA -* B) Each region enlarges the clip_rect slightly to handle inner children -* C) Each region shrinks its rect slightly so children move further in in child regions (creates unintentional indentation. ugh) - -I think A) is the correct solution, but might be tedious to get right for every component. For instance, the outline may grow on mouse-over, but we don't want to move the component as a consequence. +* [x] Adjust clip rects so edges of child widgets aren't clipped ### Other * [ ] Generalize Layout so we can create grid layouts etc diff --git a/emigui/src/region.rs b/emigui/src/region.rs index 86abf7b3..fc9e512c 100644 --- a/emigui/src/region.rs +++ b/emigui/src/region.rs @@ -71,12 +71,16 @@ impl Region { } pub fn child_region(&self, child_rect: Rect) -> Self { + // Allow child widgets to be just on the border and still have an outline with some thickness + const CLIP_RECT_MARGIN: f32 = 3.0; Region { ctx: self.ctx.clone(), layer: self.layer, style: self.style, id: self.id, - clip_rect: self.clip_rect.intersect(child_rect), + clip_rect: self + .clip_rect + .intersect(child_rect.expand(CLIP_RECT_MARGIN)), desired_rect: child_rect, cursor: child_rect.min(), bounding_size: vec2(0.0, 0.0),