Graphical fixes
This commit is contained in:
+37
-7
@@ -2,7 +2,8 @@ use std::{collections::HashSet, num::NonZero, sync::Arc, thread};
|
||||
|
||||
use egui::{
|
||||
ahash::{HashMap, HashMapExt},
|
||||
Context, TextWrapMode, ViewportBuilder, ViewportCommand, ViewportId, ViewportInfo,
|
||||
Context, FontData, FontDefinitions, FontFamily, TextWrapMode, ViewportBuilder, ViewportCommand,
|
||||
ViewportId, ViewportInfo,
|
||||
};
|
||||
use gilrs::{EventType, Gilrs};
|
||||
use winit::{
|
||||
@@ -89,20 +90,37 @@ impl ApplicationHandler<UserEvent> for Application {
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
let mut queue_redraw = false;
|
||||
let mut inactive_viewports = HashSet::new();
|
||||
match viewport.on_window_event(event) {
|
||||
Some(Action::Redraw) => {
|
||||
for viewport in self.viewports.values_mut() {
|
||||
viewport.redraw(event_loop);
|
||||
match viewport.redraw(event_loop) {
|
||||
Some(Action::Redraw) => {
|
||||
queue_redraw = true;
|
||||
}
|
||||
Some(Action::Close) => {
|
||||
inactive_viewports.insert(viewport.id());
|
||||
}
|
||||
None => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
Some(Action::Close) => {
|
||||
self.viewports.remove(&viewport_id);
|
||||
if viewport_id == ViewportId::ROOT {
|
||||
event_loop.exit();
|
||||
}
|
||||
inactive_viewports.insert(viewport_id);
|
||||
}
|
||||
None => {}
|
||||
}
|
||||
self.viewports
|
||||
.retain(|k, _| !inactive_viewports.contains(k));
|
||||
match self.viewports.get(&ViewportId::ROOT) {
|
||||
Some(viewport) => {
|
||||
if queue_redraw {
|
||||
viewport.window.request_redraw();
|
||||
}
|
||||
}
|
||||
None => event_loop.exit(),
|
||||
}
|
||||
}
|
||||
|
||||
fn device_event(
|
||||
@@ -165,6 +183,17 @@ impl Viewport {
|
||||
);
|
||||
|
||||
let ctx = Context::default();
|
||||
let mut fonts = FontDefinitions::empty();
|
||||
fonts.font_data.insert(
|
||||
"Selawik".into(),
|
||||
FontData::from_static(include_bytes!("../assets/selawik.ttf")),
|
||||
);
|
||||
fonts
|
||||
.families
|
||||
.get_mut(&FontFamily::Proportional)
|
||||
.unwrap()
|
||||
.insert(0, "Selawik".into());
|
||||
ctx.set_fonts(fonts);
|
||||
ctx.style_mut(|s| {
|
||||
s.wrap_mode = Some(TextWrapMode::Extend);
|
||||
s.visuals.menu_rounding = Default::default();
|
||||
@@ -242,7 +271,7 @@ impl Viewport {
|
||||
self.state
|
||||
.handle_platform_output(&self.window, output.platform_output);
|
||||
|
||||
let Some(viewport_output) = output.viewport_output.remove(&ViewportId::ROOT) else {
|
||||
let Some(mut viewport_output) = output.viewport_output.remove(&ViewportId::ROOT) else {
|
||||
return Some(Action::Close);
|
||||
};
|
||||
|
||||
@@ -255,6 +284,7 @@ impl Viewport {
|
||||
self.state = state;
|
||||
}
|
||||
self.commands.append(&mut deferred_commands);
|
||||
self.commands.append(&mut viewport_output.commands);
|
||||
egui_winit::process_viewport_commands(
|
||||
&self.ctx,
|
||||
&mut self.info,
|
||||
|
||||
Reference in New Issue
Block a user