x-graphics 0.2.1

Graphics framework for X
Documentation
use web_sys::ImageBitmap;

use super::{canvas::WebCanvas, device::WebDeviceContext};
use crate::{
    base::Dimension,
    bitmap::{BitmapBackend, BitmapPixelFormat},
    error::GraphicsError,
    geometry::{FSize, ISize},
    Float,
};

#[derive(Clone, Debug)]
pub struct WebBitmap {
    bitmap: ImageBitmap,
}

impl Dimension for WebBitmap {
    fn size(&self) -> FSize {
        FSize::new(self.bitmap.width() as Float, self.bitmap.height() as Float)
    }

    fn pixel_size(&self) -> ISize {
        ISize::new(self.bitmap.width() as i32, self.bitmap.height() as i32)
    }
}

impl BitmapBackend for WebBitmap {
    type DeviceContextType = WebDeviceContext;
    type CanvasType = WebCanvas;

    fn new(
        _context: Option<&Self::DeviceContextType>,
        _width: usize,
        _height: usize,
        _pixel_format: BitmapPixelFormat,
        _canvas: &Self::CanvasType,
    ) -> Result<Self, GraphicsError> {
        Err(GraphicsError::NotImplemented)
    }

    fn from_buffer(
        _context: Option<&Self::DeviceContextType>,
        _buffer: &[u8],
        _pitch: usize,
        _width: usize,
        _height: usize,
        _pixel_format: BitmapPixelFormat,
        _canvas: &Self::CanvasType,
    ) -> Result<Self, GraphicsError>
    where
        Self: Sized,
    {
        Err(GraphicsError::NotImplemented)
    }
}

impl WebBitmap {
    pub(super) fn image_bitmap(&self) -> &ImageBitmap {
        &self.bitmap
    }
}