Skip to main content

Slider

Struct Slider 

Source
pub struct Slider<'a> { /* private fields */ }

Implementations§

Source§

impl<'a> Slider<'a>

Source

pub const fn new(id: Id, range: Range<f32>) -> Slider<'a>

Examples found in repository?
examples/ui.rs (line 239)
137async fn main() {
138    let mut data = Data::new();
139
140    let mut data0 = String::new();
141    let mut data1 = String::new();
142
143    let mut text0 = String::new();
144    let mut text1 = String::new();
145
146    let mut number0 = 0.;
147    let mut number1 = 0.;
148    let mut number2 = 0.;
149
150    let texture: Texture2D = load_texture("examples/ferris.png").await.unwrap();
151
152    loop {
153        clear_background(WHITE);
154
155        widgets::Window::new(hash!(), vec2(400., 200.), vec2(320., 400.))
156            .label("Shop")
157            .titlebar(true)
158            .ui(&mut *root_ui(), |ui| {
159                for i in 0..30 {
160                    Group::new(hash!("shop", i), Vec2::new(300., 80.)).ui(ui, |ui| {
161                        ui.label(Vec2::new(10., 10.), &format!("Item N {i}"));
162                        ui.label(Vec2::new(260., 40.), "10/10");
163                        ui.label(Vec2::new(200., 58.), &format!("{} kr", 800));
164                        if ui.button(Vec2::new(260., 55.), "buy") {
165                            data.inventory.push(format!("Item {i}"));
166                        }
167                    });
168                }
169            });
170
171        widgets::Window::new(hash!(), vec2(100., 220.), vec2(542., 430.))
172            .label("Fitting window")
173            .titlebar(true)
174            .ui(&mut *root_ui(), |ui| {
175                Group::new(hash!(), Vec2::new(230., 400.)).ui(ui, |ui| {
176                    data.slots(ui);
177                });
178                Group::new(hash!(), Vec2::new(280., 400.)).ui(ui, |ui| {
179                    data.inventory(ui);
180                });
181            });
182
183        widgets::Window::new(hash!(), vec2(470., 50.), vec2(300., 300.))
184            .label("Megaui Showcase Window")
185            .ui(&mut *root_ui(), |ui| {
186                ui.tree_node(hash!(), "input", |ui| {
187                    ui.label(None, "Some random text");
188                    if ui.button(None, "click me") {
189                        println!("hi");
190                    }
191
192                    ui.separator();
193
194                    ui.label(None, "Some other random text");
195                    if ui.button(None, "other button") {
196                        println!("hi2");
197                    }
198
199                    ui.separator();
200
201                    ui.input_text(hash!(), "<- input text 1", &mut data0);
202                    ui.input_text(hash!(), "<- input text 2", &mut data1);
203                    ui.label(None, &format!("Text entered: \"{data0}\" and \"{data1}\""));
204
205                    ui.separator();
206                });
207                ui.tree_node(hash!(), "buttons", |ui| {
208                    widgets::Button::new(texture.clone())
209                        .size(vec2(120., 70.))
210                        .ui(ui);
211                    ui.same_line(0.);
212                    widgets::Button::new("Button").size(vec2(120., 70.)).ui(ui);
213                    widgets::Button::new("Button").size(vec2(120., 70.)).ui(ui);
214                    ui.same_line(0.);
215                    widgets::Button::new(texture.clone())
216                        .size(vec2(120., 70.))
217                        .ui(ui);
218                });
219                ui.tree_node(hash!(), "sliders and bars", |ui| {
220                    let range0 = -10f32..10f32;
221                    ui.slider(hash!(), "[-10 .. 10]", range0.clone(), &mut number0);
222                    let progress0 = number0.remap(range0.start, range0.end, 0., 1.);
223                    ProgressBar::new().label("first bar").ui(
224                        ui,
225                        progress0,
226                        format!("{:.0}%", progress0 * 100.).as_str(),
227                    );
228
229                    let range1 = 0f32..100f32;
230                    ui.slider(hash!(), "[0 .. 100]", range1.clone(), &mut number1);
231                    let progress1 = number1.remap(range1.start, range1.end, 0., 1.);
232                    ProgressBar::new().label("second bar").ui(
233                        ui,
234                        progress1,
235                        format!("{:.1}/{:.0}", number1, range1.end).as_str(),
236                    );
237
238                    let range2 = 0f32..1f32;
239                    Slider::new(hash!(), range2.clone())
240                        .label_width(200.)
241                        .label("slider with a long label")
242                        .ui(ui, &mut number2);
243                    let progress2 = number2;
244                    ProgressBar::new()
245                        .label("bar with a really long label")
246                        .label_width(240.)
247                        .ui(ui, progress2, "");
248                });
249                ui.tree_node(hash!(), "editbox 1", |ui| {
250                    ui.label(None, "This is editbox!");
251                    ui.editbox(hash!(), vec2(285., 165.), &mut text0);
252                });
253                ui.tree_node(hash!(), "editbox 2", |ui| {
254                    ui.label(None, "This is editbox!");
255                    ui.editbox(hash!(), vec2(285., 165.), &mut text1);
256                });
257            });
258
259        match data.fit_command.take() {
260            Some(FittingCommand::Unfit { target_slot }) => data.set_item(target_slot, None),
261            Some(FittingCommand::Fit { target_slot, item }) => {
262                data.set_item(target_slot, Some(item));
263            }
264            Some(FittingCommand::Refit {
265                target_slot,
266                origin_slot,
267            }) => {
268                let origin_item = data
269                    .slots
270                    .iter()
271                    .find_map(|(_, slot)| {
272                        if slot.id == origin_slot {
273                            Some(slot.item.clone())
274                        } else {
275                            None
276                        }
277                    })
278                    .flatten();
279                data.set_item(target_slot, origin_item);
280                data.set_item(origin_slot, None);
281            }
282            None => {}
283        };
284
285        next_frame().await;
286    }
287}
Source

