Reduce aliasing when painting thin box outlines (#5484)
* Part of https://github.com/emilk/egui/issues/5164
This commit is contained in:
parent
450c6242e4
commit
e8029178b6
|
|
@ -1277,6 +1277,11 @@ impl Tessellator {
|
|||
((point * self.pixels_per_point - 0.5).round() + 0.5) / self.pixels_per_point
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub fn round_pos_to_pixel(&self, pos: Pos2) -> Pos2 {
|
||||
pos2(self.round_to_pixel(pos.x), self.round_to_pixel(pos.y))
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub fn round_pos_to_pixel_center(&self, pos: Pos2) -> Pos2 {
|
||||
pos2(
|
||||
|
|
@ -1702,6 +1707,20 @@ impl Tessellator {
|
|||
self.tessellate_line(line, stroke, out); // …and forth
|
||||
}
|
||||
} else {
|
||||
let rect = if !stroke.is_empty() && stroke.width < self.feathering {
|
||||
// Very thin rectangle strokes create extreme aliasing when they move around.
|
||||
// We can fix that by rounding the rectangle corners to pixel centers.
|
||||
// TODO(#5164): maybe do this for all shapes and stroke sizes
|
||||
// TODO(emilk): since we use StrokeKind::Outside, we should probably round the
|
||||
// corners after offsetting them with half the stroke width (see `translate_stroke_point`).
|
||||
Rect {
|
||||
min: self.round_pos_to_pixel_center(rect.min),
|
||||
max: self.round_pos_to_pixel_center(rect.max),
|
||||
}
|
||||
} else {
|
||||
rect
|
||||
};
|
||||
|
||||
let path = &mut self.scratchpad_path;
|
||||
path.clear();
|
||||
path::rounded_rectangle(&mut self.scratchpad_points, rect, rounding);
|
||||
|
|
|
|||
Loading…
Reference in New Issue