Slider: show_value, hide tooltip on button press
[skip ci]
This commit is contained in:
@@ -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" />
|
||||
|
||||
@@ -250,6 +250,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
|
||||
|
||||
@@ -320,6 +320,7 @@ fn register_event_mouse_press(state: Rc<RefCell<State>>, listeners: &mut EventLi
|
||||
|
||||
if state.hovered {
|
||||
state.down = true;
|
||||
state.active_tooltip = None;
|
||||
Ok(EventResult::Consumed)
|
||||
} else {
|
||||
Ok(EventResult::Pass)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -469,29 +472,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));
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
)?;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user