pub const fn label<'b>(self, label: &'b str) -> Slider<'b>

Examples found in repository?
examples/ui.rs (line 241)
137async fn main() {
138    let mut data = Data::new();
139
140    let mut data0 = String::new();
141    let mut data1 = String::new();
142
143    let mut text0 = String::new();
144    let mut text1 = String::new();
145
146    let mut number0 = 0.;
147    let mut number1 = 0.;
148    let mut number2 = 0.;
149
150    let texture: Texture2D = load_texture("examples/ferris.png").await.unwrap();
151
152    loop {
153        clear_background(WHITE);
154
155        widgets::Window::new(hash!(), vec2(400., 200.), vec2(320., 400.))
156            .label("Shop")
157            .titlebar(true)
158            .ui(&mut *root_ui(), |ui| {
159                for i in 0..30 {
160                    Group::new(hash!("shop", i), Vec2::new(300., 80.)).ui(ui, |ui| {
161                        ui.label(Vec2::new(10., 10.), &format!("Item N {i}"));
162                        ui.label(Vec2::new(260., 40.), "10/10");
163                        ui.label(Vec2::new(200., 58.), &format!("{} kr", 800));
164                        if ui.button(Vec2::new(260., 55.), "buy") {
165                            data.inventory.push(format!("Item {i}"));
166                        }
167                    });
168                }
169            });
170
171        widgets::Window::new(hash!(), vec2(100., 220.), vec2(542., 430.))
172            .label("Fitting window")
173            .titlebar(true)
174            .ui(&mut *root_ui(), |ui| {
175                Group::new(hash!(), Vec2::new(230., 400.)).ui(ui, |ui| {
176                    data.slots(ui);
177                });
178                Group::new(hash!(), Vec2::new(280., 400.)).ui(ui, |ui| {
179                    data.inventory(ui);
180                });
181            });
182
183        widgets::Window::new(hash!(), vec2(470., 50.), vec2(300., 300.))
184            .label("Megaui Showcase Window")
185            .ui(&mut *root_ui(), |ui| {
186                ui.tree_node(hash!(), "input", |ui| {
187                    ui.label(None, "Some random text");
188                    if ui.button(None, "click me") {
189                        println!("hi");
190                    }
191
192                    ui.separator();
193
194                    ui.label(None, "Some other random text");
195                    if ui.button(None, "other button") {
196                        println!("hi2");
197                    }
198
199                    ui.separator();
200
201                    ui.input_text(hash!(), "<- input text 1", &mut data0);
202                    ui.input_text(hash!(), "<- input text 2", &mut data1);
203                    ui.label(None, &format!("Text entered: \"{data0}\" and \"{data1}\""));
204
205                    ui.separator();
206                });
207                ui.tree_node(hash!(), "buttons", |ui| {
208                    widgets::Button::new(texture.clone())
209                        .size(vec2(120., 70.))
210                        .ui(ui);
211                    ui.same_line(0.);
212                    widgets::Button::new("Button").size(vec2(120., 70.)).ui(ui);
213                    widgets::Button::new("Button").size(vec2(120., 70.)).ui(ui);
214                    ui.same_line(0.);
215                    widgets::Button::new(texture.clone())
216                        .size(vec2(120., 70.))
217                        .ui(ui);
218                });
219                ui.tree_node(hash!(), "sliders and bars", |ui| {
220                    let range0 = -10f32..10f32;
221                    ui.slider(hash!(), "[-10 .. 10]", range0.clone(), &mut number0);
222                    let progress0 = number0.remap(range0.start, range0.end, 0., 1.);
223                    ProgressBar::new().label("first bar").ui(
224                        ui,
225                        progress0,
226                        format!("{:.0}%", progress0 * 100.).as_str(),
227                    );
228
229                    let range1 = 0f32..100f32;
230                    ui.slider(hash!(), "[0 .. 100]", range1.clone(), &mut number1);
231                    let progress1 = number1.remap(range1.start, range1.end, 0., 1.);
232                    ProgressBar::new().label("second bar").ui(
233                        ui,
234                        progress1,
235                        format!("{:.1}/{:.0}", number1, range1.end).as_str(),
236                    );
237
238                    let range2 = 0f32..1f32;
239                    Slider::new(hash!(), range2.clone())
240                        .label_width(200.)
241                        .label("slider with a long label")
242                        .ui(ui, &mut number2);
243                    let progress2 = number2;
244                    ProgressBar::new()
245                        .label("bar with a really long label")
246                        .label_width(240.)
247                        .ui(ui, progress2, "");
248                });
249                ui.tree_node(hash!(), "editbox 1", |ui| {
250                    ui.label(None, "This is editbox!");
251                    ui.editbox(hash!(), vec2(285., 165.), &mut text0);
252                });
253                ui.tree_node(hash!(), "editbox 2", |ui| {
254                    ui.label(None, "This is editbox!");
255                    ui.editbox(hash!(), vec2(285., 165.), &mut text1);
256                });
257            });
258
259        match data.fit_command.take() {
260            Some(FittingCommand::Unfit { target_slot }) => data.set_item(target_slot, None),
261            Some(FittingCommand::Fit { target_slot, item }) => {
262                data.set_item(target_slot, Some(item));
263            }
264            Some(FittingCommand::Refit {
265                target_slot,
266                origin_slot,
267            }) => {
268                let origin_item = data
269                    .slots
270                    .iter()
271                    .find_map(|(_, slot)| {
272                        if slot.id == origin_slot {
273                            Some(slot.item.clone())
274                        } else {
275                            None
276                        }
277                    })
278                    .flatten();
279                data.set_item(target_slot, origin_item);
280                data.set_item(origin_slot, None);
281            }
282            None => {}
283        };
284
285        next_frame().await;
286    }
287}
Source

