use imgui::{TextureId, Ui};
pub struct ImageButtonParams {
pub size: [f32; 2],
pub background: Option<[f32; 4]>,
pub tint: Option<[f32; 4]>,
pub uv0: Option<[f32; 2]>,
pub uv1: Option<[f32; 2]>,
pub frame_padding: Option<i32>,
}
pub trait ImageButton {
fn build(ui: &Ui, elem: Self, params: ImageButtonParams);
}
impl<T> ImageButton for T
where
T: Copy + Into<TextureId>,
{
fn build(ui: &Ui, elem: Self, params: ImageButtonParams) {
let mut image = ui.image_button(elem.into(), params.size);
if let Some(tint) = params.tint {
image = image.tint_col(tint);
}
if let Some(padding) = params.frame_padding {
image = image.frame_padding(padding);
}
if let Some(background) = params.background {
image = image.background_col(background);
}
if let Some(uv0) = params.uv0 {
image = image.uv0(uv0);
}
if let Some(uv1) = params.uv1 {
image = image.uv1(uv1);
}
image.build();
}
}