emilk / egui

egui: an easy-to-use immediate mode GUI in Rust that runs on both web and native
https://www.egui.rs/
Apache License 2.0
20.61k stars 1.49k forks source link

feat(emath): Add `scale` and `scale2` to Rects #4673

Open zkldi opened 1 week ago

zkldi commented 1 week ago

I find myself wanting this API quite a lot, and I imagine it'll probably be useful for others.

What?

This PR adds Rect::scale and Rect::scale2 functions, which work a lot like expand, but instead multiply by a scale.

i.e.

rect.scale(2.0); // rect is 2x as big, still in same center
rect.scale2(vec2(1.5, 2.0)); // rect is 1.5x as big on x axis, 2.0x as big on y axis. still in same center

Why?

Before this you either had to write this yourself or use a expand in a cumbersome way:

rect.expand2(vec2(rect.width() * scale.x / 2.0, rect.height() * scale.y / 2.0));

I find myself wanting to scale things up by a factor frequently enough, and it seems like a useful addition to have a multiply-based variant of expand.

I realise this is pretty minor, but it seems useful enough to me!