pub const fn label_width(self, width: f32) -> Self

Examples found in repository?
examples/ui.rs (line 240)
137async fn main() {
138    let mut data = Data::new();
139
140    let mut data0 = String::new();
141    let mut data1 = String::new();
142
143    let mut text0 = String::new();
144    let mut text1 = String::new();
145
146    let mut number0 = 0.;
147    let mut number1 = 0.;
148    let mut number2 = 0.;
149
150    let texture: Texture2D = load_texture("examples/ferris.png").await.unwrap();
151
152    loop {
153        clear_background(WHITE);
154
155        widgets::Window::new(hash!(), vec2(400., 200.), vec2(320., 400.))
156            .label("Shop")
157            .titlebar(true)
158            .ui(&mut *root_ui(), |ui| {
159                for i in 0..30 {
160                    Group::new(hash!("shop", i), Vec2::new(300., 80.)).ui(ui, |ui| {
161                        ui.label(Vec2::new(10., 10.), &format!("Item N {i}"));
162                        ui.label(Vec2::new(260., 40.), "10/10");
163                        ui.label(Vec2::new(200., 58.), &format!("{} kr", 800));
164                        if ui.button(Vec2::new(260., 55.), "buy") {
165                            data.inventory.push(format!("Item {i}"));
166                        }
167                    });
168                }
169            });
170
171        widgets::Window::new(hash!(), vec2(100., 220.), vec2(542., 430.))
172            .label("Fitting window")
173            .titlebar(true)
174            .ui(&mut *root_ui(), |ui| {
175                Group::new(hash!(), Vec2::new(230., 400.)).ui(ui, |ui| {
176                    data.slots(ui);
177                });
178                Group::new(hash!(), Vec2::new(280., 400.)).ui(ui, |ui| {
179                    data.inventory(ui);
180                });
181            });
182
183        widgets::Window::new(hash!(), vec2(470., 50.), vec2(300., 300.))
184            .label("Megaui Showcase Window")
185            .ui(&mut *root_ui(), |ui| {
186                ui.tree_node(hash!(), "input", |ui| {
187                    ui.label(None, "Some random text");
188                    if ui.button(None, "click me") {
189                        println!("hi");
190                    }
191
192                    ui.separator();
193
194                    ui.label(None, "Some other random text");
195                    if ui.button(None, "other button") {
196                        println!("hi2");
197                    }
198
199                    ui.separator();
200
201                    ui.input_text(hash!(), "<- input text 1", &mut data0);
202                    ui.input_text(hash!(), "<- input text 2", &mut data1);
203                    ui.label(None, &format!("Text entered: \"{data0}\" and \"{data1}\""));
204
205                    ui.separator();
206                });
207                ui.tree_node(hash!(), "buttons", |ui| {
208                    widgets::Button::new(texture.clone())
209                        .size(vec2(120., 70.))
210                        .ui(ui);
211                    ui.same_line(0.);
212                    widgets::Button::new("Button").size(vec2(120., 70.)).ui(ui);
213                    widgets::Button::new("Button").size(vec2(120., 70.)).ui(ui);
214                    ui.same_line(0.);
215                    widgets::Button::new(texture.clone())
216                        .size(vec2(120., 70.))
217                        .ui(ui);
218                });
219                ui.tree_node(hash!(), "sliders and bars", |ui| {
220                    let range0 = -10f32..10f32;
221                    ui.slider(hash!(), "[-10 .. 10]", range0.clone(), &mut number0);
222                    let progress0 = number0.remap(range0.start, range0.end, 0., 1.);
223                    ProgressBar::new().label("first bar").ui(
224                        ui,
225                        progress0,
226                        format!("{:.0}%", progress0 * 100.).as_str(),
227                    );
228
229                    let range1 = 0f32..100f32;
230                    ui.slider(hash!(), "[0 .. 100]", range1.clone(), &mut number1);
231                    let progress1 = number1.remap(range1.start, range1.end, 0., 1.);
232                    ProgressBar::new().label("second bar").ui(
233                        ui,
234                        progress1,
235                        format!("{:.1}/{:.0}", number1, range1.end).as_str(),
236                    );
237
238                    let range2 = 0f32..1f32;
239                    Slider::new(hash!(), range2.clone())
240                        .label_width(200.)
241                        .label("slider with a long label")
242                        .ui(ui, &mut number2);
243                    let progress2 = number2;
244                    ProgressBar::new()
245                        .label("bar with a really long label")
246                        .label_width(240.)
247                        .ui(ui, progress2, "");
248                });
249                ui.tree_node(hash!(), "editbox 1", |ui| {
250                    ui.label(None, "This is editbox!");
251                    ui.editbox(hash!(), vec2(285., 165.), &mut text0);
252                });
253                ui.tree_node(hash!(), "editbox 2", |ui| {
254                    ui.label(None, "This is editbox!");
255                    ui.editbox(hash!(), vec2(285., 165.), &mut text1);
256                });
257            });
258
259        match data.fit_command.take() {
260            Some(FittingCommand::Unfit { target_slot }) => data.set_item(target_slot, None),
261            Some(FittingCommand::Fit { target_slot, item }) => {
262                data.set_item(target_slot, Some(item));
263            }
264            Some(FittingCommand::Refit {
265                target_slot,
266                origin_slot,
267            }) => {
268                let origin_item = data
269                    .slots
270                    .iter()
271                    .find_map(|(_, slot)| {
272                        if slot.id == origin_slot {
273                            Some(slot.item.clone())
274                        } else {
275                            None
276                        }
277                    })
278                    .flatten();
279                data.set_item(target_slot, origin_item);
280                data.set_item(origin_slot, None);
281            }
282            None => {}
283        };
284
285        next_frame().await;
286    }
287}
Source

