use super::alpha_mask::AlphaMask;
use bevy_ecs::prelude::*;
use windows::Win32::Graphics::Direct2D::ID2D1Bitmap1;
use windows::Win32::Graphics::Imaging::IWICBitmapSource;
#[derive(Component)]
pub struct BitmapSourceResource {
source: IWICBitmapSource,
alpha_mask: Option<AlphaMask>,
}
unsafe impl Send for BitmapSourceResource {}
unsafe impl Sync for BitmapSourceResource {}
impl BitmapSourceResource {
pub fn new(source: IWICBitmapSource) -> Self {
Self {
source,
alpha_mask: None,
}
}
pub fn source(&self) -> &IWICBitmapSource {
&self.source
}
pub fn alpha_mask(&self) -> Option<&AlphaMask> {
self.alpha_mask.as_ref()
}
pub fn set_alpha_mask(&mut self, mask: AlphaMask) {
self.alpha_mask = Some(mask);
}
}
#[derive(Component, Default)]
pub struct BitmapSourceGraphics {
bitmap: Option<ID2D1Bitmap1>,
}
unsafe impl Send for BitmapSourceGraphics {}
unsafe impl Sync for BitmapSourceGraphics {}
impl BitmapSourceGraphics {
pub fn new() -> Self {
Self { bitmap: None }
}
pub fn bitmap(&self) -> Option<&ID2D1Bitmap1> {
self.bitmap.as_ref()
}
pub fn set_bitmap(&mut self, bitmap: ID2D1Bitmap1) {
self.bitmap = Some(bitmap);
}
pub fn invalidate(&mut self) {
self.bitmap = None;
}
pub fn is_valid(&self) -> bool {
self.bitmap.is_some()
}
}
impl std::fmt::Debug for BitmapSourceGraphics {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("BitmapSourceGraphics")
.field("bitmap", &self.bitmap.is_some())
.finish()
}
}