More stuff

This commit is contained in:
Kenny Levinsen
2023-02-02 23:52:59 +01:00
parent 7593cd48a4
commit b49b9e9764
26 changed files with 2022 additions and 803 deletions
+25 -8
View File
@@ -6,6 +6,7 @@ use crate::{
draw::{draw_bar, draw_box},
fonts::FontMap,
widgets::{Geometry, Widget},
event::{Event, PointerButton},
};
pub trait BarWidgetImpl {
@@ -15,6 +16,7 @@ pub trait BarWidgetImpl {
fn name(&self) -> &'static str;
fn value(&self) -> f32;
fn color(&self) -> Color;
fn click(&mut self, _pos: f32, _btn: PointerButton) {}
}
pub struct BarWidget {
@@ -25,7 +27,8 @@ pub struct BarWidget {
}
impl BarWidget {
pub fn new(inner_widget: Box<dyn BarWidgetImpl>, font: &'static str, size: f32) -> BarWidget {
pub fn new(inner_widget: Box<dyn BarWidgetImpl>, fm: &mut FontMap, font: &'static str, size: f32) -> BarWidget {
fm.queue_font(font, size, inner_widget.name());
BarWidget {
geometry: Default::default(),
inner_widget,
@@ -46,10 +49,10 @@ impl Widget for BarWidget {
fn draw(&mut self, fonts: &mut FontMap, view: &mut BufferView) -> Geometry {
let font = fonts.get_font(self.font, self.size);
let fg = Color::new(1., 1., 1., 1.);
let bg = Color::new(0., 0., 0., 1.);
let fg = Color::WHITE;
let bg = Color::BLACK;
font.auto_draw_text(view, &bg, &fg, self.inner_widget.name())
font.draw_text(view, bg, fg, self.inner_widget.name())
.unwrap();
let size = self.size.ceil() as u32;
let bar_offset = 4 * size;
@@ -57,8 +60,8 @@ impl Widget for BarWidget {
let c = self.inner_widget.color();
draw_bar(
&mut view.offset((bar_offset, 0)).unwrap(),
&c,
&mut view.offset((bar_offset, 0)),
c,
self.geometry.width - bar_offset,
size,
val,
@@ -66,8 +69,8 @@ impl Widget for BarWidget {
.unwrap();
draw_box(
&mut view.offset((bar_offset, 0)).unwrap(),
&c,
&mut view.offset((bar_offset, 0)),
c,
(self.geometry.width - bar_offset, size),
)
.unwrap();
@@ -88,4 +91,18 @@ impl Widget for BarWidget {
};
self.geometry
}
fn event(&mut self, event: &Event) {
match event {
Event::PointerEvent(ev) => {
let offset = 4 * self.size.ceil() as u32;
if ev.pos.0 >= offset {
let val = (ev.pos.0 - offset) as f32 / (self.geometry.width - offset) as f32;
self.inner_widget.click(val, ev.button);
}
},
_ => (),
}
}
}