pub fn ui(self, ui: &mut Ui, data: &mut f32)

Examples found in repository?
examples/ui.rs (line 242)
137async fn main() {
138    let mut data = Data::new();
139
140    let mut data0 = String::new();
141    let mut data1 = String::new();
142
143    let mut text0 = String::new();
144    let mut text1 = String::new();
145
146    let mut number0 = 0.;
147    let mut number1 = 0.;
148    let mut number2 = 0.;
149
150    let texture: Texture2D = load_texture("examples/ferris.png").await.unwrap();
151
152    loop {
153        clear_background(WHITE);
154
155        widgets::Window::new(hash!(), vec2(400., 200.), vec2(320., 400.))
156            .label("Shop")
157            .titlebar(true)
158            .ui(&mut *root_ui(), |ui| {
159                for i in 0..30 {
160                    Group::new(hash!("shop", i), Vec2::new(300., 80.)).ui(ui, |ui| {
161                        ui.label(Vec2::new(10., 10.), &format!("Item N {i}"));
162                        ui.label(Vec2::new(260., 40.), "10/10");
163                        ui.label(Vec2::new(200., 58.), &format!("{} kr", 800));
164                        if ui.button(Vec2::new(260., 55.), "buy") {
165                            data.inventory.push(format!("Item {i}"));
166                        }
167                    });
168                }
169            });
170
171        widgets::Window::new(hash!(), vec2(100., 220.), vec2(542., 430.))
172            .label("Fitting window")
173            .titlebar(true)
174            .ui(&mut *root_ui(), |ui| {
175                Group::new(hash!(), Vec2::new(230., 400.)).ui(ui, |ui| {
176                    data.slots(ui);
177                });
178                Group::new(hash!(), Vec2::new(280., 400.)).ui(ui, |ui| {
179                    data.inventory(ui);
180                });
181            });
182
183        widgets::Window::new(hash!(), vec2(470., 50.), vec2(300., 300.))
184            .label("Megaui Showcase Window")
185            .ui(&mut *root_ui(), |ui| {
186                ui.tree_node(hash!(), "input", |ui| {
187                    ui.label(None, "Some random text");
188                    if ui.button(None, "click me") {
189                        println!("hi");
190                    }
191
192                    ui.separator();
193
194                    ui.label(None, "Some other random text");
195                    if ui.button(None, "other button") {
196                        println!("hi2");
197                    }
198
199                    ui.separator();
200
201                    ui.input_text(hash!(), "<- input text 1", &mut data0);
202                    ui.input_text(hash!(), "<- input text 2", &mut data1);
203                    ui.label(None, &format!("Text entered: \"{data0}\" and \"{data1}\""));
204
205                    ui.separator();
206                });
207                ui.tree_node(hash!(), "buttons", |ui| {
208                    widgets::Button::new(texture.clone())
209                        .size(vec2(120., 70.))
210                        .ui(ui);
211                    ui.same_line(0.);
212                    widgets::Button::new("Button").size(vec2(120., 70.)).ui(ui);
213                    widgets::Button::new("Button").size(vec2(120., 70.)).ui(ui);
214                    ui.same_line(0.);
215                    widgets::Button::new(texture.clone())
216                        .size(vec2(120., 70.))
217                        .ui(ui);
218                });
219                ui.tree_node(hash!(), "sliders and bars", |ui| {
220                    let range0 = -10f32..10f32;
221                    ui.slider(hash!(), "[-10 .. 10]", range0.clone(), &mut number0);
222                    let progress0 = number0.remap(range0.start, range0.end, 0., 1.);
223                    ProgressBar::new().label("first bar").ui(
224                        ui,
225                        progress0,
226                        format!("{:.0}%", progress0 * 100.).as_str(),
227                    );
228
229                    let range1 = 0f32..100f32;
230                    ui.slider(hash!(), "[0 .. 100]", range1.clone(), &mut number1);
231                    let progress1 = number1.remap(range1.start, range1.end, 0., 1.);
232                    ProgressBar::new().label("second bar").ui(
233                        ui,
234                        progress1,
235                        format!("{:.1}/{:.0}", number1, range1.end).as_str(),
236                    );
237
238                    let range2 = 0f32..1f32;
239                    Slider::new(hash!(), range2.clone())
240                        .label_width(200.)
241                        .label("slider with a long label")
242                        .ui(ui, &mut number2);
243                    let progress2 = number2;
244                    ProgressBar::new()
245                        .label("bar with a really long label")
246                        .label_width(240.)
247                        .ui(ui, progress2, "");
248                });
249                ui.tree_node(hash!(), "editbox 1", |ui| {
250                    ui.label(None, "This is editbox!");
251                    ui.editbox(hash!(), vec2(285., 165.), &mut text0);
252                });
253                ui.tree_node(hash!(), "editbox 2", |ui| {
254                    ui.label(None, "This is editbox!");
255                    ui.editbox(hash!(), vec2(285., 165.), &mut text1);
256                });
257            });
258
259        match data.fit_command.take() {
260            Some(FittingCommand::Unfit { target_slot }) => data.set_item(target_slot, None),
261            Some(FittingCommand::Fit { target_slot, item }) => {
262                data.set_item(target_slot, Some(item));
263            }
264            Some(FittingCommand::Refit {
265                target_slot,
266                origin_slot,
267            }) => {
268                let origin_item = data
269                    .slots
270                    .iter()
271                    .find_map(|(_, slot)| {
272                        if slot.id == origin_slot {
273                            Some(slot.item.clone())
274                        } else {
275                            None
276                        }
277                    })
278                    .flatten();
279                data.set_item(target_slot, origin_item);
280                data.set_item(origin_slot, None);
281            }
282            None => {}
283        };
284
285        next_frame().await;
286    }
287}

Auto Trait Implementations§

§

impl<'a> Freeze for Slider<'a>

§

impl<'a> RefUnwindSafe for Slider<'a>

§

impl<'a> Send for Slider<'a>

§

impl<'a> Sync for Slider<'a>

§

impl<'a> Unpin for Slider<'a>

§

impl<'a> UnsafeUnpin for Slider<'a>

§

impl<'a> UnwindSafe for Slider<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<S> FromSample<S> for S

Source§

fn from_sample_(s: S) -> S

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

Source§

fn to_sample_(self) -> U

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,