ConstructEssentials
i'm really out of ideas how to name another struct name with function parameters. Well, here we go - essentials.
This commit is contained in:
@@ -194,7 +194,7 @@ impl TestbedGeneric {
|
|||||||
layout: &mut Layout,
|
layout: &mut Layout,
|
||||||
data: &mut Data,
|
data: &mut Data,
|
||||||
) -> anyhow::Result<()> {
|
) -> anyhow::Result<()> {
|
||||||
data.popup_window.open(WguiWindowParams {
|
data.popup_window.open(&mut WguiWindowParams {
|
||||||
globals: self.globals.clone(),
|
globals: self.globals.clone(),
|
||||||
position: Vec2::new(128.0, 128.0),
|
position: Vec2::new(128.0, 128.0),
|
||||||
layout,
|
layout,
|
||||||
|
|||||||
@@ -17,9 +17,8 @@
|
|||||||
</rectangle>
|
</rectangle>
|
||||||
|
|
||||||
<!-- content itself -->
|
<!-- content itself -->
|
||||||
<div width="100%" height="100%" padding="8" gap="4" flex_direction="column">
|
<div id="content" width="100%" height="100%" padding="8" gap="4" flex_direction="column">
|
||||||
<label text="Window content" />
|
|
||||||
<Button id="button" color="#9911AA" text="I'm clickable." width="128" height="24" />
|
|
||||||
</div>
|
</div>
|
||||||
</rectangle>
|
</rectangle>
|
||||||
</elements>
|
</elements>
|
||||||
|
|||||||
@@ -3,15 +3,14 @@ use crate::{
|
|||||||
components::{Component, ComponentBase, ComponentTrait, InitData},
|
components::{Component, ComponentBase, ComponentTrait, InitData},
|
||||||
drawing::{self, Boundary, Color},
|
drawing::{self, Boundary, Color},
|
||||||
event::{CallbackDataCommon, EventListenerCollection, EventListenerKind, ListenerHandleVec},
|
event::{CallbackDataCommon, EventListenerCollection, EventListenerKind, ListenerHandleVec},
|
||||||
globals::Globals,
|
|
||||||
i18n::Translation,
|
i18n::Translation,
|
||||||
layout::{Layout, WidgetID, WidgetPair},
|
layout::{WidgetID, WidgetPair},
|
||||||
renderer_vk::{
|
renderer_vk::{
|
||||||
text::{FontWeight, TextStyle},
|
text::{FontWeight, TextStyle},
|
||||||
util::centered_matrix,
|
util::centered_matrix,
|
||||||
},
|
},
|
||||||
widget::{
|
widget::{
|
||||||
EventResult, WidgetData,
|
ConstructEssentials, EventResult, WidgetData,
|
||||||
label::{WidgetLabel, WidgetLabelParams},
|
label::{WidgetLabel, WidgetLabelParams},
|
||||||
rectangle::{WidgetRectangle, WidgetRectangleParams},
|
rectangle::{WidgetRectangle, WidgetRectangleParams},
|
||||||
util::WLength,
|
util::WLength,
|
||||||
@@ -267,12 +266,10 @@ fn register_event_mouse_release<U1, U2>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn construct<U1, U2>(
|
pub fn construct<U1, U2>(
|
||||||
globals: &mut Globals,
|
ess: ConstructEssentials<U1, U2>,
|
||||||
layout: &mut Layout,
|
|
||||||
listeners: &mut EventListenerCollection<U1, U2>,
|
|
||||||
parent: WidgetID,
|
|
||||||
params: Params,
|
params: Params,
|
||||||
) -> anyhow::Result<(WidgetPair, Rc<ComponentButton>)> {
|
) -> anyhow::Result<(WidgetPair, Rc<ComponentButton>)> {
|
||||||
|
let globals = ess.layout.state.globals.clone();
|
||||||
let mut style = params.style;
|
let mut style = params.style;
|
||||||
|
|
||||||
// force-override style
|
// force-override style
|
||||||
@@ -285,7 +282,7 @@ pub fn construct<U1, U2>(
|
|||||||
let color = if let Some(color) = params.color {
|
let color = if let Some(color) = params.color {
|
||||||
color
|
color
|
||||||
} else {
|
} else {
|
||||||
globals.defaults.button_color
|
globals.get().defaults.button_color
|
||||||
};
|
};
|
||||||
|
|
||||||
let border_color = if let Some(border_color) = params.border_color {
|
let border_color = if let Some(border_color) = params.border_color {
|
||||||
@@ -306,8 +303,8 @@ pub fn construct<U1, U2>(
|
|||||||
Color::new(color.r + 0.5, color.g + 0.5, color.g + 0.5, color.a + 0.5)
|
Color::new(color.r + 0.5, color.g + 0.5, color.g + 0.5, color.a + 0.5)
|
||||||
};
|
};
|
||||||
|
|
||||||
let (root, _) = layout.add_child(
|
let (root, _) = ess.layout.add_child(
|
||||||
parent,
|
ess.parent,
|
||||||
WidgetRectangle::create(WidgetRectangleParams {
|
WidgetRectangle::create(WidgetRectangleParams {
|
||||||
color,
|
color,
|
||||||
color2: get_color2(&color),
|
color2: get_color2(&color),
|
||||||
@@ -324,10 +321,10 @@ pub fn construct<U1, U2>(
|
|||||||
let light_text = (color.r + color.g + color.b) < 1.5;
|
let light_text = (color.r + color.g + color.b) < 1.5;
|
||||||
|
|
||||||
let id_label = if let Some(content) = params.text {
|
let id_label = if let Some(content) = params.text {
|
||||||
let (label, _node_label) = layout.add_child(
|
let (label, _node_label) = ess.layout.add_child(
|
||||||
id_rect,
|
id_rect,
|
||||||
WidgetLabel::create(
|
WidgetLabel::create(
|
||||||
globals,
|
&mut globals.get(),
|
||||||
WidgetLabelParams {
|
WidgetLabelParams {
|
||||||
content,
|
content,
|
||||||
style: TextStyle {
|
style: TextStyle {
|
||||||
@@ -365,13 +362,13 @@ pub fn construct<U1, U2>(
|
|||||||
|
|
||||||
let mut base = ComponentBase::default();
|
let mut base = ComponentBase::default();
|
||||||
|
|
||||||
register_event_mouse_enter(data.clone(), state.clone(), listeners, &mut base.lhandles);
|
register_event_mouse_enter(data.clone(), state.clone(), ess.listeners, &mut base.lhandles);
|
||||||
register_event_mouse_leave(data.clone(), state.clone(), listeners, &mut base.lhandles);
|
register_event_mouse_leave(data.clone(), state.clone(), ess.listeners, &mut base.lhandles);
|
||||||
register_event_mouse_press(data.clone(), state.clone(), listeners, &mut base.lhandles);
|
register_event_mouse_press(data.clone(), state.clone(), ess.listeners, &mut base.lhandles);
|
||||||
register_event_mouse_release(data.clone(), state.clone(), listeners, &mut base.lhandles);
|
register_event_mouse_release(data.clone(), state.clone(), ess.listeners, &mut base.lhandles);
|
||||||
|
|
||||||
let button = Rc::new(ComponentButton { base, data, state });
|
let button = Rc::new(ComponentButton { base, data, state });
|
||||||
|
|
||||||
layout.defer_component_init(Component(button.clone()));
|
ess.layout.defer_component_init(Component(button.clone()));
|
||||||
Ok((root, button))
|
Ok((root, button))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,10 +10,10 @@ use crate::{
|
|||||||
drawing::Color,
|
drawing::Color,
|
||||||
event::{CallbackDataCommon, EventAlterables, EventListenerCollection, EventListenerKind, ListenerHandleVec},
|
event::{CallbackDataCommon, EventAlterables, EventListenerCollection, EventListenerKind, ListenerHandleVec},
|
||||||
i18n::Translation,
|
i18n::Translation,
|
||||||
layout::{self, Layout, LayoutState, WidgetID, WidgetPair},
|
layout::{self, LayoutState, WidgetID, WidgetPair},
|
||||||
renderer_vk::text::{FontWeight, TextStyle},
|
renderer_vk::text::{FontWeight, TextStyle},
|
||||||
widget::{
|
widget::{
|
||||||
EventResult,
|
ConstructEssentials, EventResult,
|
||||||
label::{WidgetLabel, WidgetLabelParams},
|
label::{WidgetLabel, WidgetLabelParams},
|
||||||
rectangle::{WidgetRectangle, WidgetRectangleParams},
|
rectangle::{WidgetRectangle, WidgetRectangleParams},
|
||||||
util::WLength,
|
util::WLength,
|
||||||
@@ -248,9 +248,7 @@ fn register_event_mouse_release<U1, U2>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn construct<U1, U2>(
|
pub fn construct<U1, U2>(
|
||||||
layout: &mut Layout,
|
ess: ConstructEssentials<U1, U2>,
|
||||||
listeners: &mut EventListenerCollection<U1, U2>,
|
|
||||||
parent: WidgetID,
|
|
||||||
params: Params,
|
params: Params,
|
||||||
) -> anyhow::Result<(WidgetPair, Rc<ComponentCheckbox>)> {
|
) -> anyhow::Result<(WidgetPair, Rc<ComponentCheckbox>)> {
|
||||||
let mut style = params.style;
|
let mut style = params.style;
|
||||||
@@ -268,10 +266,10 @@ pub fn construct<U1, U2>(
|
|||||||
//style.align_self = Some(taffy::AlignSelf::Start); // do not stretch self to the parent
|
//style.align_self = Some(taffy::AlignSelf::Start); // do not stretch self to the parent
|
||||||
style.gap = length(4.0);
|
style.gap = length(4.0);
|
||||||
|
|
||||||
let globals = layout.state.globals.clone();
|
let globals = ess.layout.state.globals.clone();
|
||||||
|
|
||||||
let (root, _) = layout.add_child(
|
let (root, _) = ess.layout.add_child(
|
||||||
parent,
|
ess.parent,
|
||||||
WidgetRectangle::create(WidgetRectangleParams {
|
WidgetRectangle::create(WidgetRectangleParams {
|
||||||
color: Color::new(1.0, 1.0, 1.0, 0.0),
|
color: Color::new(1.0, 1.0, 1.0, 0.0),
|
||||||
border_color: Color::new(1.0, 1.0, 1.0, 0.0),
|
border_color: Color::new(1.0, 1.0, 1.0, 0.0),
|
||||||
@@ -288,7 +286,7 @@ pub fn construct<U1, U2>(
|
|||||||
height: length(params.box_size),
|
height: length(params.box_size),
|
||||||
};
|
};
|
||||||
|
|
||||||
let (outer_box, _) = layout.add_child(
|
let (outer_box, _) = ess.layout.add_child(
|
||||||
id_container,
|
id_container,
|
||||||
WidgetRectangle::create(WidgetRectangleParams {
|
WidgetRectangle::create(WidgetRectangleParams {
|
||||||
border: 2.0,
|
border: 2.0,
|
||||||
@@ -306,7 +304,7 @@ pub fn construct<U1, U2>(
|
|||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let (inner_box, _) = layout.add_child(
|
let (inner_box, _) = ess.layout.add_child(
|
||||||
outer_box.id,
|
outer_box.id,
|
||||||
WidgetRectangle::create(WidgetRectangleParams {
|
WidgetRectangle::create(WidgetRectangleParams {
|
||||||
round: WLength::Units(5.0),
|
round: WLength::Units(5.0),
|
||||||
@@ -322,7 +320,7 @@ pub fn construct<U1, U2>(
|
|||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let (label, _node_label) = layout.add_child(
|
let (label, _node_label) = ess.layout.add_child(
|
||||||
id_container,
|
id_container,
|
||||||
WidgetLabel::create(
|
WidgetLabel::create(
|
||||||
&mut globals.get(),
|
&mut globals.get(),
|
||||||
@@ -352,13 +350,13 @@ pub fn construct<U1, U2>(
|
|||||||
|
|
||||||
let mut base = ComponentBase::default();
|
let mut base = ComponentBase::default();
|
||||||
|
|
||||||
register_event_mouse_enter(&data, state.clone(), listeners, &mut base.lhandles);
|
register_event_mouse_enter(&data, state.clone(), ess.listeners, &mut base.lhandles);
|
||||||
register_event_mouse_leave(&data, state.clone(), listeners, &mut base.lhandles);
|
register_event_mouse_leave(&data, state.clone(), ess.listeners, &mut base.lhandles);
|
||||||
register_event_mouse_press(&data, state.clone(), listeners, &mut base.lhandles);
|
register_event_mouse_press(&data, state.clone(), ess.listeners, &mut base.lhandles);
|
||||||
register_event_mouse_release(data.clone(), state.clone(), listeners, &mut base.lhandles);
|
register_event_mouse_release(data.clone(), state.clone(), ess.listeners, &mut base.lhandles);
|
||||||
|
|
||||||
let checkbox = Rc::new(ComponentCheckbox { base, data, state });
|
let checkbox = Rc::new(ComponentCheckbox { base, data, state });
|
||||||
|
|
||||||
layout.defer_component_init(Component(checkbox.clone()));
|
ess.layout.defer_component_init(Component(checkbox.clone()));
|
||||||
Ok((root, checkbox))
|
Ok((root, checkbox))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,13 +9,13 @@ use crate::{
|
|||||||
drawing::{self},
|
drawing::{self},
|
||||||
event::{self, CallbackDataCommon, EventListenerCollection, EventListenerKind, ListenerHandleVec},
|
event::{self, CallbackDataCommon, EventListenerCollection, EventListenerKind, ListenerHandleVec},
|
||||||
i18n::Translation,
|
i18n::Translation,
|
||||||
layout::{Layout, WidgetID, WidgetPair},
|
layout::{WidgetID, WidgetPair},
|
||||||
renderer_vk::{
|
renderer_vk::{
|
||||||
text::{FontWeight, HorizontalAlign, TextStyle},
|
text::{FontWeight, HorizontalAlign, TextStyle},
|
||||||
util,
|
util,
|
||||||
},
|
},
|
||||||
widget::{
|
widget::{
|
||||||
EventResult,
|
ConstructEssentials, EventResult,
|
||||||
div::WidgetDiv,
|
div::WidgetDiv,
|
||||||
label::{WidgetLabel, WidgetLabelParams},
|
label::{WidgetLabel, WidgetLabelParams},
|
||||||
rectangle::{WidgetRectangle, WidgetRectangleParams},
|
rectangle::{WidgetRectangle, WidgetRectangleParams},
|
||||||
@@ -308,9 +308,7 @@ fn register_event_mouse_release<U1, U2>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn construct<U1, U2>(
|
pub fn construct<U1, U2>(
|
||||||
layout: &mut Layout,
|
ess: ConstructEssentials<U1, U2>,
|
||||||
listeners: &mut EventListenerCollection<U1, U2>,
|
|
||||||
parent: WidgetID,
|
|
||||||
params: Params,
|
params: Params,
|
||||||
) -> anyhow::Result<(WidgetPair, Rc<ComponentSlider>)> {
|
) -> anyhow::Result<(WidgetPair, Rc<ComponentSlider>)> {
|
||||||
let mut style = params.style;
|
let mut style = params.style;
|
||||||
@@ -318,10 +316,10 @@ pub fn construct<U1, U2>(
|
|||||||
style.min_size = style.size;
|
style.min_size = style.size;
|
||||||
style.max_size = style.size;
|
style.max_size = style.size;
|
||||||
|
|
||||||
let (root, slider_body_node) = layout.add_child(parent, WidgetDiv::create(), style)?;
|
let (root, slider_body_node) = ess.layout.add_child(ess.parent, WidgetDiv::create(), style)?;
|
||||||
let body_id = root.id;
|
let body_id = root.id;
|
||||||
|
|
||||||
let (_background_id, _) = layout.add_child(
|
let (_background_id, _) = ess.layout.add_child(
|
||||||
body_id,
|
body_id,
|
||||||
WidgetRectangle::create(WidgetRectangleParams {
|
WidgetRectangle::create(WidgetRectangleParams {
|
||||||
color: BODY_COLOR,
|
color: BODY_COLOR,
|
||||||
@@ -354,9 +352,11 @@ pub fn construct<U1, U2>(
|
|||||||
};
|
};
|
||||||
|
|
||||||
// invisible outer handle body
|
// invisible outer handle body
|
||||||
let (slider_handle, slider_handle_node) = layout.add_child(body_id, WidgetDiv::create(), slider_handle_style)?;
|
let (slider_handle, slider_handle_node) = ess
|
||||||
|
.layout
|
||||||
|
.add_child(body_id, WidgetDiv::create(), slider_handle_style)?;
|
||||||
|
|
||||||
let (slider_handle_rect, _) = layout.add_child(
|
let (slider_handle_rect, _) = ess.layout.add_child(
|
||||||
slider_handle.id,
|
slider_handle.id,
|
||||||
WidgetRectangle::create(WidgetRectangleParams {
|
WidgetRectangle::create(WidgetRectangleParams {
|
||||||
color: HANDLE_COLOR,
|
color: HANDLE_COLOR,
|
||||||
@@ -381,9 +381,9 @@ pub fn construct<U1, U2>(
|
|||||||
values: params.values,
|
values: params.values,
|
||||||
};
|
};
|
||||||
|
|
||||||
let globals = layout.state.globals.clone();
|
let globals = ess.layout.state.globals.clone();
|
||||||
|
|
||||||
let (slider_text, _) = layout.add_child(
|
let (slider_text, _) = ess.layout.add_child(
|
||||||
slider_handle.id,
|
slider_handle.id,
|
||||||
WidgetLabel::create(
|
WidgetLabel::create(
|
||||||
&mut globals.get(),
|
&mut globals.get(),
|
||||||
@@ -412,15 +412,15 @@ pub fn construct<U1, U2>(
|
|||||||
|
|
||||||
let mut base = ComponentBase::default();
|
let mut base = ComponentBase::default();
|
||||||
|
|
||||||
register_event_mouse_enter(data.clone(), state.clone(), listeners, &mut base.lhandles);
|
register_event_mouse_enter(data.clone(), state.clone(), ess.listeners, &mut base.lhandles);
|
||||||
register_event_mouse_leave(data.clone(), state.clone(), listeners, &mut base.lhandles);
|
register_event_mouse_leave(data.clone(), state.clone(), ess.listeners, &mut base.lhandles);
|
||||||
register_event_mouse_motion(data.clone(), state.clone(), listeners, &mut base.lhandles);
|
register_event_mouse_motion(data.clone(), state.clone(), ess.listeners, &mut base.lhandles);
|
||||||
register_event_mouse_press(data.clone(), state.clone(), listeners, &mut base.lhandles);
|
register_event_mouse_press(data.clone(), state.clone(), ess.listeners, &mut base.lhandles);
|
||||||
register_event_mouse_leave(data.clone(), state.clone(), listeners, &mut base.lhandles);
|
register_event_mouse_leave(data.clone(), state.clone(), ess.listeners, &mut base.lhandles);
|
||||||
register_event_mouse_release(&data, state.clone(), listeners, &mut base.lhandles);
|
register_event_mouse_release(&data, state.clone(), ess.listeners, &mut base.lhandles);
|
||||||
|
|
||||||
let slider = Rc::new(ComponentSlider { base, data, state });
|
let slider = Rc::new(ComponentSlider { base, data, state });
|
||||||
|
|
||||||
layout.defer_component_init(Component(slider.clone()));
|
ess.layout.defer_component_init(Component(slider.clone()));
|
||||||
Ok((root, slider))
|
Ok((root, slider))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ impl WeakWidget {
|
|||||||
pub struct WidgetMap(HopSlotMap<WidgetID, Widget>);
|
pub struct WidgetMap(HopSlotMap<WidgetID, Widget>);
|
||||||
pub type WidgetNodeMap = SecondaryMap<WidgetID, taffy::NodeId>;
|
pub type WidgetNodeMap = SecondaryMap<WidgetID, taffy::NodeId>;
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
pub struct WidgetPair {
|
pub struct WidgetPair {
|
||||||
pub id: WidgetID,
|
pub id: WidgetID,
|
||||||
pub widget: Widget,
|
pub widget: Widget,
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ use crate::{
|
|||||||
AttribPair, ParserContext, ParserFile, parse_check_f32, parse_children, process_component,
|
AttribPair, ParserContext, ParserFile, parse_check_f32, parse_children, process_component,
|
||||||
style::{parse_color_opt, parse_round, parse_style, parse_text_style},
|
style::{parse_color_opt, parse_round, parse_style, parse_text_style},
|
||||||
},
|
},
|
||||||
widget::util::WLength,
|
widget::{ConstructEssentials, util::WLength},
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn parse_component_button<'a, U1, U2>(
|
pub fn parse_component_button<'a, U1, U2>(
|
||||||
@@ -60,13 +60,12 @@ pub fn parse_component_button<'a, U1, U2>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let globals = ctx.layout.state.globals.clone();
|
|
||||||
|
|
||||||
let (widget, component) = button::construct(
|
let (widget, component) = button::construct(
|
||||||
&mut globals.get(),
|
ConstructEssentials {
|
||||||
ctx.layout,
|
layout: ctx.layout,
|
||||||
ctx.listeners,
|
listeners: ctx.listeners,
|
||||||
parent_id,
|
parent: parent_id,
|
||||||
|
},
|
||||||
button::Params {
|
button::Params {
|
||||||
color,
|
color,
|
||||||
border,
|
border,
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ use crate::{
|
|||||||
i18n::Translation,
|
i18n::Translation,
|
||||||
layout::WidgetID,
|
layout::WidgetID,
|
||||||
parser::{AttribPair, ParserContext, parse_check_f32, parse_check_i32, process_component, style::parse_style},
|
parser::{AttribPair, ParserContext, parse_check_f32, parse_check_i32, process_component, style::parse_style},
|
||||||
|
widget::ConstructEssentials,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn parse_component_checkbox<U1, U2>(
|
pub fn parse_component_checkbox<U1, U2>(
|
||||||
@@ -36,9 +37,11 @@ pub fn parse_component_checkbox<U1, U2>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let (widget, component) = checkbox::construct(
|
let (widget, component) = checkbox::construct(
|
||||||
ctx.layout,
|
ConstructEssentials {
|
||||||
ctx.listeners,
|
layout: ctx.layout,
|
||||||
parent_id,
|
listeners: ctx.listeners,
|
||||||
|
parent: parent_id,
|
||||||
|
},
|
||||||
checkbox::Params {
|
checkbox::Params {
|
||||||
box_size,
|
box_size,
|
||||||
text: translation,
|
text: translation,
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ 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, process_component, style::parse_style},
|
||||||
|
widget::ConstructEssentials,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn parse_component_slider<U1, U2>(
|
pub fn parse_component_slider<U1, U2>(
|
||||||
@@ -32,9 +33,11 @@ pub fn parse_component_slider<U1, U2>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let (widget, component) = slider::construct(
|
let (widget, component) = slider::construct(
|
||||||
ctx.layout,
|
ConstructEssentials {
|
||||||
ctx.listeners,
|
layout: ctx.layout,
|
||||||
parent_id,
|
listeners: ctx.listeners,
|
||||||
|
parent: parent_id,
|
||||||
|
},
|
||||||
slider::Params {
|
slider::Params {
|
||||||
style,
|
style,
|
||||||
values: slider::ValuesMinMax {
|
values: slider::ValuesMinMax {
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ use crate::{
|
|||||||
any::AnyTrait,
|
any::AnyTrait,
|
||||||
drawing::{self, PrimitiveExtent},
|
drawing::{self, PrimitiveExtent},
|
||||||
event::{
|
event::{
|
||||||
self, CallbackData, CallbackDataCommon, CallbackMetadata, Event, EventAlterables, EventListenerKind,
|
self, CallbackData, CallbackDataCommon, CallbackMetadata, Event, EventAlterables, EventListenerCollection,
|
||||||
EventListenerVec, MouseWheelEvent,
|
EventListenerKind, EventListenerVec, MouseWheelEvent,
|
||||||
},
|
},
|
||||||
layout::{Layout, LayoutState, WidgetID},
|
layout::{Layout, LayoutState, WidgetID},
|
||||||
stack::{ScissorStack, TransformStack},
|
stack::{ScissorStack, TransformStack},
|
||||||
@@ -516,3 +516,9 @@ impl WidgetState {
|
|||||||
Ok(EventResult::Pass)
|
Ok(EventResult::Pass)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct ConstructEssentials<'a, U1, U2> {
|
||||||
|
pub layout: &'a mut Layout,
|
||||||
|
pub listeners: &'a mut EventListenerCollection<U1, U2>,
|
||||||
|
pub parent: WidgetID,
|
||||||
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ use crate::{
|
|||||||
struct OpenedWindow {
|
struct OpenedWindow {
|
||||||
layout_tasks: LayoutTasks,
|
layout_tasks: LayoutTasks,
|
||||||
widget: WidgetPair,
|
widget: WidgetPair,
|
||||||
|
content: WidgetPair,
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
state: ParserState,
|
state: ParserState,
|
||||||
@@ -34,6 +35,10 @@ struct State {
|
|||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct WguiWindow(Rc<RefCell<State>>);
|
pub struct WguiWindow(Rc<RefCell<State>>);
|
||||||
|
|
||||||
|
pub struct OnContentData {
|
||||||
|
pub widget: WidgetPair,
|
||||||
|
}
|
||||||
|
|
||||||
pub struct WguiWindowParams<'a> {
|
pub struct WguiWindowParams<'a> {
|
||||||
pub position: Vec2,
|
pub position: Vec2,
|
||||||
pub globals: WguiGlobals,
|
pub globals: WguiGlobals,
|
||||||
@@ -52,7 +57,7 @@ impl WguiWindow {
|
|||||||
self.0.borrow_mut().opened_window = None;
|
self.0.borrow_mut().opened_window = None;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn open(&mut self, params: WguiWindowParams) -> anyhow::Result<()> {
|
pub fn open(&mut self, params: &mut WguiWindowParams) -> anyhow::Result<()> {
|
||||||
// close previous one if it's already open
|
// close previous one if it's already open
|
||||||
self.close();
|
self.close();
|
||||||
|
|
||||||
@@ -74,7 +79,7 @@ impl WguiWindow {
|
|||||||
|
|
||||||
let state = parser::parse_from_assets(
|
let state = parser::parse_from_assets(
|
||||||
&parser::ParseDocumentParams {
|
&parser::ParseDocumentParams {
|
||||||
globals: params.globals,
|
globals: params.globals.clone(),
|
||||||
path: XML_PATH,
|
path: XML_PATH,
|
||||||
extra: Default::default(),
|
extra: Default::default(),
|
||||||
},
|
},
|
||||||
@@ -92,19 +97,20 @@ impl WguiWindow {
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
let button = state.fetch_component_as::<ComponentButton>("button").unwrap();
|
let content = state.fetch_widget(¶ms.layout.state, "content")?;
|
||||||
|
|
||||||
button.on_click(Box::new(move |_common, _e| {
|
|
||||||
log::info!("click");
|
|
||||||
Ok(())
|
|
||||||
}));
|
|
||||||
|
|
||||||
self.0.borrow_mut().opened_window = Some(OpenedWindow {
|
self.0.borrow_mut().opened_window = Some(OpenedWindow {
|
||||||
widget,
|
widget,
|
||||||
state,
|
state,
|
||||||
layout_tasks: params.layout.tasks.clone(),
|
layout_tasks: params.layout.tasks.clone(),
|
||||||
|
content,
|
||||||
});
|
});
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_content(&self) -> WidgetPair {
|
||||||
|
let state = self.0.borrow_mut();
|
||||||
|
state.opened_window.as_ref().unwrap().content.clone()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user