Skip to content

Commit

Permalink
Add a Display impl for Vec2, Pos2, and Rect (#4428)
Browse files Browse the repository at this point in the history
These three types currently have a `Debug` implementation that only ever
prints one decimal point. Sometimes it is useful to see more of the
number, or otherwise have specific formatting.

Add `Display` implementations that pass the format specification to the
member `f32`s for an easier way to control what is shown when debugging.

This allows doing e.g. `ui.label(format!("{:.4}", rect * scale))` which
currently prints zeroes if scale is small.
  • Loading branch information
tgross35 authored Apr 29, 2024
1 parent af39bd2 commit 2fabde1
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 6 deletions.
16 changes: 14 additions & 2 deletions crates/emath/src/pos2.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use std::fmt;
use std::ops::{Add, AddAssign, Sub, SubAssign};

use crate::*;
Expand Down Expand Up @@ -316,8 +317,19 @@ impl Div<f32> for Pos2 {
}
}

impl std::fmt::Debug for Pos2 {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
impl fmt::Debug for Pos2 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "[{:.1} {:.1}]", self.x, self.y)
}
}

impl fmt::Display for Pos2 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str("[")?;
self.x.fmt(f)?;
f.write_str(" ")?;
self.y.fmt(f)?;
f.write_str("]")?;
Ok(())
}
}
16 changes: 14 additions & 2 deletions crates/emath/src/rect.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use std::f32::INFINITY;
use std::fmt;

use crate::*;

Expand Down Expand Up @@ -631,12 +632,23 @@ impl Rect {
}
}

impl std::fmt::Debug for Rect {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
impl fmt::Debug for Rect {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "[{:?} - {:?}]", self.min, self.max)
}
}

impl fmt::Display for Rect {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str("[")?;
self.min.fmt(f)?;
f.write_str(" - ")?;
self.max.fmt(f)?;
f.write_str("]")?;
Ok(())
}
}

/// from (min, max) or (left top, right bottom)
impl From<[Pos2; 2]> for Rect {
#[inline]
Expand Down
16 changes: 14 additions & 2 deletions crates/emath/src/vec2.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use std::fmt;
use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Neg, Sub, SubAssign};

use crate::Vec2b;
Expand Down Expand Up @@ -464,12 +465,23 @@ impl Div<f32> for Vec2 {
}
}

impl std::fmt::Debug for Vec2 {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
impl fmt::Debug for Vec2 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "[{:.1} {:.1}]", self.x, self.y)
}
}

impl fmt::Display for Vec2 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str("[")?;
self.x.fmt(f)?;
f.write_str(" ")?;
self.y.fmt(f)?;
f.write_str("]")?;
Ok(())
}
}

#[test]
fn test_vec2() {
macro_rules! almost_eq {
Expand Down

0 comments on commit 2fabde1

Please sign in to comment.