Implement custom layer for grids
This commit is contained in:
parent
e0053d93e2
commit
34b569b59b
2 changed files with 37 additions and 12 deletions
|
@ -102,12 +102,9 @@ impl GuiBuilder {
|
||||||
&mut opt_default_select,
|
&mut opt_default_select,
|
||||||
&mut custom_neighbours,
|
&mut custom_neighbours,
|
||||||
validator.dimensions(),
|
validator.dimensions(),
|
||||||
|
validator.layer().unwrap_or(5),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
if let Some(layer) = validator.layer() {
|
|
||||||
tree.set_layer(layer)?;
|
|
||||||
}
|
|
||||||
|
|
||||||
grids.push(tree);
|
grids.push(tree);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -341,10 +338,11 @@ impl GuiBuilder {
|
||||||
default_button: &mut Option<Arc<Button>>,
|
default_button: &mut Option<Arc<Button>>,
|
||||||
neighbour_infos: &mut Vec<(String, Vec<NeighbourInfo>)>,
|
neighbour_infos: &mut Vec<(String, Vec<NeighbourInfo>)>,
|
||||||
(reference_width, reference_height): (Option<u32>, Option<u32>),
|
(reference_width, reference_height): (Option<u32>, Option<u32>),
|
||||||
|
layer: i32,
|
||||||
) -> Result<Arc<Grid>> {
|
) -> Result<Arc<Grid>> {
|
||||||
// let mut ids = HashMap::new();
|
|
||||||
|
|
||||||
let root_grid = Grid::try_from(root_grid_info, gui_handler, true)?;
|
let root_grid = Grid::try_from(root_grid_info, gui_handler, true)?;
|
||||||
|
let root_layer = root_grid_info.layer.unwrap_or(layer);
|
||||||
|
root_grid.set_layer(root_layer)?;
|
||||||
|
|
||||||
if let Some(ref_width) = reference_width {
|
if let Some(ref_width) = reference_width {
|
||||||
if let Some(ref_height) = reference_height {
|
if let Some(ref_height) = reference_height {
|
||||||
|
@ -391,6 +389,7 @@ impl GuiBuilder {
|
||||||
ids,
|
ids,
|
||||||
default_button,
|
default_button,
|
||||||
neighbour_infos,
|
neighbour_infos,
|
||||||
|
root_layer,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -404,6 +403,7 @@ impl GuiBuilder {
|
||||||
ids: &mut HashMap<String, UiElement>,
|
ids: &mut HashMap<String, UiElement>,
|
||||||
default_button: &mut Option<Arc<Button>>,
|
default_button: &mut Option<Arc<Button>>,
|
||||||
neighbour_infos: &mut Vec<(String, Vec<NeighbourInfo>)>,
|
neighbour_infos: &mut Vec<(String, Vec<NeighbourInfo>)>,
|
||||||
|
layer: i32,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
match child {
|
match child {
|
||||||
UiInfoElement::Button(button_info) => {
|
UiInfoElement::Button(button_info) => {
|
||||||
|
@ -425,6 +425,8 @@ impl GuiBuilder {
|
||||||
button_info.y_dim,
|
button_info.y_dim,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
button.set_layer(layer)?;
|
||||||
|
|
||||||
neighbour_infos.push((button_info.id.clone(), button_info.neighbour_infos.clone()));
|
neighbour_infos.push((button_info.id.clone(), button_info.neighbour_infos.clone()));
|
||||||
|
|
||||||
if button_info.select {
|
if button_info.select {
|
||||||
|
@ -444,12 +446,14 @@ impl GuiBuilder {
|
||||||
Self::insert_id(ids, &label_info.id, &label)?;
|
Self::insert_id(ids, &label_info.id, &label)?;
|
||||||
|
|
||||||
grid.attach(
|
grid.attach(
|
||||||
label,
|
label.clone(),
|
||||||
label_info.x_slot.get().with_context(|| "x_slot of label")?,
|
label_info.x_slot.get().with_context(|| "x_slot of label")?,
|
||||||
label_info.y_slot.get().with_context(|| "y_slot of label")?,
|
label_info.y_slot.get().with_context(|| "y_slot of label")?,
|
||||||
label_info.x_dim,
|
label_info.x_dim,
|
||||||
label_info.y_dim,
|
label_info.y_dim,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
label.set_layer(layer)?;
|
||||||
}
|
}
|
||||||
UiInfoElement::MultiLineLabel(multi_line_label_info) => {
|
UiInfoElement::MultiLineLabel(multi_line_label_info) => {
|
||||||
let multi_line_label =
|
let multi_line_label =
|
||||||
|
@ -458,7 +462,7 @@ impl GuiBuilder {
|
||||||
GuiBuilder::insert_id(ids, &multi_line_label_info.id, &multi_line_label)?;
|
GuiBuilder::insert_id(ids, &multi_line_label_info.id, &multi_line_label)?;
|
||||||
|
|
||||||
grid.attach(
|
grid.attach(
|
||||||
multi_line_label,
|
multi_line_label.clone(),
|
||||||
multi_line_label_info
|
multi_line_label_info
|
||||||
.x_slot
|
.x_slot
|
||||||
.get()
|
.get()
|
||||||
|
@ -470,6 +474,8 @@ impl GuiBuilder {
|
||||||
multi_line_label_info.x_dim,
|
multi_line_label_info.x_dim,
|
||||||
multi_line_label_info.y_dim,
|
multi_line_label_info.y_dim,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
multi_line_label.set_layer(layer)?;
|
||||||
}
|
}
|
||||||
UiInfoElement::MultiLineTextField(multi_line_text_field_info) => {
|
UiInfoElement::MultiLineTextField(multi_line_text_field_info) => {
|
||||||
let multi_line_text_field =
|
let multi_line_text_field =
|
||||||
|
@ -478,7 +484,7 @@ impl GuiBuilder {
|
||||||
GuiBuilder::insert_id(ids, &multi_line_text_field_info.id, &multi_line_text_field)?;
|
GuiBuilder::insert_id(ids, &multi_line_text_field_info.id, &multi_line_text_field)?;
|
||||||
|
|
||||||
grid.attach(
|
grid.attach(
|
||||||
multi_line_text_field,
|
multi_line_text_field.clone(),
|
||||||
multi_line_text_field_info
|
multi_line_text_field_info
|
||||||
.x_slot
|
.x_slot
|
||||||
.get()
|
.get()
|
||||||
|
@ -490,6 +496,8 @@ impl GuiBuilder {
|
||||||
multi_line_text_field_info.x_dim,
|
multi_line_text_field_info.x_dim,
|
||||||
multi_line_text_field_info.y_dim,
|
multi_line_text_field_info.y_dim,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
multi_line_text_field.set_layer(layer)?;
|
||||||
}
|
}
|
||||||
UiInfoElement::TextField(text_field_info) => {
|
UiInfoElement::TextField(text_field_info) => {
|
||||||
let text_field = TextField::try_from(text_field_info, gui_handler)?;
|
let text_field = TextField::try_from(text_field_info, gui_handler)?;
|
||||||
|
@ -497,7 +505,7 @@ impl GuiBuilder {
|
||||||
Self::insert_id(ids, &text_field_info.id, &text_field)?;
|
Self::insert_id(ids, &text_field_info.id, &text_field)?;
|
||||||
|
|
||||||
grid.attach(
|
grid.attach(
|
||||||
text_field,
|
text_field.clone(),
|
||||||
text_field_info
|
text_field_info
|
||||||
.x_slot
|
.x_slot
|
||||||
.get()
|
.get()
|
||||||
|
@ -509,6 +517,8 @@ impl GuiBuilder {
|
||||||
text_field_info.x_dim,
|
text_field_info.x_dim,
|
||||||
text_field_info.y_dim,
|
text_field_info.y_dim,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
text_field.set_layer(layer)?;
|
||||||
}
|
}
|
||||||
UiInfoElement::Icon(icon_info) => {
|
UiInfoElement::Icon(icon_info) => {
|
||||||
let icon = Icon::try_from(icon_info, gui_handler)?;
|
let icon = Icon::try_from(icon_info, gui_handler)?;
|
||||||
|
@ -516,12 +526,14 @@ impl GuiBuilder {
|
||||||
Self::insert_id(ids, &icon_info.id, UiElement::Icon(Arc::downgrade(&icon)))?;
|
Self::insert_id(ids, &icon_info.id, UiElement::Icon(Arc::downgrade(&icon)))?;
|
||||||
|
|
||||||
grid.attach(
|
grid.attach(
|
||||||
icon,
|
icon.clone(),
|
||||||
icon_info.x_slot.get().with_context(|| "x_slot of icon")?,
|
icon_info.x_slot.get().with_context(|| "x_slot of icon")?,
|
||||||
icon_info.y_slot.get().with_context(|| "y_slot of icon")?,
|
icon_info.y_slot.get().with_context(|| "y_slot of icon")?,
|
||||||
icon_info.x_dim,
|
icon_info.x_dim,
|
||||||
icon_info.y_dim,
|
icon_info.y_dim,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
icon.set_layer(layer)?;
|
||||||
}
|
}
|
||||||
UiInfoElement::ProgressBar(progress_bar_info) => {
|
UiInfoElement::ProgressBar(progress_bar_info) => {
|
||||||
let progress_bar = ProgressBar::try_from(progress_bar_info, gui_handler)?;
|
let progress_bar = ProgressBar::try_from(progress_bar_info, gui_handler)?;
|
||||||
|
@ -529,7 +541,7 @@ impl GuiBuilder {
|
||||||
Self::insert_id(ids, &progress_bar_info.id, &progress_bar)?;
|
Self::insert_id(ids, &progress_bar_info.id, &progress_bar)?;
|
||||||
|
|
||||||
grid.attach(
|
grid.attach(
|
||||||
progress_bar,
|
progress_bar.clone(),
|
||||||
progress_bar_info
|
progress_bar_info
|
||||||
.x_slot
|
.x_slot
|
||||||
.get()
|
.get()
|
||||||
|
@ -541,6 +553,8 @@ impl GuiBuilder {
|
||||||
progress_bar_info.x_dim,
|
progress_bar_info.x_dim,
|
||||||
progress_bar_info.y_dim,
|
progress_bar_info.y_dim,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
progress_bar.set_layer(layer)?;
|
||||||
}
|
}
|
||||||
UiInfoElement::Grid(grid_info) => {
|
UiInfoElement::Grid(grid_info) => {
|
||||||
let sub_grid = Grid::try_from(grid_info, gui_handler, false)?;
|
let sub_grid = Grid::try_from(grid_info, gui_handler, false)?;
|
||||||
|
@ -555,6 +569,9 @@ impl GuiBuilder {
|
||||||
grid_info.y_dim,
|
grid_info.y_dim,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
let sub_grid_layer = grid_info.layer.unwrap_or(layer);
|
||||||
|
sub_grid.set_layer(sub_grid_layer)?;
|
||||||
|
|
||||||
for child in grid_info.children.read().unwrap().iter() {
|
for child in grid_info.children.read().unwrap().iter() {
|
||||||
Self::create_child(
|
Self::create_child(
|
||||||
gui_handler,
|
gui_handler,
|
||||||
|
@ -563,6 +580,7 @@ impl GuiBuilder {
|
||||||
ids,
|
ids,
|
||||||
default_button,
|
default_button,
|
||||||
neighbour_infos,
|
neighbour_infos,
|
||||||
|
sub_grid_layer,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,8 @@ pub struct GridInfo {
|
||||||
|
|
||||||
pub children: RwLock<Vec<UiInfoElement>>,
|
pub children: RwLock<Vec<UiInfoElement>>,
|
||||||
pub parent: Option<Weak<GridInfo>>,
|
pub parent: Option<Weak<GridInfo>>,
|
||||||
|
|
||||||
|
pub layer: Option<i32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GridInfo {
|
impl GridInfo {
|
||||||
|
@ -82,6 +84,8 @@ impl GridInfo {
|
||||||
|
|
||||||
children: RwLock::new(Vec::new()),
|
children: RwLock::new(Vec::new()),
|
||||||
parent: None,
|
parent: None,
|
||||||
|
|
||||||
|
layer: None,
|
||||||
};
|
};
|
||||||
|
|
||||||
for attribute_res in attributes {
|
for attribute_res in attributes {
|
||||||
|
@ -122,6 +126,9 @@ impl GridInfo {
|
||||||
b"hover_sound" => {
|
b"hover_sound" => {
|
||||||
grid_info.hover_sound = Some(cow_to_path(attribute.value));
|
grid_info.hover_sound = Some(cow_to_path(attribute.value));
|
||||||
}
|
}
|
||||||
|
b"layer" => {
|
||||||
|
grid_info.layer = Some(str_into(attribute.value)?);
|
||||||
|
}
|
||||||
_ => {
|
_ => {
|
||||||
return Err(anyhow::Error::msg(format!(
|
return Err(anyhow::Error::msg(format!(
|
||||||
"Unsupported attribute in Grid: {}",
|
"Unsupported attribute in Grid: {}",
|
||||||
|
|
Loading…
Reference in a new issue