playdate_graphics/bitmap/
api.rs

1use core::ffi::c_char;
2use core::ffi::c_float;
3use core::ffi::c_int;
4
5use sys::ffi::LCDColor;
6use sys::ffi::LCDBitmap;
7use sys::ffi::LCDBitmapFlip;
8use sys::ffi::LCDRect;
9use sys::ffi::LCDSolidColor;
10
11
12/// Default graphics bitmap api end-point, ZST.
13///
14/// All calls approximately costs ~3 derefs.
15pub type Default = crate::api::Default;
16
17/// Cached graphics bitmap api end-point.
18///
19/// Stores one reference, so size on stack is eq `usize`.
20///
21/// All calls approximately costs ~1 deref.
22pub type Cache = crate::api::Cache;
23
24
25/// End-point with methods about ops over bitmap.
26pub trait Api {
27	/// Equivalent to [`sys::ffi::playdate_graphics::newBitmap`]
28	#[doc(alias = "sys::ffi::playdate_graphics::newBitmap")]
29	fn new_bitmap(&self)
30	              -> unsafe extern "C" fn(width: c_int, height: c_int, bgcolor: LCDColor) -> *mut LCDBitmap {
31		*sys::api!(graphics.newBitmap)
32	}
33
34	/// Equivalent to [`sys::ffi::playdate_graphics::freeBitmap`]
35	#[doc(alias = "sys::ffi::playdate_graphics::freeBitmap")]
36	fn free_bitmap(&self) -> unsafe extern "C" fn(bitmap: *mut LCDBitmap) { *sys::api!(graphics.freeBitmap) }
37
38	/// Equivalent to [`sys::ffi::playdate_graphics::loadBitmap`]
39	#[doc(alias = "sys::ffi::playdate_graphics::loadBitmap")]
40	fn load_bitmap(&self)
41	               -> unsafe extern "C" fn(path: *const c_char, outerr: *mut *const c_char) -> *mut LCDBitmap {
42		*sys::api!(graphics.loadBitmap)
43	}
44
45	/// Equivalent to [`sys::ffi::playdate_graphics::copyBitmap`]
46	#[doc(alias = "sys::ffi::playdate_graphics::copyBitmap")]
47	fn copy_bitmap(&self) -> unsafe extern "C" fn(bitmap: *mut LCDBitmap) -> *mut LCDBitmap {
48		*sys::api!(graphics.copyBitmap)
49	}
50
51	/// Equivalent to [`sys::ffi::playdate_graphics::loadIntoBitmap`]
52	#[doc(alias = "sys::ffi::playdate_graphics::loadIntoBitmap")]
53	fn load_into_bitmap(
54		&self)
55		-> unsafe extern "C" fn(path: *const c_char, bitmap: *mut LCDBitmap, out_err: *mut *const c_char) {
56		*sys::api!(graphics.loadIntoBitmap)
57	}
58
59	/// Equivalent to [`sys::ffi::playdate_graphics::getBitmapData`]
60	#[doc(alias = "sys::ffi::playdate_graphics::getBitmapData")]
61	fn get_bitmap_data(
62		&self)
63		-> unsafe extern "C" fn(bitmap: *mut LCDBitmap,
64		                        width: *mut c_int,
65		                        height: *mut c_int,
66		                        row_bytes: *mut c_int,
67		                        mask: *mut *mut u8,
68		                        data: *mut *mut u8) {
69		*sys::api!(graphics.getBitmapData)
70	}
71
72	/// Equivalent to [`sys::ffi::playdate_graphics::clearBitmap`]
73	#[doc(alias = "sys::ffi::playdate_graphics::clearBitmap")]
74	fn clear_bitmap(&self) -> unsafe extern "C" fn(bitmap: *mut LCDBitmap, bgcolor: LCDColor) {
75		*sys::api!(graphics.clearBitmap)
76	}
77
78	/// Equivalent to [`sys::ffi::playdate_graphics::rotatedBitmap`]
79	#[doc(alias = "sys::ffi::playdate_graphics::rotatedBitmap")]
80	fn rotated_bitmap(
81		&self)
82		-> unsafe extern "C" fn(bitmap: *mut LCDBitmap,
83		                        rotation: c_float,
84		                        x_scale: c_float,
85		                        y_scale: c_float,
86		                        allocedSize: *mut c_int) -> *mut LCDBitmap {
87		*sys::api!(graphics.rotatedBitmap)
88	}
89
90	/// Equivalent to [`sys::ffi::playdate_graphics::setBitmapMask`]
91	#[doc(alias = "sys::ffi::playdate_graphics::setBitmapMask")]
92	fn set_bitmap_mask(&self) -> unsafe extern "C" fn(bitmap: *mut LCDBitmap, mask: *mut LCDBitmap) -> c_int {
93		*sys::api!(graphics.setBitmapMask)
94	}
95
96	/// Equivalent to [`sys::ffi::playdate_graphics::getBitmapMask`]
97	#[doc(alias = "sys::ffi::playdate_graphics::getBitmapMask")]
98	fn get_bitmap_mask(&self) -> unsafe extern "C" fn(bitmap: *mut LCDBitmap) -> *mut LCDBitmap {
99		*sys::api!(graphics.getBitmapMask)
100	}
101
102	/// Equivalent to [`sys::ffi::playdate_graphics::drawBitmap`]
103	#[doc(alias = "sys::ffi::playdate_graphics::drawBitmap")]
104	fn draw_bitmap(&self)
105	               -> unsafe extern "C" fn(bitmap: *mut LCDBitmap, x: c_int, y: c_int, flip: LCDBitmapFlip) {
106		*sys::api!(graphics.drawBitmap)
107	}
108
109	/// Equivalent to [`sys::ffi::playdate_graphics::tileBitmap`]
110	#[doc(alias = "sys::ffi::playdate_graphics::tileBitmap")]
111	fn tile_bitmap(
112		&self)
113		-> unsafe extern "C" fn(bitmap: *mut LCDBitmap,
114		                        x: c_int,
115		                        y: c_int,
116		                        width: c_int,
117		                        height: c_int,
118		                        flip: LCDBitmapFlip) {
119		*sys::api!(graphics.tileBitmap)
120	}
121
122	/// Equivalent to [`sys::ffi::playdate_graphics::drawRotatedBitmap`]
123	#[doc(alias = "sys::ffi::playdate_graphics::drawRotatedBitmap")]
124	fn draw_rotated_bitmap(
125		&self)
126		-> unsafe extern "C" fn(bitmap: *mut LCDBitmap,
127		                        x: c_int,
128		                        y: c_int,
129		                        rotation: c_float,
130		                        center_x: c_float,
131		                        center_y: c_float,
132		                        x_scale: c_float,
133		                        y_scale: c_float) {
134		*sys::api!(graphics.drawRotatedBitmap)
135	}
136
137	/// Equivalent to [`sys::ffi::playdate_graphics::drawScaledBitmap`]
138	#[doc(alias = "sys::ffi::playdate_graphics::drawScaledBitmap")]
139	fn draw_scaled_bitmap(
140		&self)
141		-> unsafe extern "C" fn(bitmap: *mut LCDBitmap, x: c_int, y: c_int, x_scale: c_float, y_scale: c_float) {
142		*sys::api!(graphics.drawScaledBitmap)
143	}
144
145	/// Equivalent to [`sys::ffi::playdate_graphics::checkMaskCollision`]
146	#[doc(alias = "sys::ffi::playdate_graphics::checkMaskCollision")]
147	fn check_mask_collision(
148		&self)
149		-> unsafe extern "C" fn(bitmap1: *mut LCDBitmap,
150		                        x1: c_int,
151		                        y1: c_int,
152		                        flip1: LCDBitmapFlip,
153		                        bitmap2: *mut LCDBitmap,
154		                        x2: c_int,
155		                        y2: c_int,
156		                        flip2: LCDBitmapFlip,
157		                        rect: LCDRect) -> c_int {
158		*sys::api!(graphics.checkMaskCollision)
159	}
160
161	/// Equivalent to [`sys::ffi::playdate_graphics::setColorToPattern`]
162	#[doc(alias = "sys::ffi::playdate_graphics::setColorToPattern")]
163	fn set_color_to_pattern(
164		&self)
165		-> unsafe extern "C" fn(color: *mut LCDColor,
166		                        bitmap: *mut LCDBitmap,
167		                        x: core::ffi::c_int,
168		                        y: core::ffi::c_int) {
169		*sys::api!(graphics.setColorToPattern)
170	}
171
172
173	/// Equivalent to [`sys::ffi::playdate_graphics::getBitmapPixel`]
174	#[doc(alias = "sys::ffi::playdate_graphics::getBitmapPixel")]
175	#[inline(always)]
176	fn get_pixel(&self) -> unsafe extern "C" fn(bitmap: *mut LCDBitmap, x: c_int, y: c_int) -> LCDSolidColor {
177		*sys::api!(graphics.getBitmapPixel)
178	}
179}