Scroll bar
Scroll bar is used to represent a value on a finite range. It has a thumb that shows the current value on
on the bar. Usually it is used in pair with ScrollPanel
to create something like
ScrollViewer
widget. However, it could also be used to create sliders to show some
value that lies within some range.
Example
A simple example of how to create a new ScrollBar
could be something like this:
#![allow(unused)] fn main() { fn create_scroll_bar(ctx: &mut BuildContext) -> Handle<UiNode> { ScrollBarBuilder::new(WidgetBuilder::new()) .with_min(0.0) .with_max(200.0) .with_value(123.0) .build(ctx) } }
It creates a horizontal scroll bar with 123.0
value and a range of [0.0..200.0]
. To fetch the new value
of the scroll bar, use ScrollBarMessage::Value
message:
#![allow(unused)] fn main() { #[derive(Visit, Reflect, Debug, Default)] struct Game { scroll_bar: Handle<UiNode>, } impl Plugin for Game { fn on_ui_message(&mut self, context: &mut PluginContext, message: &UiMessage) { if let Some(ScrollBarMessage::Value(value)) = message.data() { if message.destination() == self.scroll_bar && message.direction() == MessageDirection::FromWidget { // // Insert handler code here. // } } } } }
Please note, that you need to explicitly filter messages by MessageDirection::FromWidget
, because it's the only
direction that is used as an "indicator" that the value was accepted by the scroll bar.
Orientation
Scroll bar could be either horizontal (default) or vertical. You can select the orientation when building
a scroll bar using ScrollBarBuilder::with_orientation
method and provide a desired value from Orientation
enum there.
Show values
By default, scroll bar does not show its actual value, you can turn it on using ScrollBarBuilder::show_value
method with true
as the first argument. To change rounding of the value, use ScrollBarBuilder::with_value_precision
and provide the desired number of decimal places there.
Step
Scroll bar provides arrows to change the current value using a fixed step value. You can change it using
ScrollBarBuilder::with_step
method.