Skip to content

Commit

Permalink
Merge pull request #2338 from derezzedex/feat/text-macro
Browse files Browse the repository at this point in the history
Introduce `text` macro
  • Loading branch information
hecrj authored May 23, 2024
2 parents 468794d + d8ba6b0 commit 663a081
Show file tree
Hide file tree
Showing 19 changed files with 90 additions and 58 deletions.
4 changes: 2 additions & 2 deletions examples/custom_quad/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ impl Example {
self.border_width,
self.shadow
),
text(format!("Radius: {tl:.2}/{tr:.2}/{br:.2}/{bl:.2}")),
text!("Radius: {tl:.2}/{tr:.2}/{br:.2}/{bl:.2}"),
slider(1.0..=100.0, tl, Message::RadiusTopLeftChanged).step(0.01),
slider(1.0..=100.0, tr, Message::RadiusTopRightChanged).step(0.01),
slider(1.0..=100.0, br, Message::RadiusBottomRightChanged)
Expand All @@ -174,7 +174,7 @@ impl Example {
.step(0.01),
slider(1.0..=10.0, self.border_width, Message::BorderWidthChanged)
.step(0.01),
text(format!("Shadow: {sx:.2}x{sy:.2}, {sr:.2}")),
text!("Shadow: {sx:.2}x{sy:.2}, {sr:.2}"),
slider(-100.0..=100.0, sx, Message::ShadowXOffsetChanged)
.step(0.01),
slider(-100.0..=100.0, sy, Message::ShadowYOffsetChanged)
Expand Down
2 changes: 1 addition & 1 deletion examples/custom_widget/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ impl Example {
fn view(&self) -> Element<Message> {
let content = column![
circle(self.radius),
text(format!("Radius: {:.2}", self.radius)),
text!("Radius: {:.2}", self.radius),
slider(1.0..=100.0, self.radius, Message::RadiusChanged).step(0.01),
]
.padding(20)
Expand Down
2 changes: 1 addition & 1 deletion examples/download_progress/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ impl Download {
.into()
}
State::Downloading { .. } => {
text(format!("Downloading... {current_progress:.2}%")).into()
text!("Downloading... {current_progress:.2}%").into()
}
State::Errored => column![
"Something went wrong :(",
Expand Down
2 changes: 1 addition & 1 deletion examples/events/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ impl Events {
let events = Column::with_children(
self.last
.iter()
.map(|event| text(format!("{event:?}")).size(40))
.map(|event| text!("{event:?}").size(40))
.map(Element::from),
);

Expand Down
2 changes: 1 addition & 1 deletion examples/game_of_life/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ fn view_controls<'a>(

let speed_controls = row![
slider(1.0..=1000.0, speed as f32, Message::SpeedChanged),
text(format!("x{speed}")).size(16),
text!("x{speed}").size(16),
]
.align_items(Alignment::Center)
.spacing(10);
Expand Down
4 changes: 1 addition & 3 deletions examples/integration/src/controls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,7 @@ impl Program for Controls {
container(
column![
text("Background color").color(Color::WHITE),
text(format!("{background_color:?}"))
.size(14)
.color(Color::WHITE),
text!("{background_color:?}").size(14).color(Color::WHITE),
text_input("Placeholder", &self.input)
.on_input(Message::InputChanged),
sliders,
Expand Down
2 changes: 1 addition & 1 deletion examples/lazy/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ impl App {
text_input("Add a new option", &self.input)
.on_input(Message::InputChanged)
.on_submit(Message::AddItem(self.input.clone())),
button(text(format!("Toggle Order ({})", self.order)))
button(text!("Toggle Order ({})", self.order))
.on_press(Message::ToggleOrder)
]
.spacing(10)
Expand Down
2 changes: 1 addition & 1 deletion examples/loading_spinners/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ impl LoadingSpinners {
Message::CycleDurationChanged(x / 100.0)
})
.width(200.0),
text(format!("{:.2}s", self.cycle_duration)),
text!("{:.2}s", self.cycle_duration),
]
.align_items(iced::Alignment::Center)
.spacing(20.0),
Expand Down
10 changes: 4 additions & 6 deletions examples/pane_grid/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -284,12 +284,10 @@ fn view_content<'a>(
.spacing(5)
.max_width(160);

let content = column![
text(format!("{}x{}", size.width, size.height)).size(24),
controls,
]
.spacing(10)
.align_items(Alignment::Center);
let content =
column![text!("{}x{}", size.width, size.height).size(24), controls,]
.spacing(10)
.align_items(Alignment::Center);

container(scrollable(content))
.center_y(Length::Fill)
Expand Down
4 changes: 1 addition & 3 deletions examples/pokedex/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,7 @@ impl Pokemon {
column![
row![
text(&self.name).size(30).width(Length::Fill),
text(format!("#{}", self.number))
.size(20)
.color([0.5, 0.5, 0.5]),
text!("#{}", self.number).size(20).color([0.5, 0.5, 0.5]),
]
.align_items(Alignment::Center)
.spacing(20),
Expand Down
2 changes: 1 addition & 1 deletion examples/screenshot/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ impl Example {
.push_maybe(
self.crop_error
.as_ref()
.map(|error| text(format!("Crop error! \n{error}"))),
.map(|error| text!("Crop error! \n{error}")),
)
.spacing(10)
.align_items(Alignment::Center);
Expand Down
2 changes: 1 addition & 1 deletion examples/sierpinski_triangle/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ impl SierpinskiEmulator {
.width(Length::Fill)
.height(Length::Fill),
row![
text(format!("Iteration: {:?}", self.graph.iteration)),
text!("Iteration: {:?}", self.graph.iteration),
slider(0..=10000, self.graph.iteration, Message::IterationSet)
]
.padding(10)
Expand Down
4 changes: 2 additions & 2 deletions examples/stopwatch/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -92,13 +92,13 @@ impl Stopwatch {

let seconds = self.duration.as_secs();

let duration = text(format!(
let duration = text!(
"{:0>2}:{:0>2}:{:0>2}.{:0>2}",
seconds / HOUR,
(seconds % HOUR) / MINUTE,
seconds % MINUTE,
self.duration.subsec_millis() / 10,
))
)
.size(40);

let button = |label| {
Expand Down
40 changes: 18 additions & 22 deletions examples/system_information/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,56 +45,56 @@ impl Example {
let content: Element<_> = match self {
Example::Loading => text("Loading...").size(40).into(),
Example::Loaded { information } => {
let system_name = text(format!(
let system_name = text!(
"System name: {}",
information
.system_name
.as_ref()
.unwrap_or(&"unknown".to_string())
));
);

let system_kernel = text(format!(
let system_kernel = text!(
"System kernel: {}",
information
.system_kernel
.as_ref()
.unwrap_or(&"unknown".to_string())
));
);

let system_version = text(format!(
let system_version = text!(
"System version: {}",
information
.system_version
.as_ref()
.unwrap_or(&"unknown".to_string())
));
);

let system_short_version = text(format!(
let system_short_version = text!(
"System short version: {}",
information
.system_short_version
.as_ref()
.unwrap_or(&"unknown".to_string())
));
);

let cpu_brand =
text(format!("Processor brand: {}", information.cpu_brand));
text!("Processor brand: {}", information.cpu_brand);

let cpu_cores = text(format!(
let cpu_cores = text!(
"Processor cores: {}",
information
.cpu_cores
.map_or("unknown".to_string(), |cores| cores
.to_string())
));
);

let memory_readable =
ByteSize::b(information.memory_total).to_string();

let memory_total = text(format!(
let memory_total = text!(
"Memory (total): {} bytes ({memory_readable})",
information.memory_total,
));
);

let memory_text = if let Some(memory_used) =
information.memory_used
Expand All @@ -106,17 +106,13 @@ impl Example {
String::from("None")
};

let memory_used = text(format!("Memory (used): {memory_text}"));
let memory_used = text!("Memory (used): {memory_text}");

let graphics_adapter = text(format!(
"Graphics adapter: {}",
information.graphics_adapter
));
let graphics_adapter =
text!("Graphics adapter: {}", information.graphics_adapter);

let graphics_backend = text(format!(
"Graphics backend: {}",
information.graphics_backend
));
let graphics_backend =
text!("Graphics backend: {}", information.graphics_backend);

column![
system_name.size(30),
Expand Down
2 changes: 1 addition & 1 deletion examples/toast/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ impl App {
subtitle(
"Timeout",
row![
text(format!("{:0>2} sec", self.timeout_secs)),
text!("{:0>2} sec", self.timeout_secs),
slider(
1.0..=30.0,
self.timeout_secs as f64,
Expand Down
4 changes: 2 additions & 2 deletions examples/todos/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -399,10 +399,10 @@ fn view_controls(tasks: &[Task], current_filter: Filter) -> Element<Message> {
};

row![
text(format!(
text!(
"{tasks_left} {} left",
if tasks_left == 1 { "task" } else { "tasks" }
))
)
.width(Length::Fill),
row![
filter_button("All", Filter::All, current_filter),
Expand Down
8 changes: 4 additions & 4 deletions examples/tour/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,7 @@ impl<'a> Step {

let spacing_section = column![
slider(0..=80, spacing, StepMessage::SpacingChanged),
text(format!("{spacing} px"))
text!("{spacing} px")
.width(Length::Fill)
.horizontal_alignment(alignment::Horizontal::Center),
]
Expand All @@ -456,7 +456,7 @@ impl<'a> Step {
fn text(size: u16, color: Color) -> Column<'a, StepMessage> {
let size_section = column![
"You can change its size:",
text(format!("This text is {size} pixels")).size(size),
text!("This text is {size} pixels").size(size),
slider(10..=70, size, StepMessage::TextSizeChanged),
]
.padding(20)
Expand All @@ -471,7 +471,7 @@ impl<'a> Step {

let color_section = column![
"And its color:",
text(format!("{color:?}")).color(color),
text!("{color:?}").color(color),
color_sliders,
]
.padding(20)
Expand Down Expand Up @@ -543,7 +543,7 @@ impl<'a> Step {
.push(ferris(width, filter_method))
.push(slider(100..=500, width, StepMessage::ImageWidthChanged))
.push(
text(format!("Width: {width} px"))
text!("Width: {width} px")
.width(Length::Fill)
.horizontal_alignment(alignment::Horizontal::Center),
)
Expand Down
6 changes: 1 addition & 5 deletions examples/vectorial_text/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,7 @@ impl VectorialText {
fn view(&self) -> Element<Message> {
let slider_with_label = |label, range, value, message: fn(f32) -> _| {
column![
row![
text(label),
horizontal_space(),
text(format!("{:.2}", value))
],
row![text(label), horizontal_space(), text!("{:.2}", value)],
slider(range, value, message).step(0.01)
]
.spacing(2)
Expand Down
46 changes: 46 additions & 0 deletions widget/src/helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,52 @@ macro_rules! stack {
);
}

/// Creates a new [`Text`] widget with the provided content.
///
/// [`Text`]: core::widget::Text
///
/// This macro uses the same syntax as [`format!`], but creates a new [`Text`] widget instead.
///
/// See [the formatting documentation in `std::fmt`](std::fmt)
/// for details of the macro argument syntax.
///
/// # Examples
///
/// ```no_run
/// # mod iced {
/// # pub struct Element<Message>(pub std::marker::PhantomData<Message>);
/// # pub mod widget {
/// # macro_rules! text {
/// # ($($arg:tt)*) => {unimplemented!()}
/// # }
/// # pub(crate) use text;
/// # }
/// # }
/// # struct Example;
/// # enum Message {}
/// use iced::Element;
/// use iced::widget::text;
///
/// impl Example {
/// fn view(&self) -> Element<Message> {
/// let simple = text!("Hello, world!");
///
/// let keyword = text!("Hello, {}", "world!");
///
/// let planet = "Earth";
/// let local_variable = text!("Hello, {planet}!");
/// // ...
/// # iced::Element(std::marker::PhantomData)
/// }
/// }
/// ```
#[macro_export]
macro_rules! text {
($($arg:tt)*) => {
$crate::Text::new(format!($($arg)*))
};
}

/// Creates a new [`Container`] with the provided content.
///
/// [`Container`]: crate::Container
Expand Down

0 comments on commit 663a081

Please sign in to comment.