-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Rect::scale_from_center
#4673
Conversation
crates/emath/src/rect.rs
Outdated
/// Scale up by this factor in each direction, keeping the center | ||
#[must_use] | ||
pub fn scale(self, amnt: f32) -> Self { | ||
self.scale2(Vec2::splat(amnt)) | ||
} | ||
|
||
/// Scale up by this factor in each direction, keeping the center | ||
#[must_use] | ||
pub fn scale2(self, scale: Vec2) -> Self { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think these should be called scale_from_center[2]
, or take an Align2
to specify which corner is the fixpoint
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Renamed to scale_from_center
. I don't think taking an Align2
would be particularly useful (I can't think of a use case for wanting to scale up around non-center?), but I might be wrong on that.
scale
and scale2
to RectsRect:: scale_from_center
Sweet, thanks man! |
<!-- Please read the "Making a PR" section of [`CONTRIBUTING.md`](https://github.com/emilk/egui/blob/master/CONTRIBUTING.md) before opening a Pull Request! * Keep your PR:s small and focused. * The PR title is what ends up in the changelog, so make it descriptive! * If applicable, add a screenshot or gif. * If it is a non-trivial addition, consider adding a demo for it to `egui_demo_lib`, or a new example. * Do NOT open PR:s from your `master` branch, as that makes it hard for maintainers to add commits to your PR. * Remember to run `cargo fmt` and `cargo clippy`. * Open the PR as a draft until you have self-reviewed it and run `./scripts/check.sh`. * When you have addressed a PR comment, mark it as resolved. Please be patient! I will review your PR, but my time is limited! --> 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. ```rs 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: ```rs 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! --------- Co-authored-by: zkldi <[email protected]> Co-authored-by: Emil Ernerfeldt <[email protected]>
<!-- Please read the "Making a PR" section of [`CONTRIBUTING.md`](https://github.com/emilk/egui/blob/master/CONTRIBUTING.md) before opening a Pull Request! * Keep your PR:s small and focused. * The PR title is what ends up in the changelog, so make it descriptive! * If applicable, add a screenshot or gif. * If it is a non-trivial addition, consider adding a demo for it to `egui_demo_lib`, or a new example. * Do NOT open PR:s from your `master` branch, as that makes it hard for maintainers to add commits to your PR. * Remember to run `cargo fmt` and `cargo clippy`. * Open the PR as a draft until you have self-reviewed it and run `./scripts/check.sh`. * When you have addressed a PR comment, mark it as resolved. Please be patient! I will review your PR, but my time is limited! --> 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. ```rs 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: ```rs 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! --------- Co-authored-by: zkldi <[email protected]> Co-authored-by: Emil Ernerfeldt <[email protected]>
<!-- Please read the "Making a PR" section of [`CONTRIBUTING.md`](https://github.com/emilk/egui/blob/master/CONTRIBUTING.md) before opening a Pull Request! * Keep your PR:s small and focused. * The PR title is what ends up in the changelog, so make it descriptive! * If applicable, add a screenshot or gif. * If it is a non-trivial addition, consider adding a demo for it to `egui_demo_lib`, or a new example. * Do NOT open PR:s from your `master` branch, as that makes it hard for maintainers to add commits to your PR. * Remember to run `cargo fmt` and `cargo clippy`. * Open the PR as a draft until you have self-reviewed it and run `./scripts/check.sh`. * When you have addressed a PR comment, mark it as resolved. Please be patient! I will review your PR, but my time is limited! --> 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. ```rs 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: ```rs 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! --------- Co-authored-by: zkldi <[email protected]> Co-authored-by: Emil Ernerfeldt <[email protected]>
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
andRect::scale2
functions, which work a lot likeexpand
, but instead multiply by a scale.i.e.
Why?
Before this you either had to write this yourself or use a
expand
in a cumbersome way: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!