Set runtime icon
This commit is contained in:
parent
a4ac7c9d6d
commit
25b88c622c
|
@ -18,6 +18,12 @@ version = "0.1.8"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046"
|
||||
|
||||
[[package]]
|
||||
name = "adler2"
|
||||
version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
|
||||
|
||||
[[package]]
|
||||
name = "ahash"
|
||||
version = "0.8.11"
|
||||
|
@ -494,6 +500,12 @@ version = "1.5.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
||||
|
||||
[[package]]
|
||||
name = "byteorder-lite"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
|
||||
|
||||
[[package]]
|
||||
name = "bytes"
|
||||
version = "1.9.0"
|
||||
|
@ -788,6 +800,15 @@ dependencies = [
|
|||
"windows 0.54.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crc32fast"
|
||||
version = "1.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-utils"
|
||||
version = "0.8.20"
|
||||
|
@ -1071,6 +1092,25 @@ version = "2.3.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
|
||||
|
||||
[[package]]
|
||||
name = "fdeflate"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
|
||||
dependencies = [
|
||||
"simd-adler32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "flate2"
|
||||
version = "1.0.35"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c"
|
||||
dependencies = [
|
||||
"crc32fast",
|
||||
"miniz_oxide",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fnv"
|
||||
version = "1.0.7"
|
||||
|
@ -1535,6 +1575,18 @@ dependencies = [
|
|||
"icu_properties",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "image"
|
||||
version = "0.25.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b"
|
||||
dependencies = [
|
||||
"bytemuck",
|
||||
"byteorder-lite",
|
||||
"num-traits",
|
||||
"png",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "2.7.0"
|
||||
|
@ -1663,6 +1715,7 @@ dependencies = [
|
|||
"egui-winit",
|
||||
"egui_extras",
|
||||
"gilrs",
|
||||
"image",
|
||||
"itertools",
|
||||
"num-derive",
|
||||
"num-traits",
|
||||
|
@ -1827,6 +1880,16 @@ version = "0.2.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
|
||||
|
||||
[[package]]
|
||||
name = "miniz_oxide"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1"
|
||||
dependencies = [
|
||||
"adler2",
|
||||
"simd-adler32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "naga"
|
||||
version = "22.1.0"
|
||||
|
@ -2354,6 +2417,19 @@ version = "0.3.31"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
|
||||
|
||||
[[package]]
|
||||
name = "png"
|
||||
version = "0.17.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b67582bd5b65bdff614270e2ea89a1cf15bef71245cc1e5f7ea126977144211d"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"crc32fast",
|
||||
"fdeflate",
|
||||
"flate2",
|
||||
"miniz_oxide",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "polling"
|
||||
version = "3.7.4"
|
||||
|
@ -2711,6 +2787,12 @@ dependencies = [
|
|||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "simd-adler32"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
|
||||
|
||||
[[package]]
|
||||
name = "slab"
|
||||
version = "0.4.9"
|
||||
|
|
|
@ -14,6 +14,7 @@ egui_extras = "0.29"
|
|||
egui-winit = "0.29"
|
||||
egui-wgpu = { version = "0.29", features = ["winit"] }
|
||||
gilrs = "0.11"
|
||||
image = { version = "0.25", default-features = false, features = ["png"] }
|
||||
itertools = "0.13"
|
||||
num-derive = "0.4"
|
||||
num-traits = "0.2"
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
37
src/app.rs
37
src/app.rs
|
@ -2,8 +2,8 @@ use std::{collections::HashSet, num::NonZero, sync::Arc, thread, time::Duration}
|
|||
|
||||
use egui::{
|
||||
ahash::{HashMap, HashMapExt},
|
||||
Context, FontData, FontDefinitions, FontFamily, TextWrapMode, ViewportBuilder, ViewportCommand,
|
||||
ViewportId, ViewportInfo,
|
||||
Context, FontData, FontDefinitions, FontFamily, IconData, TextWrapMode, ViewportBuilder,
|
||||
ViewportCommand, ViewportId, ViewportInfo,
|
||||
};
|
||||
use gilrs::{EventType, Gilrs};
|
||||
use winit::{
|
||||
|
@ -20,7 +20,19 @@ use crate::{
|
|||
window::{AppWindow, GameWindow, InputWindow},
|
||||
};
|
||||
|
||||
fn load_icon() -> anyhow::Result<IconData> {
|
||||
let bytes = include_bytes!("../assets/lemur-256x256.png");
|
||||
let img = image::load_from_memory_with_format(bytes, image::ImageFormat::Png)?;
|
||||
let rgba = img.into_rgba8();
|
||||
Ok(IconData {
|
||||
width: rgba.width(),
|
||||
height: rgba.height(),
|
||||
rgba: rgba.into_vec(),
|
||||
})
|
||||
}
|
||||
|
||||
pub struct Application {
|
||||
icon: Option<Arc<IconData>>,
|
||||
client: EmulatorClient,
|
||||
proxy: EventLoopProxy<UserEvent>,
|
||||
mappings: MappingProvider,
|
||||
|
@ -31,6 +43,7 @@ pub struct Application {
|
|||
|
||||
impl Application {
|
||||
pub fn new(client: EmulatorClient, proxy: EventLoopProxy<UserEvent>) -> Self {
|
||||
let icon = load_icon().ok().map(Arc::new);
|
||||
let mappings = MappingProvider::new();
|
||||
let controllers = ControllerManager::new(client.clone(), &mappings);
|
||||
{
|
||||
|
@ -39,6 +52,7 @@ impl Application {
|
|||
thread::spawn(|| process_gamepad_input(mappings, proxy));
|
||||
}
|
||||
Self {
|
||||
icon,
|
||||
client,
|
||||
proxy,
|
||||
mappings,
|
||||
|
@ -53,15 +67,17 @@ impl Application {
|
|||
if self.viewports.contains_key(&viewport_id) {
|
||||
return;
|
||||
}
|
||||
self.viewports
|
||||
.insert(viewport_id, Viewport::new(event_loop, window));
|
||||
self.viewports.insert(
|
||||
viewport_id,
|
||||
Viewport::new(event_loop, self.icon.clone(), window),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
impl ApplicationHandler<UserEvent> for Application {
|
||||
fn resumed(&mut self, event_loop: &ActiveEventLoop) {
|
||||
let app = GameWindow::new(self.client.clone(), self.proxy.clone(), SimId::Player1);
|
||||
let wrapper = Viewport::new(event_loop, Box::new(app));
|
||||
let wrapper = Viewport::new(event_loop, self.icon.clone(), Box::new(app));
|
||||
self.focused = Some(wrapper.id());
|
||||
self.viewports.insert(wrapper.id(), wrapper);
|
||||
}
|
||||
|
@ -192,7 +208,11 @@ struct Viewport {
|
|||
app: Box<dyn AppWindow>,
|
||||
}
|
||||
impl Viewport {
|
||||
pub fn new(event_loop: &ActiveEventLoop, mut app: Box<dyn AppWindow>) -> Self {
|
||||
pub fn new(
|
||||
event_loop: &ActiveEventLoop,
|
||||
icon: Option<Arc<IconData>>,
|
||||
mut app: Box<dyn AppWindow>,
|
||||
) -> Self {
|
||||
let mut painter = egui_wgpu::winit::Painter::new(
|
||||
egui_wgpu::WgpuConfiguration {
|
||||
present_mode: wgpu::PresentMode::AutoNoVsync,
|
||||
|
@ -222,7 +242,10 @@ impl Viewport {
|
|||
});
|
||||
|
||||
let mut info = ViewportInfo::default();
|
||||
let builder = app.initial_viewport();
|
||||
let mut builder = app.initial_viewport();
|
||||
if let Some(icon) = icon {
|
||||
builder = builder.with_icon(icon);
|
||||
}
|
||||
let (window, state) = create_window_and_state(&ctx, event_loop, &builder, &mut painter);
|
||||
egui_winit::update_viewport_info(&mut info, &ctx, &window, true);
|
||||
|
||||
|
|
Loading…
Reference in New Issue