move repeated 'PixelType' type constraints to new Pixel trait

This commit is contained in:
Gered 2023-03-09 16:32:46 -05:00
parent 986a2a9677
commit 75401cb5c7
3 changed files with 12 additions and 10 deletions

View file

@ -8,13 +8,11 @@
use std::error::Error; use std::error::Error;
use num_traits::{PrimInt, Unsigned}; use crate::graphics::{indexed, Pixel};
use crate::graphics::indexed;
use crate::math::Rect; use crate::math::Rect;
#[derive(Clone, PartialEq)] #[derive(Clone, PartialEq)]
pub enum GeneralBlitMethod<PixelType: PrimInt + Unsigned> { pub enum GeneralBlitMethod<PixelType: Pixel> {
Solid, Solid,
Transparent(PixelType), Transparent(PixelType),
} }
@ -23,7 +21,7 @@ pub enum GeneralBlitMethod<PixelType: PrimInt + Unsigned> {
/// drawing functionality that is to be made generic across all supported bitmap types and is not specific to /// drawing functionality that is to be made generic across all supported bitmap types and is not specific to
/// any one pixel-depth. Note that this does not provide cross-bit-depth drawing support. /// any one pixel-depth. Note that this does not provide cross-bit-depth drawing support.
pub trait GeneralBitmap: Sized + Clone { pub trait GeneralBitmap: Sized + Clone {
type PixelType: PrimInt + Unsigned; type PixelType: Pixel;
type ErrorType: Error; type ErrorType: Error;
/// Creates a new bitmap with the specified dimensions, in pixels. /// Creates a new bitmap with the specified dimensions, in pixels.

View file

@ -4,11 +4,9 @@ use std::io::{BufReader, BufWriter, Cursor};
use std::path::Path; use std::path::Path;
use byteorder::{ReadBytesExt, WriteBytesExt}; use byteorder::{ReadBytesExt, WriteBytesExt};
use num_traits::{PrimInt, Unsigned};
use thiserror::Error; use thiserror::Error;
use crate::graphics::*; use crate::graphics::*;
use crate::graphics::indexed::*;
use crate::math::*; use crate::math::*;
pub static VGA_FONT_BYTES: &[u8] = include_bytes!("../../assets/vga.fnt"); pub static VGA_FONT_BYTES: &[u8] = include_bytes!("../../assets/vga.fnt");
@ -27,7 +25,7 @@ pub enum FontError {
} }
#[derive(Debug, Copy, Clone, Eq, PartialEq)] #[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum FontRenderOpts<PixelType: PrimInt + Unsigned> { pub enum FontRenderOpts<PixelType: Pixel> {
Color(PixelType), Color(PixelType),
None, None,
} }
@ -47,7 +45,7 @@ pub trait Font {
fn line_height(&self) -> u8; fn line_height(&self) -> u8;
fn measure<PixelType>(&self, text: &str, opts: FontRenderOpts<PixelType>) -> (u32, u32) fn measure<PixelType>(&self, text: &str, opts: FontRenderOpts<PixelType>) -> (u32, u32)
where where
PixelType: PrimInt + Unsigned; PixelType: Pixel;
} }
#[derive(Debug, Clone, Eq, PartialEq)] #[derive(Debug, Clone, Eq, PartialEq)]
@ -210,7 +208,7 @@ impl Font for BitmaskFont {
fn measure<PixelType>(&self, text: &str, _opts: FontRenderOpts<PixelType>) -> (u32, u32) fn measure<PixelType>(&self, text: &str, _opts: FontRenderOpts<PixelType>) -> (u32, u32)
where where
PixelType: PrimInt + Unsigned PixelType: Pixel
{ {
if text.is_empty() { if text.is_empty() {
return (0, 0); return (0, 0);

View file

@ -1,3 +1,5 @@
use num_traits::{PrimInt, Unsigned};
pub use self::bitmap::*; pub use self::bitmap::*;
pub use self::bitmapatlas::*; pub use self::bitmapatlas::*;
pub use self::font::*; pub use self::font::*;
@ -7,3 +9,7 @@ pub mod bitmapatlas;
pub mod font; pub mod font;
pub mod indexed; pub mod indexed;
pub mod rgb; pub mod rgb;
/// Common trait to represent single pixel/colour values.
pub trait Pixel: PrimInt + Unsigned {}
impl<T> Pixel for T where T: PrimInt + Unsigned {}