diff --git a/uidev/assets/gui/various_widgets.xml b/uidev/assets/gui/various_widgets.xml
index 65cefb4..d13a5e0 100644
--- a/uidev/assets/gui/various_widgets.xml
+++ b/uidev/assets/gui/various_widgets.xml
@@ -72,8 +72,8 @@
-
-
+
+
diff --git a/wgui/doc/widgets.md b/wgui/doc/widgets.md
index f9e8ef7..ae8b2c1 100644
--- a/wgui/doc/widgets.md
+++ b/wgui/doc/widgets.md
@@ -298,6 +298,10 @@ _Needs to be bigger than `min_value`_
_Initial slider value_
+`show_value`: "1" | "0"
+
+_Set to 0 if you don't want to display value text in the slider handle_
+
---
## Checkbox component
diff --git a/wgui/src/components/slider.rs b/wgui/src/components/slider.rs
index bc2b69f..ad9ee40 100644
--- a/wgui/src/components/slider.rs
+++ b/wgui/src/components/slider.rs
@@ -69,6 +69,7 @@ impl ValuesMinMax {
pub struct Params {
pub style: taffy::Style,
pub values: ValuesMinMax,
+ pub show_value: bool,
}
struct State {
@@ -80,8 +81,8 @@ struct State {
struct Data {
body_node: taffy::NodeId,
- slider_handle_rect_id: WidgetID, // Rectangle
- slider_text_id: WidgetID, // Text
+ slider_handle_rect_id: WidgetID, // Rectangle
+ slider_text_id: Option, // Text
slider_handle_id: WidgetID,
slider_handle_node_id: taffy::NodeId,
}
@@ -226,7 +227,9 @@ impl State {
common.alterables.mark_dirty(data.slider_handle_node_id);
common.alterables.mark_redraw();
- if let Some(mut label) = common.state.widgets.get_as::(data.slider_text_id) {
+ if let Some(slider_text_id) = data.slider_text_id
+ && let Some(mut label) = common.state.widgets.get_as::(slider_text_id)
+ {
Self::update_text(common, &mut label, self.values.value);
}
@@ -471,29 +474,34 @@ pub fn construct(ess: &mut ConstructEssentials, params: Params) -> anyhow::Resul
let globals = ess.layout.state.globals.clone();
- let (slider_text, _) = ess.layout.add_child(
- slider_handle.id,
- WidgetLabel::create(
- &mut globals.get(),
- WidgetLabelParams {
- content: Translation::default(),
- style: TextStyle {
- color: Some(drawing::Color::new(0.0, 0.0, 0.0, 0.75)), // always black
- weight: Some(FontWeight::Bold),
- align: Some(HorizontalAlign::Center),
- ..Default::default()
+ let slider_text: Option<(WidgetPair, taffy::NodeId)> = if params.show_value {
+ let pair = ess.layout.add_child(
+ slider_handle.id,
+ WidgetLabel::create(
+ &mut globals.get(),
+ WidgetLabelParams {
+ content: Translation::default(),
+ style: TextStyle {
+ color: Some(drawing::Color::new(0.0, 0.0, 0.0, 0.75)), // always black
+ weight: Some(FontWeight::Bold),
+ align: Some(HorizontalAlign::Center),
+ ..Default::default()
+ },
},
- },
- ),
- Default::default(),
- )?;
+ ),
+ Default::default(),
+ )?;
+ Some(pair)
+ } else {
+ None
+ };
let data = Rc::new(Data {
slider_handle_rect_id: slider_handle_rect.id,
body_node: slider_body_node,
slider_handle_id: slider_handle.id,
slider_handle_node_id,
- slider_text_id: slider_text.id,
+ slider_text_id: slider_text.map(|s| s.0.id),
});
let state = Rc::new(RefCell::new(state));
diff --git a/wgui/src/parser/component_slider.rs b/wgui/src/parser/component_slider.rs
index 017383f..54f3fdf 100644
--- a/wgui/src/parser/component_slider.rs
+++ b/wgui/src/parser/component_slider.rs
@@ -1,7 +1,7 @@
use crate::{
components::{Component, slider},
layout::WidgetID,
- parser::{AttribPair, ParserContext, parse_check_f32, process_component, style::parse_style},
+ parser::{AttribPair, ParserContext, parse_check_f32, parse_check_i32, process_component, style::parse_style},
widget::ConstructEssentials,
};
@@ -14,6 +14,7 @@ pub fn parse_component_slider(
let mut max_value = 1.0;
let mut initial_value = 0.5;
let mut step = 1.0;
+ let mut show_value = 1;
let style = parse_style(attribs);
@@ -32,6 +33,9 @@ pub fn parse_component_slider(
"step" => {
parse_check_f32(value, &mut step);
}
+ "show_value" => {
+ parse_check_i32(value, &mut show_value);
+ }
_ => {}
}
}
@@ -49,6 +53,7 @@ pub fn parse_component_slider(
value: initial_value,
step,
},
+ show_value: show_value != 0,
},
)?;