Created
January 9, 2017 06:42
-
-
Save sam-falvo/30ed57d11855171bdadd2c0d883868e4 to your computer and use it in GitHub Desktop.
Kestrel-3 emulator mockup GUI (output only; no event handling).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extern crate sdl2; | |
extern crate gemini; | |
use gemini::{vdi, font}; | |
use std::string; | |
static SDCARD_IOR : [u16; 16] = [ | |
0b0000000000000000, | |
0b0000000000000000, | |
0b0011111111111100, | |
0b0011111111111100, | |
0b0011111111111110, | |
0b0011111111111110, | |
0b0011111111111110, | |
0b0011111111111110, | |
0b0011111111111110, | |
0b0011111111111110, | |
0b0011111111111110, | |
0b0011111111111110, | |
0b0011111111111110, | |
0b0011111111111100, | |
0b0000111111111000, | |
0b0000000000000000 | |
]; | |
static SDCARD_XOR : [u16; 16] = [ | |
0b0000000000000000, | |
0b0000000000000000, | |
0b0011111111111100, | |
0b0010000000000100, | |
0b0010000000000110, | |
0b0010000000000110, | |
0b0010000000000110, | |
0b0010000000000110, | |
0b0010000000000110, | |
0b0010000000010110, | |
0b0010101010110110, | |
0b0010101010100110, | |
0b0010000000001110, | |
0b0011111111111100, | |
0b0000111111111000, | |
0b0000000000000000 | |
]; | |
static INSERTED_SDCARD_XOR : [u16; 16] = [ | |
0b0000000000000000, | |
0b0000000000000000, | |
0b0000000000000000, | |
0b0001111111111000, | |
0b0001111111111000, | |
0b0001111111111000, | |
0b0001111111111000, | |
0b0001111111111000, | |
0b0001111111111000, | |
0b0001111111101000, | |
0b0001010101001000, | |
0b0001010101011000, | |
0b0001111111110000, | |
0b0000000000000000, | |
0b0000000000000000, | |
0b0000000000000000 | |
]; | |
static DESKTOP : [u16; 16] = [ | |
0xAAAA, 0x5555, 0xAAAA, 0x5555, | |
0xAAAA, 0x5555, 0xAAAA, 0x5555, | |
0xAAAA, 0x5555, 0xAAAA, 0x5555, | |
0xAAAA, 0x5555, 0xAAAA, 0x5555, | |
]; | |
static BLACK : [u16; 16] = [ | |
0x0000, 0x0000, 0x0000, 0x0000, | |
0x0000, 0x0000, 0x0000, 0x0000, | |
0x0000, 0x0000, 0x0000, 0x0000, | |
0x0000, 0x0000, 0x0000, 0x0000, | |
]; | |
static WHITE : [u16; 16] = [ | |
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, | |
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, | |
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, | |
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, | |
]; | |
#[test] | |
fn mockup() { | |
let sdl = sdl2::init().unwrap(); | |
let vdi : &mut vdi::VDI = | |
&mut vdi::SDL2Vdi::new(&sdl, 640, 500, "Mockup of e 0.1.0").unwrap(); | |
// Draw the tool/status bar. Start with the background. | |
vdi.rect((0, 0), (640, 20), &DESKTOP); | |
vdi.rect((0, 20), (640, 500), &BLACK); | |
// Draw SD Card 0 (in this case, no SD card inserted) | |
vdi.copy_rect_big_endian( | |
(0, 0), 16, &SDCARD_IOR, | |
(4, 2), | |
(16, 16), | |
0b1110, | |
); | |
vdi.copy_rect_big_endian( | |
(0, 0), 16, &SDCARD_XOR, | |
(4, 2), | |
(16, 16), | |
0b0110, | |
); | |
// Draw SD card 1 (SD card inserted) | |
vdi.copy_rect_big_endian( | |
(0, 0), 16, &SDCARD_IOR, | |
(24, 2), | |
(16, 16), | |
0b1110, | |
); | |
vdi.copy_rect_big_endian( | |
(0, 0), 16, &INSERTED_SDCARD_XOR, | |
(24, 2), | |
(16, 16), | |
0b0110, | |
); | |
// Draw status summary | |
vdi.rect((46, 4), (50 + 26*8, 16), &WHITE); | |
vdi.frame((46, 4), (50 + 26*8, 16), 0x0000); | |
{ | |
let mut t : font::TextContext = font::TextContext { | |
vdi: vdi, | |
font: &font::borrow_system_font(), | |
left: 48, | |
baseline: 13, | |
strike_fn: 0b0101, // Black on white text | |
left_margin: 0, | |
top_margin: 0, | |
right_margin: 640, | |
bottom_margin: 24, | |
}; | |
let STR = string::String::from(" FPS: 12.345 MIPS: 3.456 "); | |
put_string(&mut t, &STR); | |
} | |
// Show everything to the world. | |
vdi.commit().unwrap(); | |
{ | |
// Pose, so I can take a screenshot. | |
use std::{thread,time}; | |
thread::sleep(time::Duration::new(60,0)); | |
} | |
} | |
fn put_string(t: &mut font::TextContext, s: &string::String) { | |
for ch in s.chars() { | |
t.simple_put_char(ch as u8); | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This code produces this screen shot.