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"> <div flex_direction="column" gap="8">
<label text="height 16" weight="bold" /> <label text="height 16" weight="bold" />
<label text="range 0-100 value 25" /> <label text="range 0-100 value 25, no text" />
<Slider width="200" height="16" min_value="0" max_value="100" value="25" /> <Slider show_value="0" width="200" height="16" min_value="0" max_value="100" value="25" />
<label text="range 10-20 value 15" /> <label text="range 10-20 value 15" />
<Slider width="200" height="16" min_value="10" max_value="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_ _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 ## Checkbox component

View File

@@ -69,6 +69,7 @@ impl ValuesMinMax {
pub struct Params { pub struct Params {
pub style: taffy::Style, pub style: taffy::Style,
pub values: ValuesMinMax, pub values: ValuesMinMax,
pub show_value: bool,
} }
struct State { struct State {
@@ -80,8 +81,8 @@ struct State {
struct Data { struct Data {
body_node: taffy::NodeId, body_node: taffy::NodeId,
slider_handle_rect_id: WidgetID, // Rectangle slider_handle_rect_id: WidgetID, // Rectangle
slider_text_id: WidgetID, // Text slider_text_id: Option<WidgetID>, // Text
slider_handle_id: WidgetID, slider_handle_id: WidgetID,
slider_handle_node_id: taffy::NodeId, slider_handle_node_id: taffy::NodeId,
} }
@@ -226,7 +227,9 @@ impl State {
common.alterables.mark_dirty(data.slider_handle_node_id); common.alterables.mark_dirty(data.slider_handle_node_id);
common.alterables.mark_redraw(); 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); 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 globals = ess.layout.state.globals.clone();
let (slider_text, _) = ess.layout.add_child( let slider_text: Option<(WidgetPair, taffy::NodeId)> = if params.show_value {
slider_handle.id, let pair = ess.layout.add_child(
WidgetLabel::create( slider_handle.id,
&mut globals.get(), WidgetLabel::create(
WidgetLabelParams { &mut globals.get(),
content: Translation::default(), WidgetLabelParams {
style: TextStyle { content: Translation::default(),
color: Some(drawing::Color::new(0.0, 0.0, 0.0, 0.75)), // always black style: TextStyle {
weight: Some(FontWeight::Bold), color: Some(drawing::Color::new(0.0, 0.0, 0.0, 0.75)), // always black
align: Some(HorizontalAlign::Center), weight: Some(FontWeight::Bold),
..Default::default() align: Some(HorizontalAlign::Center),
..Default::default()
},
}, },
}, ),
), Default::default(),
Default::default(), )?;
)?; Some(pair)
} else {
None
};
let data = Rc::new(Data { let data = Rc::new(Data {
slider_handle_rect_id: slider_handle_rect.id, slider_handle_rect_id: slider_handle_rect.id,
body_node: slider_body_node, body_node: slider_body_node,
slider_handle_id: slider_handle.id, slider_handle_id: slider_handle.id,
slider_handle_node_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)); let state = Rc::new(RefCell::new(state));

View File

@@ -1,7 +1,7 @@
use crate::{ use crate::{
components::{Component, slider}, components::{Component, slider},
layout::WidgetID, 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, widget::ConstructEssentials,
}; };
@@ -14,6 +14,7 @@ pub fn parse_component_slider(
let mut max_value = 1.0; let mut max_value = 1.0;
let mut initial_value = 0.5; let mut initial_value = 0.5;
let mut step = 1.0; let mut step = 1.0;
let mut show_value = 1;
let style = parse_style(attribs); let style = parse_style(attribs);
@@ -32,6 +33,9 @@ pub fn parse_component_slider(
"step" => { "step" => {
parse_check_f32(value, &mut 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, value: initial_value,
step, step,
}, },
show_value: show_value != 0,
}, },
)?; )?;