Slider: show_value, hide tooltip on button press

[skip ci]
This commit is contained in:
Aleksander
2025-12-19 16:48:07 +01:00
committed by galister
parent ca814e6ecb
commit 5afe85a3b3
4 changed files with 39 additions and 22 deletions

View File

@@ -72,8 +72,8 @@
<div flex_direction="column" gap="8">
<label text="height 16" weight="bold" />
<label text="range 0-100 value 25" />
<Slider width="200" height="16" min_value="0" max_value="100" value="25" />
<label text="range 0-100 value 25, no text" />
<Slider show_value="0" width="200" height="16" min_value="0" max_value="100" value="25" />
<label text="range 10-20 value 15" />
<Slider width="200" height="16" min_value="10" max_value="20" value="15" />

View File

@@ -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

View File

@@ -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<WidgetID>, // 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::<WidgetLabel>(data.slider_text_id) {
if let Some(slider_text_id) = data.slider_text_id
&& let Some(mut label) = common.state.widgets.get_as::<WidgetLabel>(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));

View File

@@ -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,
},
)?;