use super::Scale;
use cat_engine_basement::graphics::level1::Texture2D;
struct Glyph<T>{
data:T,
size:[f32;2],
offset:[f32;2],
advance_width:f32,
}
impl<T> Glyph<T>{
#[inline(always)]
pub fn raw(
data:T,
size:[f32;2],
offset:[f32;2],
advance_width:f32,
)->Glyph<T>{
Self{
data,
size,
offset,
advance_width,
}
}
pub fn offset(&self,scale:Scale)->[f32;2]{
[
self.offset[0]*scale.horizontal,
self.offset[1]*scale.vertical
]
}
pub fn width(&self,horizontal_scale:f32)->f32{
self.size[0]*horizontal_scale
}
pub fn height(&self,vertical_scale:f32)->f32{
self.size[1]*vertical_scale
}
pub fn size(&self,scale:Scale)->[f32;2]{
[
self.size[0]*scale.horizontal,
self.size[1]*scale.vertical,
]
}
pub fn advance_width(&self,horizontal_scale:f32)->f32{
self.advance_width*horizontal_scale
}
pub fn bounding_box(&self,scale:Scale)->[f32;4]{
[
self.offset[0]*scale.horizontal,
self.offset[1]*scale.vertical,
self.size[0]*scale.horizontal,
self.size[1]*scale.vertical,
]
}
}
pub struct TexturedGlyph{
glyph:Glyph<Texture2D>,
}
impl TexturedGlyph{
pub (crate) fn raw(
texture:Texture2D,
size:[f32;2],
offset:[f32;2],
advance_width:f32,
)->TexturedGlyph{
Self{
glyph:Glyph::raw(
texture,
size,
offset,
advance_width
),
}
}
pub fn offset(&self,scale:Scale)->[f32;2]{
self.glyph.offset(scale)
}
pub fn width(&self,horizontal_scale:f32)->f32{
self.glyph.width(horizontal_scale)
}
pub fn height(&self,vertical_scale:f32)->f32{
self.glyph.height(vertical_scale)
}
pub fn size(&self,scale:Scale)->[f32;2]{
self.glyph.size(scale)
}
pub fn advance_width(&self,horizontal_scale:f32)->f32{
self.glyph.advance_width(horizontal_scale)
}
pub fn bounding_box(&self,scale:Scale)->[f32;4]{
self.glyph.bounding_box(scale)
}
pub fn texture(&self)->&Texture2D{
&self.glyph.data
}
}