pub struct Mlx { /* private fields */ }
Expand description
Api method holder.
Implementations§
Source§impl Mlx
impl Mlx
Sourcepub fn new() -> Result<Self, MlxError>
pub fn new() -> Result<Self, MlxError>
Creates a new Mlx instance.
Calls the mlx_init
C method under the hood.
Usage:
let mlx = Mlx::new().unwrap();
Examples found in repository?
6fn main() {
7 let mlx = Mlx::new().unwrap();
8
9 let width = 1080;
10 let height = 720;
11 let window = mlx.new_window(width, height, "Mlx example").unwrap();
12
13 let image = match mlx.new_image(width, height) {
14 Ok(img) => img,
15 Err(e) => match e {
16 MlxError::Any(s) => return println!("{}", s),
17 _ => return,
18 },
19 };
20
21 let _bytes_per_pixel = image.bits_per_pixel / 8;
22 let offset = image.size_line / 2 + image.size_line * height / 2;
23 for i in 1..100 {
24 // we assume there are 32 bits per pixel here, because its just an example.
25 // color encoding can go from 8 bits to 48 bits.
26 let offset = offset + i * 4;
27 match image.endian {
28 Endian::Little => {
29 image.write_to(offset + 2, 0xff); // R
30 image.write_to(offset + 1, 0x0); // G
31 image.write_to(offset, 0x0); // B
32 }
33 Endian::Big => {
34 image.write_to(offset, 0xff); // R
35 image.write_to(offset + 1, 0x0); // G
36 image.write_to(offset + 2, 0x0); // B
37 }
38 }
39 }
40
41 window.key_hook(
42 move |keycode, _| {
43 // you can also check keycodes using the `xev` command
44 println!("{}", keycode);
45
46 // `q`
47 if keycode == 113 {
48 process::exit(0);
49 // Enter
50 } else if keycode == 97 {
51 let x = width / 2;
52 let y = height / 2;
53 let color = 0xffffff;
54 for i in 0..50 {
55 mlx.pixel_put(&window, x + i, y + i, color);
56 }
57 } else if keycode == 98 {
58 mlx.put_image_to_window(&window, &image, 0, 0);
59 }
60 },
61 &(),
62 );
63
64 // this will loop forever
65 mlx.event_loop();
66}
Sourcepub fn new_window(
&self,
size_x: i32,
size_y: i32,
title: &str,
) -> Result<MlxWindow, MlxError>
pub fn new_window( &self, size_x: i32, size_y: i32, title: &str, ) -> Result<MlxWindow, MlxError>
Creates a new window instance.
Usage:
let image = mlx.new_window(1920, 1080, "mlx-example").unwrap();
Examples found in repository?
6fn main() {
7 let mlx = Mlx::new().unwrap();
8
9 let width = 1080;
10 let height = 720;
11 let window = mlx.new_window(width, height, "Mlx example").unwrap();
12
13 let image = match mlx.new_image(width, height) {
14 Ok(img) => img,
15 Err(e) => match e {
16 MlxError::Any(s) => return println!("{}", s),
17 _ => return,
18 },
19 };
20
21 let _bytes_per_pixel = image.bits_per_pixel / 8;
22 let offset = image.size_line / 2 + image.size_line * height / 2;
23 for i in 1..100 {
24 // we assume there are 32 bits per pixel here, because its just an example.
25 // color encoding can go from 8 bits to 48 bits.
26 let offset = offset + i * 4;
27 match image.endian {
28 Endian::Little => {
29 image.write_to(offset + 2, 0xff); // R
30 image.write_to(offset + 1, 0x0); // G
31 image.write_to(offset, 0x0); // B
32 }
33 Endian::Big => {
34 image.write_to(offset, 0xff); // R
35 image.write_to(offset + 1, 0x0); // G
36 image.write_to(offset + 2, 0x0); // B
37 }
38 }
39 }
40
41 window.key_hook(
42 move |keycode, _| {
43 // you can also check keycodes using the `xev` command
44 println!("{}", keycode);
45
46 // `q`
47 if keycode == 113 {
48 process::exit(0);
49 // Enter
50 } else if keycode == 97 {
51 let x = width / 2;
52 let y = height / 2;
53 let color = 0xffffff;
54 for i in 0..50 {
55 mlx.pixel_put(&window, x + i, y + i, color);
56 }
57 } else if keycode == 98 {
58 mlx.put_image_to_window(&window, &image, 0, 0);
59 }
60 },
61 &(),
62 );
63
64 // this will loop forever
65 mlx.event_loop();
66}
Sourcepub fn clear_window(&self, window: &MlxWindow)
pub fn clear_window(&self, window: &MlxWindow)
Clears the window with black.
Sourcepub fn destroy_window(&self, window: &MlxWindow)
pub fn destroy_window(&self, window: &MlxWindow)
Destroys the window. This function also drops the window object.
Sourcepub fn get_screen_size(&self) -> (i32, i32)
pub fn get_screen_size(&self) -> (i32, i32)
Get the actual screen size.
Sourcepub fn pixel_put(&self, window: &MlxWindow, x: i32, y: i32, color: i32)
pub fn pixel_put(&self, window: &MlxWindow, x: i32, y: i32, color: i32)
Put a pixel on the screen
You should encode the color as RGB on the three last bytes of the int.
0x00|ff(R)|ff(G)|ff(B)
Usage:
let x = 200;
let y = 300;
let color = 0x0000ff; // blue
mlx.pixel_put(&window, x, y, color);
Examples found in repository?
6fn main() {
7 let mlx = Mlx::new().unwrap();
8
9 let width = 1080;
10 let height = 720;
11 let window = mlx.new_window(width, height, "Mlx example").unwrap();
12
13 let image = match mlx.new_image(width, height) {
14 Ok(img) => img,
15 Err(e) => match e {
16 MlxError::Any(s) => return println!("{}", s),
17 _ => return,
18 },
19 };
20
21 let _bytes_per_pixel = image.bits_per_pixel / 8;
22 let offset = image.size_line / 2 + image.size_line * height / 2;
23 for i in 1..100 {
24 // we assume there are 32 bits per pixel here, because its just an example.
25 // color encoding can go from 8 bits to 48 bits.
26 let offset = offset + i * 4;
27 match image.endian {
28 Endian::Little => {
29 image.write_to(offset + 2, 0xff); // R
30 image.write_to(offset + 1, 0x0); // G
31 image.write_to(offset, 0x0); // B
32 }
33 Endian::Big => {
34 image.write_to(offset, 0xff); // R
35 image.write_to(offset + 1, 0x0); // G
36 image.write_to(offset + 2, 0x0); // B
37 }
38 }
39 }
40
41 window.key_hook(
42 move |keycode, _| {
43 // you can also check keycodes using the `xev` command
44 println!("{}", keycode);
45
46 // `q`
47 if keycode == 113 {
48 process::exit(0);
49 // Enter
50 } else if keycode == 97 {
51 let x = width / 2;
52 let y = height / 2;
53 let color = 0xffffff;
54 for i in 0..50 {
55 mlx.pixel_put(&window, x + i, y + i, color);
56 }
57 } else if keycode == 98 {
58 mlx.put_image_to_window(&window, &image, 0, 0);
59 }
60 },
61 &(),
62 );
63
64 // this will loop forever
65 mlx.event_loop();
66}
Sourcepub fn string_put(
&self,
window: &MlxWindow,
x: i32,
y: i32,
color: i32,
s: &str,
) -> Result<(), MlxError>
pub fn string_put( &self, window: &MlxWindow, x: i32, y: i32, color: i32, s: &str, ) -> Result<(), MlxError>
Writes a string on the screen
Color is encoded in rgb as well. Usage:
let x = 200;
let y = 300;
let color = 0xff0000; // red
mlx.string_put(&window, x, y, color, "Hello World");
Sourcepub fn new_image(&self, width: i32, height: i32) -> Result<MlxImage, MlxError>
pub fn new_image(&self, width: i32, height: i32) -> Result<MlxImage, MlxError>
Creates a new image.
Examples found in repository?
6fn main() {
7 let mlx = Mlx::new().unwrap();
8
9 let width = 1080;
10 let height = 720;
11 let window = mlx.new_window(width, height, "Mlx example").unwrap();
12
13 let image = match mlx.new_image(width, height) {
14 Ok(img) => img,
15 Err(e) => match e {
16 MlxError::Any(s) => return println!("{}", s),
17 _ => return,
18 },
19 };
20
21 let _bytes_per_pixel = image.bits_per_pixel / 8;
22 let offset = image.size_line / 2 + image.size_line * height / 2;
23 for i in 1..100 {
24 // we assume there are 32 bits per pixel here, because its just an example.
25 // color encoding can go from 8 bits to 48 bits.
26 let offset = offset + i * 4;
27 match image.endian {
28 Endian::Little => {
29 image.write_to(offset + 2, 0xff); // R
30 image.write_to(offset + 1, 0x0); // G
31 image.write_to(offset, 0x0); // B
32 }
33 Endian::Big => {
34 image.write_to(offset, 0xff); // R
35 image.write_to(offset + 1, 0x0); // G
36 image.write_to(offset + 2, 0x0); // B
37 }
38 }
39 }
40
41 window.key_hook(
42 move |keycode, _| {
43 // you can also check keycodes using the `xev` command
44 println!("{}", keycode);
45
46 // `q`
47 if keycode == 113 {
48 process::exit(0);
49 // Enter
50 } else if keycode == 97 {
51 let x = width / 2;
52 let y = height / 2;
53 let color = 0xffffff;
54 for i in 0..50 {
55 mlx.pixel_put(&window, x + i, y + i, color);
56 }
57 } else if keycode == 98 {
58 mlx.put_image_to_window(&window, &image, 0, 0);
59 }
60 },
61 &(),
62 );
63
64 // this will loop forever
65 mlx.event_loop();
66}
Sourcepub fn destroy_image(&self, image: &MlxImage)
pub fn destroy_image(&self, image: &MlxImage)
Destroy the image. Also drops the image instance.
Sourcepub fn put_image_to_window(
&self,
window: &MlxWindow,
image: &MlxImage,
x: i32,
y: i32,
)
pub fn put_image_to_window( &self, window: &MlxWindow, image: &MlxImage, x: i32, y: i32, )
Draws an image to the window
Usage:
let x = 200;
let y = 200;
mlx.put_image_to_window(&window, &image, x, y);
Examples found in repository?
6fn main() {
7 let mlx = Mlx::new().unwrap();
8
9 let width = 1080;
10 let height = 720;
11 let window = mlx.new_window(width, height, "Mlx example").unwrap();
12
13 let image = match mlx.new_image(width, height) {
14 Ok(img) => img,
15 Err(e) => match e {
16 MlxError::Any(s) => return println!("{}", s),
17 _ => return,
18 },
19 };
20
21 let _bytes_per_pixel = image.bits_per_pixel / 8;
22 let offset = image.size_line / 2 + image.size_line * height / 2;
23 for i in 1..100 {
24 // we assume there are 32 bits per pixel here, because its just an example.
25 // color encoding can go from 8 bits to 48 bits.
26 let offset = offset + i * 4;
27 match image.endian {
28 Endian::Little => {
29 image.write_to(offset + 2, 0xff); // R
30 image.write_to(offset + 1, 0x0); // G
31 image.write_to(offset, 0x0); // B
32 }
33 Endian::Big => {
34 image.write_to(offset, 0xff); // R
35 image.write_to(offset + 1, 0x0); // G
36 image.write_to(offset + 2, 0x0); // B
37 }
38 }
39 }
40
41 window.key_hook(
42 move |keycode, _| {
43 // you can also check keycodes using the `xev` command
44 println!("{}", keycode);
45
46 // `q`
47 if keycode == 113 {
48 process::exit(0);
49 // Enter
50 } else if keycode == 97 {
51 let x = width / 2;
52 let y = height / 2;
53 let color = 0xffffff;
54 for i in 0..50 {
55 mlx.pixel_put(&window, x + i, y + i, color);
56 }
57 } else if keycode == 98 {
58 mlx.put_image_to_window(&window, &image, 0, 0);
59 }
60 },
61 &(),
62 );
63
64 // this will loop forever
65 mlx.event_loop();
66}
Sourcepub fn get_color_value(&self, color: i32) -> u32
pub fn get_color_value(&self, color: i32) -> u32
Transforms an RGB color parameter into a u32 value.
This returns a bits_per_pixel value of the rgb value.
You can use this to write into an image
Sourcepub fn do_key_autorepeaton(&self)
pub fn do_key_autorepeaton(&self)
Enables key autorepeat when pressing a key
Sourcepub fn do_key_autorepeatoff(&self)
pub fn do_key_autorepeatoff(&self)
Disables key autorepeat when pressing a key
Sourcepub fn mouse_move(&self, window: &MlxWindow, x: i32, y: i32)
pub fn mouse_move(&self, window: &MlxWindow, x: i32, y: i32)
Moves the mouse cursor
Sourcepub fn mouse_show(&self, window: &MlxWindow)
pub fn mouse_show(&self, window: &MlxWindow)
Shows the mouse cursor
Sourcepub fn mouse_hide(&self, window: &MlxWindow)
pub fn mouse_hide(&self, window: &MlxWindow)
Hides the mouse cursor
Sourcepub fn event_loop(&self)
pub fn event_loop(&self)
Run the event loop.
This is running an infinite loop which launches hooks when receiving events.
Examples found in repository?
6fn main() {
7 let mlx = Mlx::new().unwrap();
8
9 let width = 1080;
10 let height = 720;
11 let window = mlx.new_window(width, height, "Mlx example").unwrap();
12
13 let image = match mlx.new_image(width, height) {
14 Ok(img) => img,
15 Err(e) => match e {
16 MlxError::Any(s) => return println!("{}", s),
17 _ => return,
18 },
19 };
20
21 let _bytes_per_pixel = image.bits_per_pixel / 8;
22 let offset = image.size_line / 2 + image.size_line * height / 2;
23 for i in 1..100 {
24 // we assume there are 32 bits per pixel here, because its just an example.
25 // color encoding can go from 8 bits to 48 bits.
26 let offset = offset + i * 4;
27 match image.endian {
28 Endian::Little => {
29 image.write_to(offset + 2, 0xff); // R
30 image.write_to(offset + 1, 0x0); // G
31 image.write_to(offset, 0x0); // B
32 }
33 Endian::Big => {
34 image.write_to(offset, 0xff); // R
35 image.write_to(offset + 1, 0x0); // G
36 image.write_to(offset + 2, 0x0); // B
37 }
38 }
39 }
40
41 window.key_hook(
42 move |keycode, _| {
43 // you can also check keycodes using the `xev` command
44 println!("{}", keycode);
45
46 // `q`
47 if keycode == 113 {
48 process::exit(0);
49 // Enter
50 } else if keycode == 97 {
51 let x = width / 2;
52 let y = height / 2;
53 let color = 0xffffff;
54 for i in 0..50 {
55 mlx.pixel_put(&window, x + i, y + i, color);
56 }
57 } else if keycode == 98 {
58 mlx.put_image_to_window(&window, &image, 0, 0);
59 }
60 },
61 &(),
62 );
63
64 // this will loop forever
65 mlx.event_loop();
66}