pub enum Modifier {
Coded(u8),
Colour(Colour),
None,
}
Expand description
Variants§
Coded(u8)
Coded(u8)
unwraps to \x1b[{x}m
, where x
is the code.
For example, Coded(0)
(available as Modifier::END
) clears all previously applied modifiers. When displayed, Modifier::Coded(31)
writes \x1b[31m
.
See https://prirai.github.io/blogs/ansi-esc/#colors-graphics-mode for a guide to available code
Colour(Colour)
Colour(
Colour
)
unwraps to \x1b[38;2;{r};{g};{b}m
, where (r, g, b)
together represent a 24 bit RGB value
Not all terminals support RGB ANSI escape codes, in which case you will have to resort to Modifier::Coded
for colours. Some Coded
colours are available as constants, e.g. Modifier::RED
None
None
unwraps to nothing. It does not change the current applied modifiers.
Implementations§
Source§impl Modifier
impl Modifier
Sourcepub const END: Self
pub const END: Self
An END code, which clears all previously applied modifiers. You should never have to use this yourself as View
makes use of it between pixels where necessary
Sourcepub const fn from_rgb(r: u8, g: u8, b: u8) -> Self
pub const fn from_rgb(r: u8, g: u8, b: u8) -> Self
Create a Modifier::Colour
from an RGB value
Examples found in repository?
15fn main() {
16 let mut view = View::new(60, 10, BACKGROUND_CHAR);
17
18 let mut pixel = Pixel::new(Vec2D::new(5, 9), FILL_CHAR);
19
20 let mut line = Line::new(Vec2D::new(2, 8), Vec2D::new(28, 7), FILL_CHAR);
21 let mut line1_direction = -1;
22
23 let rect = Rect::new(
24 Vec2D { x: 11, y: 1 },
25 Vec2D { x: 9, y: 3 },
26 ColChar::SOLID.with_rgb(200, 30, 0),
27 );
28
29 let test_image = r"
30 ______
31 /|_||_\`.__
32( _ _ _\
33=`-(_)--(_)-' ";
34 let mut sprite = Sprite::new(
35 Vec2D::new(30, 1),
36 test_image,
37 Modifier::from_rgb(20, 200, 0),
38 );
39
40 let mut draw_elapsed = Duration::default();
41 let mut render_elapsed = Duration::default();
42 fps_gameloop!(
43 {
44 pixel.pos.x += 2;
45 // loop the position back to the other side. This can be done with `WrappingMode::Wrap` but it won't change the element's actual position, so the pixel position being printed would continue to increase without looping
46 pixel.pos %= view.size();
47
48 line.pos1.y += line1_direction;
49 line.pos0.y = 10 - line.pos1.y;
50 if line.pos1.y > 7 {
51 line1_direction = -1;
52 } else if line.pos1.y < 3 {
53 line1_direction = 1;
54 }
55
56 sprite.pos.x += 1;
57 },
58 {
59 view.clear();
60
61 let now = Instant::now();
62 view.wrapping_mode = WrappingMode::Panic;
63 view.draw(&pixel);
64 view.draw(&line);
65 view.draw(&rect);
66 view.wrapping_mode = WrappingMode::Wrap;
67 view.draw(&sprite);
68 draw_elapsed = now.elapsed();
69
70 let now = Instant::now();
71 let _ = view.display_render();
72 render_elapsed = now.elapsed();
73 },
74 FPS,
75 |total_elapsed: Duration, _frame_skip| {
76 println!(
77 "Drawing: {:.2?} microseconds | Rendering: {:.2?} microseconds| Total: {:.2?}",
78 draw_elapsed.as_micros(),
79 render_elapsed.as_micros(),
80 total_elapsed.as_micros()
81 );
82 println!("Pixel position: {}", pixel.pos);
83 }
84 );
85}