1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
use graphics_private::texture;
use graphics::Texture;
use math::IntRect;
use sdl2::rect::Rect as SdlRect;
use sdl2::rect::Point;
use math::Vector;
use sdl2::render::Renderer;
pub struct Canvas<'a> {
renderer: &'a mut Renderer<'static>,
}
impl<'a> Canvas<'a> {
pub fn new(renderer: &'a mut Renderer<'static>) -> Canvas<'a> {
Canvas { renderer: renderer }
}
pub fn draw_texture(&mut self,
texture: &Texture,
src: Option<IntRect>,
dst: Option<IntRect>,
angle: f64,
center: Option<Vector>,
flip_horizontal: bool,
flip_vertical: bool)
-> Result<(), String> {
let texture = texture::get_raw(texture);
let sdl_src;
let sdl_dst;
let sdl_center;
if let Some(rect) = src {
sdl_src = Some(SdlRect::from(rect));
} else {
sdl_src = None;
}
if let Some(rect) = dst {
sdl_dst = Some(SdlRect::from(rect));
} else {
sdl_dst = None;
}
if let Some(vec) = center {
sdl_center = Some(Point::new(vec.x as i32, vec.y as i32));
} else {
sdl_center = None;
}
self.renderer.copy_ex(&*texture,
sdl_src,
sdl_dst,
angle,
sdl_center,
flip_horizontal,
flip_vertical)
}
}