use crate::{Device, Error, PixelFormat, Texture};
pub struct ColorSpace {
inner: metal_rust_ffi::ColorSpace,
}
impl ColorSpace {
pub fn device_rgb() -> Result<Self, Error> {
metal_rust_ffi::ColorSpace::device_rgb()
.map(|inner| Self { inner })
.map_err(Error::from_ffi)
}
}
pub struct Layer {
pub(crate) inner: metal_rust_ffi::Layer,
}
impl Layer {
pub fn new() -> Result<Self, Error> {
metal_rust_ffi::Layer::new()
.map(|inner| Self { inner })
.map_err(Error::from_ffi)
}
pub fn with_device(device: &Device) -> Result<Self, Error> {
metal_rust_ffi::Layer::with_device(&device.inner)
.map(|inner| Self { inner })
.map_err(Error::from_ffi)
}
pub fn set_device(&self, device: Option<&Device>) {
self.inner.set_device(device.map(|device| &device.inner));
}
#[must_use]
pub fn device(&self) -> Option<Device> {
self.inner.device().map(Device::from_ffi)
}
pub fn set_pixel_format(&self, pixel_format: PixelFormat) {
self.inner.set_pixel_format(pixel_format);
}
#[must_use]
pub fn pixel_format(&self) -> PixelFormat {
self.inner.pixel_format()
}
#[must_use]
pub fn framebuffer_only(&self) -> bool {
self.inner.framebuffer_only()
}
pub fn set_framebuffer_only(&self, value: bool) {
self.inner.set_framebuffer_only(value);
}
#[must_use]
pub fn drawable_size(&self) -> (f64, f64) {
self.inner.drawable_size()
}
pub fn set_drawable_size(&self, width: f64, height: f64) -> Result<(), Error> {
self.inner
.set_drawable_size(width, height)
.map_err(Error::from_ffi)
}
#[must_use]
pub fn maximum_drawable_count(&self) -> usize {
self.inner.maximum_drawable_count()
}
pub fn set_maximum_drawable_count(&self, count: usize) -> Result<(), Error> {
self.inner
.set_maximum_drawable_count(count)
.map_err(Error::from_ffi)
}
#[must_use]
pub fn display_sync_enabled(&self) -> bool {
self.inner.display_sync_enabled()
}
pub fn set_display_sync_enabled(&self, value: bool) {
self.inner.set_display_sync_enabled(value);
}
#[must_use]
pub fn color_space(&self) -> Option<ColorSpace> {
self.inner.color_space().map(|inner| ColorSpace { inner })
}
pub fn set_color_space(&self, value: Option<&ColorSpace>) {
self.inner.set_color_space(value.map(|value| &value.inner));
}
#[must_use]
pub fn allows_next_drawable_timeout(&self) -> bool {
self.inner.allows_next_drawable_timeout()
}
pub fn set_allows_next_drawable_timeout(&self, value: bool) {
self.inner.set_allows_next_drawable_timeout(value);
}
#[must_use]
pub fn wants_extended_dynamic_range_content(&self) -> bool {
self.inner.wants_extended_dynamic_range_content()
}
pub fn set_wants_extended_dynamic_range_content(&self, value: bool) {
self.inner.set_wants_extended_dynamic_range_content(value);
}
pub fn residency_set(&self) -> Result<crate::metal::ResidencySet, Error> {
self.inner
.residency_set()
.map(crate::metal::ResidencySet::from_ffi)
.map_err(Error::from_ffi)
}
pub fn next_drawable(&self) -> Result<Drawable, Error> {
self.inner
.next_drawable()
.map(|inner| Drawable { inner })
.map_err(Error::from_ffi)
}
}
pub struct Drawable {
pub(crate) inner: metal_rust_ffi::Drawable,
}
impl Drawable {
#[must_use]
pub fn texture(&self) -> Texture {
Texture::from_ffi(self.inner.texture())
}
}