termi-graphics 0.1.6

a low-level pixel art dev tool designed for cli art
Documentation
  • Coverage
  • 42.86%
    21 out of 49 items documented11 out of 34 items with examples
  • Size
  • Source code size: 47.95 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 3.15 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 12s Average build duration of successful builds.
  • all releases: 12s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Repository
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • GuyL99

termi-graphics

What is it and what is it for?

termi-graphics is a rust crate(library) that should be used to build terminal based graphics and graphical interfaces.

termi-graphics offers low level graphics desgin options using canvases and screens, and the ability to run them consecutively with the Animation struct.

termi-graphics works best(for now) with the ubuntu terminal coloring scheme, but it still may work on some windows and mac computers.

There will soon be other crates designed to create other lower or higher level graphical interfaces on other places other then the CLI.

How to install it?

you can use cargo:

:~$ cargo install termi-graphics

or you can clone this repository:

:~$ git clone https://github.com/l-tools/termi-graphics termi-graphics
:~$ cd termi-graphics
:~$ cargo build

How to use it?

First use import the crate:

extern crate termi_graphics;  
use termi_graphics::pixel_art; //this is the most basic useable part of the crate  

There are 2 ways:

The first one is to create the pixel layouts(2-dim vectors in our case) by yourself like this:

fn main(){                                                             
	let mut shape1 = Vec::new();                                       
	//smily face                                         
	shape1.push(vec![2,2,0,2,2]);                                      
	shape1.push(vec![2,2,0,2,2]);                                      
	shape1.push(vec![0,0,0,0,0]);                                          
	shape1.push(vec![0,0,1,0,0]);                                          
	shape1.push(vec![8,0,0,0,8]);                                          
	shape1.push(vec![8,8,8,8,8]); 
	screen1.attach_pixels(&shape1,1,1).unwrap();
	//simply print it once:
	screen1.print_screen();
	//or present it by animation:
	let vecan = vec![screen1];
	use termi_graphics::animation::Animation;
	let anim = Animation::new(vecan,15,3);
}

A rather tedious way, so there is a second way:

fn main(){                                                             
	use termi_graphics::Shapes::{rectangle,line,sqaure,triangle};
	let shape2 =square(2,PixelColors::Blue).unwrap() ;                 
	let shape3 =line(5,PixelColors::White,false).unwrap();             
	let shape4 =square(1,PixelColors::Red).unwrap();                       
	let shape5 =rectangle(9,10,PixelColors::Magenta).unwrap();             
	let shape6 =triangle(9,PixelColors::Magenta).unwrap();                 
	let mut vecer = Vec::new();                                            
	vecer.push(vec![8,0,0,0,8]);                                           
	let mut canvas1 = Canvas::new(30,30,PixelColors::Black).unwrap();      
	let mut screen1 = Screen::new(35,35,PixelColors::Black).unwrap();   
	canvas1.attach(&shape5,8,8).unwrap();                              
	canvas1.attach(&shape2,10,10).unwrap();                                
	canvas1.attach(&shape2,13,10).unwrap();                                
	canvas1.attach(&shape4,12,13).unwrap();                                
	canvas1.attach(&vecer,10,14).unwrap();                                 
	canvas1.attach(&shape3,10,15).unwrap();                                
	canvas1.attach(&shape6,16,16).unwrap();   
	screen1.attach(&canvas1);
	//simply print it once:
	screen1.print_screen();
	//or present it by animation:
	let vecan = vec![screen1];
	use termi_graphics::animation::Animation;
	let anim = Animation::new(vecan,15,3);
}

I guess that seems tedious as well but when you are building something more than just a smiley face, shapes and canvases are someting much easier to design and follow then mere pixel vectors.

If you want to checkout the crate further that you should take a look in the examples folder.

More will be coming soon - in this crate and in others!