From 4db9b82435da6d9cd8fdaebc7851a1503f27e765 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sat, 12 Dec 2020 19:34:18 +0100 Subject: [PATCH] [button] Implement paint culling for buttons --- egui/src/widgets/mod.rs | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/egui/src/widgets/mod.rs b/egui/src/widgets/mod.rs index 6a0e8932..85faeb31 100644 --- a/egui/src/widgets/mod.rs +++ b/egui/src/widgets/mod.rs @@ -389,28 +389,30 @@ impl Widget for Button { let id = ui.make_position_id(); let response = ui.interact(rect, id, sense); - let visuals = ui.style().interact(&response); - let text_cursor = ui - .layout() - .align_size_within_rect(galley.size, response.rect.shrink2(button_padding)) - .min; + if ui.clip_rect().intersects(rect) { + let visuals = ui.style().interact(&response); + let text_cursor = ui + .layout() + .align_size_within_rect(galley.size, response.rect.shrink2(button_padding)) + .min; - if frame { - let fill = fill.unwrap_or(visuals.bg_fill); - ui.painter().rect( - response.rect, - visuals.corner_radius, - fill, - visuals.bg_stroke, - ); + if frame { + let fill = fill.unwrap_or(visuals.bg_fill); + ui.painter().rect( + response.rect, + visuals.corner_radius, + fill, + visuals.bg_stroke, + ); + } + + let text_color = text_color + .or(ui.style().visuals.override_text_color) + .unwrap_or_else(|| visuals.text_color()); + ui.painter() + .galley(text_cursor, galley, text_style, text_color); } - let text_color = text_color - .or(ui.style().visuals.override_text_color) - .unwrap_or_else(|| visuals.text_color()); - ui.painter() - .galley(text_cursor, galley, text_style, text_color); - response } }