Add colors example

This commit is contained in:
Alexandre Bury 2017-06-14 00:08:58 -07:00
parent 88d3d81e88
commit 7a7ccbf45c
3 changed files with 48 additions and 10 deletions

30
examples/colors.rs Normal file
View File

@ -0,0 +1,30 @@
extern crate cursive;
use cursive::Cursive;
use cursive::theme::{ColorStyle, Color};
use cursive::view::Boxable;
use cursive::views::Canvas;
fn main() {
let mut siv = Cursive::new();
siv.add_layer(Canvas::new(())
.with_draw(|printer, _| for x in 0..20 {
for y in 0..10 {
printer.with_color(ColorStyle::Custom {
front: Color::Rgb(x * 12,
y * 25,
(x + 2 * y) * 6),
back: Color::Rgb(255 - x * 12,
255 - y * 25,
128 + (40 - x - 2 * y) * 3),
},
|printer| { printer.print((x, y), "+"); });
}
})
.fixed_size((20, 10)));
siv.add_global_callback('q', |s| s.quit());
siv.run();
}

View File

@ -55,6 +55,7 @@ impl backend::Backend for Concrete {
} }
fn clear(&self, color: Color) { fn clear(&self, color: Color) {
terminal::set_background(colour_to_blt_colour(color));
terminal::clear(None); terminal::clear(None);
} }
@ -134,11 +135,11 @@ fn blt_keycode_to_ev(kc: KeyCode, shift: bool, ctrl: bool) -> Event {
KeyCode::F1 | KeyCode::F2 | KeyCode::F3 | KeyCode::F4 | KeyCode::F1 | KeyCode::F2 | KeyCode::F3 | KeyCode::F4 |
KeyCode::F5 | KeyCode::F6 | KeyCode::F7 | KeyCode::F8 | KeyCode::F5 | KeyCode::F6 | KeyCode::F7 | KeyCode::F8 |
KeyCode::F9 | KeyCode::F10 | KeyCode::F11 | KeyCode::F12 | KeyCode::F9 | KeyCode::F10 | KeyCode::F11 | KeyCode::F12 |
KeyCode::NumEnter | KeyCode::Enter | KeyCode::Escape | KeyCode::Backspace | KeyCode::NumEnter | KeyCode::Enter | KeyCode::Escape |
KeyCode::Tab | KeyCode::Pause | KeyCode::Insert | KeyCode::Home | KeyCode::Backspace | KeyCode::Tab | KeyCode::Pause |
KeyCode::PageUp | KeyCode::Delete | KeyCode::End | KeyCode::Insert | KeyCode::Home | KeyCode::PageUp |
KeyCode::PageDown | KeyCode::Right | KeyCode::Left | KeyCode::Delete | KeyCode::End | KeyCode::PageDown |
KeyCode::Down | KeyCode::Up => { KeyCode::Right | KeyCode::Left | KeyCode::Down | KeyCode::Up => {
match (shift, ctrl) { match (shift, ctrl) {
(true, true) => Event::CtrlShift(blt_keycode_to_key(kc)), (true, true) => Event::CtrlShift(blt_keycode_to_key(kc)),
(true, false) => Event::Shift(blt_keycode_to_key(kc)), (true, false) => Event::Shift(blt_keycode_to_key(kc)),
@ -162,10 +163,9 @@ fn blt_keycode_to_ev(kc: KeyCode, shift: bool, ctrl: bool) -> Event {
KeyCode::Apostrophe | KeyCode::Comma | KeyCode::Period | KeyCode::Apostrophe | KeyCode::Comma | KeyCode::Period |
KeyCode::Slash | KeyCode::Space | KeyCode::NumDivide | KeyCode::Slash | KeyCode::Space | KeyCode::NumDivide |
KeyCode::NumMultiply | KeyCode::NumMinus | KeyCode::NumPlus | KeyCode::NumMultiply | KeyCode::NumMinus | KeyCode::NumPlus |
KeyCode::NumPeriod | KeyCode::Num1 | KeyCode::NumPeriod | KeyCode::Num1 | KeyCode::Num2 |
KeyCode::Num2 | KeyCode::Num3 | KeyCode::Num4 | KeyCode::Num5 | KeyCode::Num3 | KeyCode::Num4 | KeyCode::Num5 | KeyCode::Num6 |
KeyCode::Num6 | KeyCode::Num7 | KeyCode::Num8 | KeyCode::Num9 | KeyCode::Num7 | KeyCode::Num8 | KeyCode::Num9 | KeyCode::Num0 => {
KeyCode::Num0 => {
if ctrl { if ctrl {
Event::CtrlChar(blt_keycode_to_char(kc, shift)) Event::CtrlChar(blt_keycode_to_char(kc, shift))
} else { } else {
@ -240,7 +240,10 @@ fn blt_keycode_to_char(kc: KeyCode, shift: bool) -> char {
KeyCode::Num8 => '8', KeyCode::Num8 => '8',
KeyCode::Num9 => '9', KeyCode::Num9 => '9',
KeyCode::Num0 => '0', KeyCode::Num0 => '0',
_ => { println_stderr!("{:?}", kc); unreachable!() }, _ => {
println_stderr!("{:?}", kc);
unreachable!()
}
} }
} }

View File

@ -114,6 +114,11 @@ impl From<(u32, u32)> for XY<usize> {
} }
} }
impl From<(u8, u8)> for XY<usize> {
fn from((x, y): (u8, u8)) -> Self {
(x as usize, y as usize).into()
}
}
impl<T: Add<Output = T>, O: Into<XY<T>>> Add<O> for XY<T> { impl<T: Add<Output = T>, O: Into<XY<T>>> Add<O> for XY<T> {
type Output = Self; type Output = Self;