use super::{
Image, SLOT_SIZE, Stretch, TEXT_BOX_PAD_X, TEXT_BOX_TEXT, TextBox, Widget, WidgetKind,
};
use yog_gfx::Color;
use crate::layout::FlexDir;
pub fn panel(dir: FlexDir) -> Widget {
Widget::new(WidgetKind::Panel(dir))
}
pub fn grid() -> Widget {
Widget::new(WidgetKind::Grid(Box::default()))
}
pub fn scroll_view() -> Widget {
panel(FlexDir::Column).clip(true).scrollbar(true)
}
pub fn label(text: impl Into<String>) -> Widget {
Widget::new(WidgetKind::Label(text.into()))
}
pub fn button(text: impl Into<String>) -> Widget {
Widget::new(WidgetKind::Button(text.into()))
}
pub fn item_slot(item_id: impl Into<String>) -> Widget {
Widget::new(WidgetKind::ItemSlot(item_id.into()))
}
pub fn inv_slot(item_id: impl Into<String>, count: u32) -> Widget {
Widget::new(WidgetKind::InvSlot {
item_id: item_id.into(),
count,
})
.w(SLOT_SIZE)
.h(SLOT_SIZE)
}
use crate::inventory_ids::PLAYER_INVENTORY;
pub fn machine(kind: &str, places: &[(&str, usize, usize)], result: usize) -> Widget {
spacer()
.w(0.0)
.h(0.0)
.id(crate::inventory_ids::MachineId::write(kind, places, result))
}
pub const HOTBAR_GAP: f32 = 4.0;
pub fn slot(index: usize) -> Widget {
inv_slot("", 0).id(crate::inventory_ids::slot_id(index, &[]))
}
pub fn slot_accepting(index: usize, accepts: &[&str]) -> Widget {
inv_slot("", 0).id(crate::inventory_ids::slot_id(index, accepts))
}
pub fn player_inventory() -> Widget {
let row = || {
(0..9).fold(panel(FlexDir::Row).gap(0.0), |r, _| {
r.child(inv_slot("", 0))
})
};
panel(FlexDir::Column)
.id(PLAYER_INVENTORY)
.gap(0.0)
.child(row())
.child(row())
.child(row())
.child(row().margin(HOTBAR_GAP, 0.0, 0.0, 0.0))
}
pub fn image(source: impl Into<String>) -> Widget {
Widget::new(WidgetKind::Image(Image {
source: source.into(),
stretch: Stretch::Uniform,
region: None,
tint: Color::WHITE,
}))
}
pub fn spacer() -> Widget {
Widget::new(WidgetKind::Spacer)
}
pub fn surface(id: impl Into<String>) -> Widget {
Widget::new(WidgetKind::Surface(id.into()))
}
pub fn text_box(text: impl Into<String>) -> Widget {
Widget::new(WidgetKind::TextBox(TextBox {
text: text.into(),
..TextBox::default()
}))
.bg(Color::BLACK)
.color(TEXT_BOX_TEXT)
.padding(0.0, TEXT_BOX_PAD_X, 0.0, TEXT_BOX_PAD_X)
}