Re-add simple, cross-platform UI

This commit is contained in:
Henry Sloan 2021-03-24 18:40:30 -04:00
parent 3e13793273
commit 0df97a638f
7 changed files with 48 additions and 10 deletions

4
Cargo.lock generated
View file

@ -185,7 +185,7 @@ dependencies = [
]
[[package]]
name = "sdl-frontend"
name = "sdl-ui"
version = "0.1.0"
dependencies = [
"nes",
@ -307,7 +307,7 @@ dependencies = [
"native-windows-gui",
"nes",
"rand",
"sdl-frontend",
"sdl-ui",
"sdl2",
"sdl2-sys",
]

View file

@ -5,7 +5,7 @@ members = [
"ppu",
"apu",
"memory",
"sdl-frontend",
"sdl-ui",
"windows-ui",
]

View file

@ -1,5 +1,5 @@
[package]
name = "sdl-frontend"
name = "sdl-ui"
version = "0.1.0"
authors = ["Henry Sloan <henryksloan@gmail.com>"]
edition = "2018"

View file

@ -24,13 +24,13 @@ const COLORS: &'static [i32] = &[
0x000000,
];
pub struct SDLFrontend {
pub struct SDLUI {
sdl_context: Sdl,
canvas: WindowCanvas,
nes: Rc<RefCell<NES>>,
}
impl SDLFrontend {
impl SDLUI {
pub fn new(sdl_context: Sdl, window: Window, nes: Rc<RefCell<NES>>) -> Self {
Self {
sdl_context,

38
sdl-ui/src/main.rs Normal file
View file

@ -0,0 +1,38 @@
use nes::NES;
use std::cell::RefCell;
use std::env;
use std::fs::File;
use std::process;
use std::rc::Rc;
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() < 2 {
eprintln!("usage: {} <NES ROM file>", args[0]);
process::exit(1);
}
let file = File::open(&args[1]).unwrap_or_else(|err| {
println!("failed to read file: {}", err);
process::exit(1);
});
let mut nes = Rc::new(RefCell::new(NES::new()));
nes.borrow_mut().load_rom(file).unwrap_or_else(|err| {
println!("failed to load ROM: {}", err);
process::exit(1);
});
let sdl_context = sdl2::init().unwrap();
let video_subsystem = sdl_context.video().unwrap();
let window = video_subsystem
.window("KindNES", (256.0 * 3.0) as u32, (240.0 * 3.0) as u32)
.position_centered()
.build()
.unwrap();
let mut sdl_ui = sdl_ui::SDLUI::new(sdl_context, window, nes);
sdl_ui.render_loop();
}

View file

@ -8,7 +8,7 @@ edition = "2018"
nes = { path = "../nes" }
cpu = { path = "../cpu" }
memory = { path = "../memory" }
sdl-frontend = { path = "../sdl-frontend" }
sdl-ui = { path = "../sdl-ui" }
sdl2 = "0.34.3"
sdl2-sys = "0.34.3"
rand = "0.8.3"

View file

@ -1,7 +1,7 @@
#![windows_subsystem = "windows"]
use nes::NES;
use sdl_frontend::SDLFrontend;
use sdl_ui::SDLUI;
use core::ffi::c_void;
use std::cell::RefCell;
@ -107,6 +107,6 @@ fn main() {
SDL_Window::from_ll(video_subsystem, window_raw)
};
let mut sdl_frontend = SDLFrontend::new(sdl_context, window, app.nes.clone());
sdl_frontend.render_loop();
let mut sdl_ui = SDLUI::new(sdl_context, window, app.nes.clone());
sdl_ui.render_loop();
}