1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
use crate::{types::Vector2, Layout, Rect, Ui}; use std::borrow::Cow; pub struct Texture { position: Option<Vector2>, w: f32, h: f32, texture: u32, } impl Texture { pub fn new(texture: u32) -> Texture { Texture { position: None, w: 100., h: 100., texture, } } pub fn size(self, w: f32, h: f32) -> Self { Texture { w, h, ..self } } pub fn position<P: Into<Option<Vector2>>>(self, position: P) -> Self { let position = position.into(); Texture { position, ..self } } pub fn ui(self, ui: &mut Ui) -> bool { let context = ui.get_active_window_context(); let size = Vector2::new(self.w, self.h); let color = context.global_style.text(context.focused); let pos = context .window .cursor .fit(size, self.position.map_or(Layout::Vertical, Layout::Free)); context .window .draw_list .draw_raw_texture(self.texture, pos, Vector2::new(self.w, self.h)); let rect = Rect::new(pos.x, pos.y, size.x as f32, size.y as f32); let hovered = rect.contains(context.input.mouse_position); context.focused && hovered && context.input.click_up } } impl Ui { pub fn texture(&mut self, texture: u32, w: f32, h: f32) -> bool { Texture::new(texture).size(w, h).ui(self) } }