pub trait Renderer {
Show 31 methods
// Required methods
fn width(&self) -> u32;
fn height(&self) -> u32;
fn data(&self) -> &[Color];
fn data_mut(&mut self) -> &mut [Color];
fn sync(&mut self) -> bool;
fn update(&mut self) -> bool;
fn update_rects(&mut self, rects: &[(i32, i32, u32, u32)]) -> bool;
fn mode(&self) -> &Cell<Mode>;
// Provided methods
fn pixel(&mut self, x: i32, y: i32, color: Color) { ... }
fn arc(&mut self, x0: i32, y0: i32, radius: i32, parts: u8, color: Color) { ... }
fn circle(&mut self, x0: i32, y0: i32, radius: i32, color: Color) { ... }
fn line4points(&mut self, x0: i32, y0: i32, x: i32, y: i32, color: Color) { ... }
fn line(
&mut self,
argx1: i32,
argy1: i32,
argx2: i32,
argy2: i32,
color: Color,
) { ... }
fn lines(&mut self, points: &[[i32; 2]], color: Color) { ... }
fn draw_path_stroke(&mut self, graphicspath: GraphicsPath, color: Color) { ... }
fn char(&mut self, x: i32, y: i32, c: char, color: Color) { ... }
fn set(&mut self, color: Color) { ... }
fn clear(&mut self) { ... }
fn rect(&mut self, x: i32, y: i32, w: u32, h: u32, color: Color) { ... }
fn box_blur(&mut self, x: i32, y: i32, w: u32, h: u32, r: i32) { ... }
fn box_shadow(
&mut self,
x: i32,
y: i32,
w: u32,
h: u32,
offset_x: i32,
offset_y: i32,
r: i32,
color: Color,
) { ... }
fn image(
&mut self,
start_x: i32,
start_y: i32,
w: u32,
h: u32,
data: &[Color],
) { ... }
fn image_legacy(
&mut self,
start_x: i32,
start_y: i32,
w: u32,
h: u32,
data: &[Color],
) { ... }
fn image_over(&mut self, start: i32, image_data: &[Color]) { ... }
fn image_opaque(
&mut self,
start_x: i32,
start_y: i32,
w: u32,
h: u32,
image_data: &[Color],
) { ... }
fn image_fast(
&mut self,
start_x: i32,
start_y: i32,
w: u32,
h: u32,
image_data: &[Color],
) { ... }
fn linear_gradient(
&mut self,
rect_x: i32,
rect_y: i32,
rect_width: u32,
rect_height: u32,
start_x: i32,
start_y: i32,
end_x: i32,
end_y: i32,
start_color: Color,
end_color: Color,
) { ... }
fn rounded_rect(
&mut self,
x: i32,
y: i32,
w: u32,
h: u32,
radius: u32,
filled: bool,
color: Color,
) { ... }
fn wu_line(&mut self, x0: i32, y0: i32, x1: i32, y1: i32, color: Color) { ... }
fn wu_circle(&mut self, x0: i32, y0: i32, radius: i32, color: Color) { ... }
fn getpixel(&self, x: i32, y: i32) -> Color { ... }
}Expand description
The trait to allow rendering code to be placed. All rendering in this trait is done in software.
Required Methods§
Provided Methods§
Sourcefn arc(&mut self, x0: i32, y0: i32, radius: i32, parts: u8, color: Color)
fn arc(&mut self, x0: i32, y0: i32, radius: i32, parts: u8, color: Color)
Draw a piece of an arc. Negative radius will fill in the inside
Examples found in repository?
examples/simple.rs (line 58)
5fn main() {
6 let (width, height) = orbclient::get_display_size().unwrap();
7
8 let mut window = Window::new(
9 (width as i32) / 4,
10 (height as i32) / 4,
11 width / 2,
12 height / 2,
13 "TITLE",
14 )
15 .unwrap();
16
17 let (win_w, win_h) = (width / 2, height / 2);
18
19 // top left -> bottom rigth
20 window.linear_gradient(
21 0,
22 0,
23 win_w / 3,
24 win_h,
25 0,
26 0,
27 (win_w / 3) as i32,
28 (win_h / 2) as i32,
29 Color::rgb(128, 128, 128),
30 Color::rgb(255, 255, 255),
31 );
32 // horizontal gradient
33 window.linear_gradient(
34 (win_w / 3) as i32,
35 0,
36 win_w / 3,
37 win_h,
38 (win_w / 3) as i32,
39 0,
40 (2 * win_w / 3) as i32,
41 0,
42 Color::rgb(128, 255, 255),
43 Color::rgb(255, 255, 255),
44 );
45 // vertical gradient
46 window.linear_gradient(
47 (2 * win_w / 3) as i32,
48 0,
49 win_w / 3,
50 win_h,
51 (2 * win_w / 3) as i32,
52 0,
53 (2 * win_w / 3) as i32,
54 win_h as i32,
55 Color::rgb(0, 128, 0),
56 Color::rgb(255, 255, 255),
57 );
58 window.arc(100, 100, -25, 1 << 0 | 1 << 2, Color::rgb(0, 0, 255));
59 window.arc(100, 100, -25, 1 << 1 | 1 << 3, Color::rgb(0, 255, 255));
60 window.arc(100, 100, -25, 1 << 4 | 1 << 6, Color::rgb(255, 0, 255));
61 window.arc(100, 100, -25, 1 << 5 | 1 << 7, Color::rgb(255, 255, 0));
62 window.circle(100, 100, 25, Color::rgb(0, 0, 0));
63 window.circle(100, 101, -25, Color::rgb(0, 255, 0));
64 window.circle(220, 220, -100, Color::rgba(128, 128, 128, 80));
65 window.wu_circle(150, 220, 100, Color::rgba(255, 0, 0, 255));
66 window.line(0, 0, 200, 200, Color::rgb(255, 0, 0));
67 window.line(0, 200, 200, 0, Color::rgb(128, 255, 0));
68 // vertical and horizontal line test
69 window.line(100, 0, 100, 200, Color::rgb(0, 0, 255));
70 window.line(0, 100, 200, 100, Color::rgb(255, 255, 0));
71 window.wu_line(100, 220, 400, 250, Color::rgba(255, 0, 0, 255));
72 window.line(100, 230, 400, 260, Color::rgba(255, 0, 0, 255));
73
74 // path and bezier curve example draw a cloud
75 let mut cloud_path = GraphicsPath::new();
76 cloud_path.move_to(170, 80);
77 cloud_path.bezier_curve_to(130, 100, 130, 150, 230, 150);
78 cloud_path.bezier_curve_to(250, 180, 320, 180, 340, 150);
79 cloud_path.bezier_curve_to(420, 150, 420, 120, 390, 100);
80 cloud_path.bezier_curve_to(430, 40, 370, 30, 340, 50);
81 cloud_path.bezier_curve_to(320, 5, 250, 20, 250, 50);
82 cloud_path.bezier_curve_to(200, 5, 150, 20, 170, 80);
83 window.draw_path_stroke(cloud_path, Color::rgb(0, 0, 255));
84
85 // path and quadratic curve example draw a balloon
86 let mut balloon_path = GraphicsPath::new();
87 balloon_path.move_to(75, 25);
88 balloon_path.quadratic_curve_to(25, 25, 25, 62);
89 balloon_path.quadratic_curve_to(25, 100, 50, 100);
90 balloon_path.quadratic_curve_to(50, 120, 30, 125);
91 balloon_path.quadratic_curve_to(60, 120, 65, 100);
92 balloon_path.quadratic_curve_to(125, 100, 125, 62);
93 balloon_path.quadratic_curve_to(125, 25, 75, 25);
94 window.draw_path_stroke(balloon_path, Color::rgb(0, 0, 255));
95
96 window.char(200, 200, '═', Color::rgb(0, 0, 0));
97 window.char(208, 200, '═', Color::rgb(0, 0, 0));
98
99 // testing for non existent x,y position : does not panic but returns Color(0,0,0,0)
100 let _non_existent_pixel = window.getpixel(width as i32 + 10, height as i32 + 10);
101
102 // testing PartialEq for Color
103 if Color::rgb(11, 2, 3) == Color::rgba(1, 2, 3, 100) {
104 println!("Testing colors: they are the same!")
105 } else {
106 println!("Testing colors: they are NOT the same!")
107 }
108
109 //Draw a transparent rectangle over window content
110 // default mode is Blend
111 window.rect(250, 200, 80, 80, Color::rgba(100, 100, 100, 100));
112
113 //Draw an opaque rectangle replacing window content
114 window.mode().set(Mode::Overwrite); // set window drawing mode to Overwrite from now on
115 window.rect(300, 220, 80, 80, Color::rgb(100, 100, 100));
116
117 //Draw a hole in the window replacing alpha channel (Only in Orbital, not in SDL2)
118 window.rect(300, 100, 80, 80, Color::rgba(10, 10, 10, 1));
119
120 //Draw a transparent rectangle over window content
121 window.mode().set(Mode::Blend); //set mode to Blend fron now on
122 window.rect(200, 230, 80, 80, Color::rgba(100, 100, 100, 100));
123
124 //Draw a blured box over window content
125 window.box_blur(170, 100, 150, 150, 10);
126
127 //Draw a shadow around a box
128 window.box_shadow(170, 100, 150, 150, 0, 0, 20, Color::rgba(0, 0, 0, 255));
129
130 window.sync();
131
132 'events: loop {
133 for event in window.events() {
134 match event.to_option() {
135 EventOption::Quit(_quit_event) => break 'events,
136 EventOption::Mouse(evt) => println!(
137 "At position {:?} pixel color is : {:?}",
138 (evt.x, evt.y),
139 window.getpixel(evt.x, evt.y)
140 ),
141 event_option => println!("{:?}", event_option),
142 }
143 }
144 }
145}Sourcefn circle(&mut self, x0: i32, y0: i32, radius: i32, color: Color)
fn circle(&mut self, x0: i32, y0: i32, radius: i32, color: Color)
Draw a circle. Negative radius will fill in the inside
Examples found in repository?
examples/simple.rs (line 62)
5fn main() {
6 let (width, height) = orbclient::get_display_size().unwrap();
7
8 let mut window = Window::new(
9 (width as i32) / 4,
10 (height as i32) / 4,
11 width / 2,
12 height / 2,
13 "TITLE",
14 )
15 .unwrap();
16
17 let (win_w, win_h) = (width / 2, height / 2);
18
19 // top left -> bottom rigth
20 window.linear_gradient(
21 0,
22 0,
23 win_w / 3,
24 win_h,
25 0,
26 0,
27 (win_w / 3) as i32,
28 (win_h / 2) as i32,
29 Color::rgb(128, 128, 128),
30 Color::rgb(255, 255, 255),
31 );
32 // horizontal gradient
33 window.linear_gradient(
34 (win_w / 3) as i32,
35 0,
36 win_w / 3,
37 win_h,
38 (win_w / 3) as i32,
39 0,
40 (2 * win_w / 3) as i32,
41 0,
42 Color::rgb(128, 255, 255),
43 Color::rgb(255, 255, 255),
44 );
45 // vertical gradient
46 window.linear_gradient(
47 (2 * win_w / 3) as i32,
48 0,
49 win_w / 3,
50 win_h,
51 (2 * win_w / 3) as i32,
52 0,
53 (2 * win_w / 3) as i32,
54 win_h as i32,
55 Color::rgb(0, 128, 0),
56 Color::rgb(255, 255, 255),
57 );
58 window.arc(100, 100, -25, 1 << 0 | 1 << 2, Color::rgb(0, 0, 255));
59 window.arc(100, 100, -25, 1 << 1 | 1 << 3, Color::rgb(0, 255, 255));
60 window.arc(100, 100, -25, 1 << 4 | 1 << 6, Color::rgb(255, 0, 255));
61 window.arc(100, 100, -25, 1 << 5 | 1 << 7, Color::rgb(255, 255, 0));
62 window.circle(100, 100, 25, Color::rgb(0, 0, 0));
63 window.circle(100, 101, -25, Color::rgb(0, 255, 0));
64 window.circle(220, 220, -100, Color::rgba(128, 128, 128, 80));
65 window.wu_circle(150, 220, 100, Color::rgba(255, 0, 0, 255));
66 window.line(0, 0, 200, 200, Color::rgb(255, 0, 0));
67 window.line(0, 200, 200, 0, Color::rgb(128, 255, 0));
68 // vertical and horizontal line test
69 window.line(100, 0, 100, 200, Color::rgb(0, 0, 255));
70 window.line(0, 100, 200, 100, Color::rgb(255, 255, 0));
71 window.wu_line(100, 220, 400, 250, Color::rgba(255, 0, 0, 255));
72 window.line(100, 230, 400, 260, Color::rgba(255, 0, 0, 255));
73
74 // path and bezier curve example draw a cloud
75 let mut cloud_path = GraphicsPath::new();
76 cloud_path.move_to(170, 80);
77 cloud_path.bezier_curve_to(130, 100, 130, 150, 230, 150);
78 cloud_path.bezier_curve_to(250, 180, 320, 180, 340, 150);
79 cloud_path.bezier_curve_to(420, 150, 420, 120, 390, 100);
80 cloud_path.bezier_curve_to(430, 40, 370, 30, 340, 50);
81 cloud_path.bezier_curve_to(320, 5, 250, 20, 250, 50);
82 cloud_path.bezier_curve_to(200, 5, 150, 20, 170, 80);
83 window.draw_path_stroke(cloud_path, Color::rgb(0, 0, 255));
84
85 // path and quadratic curve example draw a balloon
86 let mut balloon_path = GraphicsPath::new();
87 balloon_path.move_to(75, 25);
88 balloon_path.quadratic_curve_to(25, 25, 25, 62);
89 balloon_path.quadratic_curve_to(25, 100, 50, 100);
90 balloon_path.quadratic_curve_to(50, 120, 30, 125);
91 balloon_path.quadratic_curve_to(60, 120, 65, 100);
92 balloon_path.quadratic_curve_to(125, 100, 125, 62);
93 balloon_path.quadratic_curve_to(125, 25, 75, 25);
94 window.draw_path_stroke(balloon_path, Color::rgb(0, 0, 255));
95
96 window.char(200, 200, '═', Color::rgb(0, 0, 0));
97 window.char(208, 200, '═', Color::rgb(0, 0, 0));
98
99 // testing for non existent x,y position : does not panic but returns Color(0,0,0,0)
100 let _non_existent_pixel = window.getpixel(width as i32 + 10, height as i32 + 10);
101
102 // testing PartialEq for Color
103 if Color::rgb(11, 2, 3) == Color::rgba(1, 2, 3, 100) {
104 println!("Testing colors: they are the same!")
105 } else {
106 println!("Testing colors: they are NOT the same!")
107 }
108
109 //Draw a transparent rectangle over window content
110 // default mode is Blend
111 window.rect(250, 200, 80, 80, Color::rgba(100, 100, 100, 100));
112
113 //Draw an opaque rectangle replacing window content
114 window.mode().set(Mode::Overwrite); // set window drawing mode to Overwrite from now on
115 window.rect(300, 220, 80, 80, Color::rgb(100, 100, 100));
116
117 //Draw a hole in the window replacing alpha channel (Only in Orbital, not in SDL2)
118 window.rect(300, 100, 80, 80, Color::rgba(10, 10, 10, 1));
119
120 //Draw a transparent rectangle over window content
121 window.mode().set(Mode::Blend); //set mode to Blend fron now on
122 window.rect(200, 230, 80, 80, Color::rgba(100, 100, 100, 100));
123
124 //Draw a blured box over window content
125 window.box_blur(170, 100, 150, 150, 10);
126
127 //Draw a shadow around a box
128 window.box_shadow(170, 100, 150, 150, 0, 0, 20, Color::rgba(0, 0, 0, 255));
129
130 window.sync();
131
132 'events: loop {
133 for event in window.events() {
134 match event.to_option() {
135 EventOption::Quit(_quit_event) => break 'events,
136 EventOption::Mouse(evt) => println!(
137 "At position {:?} pixel color is : {:?}",
138 (evt.x, evt.y),
139 window.getpixel(evt.x, evt.y)
140 ),
141 event_option => println!("{:?}", event_option),
142 }
143 }
144 }
145}fn line4points(&mut self, x0: i32, y0: i32, x: i32, y: i32, color: Color)
Sourcefn line(&mut self, argx1: i32, argy1: i32, argx2: i32, argy2: i32, color: Color)
fn line(&mut self, argx1: i32, argy1: i32, argx2: i32, argy2: i32, color: Color)
Draw a line
Examples found in repository?
examples/simple.rs (line 66)
5fn main() {
6 let (width, height) = orbclient::get_display_size().unwrap();
7
8 let mut window = Window::new(
9 (width as i32) / 4,
10 (height as i32) / 4,
11 width / 2,
12 height / 2,
13 "TITLE",
14 )
15 .unwrap();
16
17 let (win_w, win_h) = (width / 2, height / 2);
18
19 // top left -> bottom rigth
20 window.linear_gradient(
21 0,
22 0,
23 win_w / 3,
24 win_h,
25 0,
26 0,
27 (win_w / 3) as i32,
28 (win_h / 2) as i32,
29 Color::rgb(128, 128, 128),
30 Color::rgb(255, 255, 255),
31 );
32 // horizontal gradient
33 window.linear_gradient(
34 (win_w / 3) as i32,
35 0,
36 win_w / 3,
37 win_h,
38 (win_w / 3) as i32,
39 0,
40 (2 * win_w / 3) as i32,
41 0,
42 Color::rgb(128, 255, 255),
43 Color::rgb(255, 255, 255),
44 );
45 // vertical gradient
46 window.linear_gradient(
47 (2 * win_w / 3) as i32,
48 0,
49 win_w / 3,
50 win_h,
51 (2 * win_w / 3) as i32,
52 0,
53 (2 * win_w / 3) as i32,
54 win_h as i32,
55 Color::rgb(0, 128, 0),
56 Color::rgb(255, 255, 255),
57 );
58 window.arc(100, 100, -25, 1 << 0 | 1 << 2, Color::rgb(0, 0, 255));
59 window.arc(100, 100, -25, 1 << 1 | 1 << 3, Color::rgb(0, 255, 255));
60 window.arc(100, 100, -25, 1 << 4 | 1 << 6, Color::rgb(255, 0, 255));
61 window.arc(100, 100, -25, 1 << 5 | 1 << 7, Color::rgb(255, 255, 0));
62 window.circle(100, 100, 25, Color::rgb(0, 0, 0));
63 window.circle(100, 101, -25, Color::rgb(0, 255, 0));
64 window.circle(220, 220, -100, Color::rgba(128, 128, 128, 80));
65 window.wu_circle(150, 220, 100, Color::rgba(255, 0, 0, 255));
66 window.line(0, 0, 200, 200, Color::rgb(255, 0, 0));
67 window.line(0, 200, 200, 0, Color::rgb(128, 255, 0));
68 // vertical and horizontal line test
69 window.line(100, 0, 100, 200, Color::rgb(0, 0, 255));
70 window.line(0, 100, 200, 100, Color::rgb(255, 255, 0));
71 window.wu_line(100, 220, 400, 250, Color::rgba(255, 0, 0, 255));
72 window.line(100, 230, 400, 260, Color::rgba(255, 0, 0, 255));
73
74 // path and bezier curve example draw a cloud
75 let mut cloud_path = GraphicsPath::new();
76 cloud_path.move_to(170, 80);
77 cloud_path.bezier_curve_to(130, 100, 130, 150, 230, 150);
78 cloud_path.bezier_curve_to(250, 180, 320, 180, 340, 150);
79 cloud_path.bezier_curve_to(420, 150, 420, 120, 390, 100);
80 cloud_path.bezier_curve_to(430, 40, 370, 30, 340, 50);
81 cloud_path.bezier_curve_to(320, 5, 250, 20, 250, 50);
82 cloud_path.bezier_curve_to(200, 5, 150, 20, 170, 80);
83 window.draw_path_stroke(cloud_path, Color::rgb(0, 0, 255));
84
85 // path and quadratic curve example draw a balloon
86 let mut balloon_path = GraphicsPath::new();
87 balloon_path.move_to(75, 25);
88 balloon_path.quadratic_curve_to(25, 25, 25, 62);
89 balloon_path.quadratic_curve_to(25, 100, 50, 100);
90 balloon_path.quadratic_curve_to(50, 120, 30, 125);
91 balloon_path.quadratic_curve_to(60, 120, 65, 100);
92 balloon_path.quadratic_curve_to(125, 100, 125, 62);
93 balloon_path.quadratic_curve_to(125, 25, 75, 25);
94 window.draw_path_stroke(balloon_path, Color::rgb(0, 0, 255));
95
96 window.char(200, 200, '═', Color::rgb(0, 0, 0));
97 window.char(208, 200, '═', Color::rgb(0, 0, 0));
98
99 // testing for non existent x,y position : does not panic but returns Color(0,0,0,0)
100 let _non_existent_pixel = window.getpixel(width as i32 + 10, height as i32 + 10);
101
102 // testing PartialEq for Color
103 if Color::rgb(11, 2, 3) == Color::rgba(1, 2, 3, 100) {
104 println!("Testing colors: they are the same!")
105 } else {
106 println!("Testing colors: they are NOT the same!")
107 }
108
109 //Draw a transparent rectangle over window content
110 // default mode is Blend
111 window.rect(250, 200, 80, 80, Color::rgba(100, 100, 100, 100));
112
113 //Draw an opaque rectangle replacing window content
114 window.mode().set(Mode::Overwrite); // set window drawing mode to Overwrite from now on
115 window.rect(300, 220, 80, 80, Color::rgb(100, 100, 100));
116
117 //Draw a hole in the window replacing alpha channel (Only in Orbital, not in SDL2)
118 window.rect(300, 100, 80, 80, Color::rgba(10, 10, 10, 1));
119
120 //Draw a transparent rectangle over window content
121 window.mode().set(Mode::Blend); //set mode to Blend fron now on
122 window.rect(200, 230, 80, 80, Color::rgba(100, 100, 100, 100));
123
124 //Draw a blured box over window content
125 window.box_blur(170, 100, 150, 150, 10);
126
127 //Draw a shadow around a box
128 window.box_shadow(170, 100, 150, 150, 0, 0, 20, Color::rgba(0, 0, 0, 255));
129
130 window.sync();
131
132 'events: loop {
133 for event in window.events() {
134 match event.to_option() {
135 EventOption::Quit(_quit_event) => break 'events,
136 EventOption::Mouse(evt) => println!(
137 "At position {:?} pixel color is : {:?}",
138 (evt.x, evt.y),
139 window.getpixel(evt.x, evt.y)
140 ),
141 event_option => println!("{:?}", event_option),
142 }
143 }
144 }
145}fn lines(&mut self, points: &[[i32; 2]], color: Color)
Sourcefn draw_path_stroke(&mut self, graphicspath: GraphicsPath, color: Color)
fn draw_path_stroke(&mut self, graphicspath: GraphicsPath, color: Color)
Draw a path (GraphicsPath)
Examples found in repository?
examples/simple.rs (line 83)
5fn main() {
6 let (width, height) = orbclient::get_display_size().unwrap();
7
8 let mut window = Window::new(
9 (width as i32) / 4,
10 (height as i32) / 4,
11 width / 2,
12 height / 2,
13 "TITLE",
14 )
15 .unwrap();
16
17 let (win_w, win_h) = (width / 2, height / 2);
18
19 // top left -> bottom rigth
20 window.linear_gradient(
21 0,
22 0,
23 win_w / 3,
24 win_h,
25 0,
26 0,
27 (win_w / 3) as i32,
28 (win_h / 2) as i32,
29 Color::rgb(128, 128, 128),
30 Color::rgb(255, 255, 255),
31 );
32 // horizontal gradient
33 window.linear_gradient(
34 (win_w / 3) as i32,
35 0,
36 win_w / 3,
37 win_h,
38 (win_w / 3) as i32,
39 0,
40 (2 * win_w / 3) as i32,
41 0,
42 Color::rgb(128, 255, 255),
43 Color::rgb(255, 255, 255),
44 );
45 // vertical gradient
46 window.linear_gradient(
47 (2 * win_w / 3) as i32,
48 0,
49 win_w / 3,
50 win_h,
51 (2 * win_w / 3) as i32,
52 0,
53 (2 * win_w / 3) as i32,
54 win_h as i32,
55 Color::rgb(0, 128, 0),
56 Color::rgb(255, 255, 255),
57 );
58 window.arc(100, 100, -25, 1 << 0 | 1 << 2, Color::rgb(0, 0, 255));
59 window.arc(100, 100, -25, 1 << 1 | 1 << 3, Color::rgb(0, 255, 255));
60 window.arc(100, 100, -25, 1 << 4 | 1 << 6, Color::rgb(255, 0, 255));
61 window.arc(100, 100, -25, 1 << 5 | 1 << 7, Color::rgb(255, 255, 0));
62 window.circle(100, 100, 25, Color::rgb(0, 0, 0));
63 window.circle(100, 101, -25, Color::rgb(0, 255, 0));
64 window.circle(220, 220, -100, Color::rgba(128, 128, 128, 80));
65 window.wu_circle(150, 220, 100, Color::rgba(255, 0, 0, 255));
66 window.line(0, 0, 200, 200, Color::rgb(255, 0, 0));
67 window.line(0, 200, 200, 0, Color::rgb(128, 255, 0));
68 // vertical and horizontal line test
69 window.line(100, 0, 100, 200, Color::rgb(0, 0, 255));
70 window.line(0, 100, 200, 100, Color::rgb(255, 255, 0));
71 window.wu_line(100, 220, 400, 250, Color::rgba(255, 0, 0, 255));
72 window.line(100, 230, 400, 260, Color::rgba(255, 0, 0, 255));
73
74 // path and bezier curve example draw a cloud
75 let mut cloud_path = GraphicsPath::new();
76 cloud_path.move_to(170, 80);
77 cloud_path.bezier_curve_to(130, 100, 130, 150, 230, 150);
78 cloud_path.bezier_curve_to(250, 180, 320, 180, 340, 150);
79 cloud_path.bezier_curve_to(420, 150, 420, 120, 390, 100);
80 cloud_path.bezier_curve_to(430, 40, 370, 30, 340, 50);
81 cloud_path.bezier_curve_to(320, 5, 250, 20, 250, 50);
82 cloud_path.bezier_curve_to(200, 5, 150, 20, 170, 80);
83 window.draw_path_stroke(cloud_path, Color::rgb(0, 0, 255));
84
85 // path and quadratic curve example draw a balloon
86 let mut balloon_path = GraphicsPath::new();
87 balloon_path.move_to(75, 25);
88 balloon_path.quadratic_curve_to(25, 25, 25, 62);
89 balloon_path.quadratic_curve_to(25, 100, 50, 100);
90 balloon_path.quadratic_curve_to(50, 120, 30, 125);
91 balloon_path.quadratic_curve_to(60, 120, 65, 100);
92 balloon_path.quadratic_curve_to(125, 100, 125, 62);
93 balloon_path.quadratic_curve_to(125, 25, 75, 25);
94 window.draw_path_stroke(balloon_path, Color::rgb(0, 0, 255));
95
96 window.char(200, 200, '═', Color::rgb(0, 0, 0));
97 window.char(208, 200, '═', Color::rgb(0, 0, 0));
98
99 // testing for non existent x,y position : does not panic but returns Color(0,0,0,0)
100 let _non_existent_pixel = window.getpixel(width as i32 + 10, height as i32 + 10);
101
102 // testing PartialEq for Color
103 if Color::rgb(11, 2, 3) == Color::rgba(1, 2, 3, 100) {
104 println!("Testing colors: they are the same!")
105 } else {
106 println!("Testing colors: they are NOT the same!")
107 }
108
109 //Draw a transparent rectangle over window content
110 // default mode is Blend
111 window.rect(250, 200, 80, 80, Color::rgba(100, 100, 100, 100));
112
113 //Draw an opaque rectangle replacing window content
114 window.mode().set(Mode::Overwrite); // set window drawing mode to Overwrite from now on
115 window.rect(300, 220, 80, 80, Color::rgb(100, 100, 100));
116
117 //Draw a hole in the window replacing alpha channel (Only in Orbital, not in SDL2)
118 window.rect(300, 100, 80, 80, Color::rgba(10, 10, 10, 1));
119
120 //Draw a transparent rectangle over window content
121 window.mode().set(Mode::Blend); //set mode to Blend fron now on
122 window.rect(200, 230, 80, 80, Color::rgba(100, 100, 100, 100));
123
124 //Draw a blured box over window content
125 window.box_blur(170, 100, 150, 150, 10);
126
127 //Draw a shadow around a box
128 window.box_shadow(170, 100, 150, 150, 0, 0, 20, Color::rgba(0, 0, 0, 255));
129
130 window.sync();
131
132 'events: loop {
133 for event in window.events() {
134 match event.to_option() {
135 EventOption::Quit(_quit_event) => break 'events,
136 EventOption::Mouse(evt) => println!(
137 "At position {:?} pixel color is : {:?}",
138 (evt.x, evt.y),
139 window.getpixel(evt.x, evt.y)
140 ),
141 event_option => println!("{:?}", event_option),
142 }
143 }
144 }
145}Sourcefn char(&mut self, x: i32, y: i32, c: char, color: Color)
fn char(&mut self, x: i32, y: i32, c: char, color: Color)
Draw a character, using the loaded font
Examples found in repository?
examples/simple.rs (line 96)
5fn main() {
6 let (width, height) = orbclient::get_display_size().unwrap();
7
8 let mut window = Window::new(
9 (width as i32) / 4,
10 (height as i32) / 4,
11 width / 2,
12 height / 2,
13 "TITLE",
14 )
15 .unwrap();
16
17 let (win_w, win_h) = (width / 2, height / 2);
18
19 // top left -> bottom rigth
20 window.linear_gradient(
21 0,
22 0,
23 win_w / 3,
24 win_h,
25 0,
26 0,
27 (win_w / 3) as i32,
28 (win_h / 2) as i32,
29 Color::rgb(128, 128, 128),
30 Color::rgb(255, 255, 255),
31 );
32 // horizontal gradient
33 window.linear_gradient(
34 (win_w / 3) as i32,
35 0,
36 win_w / 3,
37 win_h,
38 (win_w / 3) as i32,
39 0,
40 (2 * win_w / 3) as i32,
41 0,
42 Color::rgb(128, 255, 255),
43 Color::rgb(255, 255, 255),
44 );
45 // vertical gradient
46 window.linear_gradient(
47 (2 * win_w / 3) as i32,
48 0,
49 win_w / 3,
50 win_h,
51 (2 * win_w / 3) as i32,
52 0,
53 (2 * win_w / 3) as i32,
54 win_h as i32,
55 Color::rgb(0, 128, 0),
56 Color::rgb(255, 255, 255),
57 );
58 window.arc(100, 100, -25, 1 << 0 | 1 << 2, Color::rgb(0, 0, 255));
59 window.arc(100, 100, -25, 1 << 1 | 1 << 3, Color::rgb(0, 255, 255));
60 window.arc(100, 100, -25, 1 << 4 | 1 << 6, Color::rgb(255, 0, 255));
61 window.arc(100, 100, -25, 1 << 5 | 1 << 7, Color::rgb(255, 255, 0));
62 window.circle(100, 100, 25, Color::rgb(0, 0, 0));
63 window.circle(100, 101, -25, Color::rgb(0, 255, 0));
64 window.circle(220, 220, -100, Color::rgba(128, 128, 128, 80));
65 window.wu_circle(150, 220, 100, Color::rgba(255, 0, 0, 255));
66 window.line(0, 0, 200, 200, Color::rgb(255, 0, 0));
67 window.line(0, 200, 200, 0, Color::rgb(128, 255, 0));
68 // vertical and horizontal line test
69 window.line(100, 0, 100, 200, Color::rgb(0, 0, 255));
70 window.line(0, 100, 200, 100, Color::rgb(255, 255, 0));
71 window.wu_line(100, 220, 400, 250, Color::rgba(255, 0, 0, 255));
72 window.line(100, 230, 400, 260, Color::rgba(255, 0, 0, 255));
73
74 // path and bezier curve example draw a cloud
75 let mut cloud_path = GraphicsPath::new();
76 cloud_path.move_to(170, 80);
77 cloud_path.bezier_curve_to(130, 100, 130, 150, 230, 150);
78 cloud_path.bezier_curve_to(250, 180, 320, 180, 340, 150);
79 cloud_path.bezier_curve_to(420, 150, 420, 120, 390, 100);
80 cloud_path.bezier_curve_to(430, 40, 370, 30, 340, 50);
81 cloud_path.bezier_curve_to(320, 5, 250, 20, 250, 50);
82 cloud_path.bezier_curve_to(200, 5, 150, 20, 170, 80);
83 window.draw_path_stroke(cloud_path, Color::rgb(0, 0, 255));
84
85 // path and quadratic curve example draw a balloon
86 let mut balloon_path = GraphicsPath::new();
87 balloon_path.move_to(75, 25);
88 balloon_path.quadratic_curve_to(25, 25, 25, 62);
89 balloon_path.quadratic_curve_to(25, 100, 50, 100);
90 balloon_path.quadratic_curve_to(50, 120, 30, 125);
91 balloon_path.quadratic_curve_to(60, 120, 65, 100);
92 balloon_path.quadratic_curve_to(125, 100, 125, 62);
93 balloon_path.quadratic_curve_to(125, 25, 75, 25);
94 window.draw_path_stroke(balloon_path, Color::rgb(0, 0, 255));
95
96 window.char(200, 200, '═', Color::rgb(0, 0, 0));
97 window.char(208, 200, '═', Color::rgb(0, 0, 0));
98
99 // testing for non existent x,y position : does not panic but returns Color(0,0,0,0)
100 let _non_existent_pixel = window.getpixel(width as i32 + 10, height as i32 + 10);
101
102 // testing PartialEq for Color
103 if Color::rgb(11, 2, 3) == Color::rgba(1, 2, 3, 100) {
104 println!("Testing colors: they are the same!")
105 } else {
106 println!("Testing colors: they are NOT the same!")
107 }
108
109 //Draw a transparent rectangle over window content
110 // default mode is Blend
111 window.rect(250, 200, 80, 80, Color::rgba(100, 100, 100, 100));
112
113 //Draw an opaque rectangle replacing window content
114 window.mode().set(Mode::Overwrite); // set window drawing mode to Overwrite from now on
115 window.rect(300, 220, 80, 80, Color::rgb(100, 100, 100));
116
117 //Draw a hole in the window replacing alpha channel (Only in Orbital, not in SDL2)
118 window.rect(300, 100, 80, 80, Color::rgba(10, 10, 10, 1));
119
120 //Draw a transparent rectangle over window content
121 window.mode().set(Mode::Blend); //set mode to Blend fron now on
122 window.rect(200, 230, 80, 80, Color::rgba(100, 100, 100, 100));
123
124 //Draw a blured box over window content
125 window.box_blur(170, 100, 150, 150, 10);
126
127 //Draw a shadow around a box
128 window.box_shadow(170, 100, 150, 150, 0, 0, 20, Color::rgba(0, 0, 0, 255));
129
130 window.sync();
131
132 'events: loop {
133 for event in window.events() {
134 match event.to_option() {
135 EventOption::Quit(_quit_event) => break 'events,
136 EventOption::Mouse(evt) => println!(
137 "At position {:?} pixel color is : {:?}",
138 (evt.x, evt.y),
139 window.getpixel(evt.x, evt.y)
140 ),
141 event_option => println!("{:?}", event_option),
142 }
143 }
144 }
145}Sourcefn set(&mut self, color: Color)
fn set(&mut self, color: Color)
Set entire window to a color
Examples found in repository?
examples/rect_bench.rs (line 23)
20fn main() {
21 let mut window = Window::new(10, 10, 800, 600, "RECTANGLE BENCHMARK").unwrap();
22
23 time!("set", { window.set(Color::rgb(255, 255, 255)) });
24
25 time!("rect 400x400", {
26 window.rect(0, 0, 400, 400, Color::rgb(0, 0, 255))
27 });
28
29 time!("rect 200x200", {
30 window.rect(0, 0, 200, 200, Color::rgb(0, 255, 0))
31 });
32
33 time!("rect 100x100", {
34 window.rect(0, 0, 100, 100, Color::rgb(255, 0, 0))
35 });
36
37 time!("sync", {
38 window.update();
39 });
40
41 'events: loop {
42 for event in window.events() {
43 #[allow(clippy::single_match)]
44 match event.to_option() {
45 EventOption::Quit(_quit_event) => break 'events,
46 _ => (),
47 }
48 }
49 }
50}More examples
examples/image_bench.rs (line 27)
22fn main() {
23 //let (width, height) = orbclient::get_display_size().unwrap();
24
25 let mut window = Window::new(10, 10, 800, 600, "IMAGE BENCHMARK").unwrap();
26
27 window.set(Color::rgb(255, 255, 255));
28
29 //create image data : a green square
30 let data = vec![Color::rgba(100, 200, 10, 3); 412500];
31 let mut data2 = vec![Color::rgba(200, 100, 10, 3); 412500];
32 let mut data3 = vec![Color::rgba(10, 100, 100, 3); 412500];
33 let mut data4 = vec![Color::rgba(10, 100, 200, 3); 800 * 400];
34
35 //draw image benchmarking
36 println!("Benchmarking implementations to draw an image on window:");
37
38 time!("image_legacy", {
39 for _i in 0..TIMES {
40 window.image_legacy(15, 15, 750, 550, &data[..]);
41 }
42 });
43
44 time!("image_over", {
45 for _i in 0..TIMES {
46 window.image_over(50, &data4[..]);
47 }
48 });
49
50 time!("image_fast", {
51 for _i in 0..TIMES {
52 window.image_fast(20, 20, 750, 550, &data2[..]);
53 }
54 });
55
56 time!("image_opaque", {
57 for _i in 0..TIMES {
58 window.image_opaque(30, 30, 750, 550, &data3[..]);
59 }
60 });
61
62 time!("image_roi_mut_blend", {
63 let data2_roi = ImageRef::from_data(750, 550, &mut data2[..]);
64 for _i in 0..TIMES {
65 ImageRef::from_renderer(&mut window)
66 .roi_mut(&Rect::new(40, 40, 750, 550))
67 .blend(&data2_roi.roi(&Rect::new(0, 0, 750, 550)));
68 }
69 });
70
71 time!("image_roi_mut_blit_mask", {
72 let data2_roi = ImageRef::from_data(750, 550, &mut data2[..]);
73 for _i in 0..TIMES {
74 ImageRef::from_renderer(&mut window)
75 .roi_mut(&Rect::new(40, 40, 750, 550))
76 .blit_mask(&data2_roi.roi(&Rect::new(0, 0, 750, 550)));
77 }
78 });
79
80 time!("image_roi_mut_blit", {
81 let data3_roi = ImageRef::from_data(750, 550, &mut data3[..]);
82 for _i in 0..TIMES {
83 ImageRef::from_renderer(&mut window)
84 .roi_mut(&Rect::new(50, 50, 750, 550))
85 .blit(&data3_roi.roi(&Rect::new(0, 0, 750, 550)));
86 }
87 });
88
89 time!("image_roi_mut_blit_over", {
90 let data4_roi = ImageRef::from_data(800, 400, &mut data4[..]);
91 for _i in 0..TIMES {
92 ImageRef::from_renderer(&mut window)
93 // .roi_mut(&Rect::new(10, 120, 790, 400)) // to test blit_over does not trigger
94 .roi_mut(&Rect::new(0, 120, 800, 400))
95 .blit(&data4_roi.roi(&Rect::new(0, 0, 800, 400)));
96 }
97 });
98
99 println!("------------------------------------------------");
100
101 window.sync();
102
103 'events: loop {
104 for event in window.events() {
105 match event.to_option() {
106 EventOption::Quit(_quit_event) => break 'events,
107 EventOption::Mouse(evt) => println!(
108 "At position {:?} pixel color is : {:?}",
109 (evt.x, evt.y),
110 window.getpixel(evt.x, evt.y)
111 ),
112 event_option => println!("{:?}", event_option),
113 }
114 }
115 }
116}Sourcefn rect(&mut self, x: i32, y: i32, w: u32, h: u32, color: Color)
fn rect(&mut self, x: i32, y: i32, w: u32, h: u32, color: Color)
Examples found in repository?
examples/rect_bench.rs (line 26)
20fn main() {
21 let mut window = Window::new(10, 10, 800, 600, "RECTANGLE BENCHMARK").unwrap();
22
23 time!("set", { window.set(Color::rgb(255, 255, 255)) });
24
25 time!("rect 400x400", {
26 window.rect(0, 0, 400, 400, Color::rgb(0, 0, 255))
27 });
28
29 time!("rect 200x200", {
30 window.rect(0, 0, 200, 200, Color::rgb(0, 255, 0))
31 });
32
33 time!("rect 100x100", {
34 window.rect(0, 0, 100, 100, Color::rgb(255, 0, 0))
35 });
36
37 time!("sync", {
38 window.update();
39 });
40
41 'events: loop {
42 for event in window.events() {
43 #[allow(clippy::single_match)]
44 match event.to_option() {
45 EventOption::Quit(_quit_event) => break 'events,
46 _ => (),
47 }
48 }
49 }
50}More examples
examples/simple.rs (line 111)
5fn main() {
6 let (width, height) = orbclient::get_display_size().unwrap();
7
8 let mut window = Window::new(
9 (width as i32) / 4,
10 (height as i32) / 4,
11 width / 2,
12 height / 2,
13 "TITLE",
14 )
15 .unwrap();
16
17 let (win_w, win_h) = (width / 2, height / 2);
18
19 // top left -> bottom rigth
20 window.linear_gradient(
21 0,
22 0,
23 win_w / 3,
24 win_h,
25 0,
26 0,
27 (win_w / 3) as i32,
28 (win_h / 2) as i32,
29 Color::rgb(128, 128, 128),
30 Color::rgb(255, 255, 255),
31 );
32 // horizontal gradient
33 window.linear_gradient(
34 (win_w / 3) as i32,
35 0,
36 win_w / 3,
37 win_h,
38 (win_w / 3) as i32,
39 0,
40 (2 * win_w / 3) as i32,
41 0,
42 Color::rgb(128, 255, 255),
43 Color::rgb(255, 255, 255),
44 );
45 // vertical gradient
46 window.linear_gradient(
47 (2 * win_w / 3) as i32,
48 0,
49 win_w / 3,
50 win_h,
51 (2 * win_w / 3) as i32,
52 0,
53 (2 * win_w / 3) as i32,
54 win_h as i32,
55 Color::rgb(0, 128, 0),
56 Color::rgb(255, 255, 255),
57 );
58 window.arc(100, 100, -25, 1 << 0 | 1 << 2, Color::rgb(0, 0, 255));
59 window.arc(100, 100, -25, 1 << 1 | 1 << 3, Color::rgb(0, 255, 255));
60 window.arc(100, 100, -25, 1 << 4 | 1 << 6, Color::rgb(255, 0, 255));
61 window.arc(100, 100, -25, 1 << 5 | 1 << 7, Color::rgb(255, 255, 0));
62 window.circle(100, 100, 25, Color::rgb(0, 0, 0));
63 window.circle(100, 101, -25, Color::rgb(0, 255, 0));
64 window.circle(220, 220, -100, Color::rgba(128, 128, 128, 80));
65 window.wu_circle(150, 220, 100, Color::rgba(255, 0, 0, 255));
66 window.line(0, 0, 200, 200, Color::rgb(255, 0, 0));
67 window.line(0, 200, 200, 0, Color::rgb(128, 255, 0));
68 // vertical and horizontal line test
69 window.line(100, 0, 100, 200, Color::rgb(0, 0, 255));
70 window.line(0, 100, 200, 100, Color::rgb(255, 255, 0));
71 window.wu_line(100, 220, 400, 250, Color::rgba(255, 0, 0, 255));
72 window.line(100, 230, 400, 260, Color::rgba(255, 0, 0, 255));
73
74 // path and bezier curve example draw a cloud
75 let mut cloud_path = GraphicsPath::new();
76 cloud_path.move_to(170, 80);
77 cloud_path.bezier_curve_to(130, 100, 130, 150, 230, 150);
78 cloud_path.bezier_curve_to(250, 180, 320, 180, 340, 150);
79 cloud_path.bezier_curve_to(420, 150, 420, 120, 390, 100);
80 cloud_path.bezier_curve_to(430, 40, 370, 30, 340, 50);
81 cloud_path.bezier_curve_to(320, 5, 250, 20, 250, 50);
82 cloud_path.bezier_curve_to(200, 5, 150, 20, 170, 80);
83 window.draw_path_stroke(cloud_path, Color::rgb(0, 0, 255));
84
85 // path and quadratic curve example draw a balloon
86 let mut balloon_path = GraphicsPath::new();
87 balloon_path.move_to(75, 25);
88 balloon_path.quadratic_curve_to(25, 25, 25, 62);
89 balloon_path.quadratic_curve_to(25, 100, 50, 100);
90 balloon_path.quadratic_curve_to(50, 120, 30, 125);
91 balloon_path.quadratic_curve_to(60, 120, 65, 100);
92 balloon_path.quadratic_curve_to(125, 100, 125, 62);
93 balloon_path.quadratic_curve_to(125, 25, 75, 25);
94 window.draw_path_stroke(balloon_path, Color::rgb(0, 0, 255));
95
96 window.char(200, 200, '═', Color::rgb(0, 0, 0));
97 window.char(208, 200, '═', Color::rgb(0, 0, 0));
98
99 // testing for non existent x,y position : does not panic but returns Color(0,0,0,0)
100 let _non_existent_pixel = window.getpixel(width as i32 + 10, height as i32 + 10);
101
102 // testing PartialEq for Color
103 if Color::rgb(11, 2, 3) == Color::rgba(1, 2, 3, 100) {
104 println!("Testing colors: they are the same!")
105 } else {
106 println!("Testing colors: they are NOT the same!")
107 }
108
109 //Draw a transparent rectangle over window content
110 // default mode is Blend
111 window.rect(250, 200, 80, 80, Color::rgba(100, 100, 100, 100));
112
113 //Draw an opaque rectangle replacing window content
114 window.mode().set(Mode::Overwrite); // set window drawing mode to Overwrite from now on
115 window.rect(300, 220, 80, 80, Color::rgb(100, 100, 100));
116
117 //Draw a hole in the window replacing alpha channel (Only in Orbital, not in SDL2)
118 window.rect(300, 100, 80, 80, Color::rgba(10, 10, 10, 1));
119
120 //Draw a transparent rectangle over window content
121 window.mode().set(Mode::Blend); //set mode to Blend fron now on
122 window.rect(200, 230, 80, 80, Color::rgba(100, 100, 100, 100));
123
124 //Draw a blured box over window content
125 window.box_blur(170, 100, 150, 150, 10);
126
127 //Draw a shadow around a box
128 window.box_shadow(170, 100, 150, 150, 0, 0, 20, Color::rgba(0, 0, 0, 255));
129
130 window.sync();
131
132 'events: loop {
133 for event in window.events() {
134 match event.to_option() {
135 EventOption::Quit(_quit_event) => break 'events,
136 EventOption::Mouse(evt) => println!(
137 "At position {:?} pixel color is : {:?}",
138 (evt.x, evt.y),
139 window.getpixel(evt.x, evt.y)
140 ),
141 event_option => println!("{:?}", event_option),
142 }
143 }
144 }
145}Sourcefn box_blur(&mut self, x: i32, y: i32, w: u32, h: u32, r: i32)
fn box_blur(&mut self, x: i32, y: i32, w: u32, h: u32, r: i32)
Examples found in repository?
examples/simple.rs (line 125)
5fn main() {
6 let (width, height) = orbclient::get_display_size().unwrap();
7
8 let mut window = Window::new(
9 (width as i32) / 4,
10 (height as i32) / 4,
11 width / 2,
12 height / 2,
13 "TITLE",
14 )
15 .unwrap();
16
17 let (win_w, win_h) = (width / 2, height / 2);
18
19 // top left -> bottom rigth
20 window.linear_gradient(
21 0,
22 0,
23 win_w / 3,
24 win_h,
25 0,
26 0,
27 (win_w / 3) as i32,
28 (win_h / 2) as i32,
29 Color::rgb(128, 128, 128),
30 Color::rgb(255, 255, 255),
31 );
32 // horizontal gradient
33 window.linear_gradient(
34 (win_w / 3) as i32,
35 0,
36 win_w / 3,
37 win_h,
38 (win_w / 3) as i32,
39 0,
40 (2 * win_w / 3) as i32,
41 0,
42 Color::rgb(128, 255, 255),
43 Color::rgb(255, 255, 255),
44 );
45 // vertical gradient
46 window.linear_gradient(
47 (2 * win_w / 3) as i32,
48 0,
49 win_w / 3,
50 win_h,
51 (2 * win_w / 3) as i32,
52 0,
53 (2 * win_w / 3) as i32,
54 win_h as i32,
55 Color::rgb(0, 128, 0),
56 Color::rgb(255, 255, 255),
57 );
58 window.arc(100, 100, -25, 1 << 0 | 1 << 2, Color::rgb(0, 0, 255));
59 window.arc(100, 100, -25, 1 << 1 | 1 << 3, Color::rgb(0, 255, 255));
60 window.arc(100, 100, -25, 1 << 4 | 1 << 6, Color::rgb(255, 0, 255));
61 window.arc(100, 100, -25, 1 << 5 | 1 << 7, Color::rgb(255, 255, 0));
62 window.circle(100, 100, 25, Color::rgb(0, 0, 0));
63 window.circle(100, 101, -25, Color::rgb(0, 255, 0));
64 window.circle(220, 220, -100, Color::rgba(128, 128, 128, 80));
65 window.wu_circle(150, 220, 100, Color::rgba(255, 0, 0, 255));
66 window.line(0, 0, 200, 200, Color::rgb(255, 0, 0));
67 window.line(0, 200, 200, 0, Color::rgb(128, 255, 0));
68 // vertical and horizontal line test
69 window.line(100, 0, 100, 200, Color::rgb(0, 0, 255));
70 window.line(0, 100, 200, 100, Color::rgb(255, 255, 0));
71 window.wu_line(100, 220, 400, 250, Color::rgba(255, 0, 0, 255));
72 window.line(100, 230, 400, 260, Color::rgba(255, 0, 0, 255));
73
74 // path and bezier curve example draw a cloud
75 let mut cloud_path = GraphicsPath::new();
76 cloud_path.move_to(170, 80);
77 cloud_path.bezier_curve_to(130, 100, 130, 150, 230, 150);
78 cloud_path.bezier_curve_to(250, 180, 320, 180, 340, 150);
79 cloud_path.bezier_curve_to(420, 150, 420, 120, 390, 100);
80 cloud_path.bezier_curve_to(430, 40, 370, 30, 340, 50);
81 cloud_path.bezier_curve_to(320, 5, 250, 20, 250, 50);
82 cloud_path.bezier_curve_to(200, 5, 150, 20, 170, 80);
83 window.draw_path_stroke(cloud_path, Color::rgb(0, 0, 255));
84
85 // path and quadratic curve example draw a balloon
86 let mut balloon_path = GraphicsPath::new();
87 balloon_path.move_to(75, 25);
88 balloon_path.quadratic_curve_to(25, 25, 25, 62);
89 balloon_path.quadratic_curve_to(25, 100, 50, 100);
90 balloon_path.quadratic_curve_to(50, 120, 30, 125);
91 balloon_path.quadratic_curve_to(60, 120, 65, 100);
92 balloon_path.quadratic_curve_to(125, 100, 125, 62);
93 balloon_path.quadratic_curve_to(125, 25, 75, 25);
94 window.draw_path_stroke(balloon_path, Color::rgb(0, 0, 255));
95
96 window.char(200, 200, '═', Color::rgb(0, 0, 0));
97 window.char(208, 200, '═', Color::rgb(0, 0, 0));
98
99 // testing for non existent x,y position : does not panic but returns Color(0,0,0,0)
100 let _non_existent_pixel = window.getpixel(width as i32 + 10, height as i32 + 10);
101
102 // testing PartialEq for Color
103 if Color::rgb(11, 2, 3) == Color::rgba(1, 2, 3, 100) {
104 println!("Testing colors: they are the same!")
105 } else {
106 println!("Testing colors: they are NOT the same!")
107 }
108
109 //Draw a transparent rectangle over window content
110 // default mode is Blend
111 window.rect(250, 200, 80, 80, Color::rgba(100, 100, 100, 100));
112
113 //Draw an opaque rectangle replacing window content
114 window.mode().set(Mode::Overwrite); // set window drawing mode to Overwrite from now on
115 window.rect(300, 220, 80, 80, Color::rgb(100, 100, 100));
116
117 //Draw a hole in the window replacing alpha channel (Only in Orbital, not in SDL2)
118 window.rect(300, 100, 80, 80, Color::rgba(10, 10, 10, 1));
119
120 //Draw a transparent rectangle over window content
121 window.mode().set(Mode::Blend); //set mode to Blend fron now on
122 window.rect(200, 230, 80, 80, Color::rgba(100, 100, 100, 100));
123
124 //Draw a blured box over window content
125 window.box_blur(170, 100, 150, 150, 10);
126
127 //Draw a shadow around a box
128 window.box_shadow(170, 100, 150, 150, 0, 0, 20, Color::rgba(0, 0, 0, 255));
129
130 window.sync();
131
132 'events: loop {
133 for event in window.events() {
134 match event.to_option() {
135 EventOption::Quit(_quit_event) => break 'events,
136 EventOption::Mouse(evt) => println!(
137 "At position {:?} pixel color is : {:?}",
138 (evt.x, evt.y),
139 window.getpixel(evt.x, evt.y)
140 ),
141 event_option => println!("{:?}", event_option),
142 }
143 }
144 }
145}Sourcefn box_shadow(
&mut self,
x: i32,
y: i32,
w: u32,
h: u32,
offset_x: i32,
offset_y: i32,
r: i32,
color: Color,
)
fn box_shadow( &mut self, x: i32, y: i32, w: u32, h: u32, offset_x: i32, offset_y: i32, r: i32, color: Color, )
Examples found in repository?
examples/simple.rs (line 128)
5fn main() {
6 let (width, height) = orbclient::get_display_size().unwrap();
7
8 let mut window = Window::new(
9 (width as i32) / 4,
10 (height as i32) / 4,
11 width / 2,
12 height / 2,
13 "TITLE",
14 )
15 .unwrap();
16
17 let (win_w, win_h) = (width / 2, height / 2);
18
19 // top left -> bottom rigth
20 window.linear_gradient(
21 0,
22 0,
23 win_w / 3,
24 win_h,
25 0,
26 0,
27 (win_w / 3) as i32,
28 (win_h / 2) as i32,
29 Color::rgb(128, 128, 128),
30 Color::rgb(255, 255, 255),
31 );
32 // horizontal gradient
33 window.linear_gradient(
34 (win_w / 3) as i32,
35 0,
36 win_w / 3,
37 win_h,
38 (win_w / 3) as i32,
39 0,
40 (2 * win_w / 3) as i32,
41 0,
42 Color::rgb(128, 255, 255),
43 Color::rgb(255, 255, 255),
44 );
45 // vertical gradient
46 window.linear_gradient(
47 (2 * win_w / 3) as i32,
48 0,
49 win_w / 3,
50 win_h,
51 (2 * win_w / 3) as i32,
52 0,
53 (2 * win_w / 3) as i32,
54 win_h as i32,
55 Color::rgb(0, 128, 0),
56 Color::rgb(255, 255, 255),
57 );
58 window.arc(100, 100, -25, 1 << 0 | 1 << 2, Color::rgb(0, 0, 255));
59 window.arc(100, 100, -25, 1 << 1 | 1 << 3, Color::rgb(0, 255, 255));
60 window.arc(100, 100, -25, 1 << 4 | 1 << 6, Color::rgb(255, 0, 255));
61 window.arc(100, 100, -25, 1 << 5 | 1 << 7, Color::rgb(255, 255, 0));
62 window.circle(100, 100, 25, Color::rgb(0, 0, 0));
63 window.circle(100, 101, -25, Color::rgb(0, 255, 0));
64 window.circle(220, 220, -100, Color::rgba(128, 128, 128, 80));
65 window.wu_circle(150, 220, 100, Color::rgba(255, 0, 0, 255));
66 window.line(0, 0, 200, 200, Color::rgb(255, 0, 0));
67 window.line(0, 200, 200, 0, Color::rgb(128, 255, 0));
68 // vertical and horizontal line test
69 window.line(100, 0, 100, 200, Color::rgb(0, 0, 255));
70 window.line(0, 100, 200, 100, Color::rgb(255, 255, 0));
71 window.wu_line(100, 220, 400, 250, Color::rgba(255, 0, 0, 255));
72 window.line(100, 230, 400, 260, Color::rgba(255, 0, 0, 255));
73
74 // path and bezier curve example draw a cloud
75 let mut cloud_path = GraphicsPath::new();
76 cloud_path.move_to(170, 80);
77 cloud_path.bezier_curve_to(130, 100, 130, 150, 230, 150);
78 cloud_path.bezier_curve_to(250, 180, 320, 180, 340, 150);
79 cloud_path.bezier_curve_to(420, 150, 420, 120, 390, 100);
80 cloud_path.bezier_curve_to(430, 40, 370, 30, 340, 50);
81 cloud_path.bezier_curve_to(320, 5, 250, 20, 250, 50);
82 cloud_path.bezier_curve_to(200, 5, 150, 20, 170, 80);
83 window.draw_path_stroke(cloud_path, Color::rgb(0, 0, 255));
84
85 // path and quadratic curve example draw a balloon
86 let mut balloon_path = GraphicsPath::new();
87 balloon_path.move_to(75, 25);
88 balloon_path.quadratic_curve_to(25, 25, 25, 62);
89 balloon_path.quadratic_curve_to(25, 100, 50, 100);
90 balloon_path.quadratic_curve_to(50, 120, 30, 125);
91 balloon_path.quadratic_curve_to(60, 120, 65, 100);
92 balloon_path.quadratic_curve_to(125, 100, 125, 62);
93 balloon_path.quadratic_curve_to(125, 25, 75, 25);
94 window.draw_path_stroke(balloon_path, Color::rgb(0, 0, 255));
95
96 window.char(200, 200, '═', Color::rgb(0, 0, 0));
97 window.char(208, 200, '═', Color::rgb(0, 0, 0));
98
99 // testing for non existent x,y position : does not panic but returns Color(0,0,0,0)
100 let _non_existent_pixel = window.getpixel(width as i32 + 10, height as i32 + 10);
101
102 // testing PartialEq for Color
103 if Color::rgb(11, 2, 3) == Color::rgba(1, 2, 3, 100) {
104 println!("Testing colors: they are the same!")
105 } else {
106 println!("Testing colors: they are NOT the same!")
107 }
108
109 //Draw a transparent rectangle over window content
110 // default mode is Blend
111 window.rect(250, 200, 80, 80, Color::rgba(100, 100, 100, 100));
112
113 //Draw an opaque rectangle replacing window content
114 window.mode().set(Mode::Overwrite); // set window drawing mode to Overwrite from now on
115 window.rect(300, 220, 80, 80, Color::rgb(100, 100, 100));
116
117 //Draw a hole in the window replacing alpha channel (Only in Orbital, not in SDL2)
118 window.rect(300, 100, 80, 80, Color::rgba(10, 10, 10, 1));
119
120 //Draw a transparent rectangle over window content
121 window.mode().set(Mode::Blend); //set mode to Blend fron now on
122 window.rect(200, 230, 80, 80, Color::rgba(100, 100, 100, 100));
123
124 //Draw a blured box over window content
125 window.box_blur(170, 100, 150, 150, 10);
126
127 //Draw a shadow around a box
128 window.box_shadow(170, 100, 150, 150, 0, 0, 20, Color::rgba(0, 0, 0, 255));
129
130 window.sync();
131
132 'events: loop {
133 for event in window.events() {
134 match event.to_option() {
135 EventOption::Quit(_quit_event) => break 'events,
136 EventOption::Mouse(evt) => println!(
137 "At position {:?} pixel color is : {:?}",
138 (evt.x, evt.y),
139 window.getpixel(evt.x, evt.y)
140 ),
141 event_option => println!("{:?}", event_option),
142 }
143 }
144 }
145}Sourcefn image(&mut self, start_x: i32, start_y: i32, w: u32, h: u32, data: &[Color])
fn image(&mut self, start_x: i32, start_y: i32, w: u32, h: u32, data: &[Color])
Display an image
Sourcefn image_legacy(
&mut self,
start_x: i32,
start_y: i32,
w: u32,
h: u32,
data: &[Color],
)
fn image_legacy( &mut self, start_x: i32, start_y: i32, w: u32, h: u32, data: &[Color], )
Examples found in repository?
examples/image_bench.rs (line 40)
22fn main() {
23 //let (width, height) = orbclient::get_display_size().unwrap();
24
25 let mut window = Window::new(10, 10, 800, 600, "IMAGE BENCHMARK").unwrap();
26
27 window.set(Color::rgb(255, 255, 255));
28
29 //create image data : a green square
30 let data = vec![Color::rgba(100, 200, 10, 3); 412500];
31 let mut data2 = vec![Color::rgba(200, 100, 10, 3); 412500];
32 let mut data3 = vec![Color::rgba(10, 100, 100, 3); 412500];
33 let mut data4 = vec![Color::rgba(10, 100, 200, 3); 800 * 400];
34
35 //draw image benchmarking
36 println!("Benchmarking implementations to draw an image on window:");
37
38 time!("image_legacy", {
39 for _i in 0..TIMES {
40 window.image_legacy(15, 15, 750, 550, &data[..]);
41 }
42 });
43
44 time!("image_over", {
45 for _i in 0..TIMES {
46 window.image_over(50, &data4[..]);
47 }
48 });
49
50 time!("image_fast", {
51 for _i in 0..TIMES {
52 window.image_fast(20, 20, 750, 550, &data2[..]);
53 }
54 });
55
56 time!("image_opaque", {
57 for _i in 0..TIMES {
58 window.image_opaque(30, 30, 750, 550, &data3[..]);
59 }
60 });
61
62 time!("image_roi_mut_blend", {
63 let data2_roi = ImageRef::from_data(750, 550, &mut data2[..]);
64 for _i in 0..TIMES {
65 ImageRef::from_renderer(&mut window)
66 .roi_mut(&Rect::new(40, 40, 750, 550))
67 .blend(&data2_roi.roi(&Rect::new(0, 0, 750, 550)));
68 }
69 });
70
71 time!("image_roi_mut_blit_mask", {
72 let data2_roi = ImageRef::from_data(750, 550, &mut data2[..]);
73 for _i in 0..TIMES {
74 ImageRef::from_renderer(&mut window)
75 .roi_mut(&Rect::new(40, 40, 750, 550))
76 .blit_mask(&data2_roi.roi(&Rect::new(0, 0, 750, 550)));
77 }
78 });
79
80 time!("image_roi_mut_blit", {
81 let data3_roi = ImageRef::from_data(750, 550, &mut data3[..]);
82 for _i in 0..TIMES {
83 ImageRef::from_renderer(&mut window)
84 .roi_mut(&Rect::new(50, 50, 750, 550))
85 .blit(&data3_roi.roi(&Rect::new(0, 0, 750, 550)));
86 }
87 });
88
89 time!("image_roi_mut_blit_over", {
90 let data4_roi = ImageRef::from_data(800, 400, &mut data4[..]);
91 for _i in 0..TIMES {
92 ImageRef::from_renderer(&mut window)
93 // .roi_mut(&Rect::new(10, 120, 790, 400)) // to test blit_over does not trigger
94 .roi_mut(&Rect::new(0, 120, 800, 400))
95 .blit(&data4_roi.roi(&Rect::new(0, 0, 800, 400)));
96 }
97 });
98
99 println!("------------------------------------------------");
100
101 window.sync();
102
103 'events: loop {
104 for event in window.events() {
105 match event.to_option() {
106 EventOption::Quit(_quit_event) => break 'events,
107 EventOption::Mouse(evt) => println!(
108 "At position {:?} pixel color is : {:?}",
109 (evt.x, evt.y),
110 window.getpixel(evt.x, evt.y)
111 ),
112 event_option => println!("{:?}", event_option),
113 }
114 }
115 }
116}Sourcefn image_over(&mut self, start: i32, image_data: &[Color])
fn image_over(&mut self, start: i32, image_data: &[Color])
Display an image overwriting a portion of window starting at given line : very quick!!
Examples found in repository?
examples/image_bench.rs (line 46)
22fn main() {
23 //let (width, height) = orbclient::get_display_size().unwrap();
24
25 let mut window = Window::new(10, 10, 800, 600, "IMAGE BENCHMARK").unwrap();
26
27 window.set(Color::rgb(255, 255, 255));
28
29 //create image data : a green square
30 let data = vec![Color::rgba(100, 200, 10, 3); 412500];
31 let mut data2 = vec![Color::rgba(200, 100, 10, 3); 412500];
32 let mut data3 = vec![Color::rgba(10, 100, 100, 3); 412500];
33 let mut data4 = vec![Color::rgba(10, 100, 200, 3); 800 * 400];
34
35 //draw image benchmarking
36 println!("Benchmarking implementations to draw an image on window:");
37
38 time!("image_legacy", {
39 for _i in 0..TIMES {
40 window.image_legacy(15, 15, 750, 550, &data[..]);
41 }
42 });
43
44 time!("image_over", {
45 for _i in 0..TIMES {
46 window.image_over(50, &data4[..]);
47 }
48 });
49
50 time!("image_fast", {
51 for _i in 0..TIMES {
52 window.image_fast(20, 20, 750, 550, &data2[..]);
53 }
54 });
55
56 time!("image_opaque", {
57 for _i in 0..TIMES {
58 window.image_opaque(30, 30, 750, 550, &data3[..]);
59 }
60 });
61
62 time!("image_roi_mut_blend", {
63 let data2_roi = ImageRef::from_data(750, 550, &mut data2[..]);
64 for _i in 0..TIMES {
65 ImageRef::from_renderer(&mut window)
66 .roi_mut(&Rect::new(40, 40, 750, 550))
67 .blend(&data2_roi.roi(&Rect::new(0, 0, 750, 550)));
68 }
69 });
70
71 time!("image_roi_mut_blit_mask", {
72 let data2_roi = ImageRef::from_data(750, 550, &mut data2[..]);
73 for _i in 0..TIMES {
74 ImageRef::from_renderer(&mut window)
75 .roi_mut(&Rect::new(40, 40, 750, 550))
76 .blit_mask(&data2_roi.roi(&Rect::new(0, 0, 750, 550)));
77 }
78 });
79
80 time!("image_roi_mut_blit", {
81 let data3_roi = ImageRef::from_data(750, 550, &mut data3[..]);
82 for _i in 0..TIMES {
83 ImageRef::from_renderer(&mut window)
84 .roi_mut(&Rect::new(50, 50, 750, 550))
85 .blit(&data3_roi.roi(&Rect::new(0, 0, 750, 550)));
86 }
87 });
88
89 time!("image_roi_mut_blit_over", {
90 let data4_roi = ImageRef::from_data(800, 400, &mut data4[..]);
91 for _i in 0..TIMES {
92 ImageRef::from_renderer(&mut window)
93 // .roi_mut(&Rect::new(10, 120, 790, 400)) // to test blit_over does not trigger
94 .roi_mut(&Rect::new(0, 120, 800, 400))
95 .blit(&data4_roi.roi(&Rect::new(0, 0, 800, 400)));
96 }
97 });
98
99 println!("------------------------------------------------");
100
101 window.sync();
102
103 'events: loop {
104 for event in window.events() {
105 match event.to_option() {
106 EventOption::Quit(_quit_event) => break 'events,
107 EventOption::Mouse(evt) => println!(
108 "At position {:?} pixel color is : {:?}",
109 (evt.x, evt.y),
110 window.getpixel(evt.x, evt.y)
111 ),
112 event_option => println!("{:?}", event_option),
113 }
114 }
115 }
116}Sourcefn image_opaque(
&mut self,
start_x: i32,
start_y: i32,
w: u32,
h: u32,
image_data: &[Color],
)
fn image_opaque( &mut self, start_x: i32, start_y: i32, w: u32, h: u32, image_data: &[Color], )
Display an image using non transparent method
Examples found in repository?
examples/image_bench.rs (line 58)
22fn main() {
23 //let (width, height) = orbclient::get_display_size().unwrap();
24
25 let mut window = Window::new(10, 10, 800, 600, "IMAGE BENCHMARK").unwrap();
26
27 window.set(Color::rgb(255, 255, 255));
28
29 //create image data : a green square
30 let data = vec![Color::rgba(100, 200, 10, 3); 412500];
31 let mut data2 = vec![Color::rgba(200, 100, 10, 3); 412500];
32 let mut data3 = vec![Color::rgba(10, 100, 100, 3); 412500];
33 let mut data4 = vec![Color::rgba(10, 100, 200, 3); 800 * 400];
34
35 //draw image benchmarking
36 println!("Benchmarking implementations to draw an image on window:");
37
38 time!("image_legacy", {
39 for _i in 0..TIMES {
40 window.image_legacy(15, 15, 750, 550, &data[..]);
41 }
42 });
43
44 time!("image_over", {
45 for _i in 0..TIMES {
46 window.image_over(50, &data4[..]);
47 }
48 });
49
50 time!("image_fast", {
51 for _i in 0..TIMES {
52 window.image_fast(20, 20, 750, 550, &data2[..]);
53 }
54 });
55
56 time!("image_opaque", {
57 for _i in 0..TIMES {
58 window.image_opaque(30, 30, 750, 550, &data3[..]);
59 }
60 });
61
62 time!("image_roi_mut_blend", {
63 let data2_roi = ImageRef::from_data(750, 550, &mut data2[..]);
64 for _i in 0..TIMES {
65 ImageRef::from_renderer(&mut window)
66 .roi_mut(&Rect::new(40, 40, 750, 550))
67 .blend(&data2_roi.roi(&Rect::new(0, 0, 750, 550)));
68 }
69 });
70
71 time!("image_roi_mut_blit_mask", {
72 let data2_roi = ImageRef::from_data(750, 550, &mut data2[..]);
73 for _i in 0..TIMES {
74 ImageRef::from_renderer(&mut window)
75 .roi_mut(&Rect::new(40, 40, 750, 550))
76 .blit_mask(&data2_roi.roi(&Rect::new(0, 0, 750, 550)));
77 }
78 });
79
80 time!("image_roi_mut_blit", {
81 let data3_roi = ImageRef::from_data(750, 550, &mut data3[..]);
82 for _i in 0..TIMES {
83 ImageRef::from_renderer(&mut window)
84 .roi_mut(&Rect::new(50, 50, 750, 550))
85 .blit(&data3_roi.roi(&Rect::new(0, 0, 750, 550)));
86 }
87 });
88
89 time!("image_roi_mut_blit_over", {
90 let data4_roi = ImageRef::from_data(800, 400, &mut data4[..]);
91 for _i in 0..TIMES {
92 ImageRef::from_renderer(&mut window)
93 // .roi_mut(&Rect::new(10, 120, 790, 400)) // to test blit_over does not trigger
94 .roi_mut(&Rect::new(0, 120, 800, 400))
95 .blit(&data4_roi.roi(&Rect::new(0, 0, 800, 400)));
96 }
97 });
98
99 println!("------------------------------------------------");
100
101 window.sync();
102
103 'events: loop {
104 for event in window.events() {
105 match event.to_option() {
106 EventOption::Quit(_quit_event) => break 'events,
107 EventOption::Mouse(evt) => println!(
108 "At position {:?} pixel color is : {:?}",
109 (evt.x, evt.y),
110 window.getpixel(evt.x, evt.y)
111 ),
112 event_option => println!("{:?}", event_option),
113 }
114 }
115 }
116}Sourcefn image_fast(
&mut self,
start_x: i32,
start_y: i32,
w: u32,
h: u32,
image_data: &[Color],
)
fn image_fast( &mut self, start_x: i32, start_y: i32, w: u32, h: u32, image_data: &[Color], )
Examples found in repository?
examples/image_bench.rs (line 52)
22fn main() {
23 //let (width, height) = orbclient::get_display_size().unwrap();
24
25 let mut window = Window::new(10, 10, 800, 600, "IMAGE BENCHMARK").unwrap();
26
27 window.set(Color::rgb(255, 255, 255));
28
29 //create image data : a green square
30 let data = vec![Color::rgba(100, 200, 10, 3); 412500];
31 let mut data2 = vec![Color::rgba(200, 100, 10, 3); 412500];
32 let mut data3 = vec![Color::rgba(10, 100, 100, 3); 412500];
33 let mut data4 = vec![Color::rgba(10, 100, 200, 3); 800 * 400];
34
35 //draw image benchmarking
36 println!("Benchmarking implementations to draw an image on window:");
37
38 time!("image_legacy", {
39 for _i in 0..TIMES {
40 window.image_legacy(15, 15, 750, 550, &data[..]);
41 }
42 });
43
44 time!("image_over", {
45 for _i in 0..TIMES {
46 window.image_over(50, &data4[..]);
47 }
48 });
49
50 time!("image_fast", {
51 for _i in 0..TIMES {
52 window.image_fast(20, 20, 750, 550, &data2[..]);
53 }
54 });
55
56 time!("image_opaque", {
57 for _i in 0..TIMES {
58 window.image_opaque(30, 30, 750, 550, &data3[..]);
59 }
60 });
61
62 time!("image_roi_mut_blend", {
63 let data2_roi = ImageRef::from_data(750, 550, &mut data2[..]);
64 for _i in 0..TIMES {
65 ImageRef::from_renderer(&mut window)
66 .roi_mut(&Rect::new(40, 40, 750, 550))
67 .blend(&data2_roi.roi(&Rect::new(0, 0, 750, 550)));
68 }
69 });
70
71 time!("image_roi_mut_blit_mask", {
72 let data2_roi = ImageRef::from_data(750, 550, &mut data2[..]);
73 for _i in 0..TIMES {
74 ImageRef::from_renderer(&mut window)
75 .roi_mut(&Rect::new(40, 40, 750, 550))
76 .blit_mask(&data2_roi.roi(&Rect::new(0, 0, 750, 550)));
77 }
78 });
79
80 time!("image_roi_mut_blit", {
81 let data3_roi = ImageRef::from_data(750, 550, &mut data3[..]);
82 for _i in 0..TIMES {
83 ImageRef::from_renderer(&mut window)
84 .roi_mut(&Rect::new(50, 50, 750, 550))
85 .blit(&data3_roi.roi(&Rect::new(0, 0, 750, 550)));
86 }
87 });
88
89 time!("image_roi_mut_blit_over", {
90 let data4_roi = ImageRef::from_data(800, 400, &mut data4[..]);
91 for _i in 0..TIMES {
92 ImageRef::from_renderer(&mut window)
93 // .roi_mut(&Rect::new(10, 120, 790, 400)) // to test blit_over does not trigger
94 .roi_mut(&Rect::new(0, 120, 800, 400))
95 .blit(&data4_roi.roi(&Rect::new(0, 0, 800, 400)));
96 }
97 });
98
99 println!("------------------------------------------------");
100
101 window.sync();
102
103 'events: loop {
104 for event in window.events() {
105 match event.to_option() {
106 EventOption::Quit(_quit_event) => break 'events,
107 EventOption::Mouse(evt) => println!(
108 "At position {:?} pixel color is : {:?}",
109 (evt.x, evt.y),
110 window.getpixel(evt.x, evt.y)
111 ),
112 event_option => println!("{:?}", event_option),
113 }
114 }
115 }
116}Sourcefn linear_gradient(
&mut self,
rect_x: i32,
rect_y: i32,
rect_width: u32,
rect_height: u32,
start_x: i32,
start_y: i32,
end_x: i32,
end_y: i32,
start_color: Color,
end_color: Color,
)
fn linear_gradient( &mut self, rect_x: i32, rect_y: i32, rect_width: u32, rect_height: u32, start_x: i32, start_y: i32, end_x: i32, end_y: i32, start_color: Color, end_color: Color, )
Draw a linear gradient in a rectangular region
Examples found in repository?
examples/simple.rs (lines 20-31)
5fn main() {
6 let (width, height) = orbclient::get_display_size().unwrap();
7
8 let mut window = Window::new(
9 (width as i32) / 4,
10 (height as i32) / 4,
11 width / 2,
12 height / 2,
13 "TITLE",
14 )
15 .unwrap();
16
17 let (win_w, win_h) = (width / 2, height / 2);
18
19 // top left -> bottom rigth
20 window.linear_gradient(
21 0,
22 0,
23 win_w / 3,
24 win_h,
25 0,
26 0,
27 (win_w / 3) as i32,
28 (win_h / 2) as i32,
29 Color::rgb(128, 128, 128),
30 Color::rgb(255, 255, 255),
31 );
32 // horizontal gradient
33 window.linear_gradient(
34 (win_w / 3) as i32,
35 0,
36 win_w / 3,
37 win_h,
38 (win_w / 3) as i32,
39 0,
40 (2 * win_w / 3) as i32,
41 0,
42 Color::rgb(128, 255, 255),
43 Color::rgb(255, 255, 255),
44 );
45 // vertical gradient
46 window.linear_gradient(
47 (2 * win_w / 3) as i32,
48 0,
49 win_w / 3,
50 win_h,
51 (2 * win_w / 3) as i32,
52 0,
53 (2 * win_w / 3) as i32,
54 win_h as i32,
55 Color::rgb(0, 128, 0),
56 Color::rgb(255, 255, 255),
57 );
58 window.arc(100, 100, -25, 1 << 0 | 1 << 2, Color::rgb(0, 0, 255));
59 window.arc(100, 100, -25, 1 << 1 | 1 << 3, Color::rgb(0, 255, 255));
60 window.arc(100, 100, -25, 1 << 4 | 1 << 6, Color::rgb(255, 0, 255));
61 window.arc(100, 100, -25, 1 << 5 | 1 << 7, Color::rgb(255, 255, 0));
62 window.circle(100, 100, 25, Color::rgb(0, 0, 0));
63 window.circle(100, 101, -25, Color::rgb(0, 255, 0));
64 window.circle(220, 220, -100, Color::rgba(128, 128, 128, 80));
65 window.wu_circle(150, 220, 100, Color::rgba(255, 0, 0, 255));
66 window.line(0, 0, 200, 200, Color::rgb(255, 0, 0));
67 window.line(0, 200, 200, 0, Color::rgb(128, 255, 0));
68 // vertical and horizontal line test
69 window.line(100, 0, 100, 200, Color::rgb(0, 0, 255));
70 window.line(0, 100, 200, 100, Color::rgb(255, 255, 0));
71 window.wu_line(100, 220, 400, 250, Color::rgba(255, 0, 0, 255));
72 window.line(100, 230, 400, 260, Color::rgba(255, 0, 0, 255));
73
74 // path and bezier curve example draw a cloud
75 let mut cloud_path = GraphicsPath::new();
76 cloud_path.move_to(170, 80);
77 cloud_path.bezier_curve_to(130, 100, 130, 150, 230, 150);
78 cloud_path.bezier_curve_to(250, 180, 320, 180, 340, 150);
79 cloud_path.bezier_curve_to(420, 150, 420, 120, 390, 100);
80 cloud_path.bezier_curve_to(430, 40, 370, 30, 340, 50);
81 cloud_path.bezier_curve_to(320, 5, 250, 20, 250, 50);
82 cloud_path.bezier_curve_to(200, 5, 150, 20, 170, 80);
83 window.draw_path_stroke(cloud_path, Color::rgb(0, 0, 255));
84
85 // path and quadratic curve example draw a balloon
86 let mut balloon_path = GraphicsPath::new();
87 balloon_path.move_to(75, 25);
88 balloon_path.quadratic_curve_to(25, 25, 25, 62);
89 balloon_path.quadratic_curve_to(25, 100, 50, 100);
90 balloon_path.quadratic_curve_to(50, 120, 30, 125);
91 balloon_path.quadratic_curve_to(60, 120, 65, 100);
92 balloon_path.quadratic_curve_to(125, 100, 125, 62);
93 balloon_path.quadratic_curve_to(125, 25, 75, 25);
94 window.draw_path_stroke(balloon_path, Color::rgb(0, 0, 255));
95
96 window.char(200, 200, '═', Color::rgb(0, 0, 0));
97 window.char(208, 200, '═', Color::rgb(0, 0, 0));
98
99 // testing for non existent x,y position : does not panic but returns Color(0,0,0,0)
100 let _non_existent_pixel = window.getpixel(width as i32 + 10, height as i32 + 10);
101
102 // testing PartialEq for Color
103 if Color::rgb(11, 2, 3) == Color::rgba(1, 2, 3, 100) {
104 println!("Testing colors: they are the same!")
105 } else {
106 println!("Testing colors: they are NOT the same!")
107 }
108
109 //Draw a transparent rectangle over window content
110 // default mode is Blend
111 window.rect(250, 200, 80, 80, Color::rgba(100, 100, 100, 100));
112
113 //Draw an opaque rectangle replacing window content
114 window.mode().set(Mode::Overwrite); // set window drawing mode to Overwrite from now on
115 window.rect(300, 220, 80, 80, Color::rgb(100, 100, 100));
116
117 //Draw a hole in the window replacing alpha channel (Only in Orbital, not in SDL2)
118 window.rect(300, 100, 80, 80, Color::rgba(10, 10, 10, 1));
119
120 //Draw a transparent rectangle over window content
121 window.mode().set(Mode::Blend); //set mode to Blend fron now on
122 window.rect(200, 230, 80, 80, Color::rgba(100, 100, 100, 100));
123
124 //Draw a blured box over window content
125 window.box_blur(170, 100, 150, 150, 10);
126
127 //Draw a shadow around a box
128 window.box_shadow(170, 100, 150, 150, 0, 0, 20, Color::rgba(0, 0, 0, 255));
129
130 window.sync();
131
132 'events: loop {
133 for event in window.events() {
134 match event.to_option() {
135 EventOption::Quit(_quit_event) => break 'events,
136 EventOption::Mouse(evt) => println!(
137 "At position {:?} pixel color is : {:?}",
138 (evt.x, evt.y),
139 window.getpixel(evt.x, evt.y)
140 ),
141 event_option => println!("{:?}", event_option),
142 }
143 }
144 }
145}Sourcefn rounded_rect(
&mut self,
x: i32,
y: i32,
w: u32,
h: u32,
radius: u32,
filled: bool,
color: Color,
)
fn rounded_rect( &mut self, x: i32, y: i32, w: u32, h: u32, radius: u32, filled: bool, color: Color, )
Draw a rect with rounded corners
Sourcefn wu_line(&mut self, x0: i32, y0: i32, x1: i32, y1: i32, color: Color)
fn wu_line(&mut self, x0: i32, y0: i32, x1: i32, y1: i32, color: Color)
Draws antialiased line
Examples found in repository?
examples/simple.rs (line 71)
5fn main() {
6 let (width, height) = orbclient::get_display_size().unwrap();
7
8 let mut window = Window::new(
9 (width as i32) / 4,
10 (height as i32) / 4,
11 width / 2,
12 height / 2,
13 "TITLE",
14 )
15 .unwrap();
16
17 let (win_w, win_h) = (width / 2, height / 2);
18
19 // top left -> bottom rigth
20 window.linear_gradient(
21 0,
22 0,
23 win_w / 3,
24 win_h,
25 0,
26 0,
27 (win_w / 3) as i32,
28 (win_h / 2) as i32,
29 Color::rgb(128, 128, 128),
30 Color::rgb(255, 255, 255),
31 );
32 // horizontal gradient
33 window.linear_gradient(
34 (win_w / 3) as i32,
35 0,
36 win_w / 3,
37 win_h,
38 (win_w / 3) as i32,
39 0,
40 (2 * win_w / 3) as i32,
41 0,
42 Color::rgb(128, 255, 255),
43 Color::rgb(255, 255, 255),
44 );
45 // vertical gradient
46 window.linear_gradient(
47 (2 * win_w / 3) as i32,
48 0,
49 win_w / 3,
50 win_h,
51 (2 * win_w / 3) as i32,
52 0,
53 (2 * win_w / 3) as i32,
54 win_h as i32,
55 Color::rgb(0, 128, 0),
56 Color::rgb(255, 255, 255),
57 );
58 window.arc(100, 100, -25, 1 << 0 | 1 << 2, Color::rgb(0, 0, 255));
59 window.arc(100, 100, -25, 1 << 1 | 1 << 3, Color::rgb(0, 255, 255));
60 window.arc(100, 100, -25, 1 << 4 | 1 << 6, Color::rgb(255, 0, 255));
61 window.arc(100, 100, -25, 1 << 5 | 1 << 7, Color::rgb(255, 255, 0));
62 window.circle(100, 100, 25, Color::rgb(0, 0, 0));
63 window.circle(100, 101, -25, Color::rgb(0, 255, 0));
64 window.circle(220, 220, -100, Color::rgba(128, 128, 128, 80));
65 window.wu_circle(150, 220, 100, Color::rgba(255, 0, 0, 255));
66 window.line(0, 0, 200, 200, Color::rgb(255, 0, 0));
67 window.line(0, 200, 200, 0, Color::rgb(128, 255, 0));
68 // vertical and horizontal line test
69 window.line(100, 0, 100, 200, Color::rgb(0, 0, 255));
70 window.line(0, 100, 200, 100, Color::rgb(255, 255, 0));
71 window.wu_line(100, 220, 400, 250, Color::rgba(255, 0, 0, 255));
72 window.line(100, 230, 400, 260, Color::rgba(255, 0, 0, 255));
73
74 // path and bezier curve example draw a cloud
75 let mut cloud_path = GraphicsPath::new();
76 cloud_path.move_to(170, 80);
77 cloud_path.bezier_curve_to(130, 100, 130, 150, 230, 150);
78 cloud_path.bezier_curve_to(250, 180, 320, 180, 340, 150);
79 cloud_path.bezier_curve_to(420, 150, 420, 120, 390, 100);
80 cloud_path.bezier_curve_to(430, 40, 370, 30, 340, 50);
81 cloud_path.bezier_curve_to(320, 5, 250, 20, 250, 50);
82 cloud_path.bezier_curve_to(200, 5, 150, 20, 170, 80);
83 window.draw_path_stroke(cloud_path, Color::rgb(0, 0, 255));
84
85 // path and quadratic curve example draw a balloon
86 let mut balloon_path = GraphicsPath::new();
87 balloon_path.move_to(75, 25);
88 balloon_path.quadratic_curve_to(25, 25, 25, 62);
89 balloon_path.quadratic_curve_to(25, 100, 50, 100);
90 balloon_path.quadratic_curve_to(50, 120, 30, 125);
91 balloon_path.quadratic_curve_to(60, 120, 65, 100);
92 balloon_path.quadratic_curve_to(125, 100, 125, 62);
93 balloon_path.quadratic_curve_to(125, 25, 75, 25);
94 window.draw_path_stroke(balloon_path, Color::rgb(0, 0, 255));
95
96 window.char(200, 200, '═', Color::rgb(0, 0, 0));
97 window.char(208, 200, '═', Color::rgb(0, 0, 0));
98
99 // testing for non existent x,y position : does not panic but returns Color(0,0,0,0)
100 let _non_existent_pixel = window.getpixel(width as i32 + 10, height as i32 + 10);
101
102 // testing PartialEq for Color
103 if Color::rgb(11, 2, 3) == Color::rgba(1, 2, 3, 100) {
104 println!("Testing colors: they are the same!")
105 } else {
106 println!("Testing colors: they are NOT the same!")
107 }
108
109 //Draw a transparent rectangle over window content
110 // default mode is Blend
111 window.rect(250, 200, 80, 80, Color::rgba(100, 100, 100, 100));
112
113 //Draw an opaque rectangle replacing window content
114 window.mode().set(Mode::Overwrite); // set window drawing mode to Overwrite from now on
115 window.rect(300, 220, 80, 80, Color::rgb(100, 100, 100));
116
117 //Draw a hole in the window replacing alpha channel (Only in Orbital, not in SDL2)
118 window.rect(300, 100, 80, 80, Color::rgba(10, 10, 10, 1));
119
120 //Draw a transparent rectangle over window content
121 window.mode().set(Mode::Blend); //set mode to Blend fron now on
122 window.rect(200, 230, 80, 80, Color::rgba(100, 100, 100, 100));
123
124 //Draw a blured box over window content
125 window.box_blur(170, 100, 150, 150, 10);
126
127 //Draw a shadow around a box
128 window.box_shadow(170, 100, 150, 150, 0, 0, 20, Color::rgba(0, 0, 0, 255));
129
130 window.sync();
131
132 'events: loop {
133 for event in window.events() {
134 match event.to_option() {
135 EventOption::Quit(_quit_event) => break 'events,
136 EventOption::Mouse(evt) => println!(
137 "At position {:?} pixel color is : {:?}",
138 (evt.x, evt.y),
139 window.getpixel(evt.x, evt.y)
140 ),
141 event_option => println!("{:?}", event_option),
142 }
143 }
144 }
145}Sourcefn wu_circle(&mut self, x0: i32, y0: i32, radius: i32, color: Color)
fn wu_circle(&mut self, x0: i32, y0: i32, radius: i32, color: Color)
Draws antialiased circle
Examples found in repository?
examples/simple.rs (line 65)
5fn main() {
6 let (width, height) = orbclient::get_display_size().unwrap();
7
8 let mut window = Window::new(
9 (width as i32) / 4,
10 (height as i32) / 4,
11 width / 2,
12 height / 2,
13 "TITLE",
14 )
15 .unwrap();
16
17 let (win_w, win_h) = (width / 2, height / 2);
18
19 // top left -> bottom rigth
20 window.linear_gradient(
21 0,
22 0,
23 win_w / 3,
24 win_h,
25 0,
26 0,
27 (win_w / 3) as i32,
28 (win_h / 2) as i32,
29 Color::rgb(128, 128, 128),
30 Color::rgb(255, 255, 255),
31 );
32 // horizontal gradient
33 window.linear_gradient(
34 (win_w / 3) as i32,
35 0,
36 win_w / 3,
37 win_h,
38 (win_w / 3) as i32,
39 0,
40 (2 * win_w / 3) as i32,
41 0,
42 Color::rgb(128, 255, 255),
43 Color::rgb(255, 255, 255),
44 );
45 // vertical gradient
46 window.linear_gradient(
47 (2 * win_w / 3) as i32,
48 0,
49 win_w / 3,
50 win_h,
51 (2 * win_w / 3) as i32,
52 0,
53 (2 * win_w / 3) as i32,
54 win_h as i32,
55 Color::rgb(0, 128, 0),
56 Color::rgb(255, 255, 255),
57 );
58 window.arc(100, 100, -25, 1 << 0 | 1 << 2, Color::rgb(0, 0, 255));
59 window.arc(100, 100, -25, 1 << 1 | 1 << 3, Color::rgb(0, 255, 255));
60 window.arc(100, 100, -25, 1 << 4 | 1 << 6, Color::rgb(255, 0, 255));
61 window.arc(100, 100, -25, 1 << 5 | 1 << 7, Color::rgb(255, 255, 0));
62 window.circle(100, 100, 25, Color::rgb(0, 0, 0));
63 window.circle(100, 101, -25, Color::rgb(0, 255, 0));
64 window.circle(220, 220, -100, Color::rgba(128, 128, 128, 80));
65 window.wu_circle(150, 220, 100, Color::rgba(255, 0, 0, 255));
66 window.line(0, 0, 200, 200, Color::rgb(255, 0, 0));
67 window.line(0, 200, 200, 0, Color::rgb(128, 255, 0));
68 // vertical and horizontal line test
69 window.line(100, 0, 100, 200, Color::rgb(0, 0, 255));
70 window.line(0, 100, 200, 100, Color::rgb(255, 255, 0));
71 window.wu_line(100, 220, 400, 250, Color::rgba(255, 0, 0, 255));
72 window.line(100, 230, 400, 260, Color::rgba(255, 0, 0, 255));
73
74 // path and bezier curve example draw a cloud
75 let mut cloud_path = GraphicsPath::new();
76 cloud_path.move_to(170, 80);
77 cloud_path.bezier_curve_to(130, 100, 130, 150, 230, 150);
78 cloud_path.bezier_curve_to(250, 180, 320, 180, 340, 150);
79 cloud_path.bezier_curve_to(420, 150, 420, 120, 390, 100);
80 cloud_path.bezier_curve_to(430, 40, 370, 30, 340, 50);
81 cloud_path.bezier_curve_to(320, 5, 250, 20, 250, 50);
82 cloud_path.bezier_curve_to(200, 5, 150, 20, 170, 80);
83 window.draw_path_stroke(cloud_path, Color::rgb(0, 0, 255));
84
85 // path and quadratic curve example draw a balloon
86 let mut balloon_path = GraphicsPath::new();
87 balloon_path.move_to(75, 25);
88 balloon_path.quadratic_curve_to(25, 25, 25, 62);
89 balloon_path.quadratic_curve_to(25, 100, 50, 100);
90 balloon_path.quadratic_curve_to(50, 120, 30, 125);
91 balloon_path.quadratic_curve_to(60, 120, 65, 100);
92 balloon_path.quadratic_curve_to(125, 100, 125, 62);
93 balloon_path.quadratic_curve_to(125, 25, 75, 25);
94 window.draw_path_stroke(balloon_path, Color::rgb(0, 0, 255));
95
96 window.char(200, 200, '═', Color::rgb(0, 0, 0));
97 window.char(208, 200, '═', Color::rgb(0, 0, 0));
98
99 // testing for non existent x,y position : does not panic but returns Color(0,0,0,0)
100 let _non_existent_pixel = window.getpixel(width as i32 + 10, height as i32 + 10);
101
102 // testing PartialEq for Color
103 if Color::rgb(11, 2, 3) == Color::rgba(1, 2, 3, 100) {
104 println!("Testing colors: they are the same!")
105 } else {
106 println!("Testing colors: they are NOT the same!")
107 }
108
109 //Draw a transparent rectangle over window content
110 // default mode is Blend
111 window.rect(250, 200, 80, 80, Color::rgba(100, 100, 100, 100));
112
113 //Draw an opaque rectangle replacing window content
114 window.mode().set(Mode::Overwrite); // set window drawing mode to Overwrite from now on
115 window.rect(300, 220, 80, 80, Color::rgb(100, 100, 100));
116
117 //Draw a hole in the window replacing alpha channel (Only in Orbital, not in SDL2)
118 window.rect(300, 100, 80, 80, Color::rgba(10, 10, 10, 1));
119
120 //Draw a transparent rectangle over window content
121 window.mode().set(Mode::Blend); //set mode to Blend fron now on
122 window.rect(200, 230, 80, 80, Color::rgba(100, 100, 100, 100));
123
124 //Draw a blured box over window content
125 window.box_blur(170, 100, 150, 150, 10);
126
127 //Draw a shadow around a box
128 window.box_shadow(170, 100, 150, 150, 0, 0, 20, Color::rgba(0, 0, 0, 255));
129
130 window.sync();
131
132 'events: loop {
133 for event in window.events() {
134 match event.to_option() {
135 EventOption::Quit(_quit_event) => break 'events,
136 EventOption::Mouse(evt) => println!(
137 "At position {:?} pixel color is : {:?}",
138 (evt.x, evt.y),
139 window.getpixel(evt.x, evt.y)
140 ),
141 event_option => println!("{:?}", event_option),
142 }
143 }
144 }
145}Sourcefn getpixel(&self, x: i32, y: i32) -> Color
fn getpixel(&self, x: i32, y: i32) -> Color
Gets pixel color at x,y position
Examples found in repository?
examples/image_bench.rs (line 110)
22fn main() {
23 //let (width, height) = orbclient::get_display_size().unwrap();
24
25 let mut window = Window::new(10, 10, 800, 600, "IMAGE BENCHMARK").unwrap();
26
27 window.set(Color::rgb(255, 255, 255));
28
29 //create image data : a green square
30 let data = vec![Color::rgba(100, 200, 10, 3); 412500];
31 let mut data2 = vec![Color::rgba(200, 100, 10, 3); 412500];
32 let mut data3 = vec![Color::rgba(10, 100, 100, 3); 412500];
33 let mut data4 = vec![Color::rgba(10, 100, 200, 3); 800 * 400];
34
35 //draw image benchmarking
36 println!("Benchmarking implementations to draw an image on window:");
37
38 time!("image_legacy", {
39 for _i in 0..TIMES {
40 window.image_legacy(15, 15, 750, 550, &data[..]);
41 }
42 });
43
44 time!("image_over", {
45 for _i in 0..TIMES {
46 window.image_over(50, &data4[..]);
47 }
48 });
49
50 time!("image_fast", {
51 for _i in 0..TIMES {
52 window.image_fast(20, 20, 750, 550, &data2[..]);
53 }
54 });
55
56 time!("image_opaque", {
57 for _i in 0..TIMES {
58 window.image_opaque(30, 30, 750, 550, &data3[..]);
59 }
60 });
61
62 time!("image_roi_mut_blend", {
63 let data2_roi = ImageRef::from_data(750, 550, &mut data2[..]);
64 for _i in 0..TIMES {
65 ImageRef::from_renderer(&mut window)
66 .roi_mut(&Rect::new(40, 40, 750, 550))
67 .blend(&data2_roi.roi(&Rect::new(0, 0, 750, 550)));
68 }
69 });
70
71 time!("image_roi_mut_blit_mask", {
72 let data2_roi = ImageRef::from_data(750, 550, &mut data2[..]);
73 for _i in 0..TIMES {
74 ImageRef::from_renderer(&mut window)
75 .roi_mut(&Rect::new(40, 40, 750, 550))
76 .blit_mask(&data2_roi.roi(&Rect::new(0, 0, 750, 550)));
77 }
78 });
79
80 time!("image_roi_mut_blit", {
81 let data3_roi = ImageRef::from_data(750, 550, &mut data3[..]);
82 for _i in 0..TIMES {
83 ImageRef::from_renderer(&mut window)
84 .roi_mut(&Rect::new(50, 50, 750, 550))
85 .blit(&data3_roi.roi(&Rect::new(0, 0, 750, 550)));
86 }
87 });
88
89 time!("image_roi_mut_blit_over", {
90 let data4_roi = ImageRef::from_data(800, 400, &mut data4[..]);
91 for _i in 0..TIMES {
92 ImageRef::from_renderer(&mut window)
93 // .roi_mut(&Rect::new(10, 120, 790, 400)) // to test blit_over does not trigger
94 .roi_mut(&Rect::new(0, 120, 800, 400))
95 .blit(&data4_roi.roi(&Rect::new(0, 0, 800, 400)));
96 }
97 });
98
99 println!("------------------------------------------------");
100
101 window.sync();
102
103 'events: loop {
104 for event in window.events() {
105 match event.to_option() {
106 EventOption::Quit(_quit_event) => break 'events,
107 EventOption::Mouse(evt) => println!(
108 "At position {:?} pixel color is : {:?}",
109 (evt.x, evt.y),
110 window.getpixel(evt.x, evt.y)
111 ),
112 event_option => println!("{:?}", event_option),
113 }
114 }
115 }
116}More examples
examples/simple.rs (line 100)
5fn main() {
6 let (width, height) = orbclient::get_display_size().unwrap();
7
8 let mut window = Window::new(
9 (width as i32) / 4,
10 (height as i32) / 4,
11 width / 2,
12 height / 2,
13 "TITLE",
14 )
15 .unwrap();
16
17 let (win_w, win_h) = (width / 2, height / 2);
18
19 // top left -> bottom rigth
20 window.linear_gradient(
21 0,
22 0,
23 win_w / 3,
24 win_h,
25 0,
26 0,
27 (win_w / 3) as i32,
28 (win_h / 2) as i32,
29 Color::rgb(128, 128, 128),
30 Color::rgb(255, 255, 255),
31 );
32 // horizontal gradient
33 window.linear_gradient(
34 (win_w / 3) as i32,
35 0,
36 win_w / 3,
37 win_h,
38 (win_w / 3) as i32,
39 0,
40 (2 * win_w / 3) as i32,
41 0,
42 Color::rgb(128, 255, 255),
43 Color::rgb(255, 255, 255),
44 );
45 // vertical gradient
46 window.linear_gradient(
47 (2 * win_w / 3) as i32,
48 0,
49 win_w / 3,
50 win_h,
51 (2 * win_w / 3) as i32,
52 0,
53 (2 * win_w / 3) as i32,
54 win_h as i32,
55 Color::rgb(0, 128, 0),
56 Color::rgb(255, 255, 255),
57 );
58 window.arc(100, 100, -25, 1 << 0 | 1 << 2, Color::rgb(0, 0, 255));
59 window.arc(100, 100, -25, 1 << 1 | 1 << 3, Color::rgb(0, 255, 255));
60 window.arc(100, 100, -25, 1 << 4 | 1 << 6, Color::rgb(255, 0, 255));
61 window.arc(100, 100, -25, 1 << 5 | 1 << 7, Color::rgb(255, 255, 0));
62 window.circle(100, 100, 25, Color::rgb(0, 0, 0));
63 window.circle(100, 101, -25, Color::rgb(0, 255, 0));
64 window.circle(220, 220, -100, Color::rgba(128, 128, 128, 80));
65 window.wu_circle(150, 220, 100, Color::rgba(255, 0, 0, 255));
66 window.line(0, 0, 200, 200, Color::rgb(255, 0, 0));
67 window.line(0, 200, 200, 0, Color::rgb(128, 255, 0));
68 // vertical and horizontal line test
69 window.line(100, 0, 100, 200, Color::rgb(0, 0, 255));
70 window.line(0, 100, 200, 100, Color::rgb(255, 255, 0));
71 window.wu_line(100, 220, 400, 250, Color::rgba(255, 0, 0, 255));
72 window.line(100, 230, 400, 260, Color::rgba(255, 0, 0, 255));
73
74 // path and bezier curve example draw a cloud
75 let mut cloud_path = GraphicsPath::new();
76 cloud_path.move_to(170, 80);
77 cloud_path.bezier_curve_to(130, 100, 130, 150, 230, 150);
78 cloud_path.bezier_curve_to(250, 180, 320, 180, 340, 150);
79 cloud_path.bezier_curve_to(420, 150, 420, 120, 390, 100);
80 cloud_path.bezier_curve_to(430, 40, 370, 30, 340, 50);
81 cloud_path.bezier_curve_to(320, 5, 250, 20, 250, 50);
82 cloud_path.bezier_curve_to(200, 5, 150, 20, 170, 80);
83 window.draw_path_stroke(cloud_path, Color::rgb(0, 0, 255));
84
85 // path and quadratic curve example draw a balloon
86 let mut balloon_path = GraphicsPath::new();
87 balloon_path.move_to(75, 25);
88 balloon_path.quadratic_curve_to(25, 25, 25, 62);
89 balloon_path.quadratic_curve_to(25, 100, 50, 100);
90 balloon_path.quadratic_curve_to(50, 120, 30, 125);
91 balloon_path.quadratic_curve_to(60, 120, 65, 100);
92 balloon_path.quadratic_curve_to(125, 100, 125, 62);
93 balloon_path.quadratic_curve_to(125, 25, 75, 25);
94 window.draw_path_stroke(balloon_path, Color::rgb(0, 0, 255));
95
96 window.char(200, 200, '═', Color::rgb(0, 0, 0));
97 window.char(208, 200, '═', Color::rgb(0, 0, 0));
98
99 // testing for non existent x,y position : does not panic but returns Color(0,0,0,0)
100 let _non_existent_pixel = window.getpixel(width as i32 + 10, height as i32 + 10);
101
102 // testing PartialEq for Color
103 if Color::rgb(11, 2, 3) == Color::rgba(1, 2, 3, 100) {
104 println!("Testing colors: they are the same!")
105 } else {
106 println!("Testing colors: they are NOT the same!")
107 }
108
109 //Draw a transparent rectangle over window content
110 // default mode is Blend
111 window.rect(250, 200, 80, 80, Color::rgba(100, 100, 100, 100));
112
113 //Draw an opaque rectangle replacing window content
114 window.mode().set(Mode::Overwrite); // set window drawing mode to Overwrite from now on
115 window.rect(300, 220, 80, 80, Color::rgb(100, 100, 100));
116
117 //Draw a hole in the window replacing alpha channel (Only in Orbital, not in SDL2)
118 window.rect(300, 100, 80, 80, Color::rgba(10, 10, 10, 1));
119
120 //Draw a transparent rectangle over window content
121 window.mode().set(Mode::Blend); //set mode to Blend fron now on
122 window.rect(200, 230, 80, 80, Color::rgba(100, 100, 100, 100));
123
124 //Draw a blured box over window content
125 window.box_blur(170, 100, 150, 150, 10);
126
127 //Draw a shadow around a box
128 window.box_shadow(170, 100, 150, 150, 0, 0, 20, Color::rgba(0, 0, 0, 255));
129
130 window.sync();
131
132 'events: loop {
133 for event in window.events() {
134 match event.to_option() {
135 EventOption::Quit(_quit_event) => break 'events,
136 EventOption::Mouse(evt) => println!(
137 "At position {:?} pixel color is : {:?}",
138 (evt.x, evt.y),
139 window.getpixel(evt.x, evt.y)
140 ),
141 event_option => println!("{:?}", event_option),
142 }
143 }
144 }
145}Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".