use mint::Vector2;
use msdf_sys::*;
use std::ptr;
#[derive(Copy, Clone)]
pub struct SDFConfig {
pub overlap_support: bool,
}
impl Default for SDFConfig {
fn default() -> Self {
SDFConfig {
overlap_support: true,
}
}
}
#[repr(C)]
#[derive(Copy, Clone)]
pub enum ErrorCorrectionMode {
Disabled = msdfgen_ErrorCorrectionConfig_Mode_DISABLED as isize,
Indiscriminate = msdfgen_ErrorCorrectionConfig_Mode_INDISCRIMINATE as isize,
EdgePriority = msdfgen_ErrorCorrectionConfig_Mode_EDGE_PRIORITY as isize,
EdgeOnly = msdfgen_ErrorCorrectionConfig_Mode_EDGE_ONLY as isize,
}
impl Default for ErrorCorrectionMode {
fn default() -> Self {
ErrorCorrectionMode::EdgePriority
}
}
#[repr(C)]
#[derive(Copy, Clone)]
pub enum DistanceCheckMode {
DoNotCheckDistance =
msdfgen_ErrorCorrectionConfig_DistanceCheckMode_DO_NOT_CHECK_DISTANCE as isize,
CheckDistanceAtEdge =
msdfgen_ErrorCorrectionConfig_DistanceCheckMode_CHECK_DISTANCE_AT_EDGE as isize,
AlwaysCheckDistance =
msdfgen_ErrorCorrectionConfig_DistanceCheckMode_ALWAYS_CHECK_DISTANCE as isize,
}
impl Default for DistanceCheckMode {
fn default() -> Self {
DistanceCheckMode::CheckDistanceAtEdge
}
}
#[derive(Copy, Clone)]
pub struct ErrorCorrectionConfig {
pub error_correction_mode: ErrorCorrectionMode,
pub distance_check_mode: DistanceCheckMode,
pub min_deviation_ratio: f64,
pub min_improve_ratio: f64,
}
impl Default for ErrorCorrectionConfig {
fn default() -> Self {
ErrorCorrectionConfig {
error_correction_mode: Default::default(),
distance_check_mode: Default::default(),
min_deviation_ratio: 1.111_111_111_111_111_2,
min_improve_ratio: 1.111_111_111_111_111_2,
}
}
}
#[derive(Copy, Clone)]
pub struct MSDFConfig {
pub overlap_support: bool,
pub error_correction_config: ErrorCorrectionConfig,
}
impl Default for MSDFConfig {
fn default() -> Self {
MSDFConfig {
overlap_support: true,
error_correction_config: Default::default(),
}
}
}
impl MSDFConfig {
pub(super) fn as_msdfgen_config(&self) -> msdfgen_MSDFGeneratorConfig {
msdfgen_MSDFGeneratorConfig {
_base: msdfgen_GeneratorConfig {
overlapSupport: self.overlap_support,
},
errorCorrection: msdfgen_ErrorCorrectionConfig {
mode: self.error_correction_config.error_correction_mode
as msdfgen_ErrorCorrectionConfig_Mode,
distanceCheckMode: self.error_correction_config.distance_check_mode
as msdfgen_ErrorCorrectionConfig_DistanceCheckMode,
minDeviationRatio: self.error_correction_config.min_deviation_ratio,
minImproveRatio: self.error_correction_config.min_improve_ratio,
buffer: ptr::null_mut(),
},
}
}
}
pub struct Projection {
pub scale: Vector2<f64>,
pub translation: Vector2<f64>,
}
impl Projection {
pub(super) fn as_msdfgen_projection(&self) -> msdfgen_Projection {
msdfgen_Projection {
scale: msdfgen_Vector2 {
x: self.scale.x,
y: self.scale.y,
},
translate: msdfgen_Vector2 {
x: self.translation.x,
y: self.translation.y,
},
}
}
}
impl Default for Projection {
fn default() -> Self {
Projection {
scale: Vector2 { x: 1.0, y: 1.0 },
translation: Vector2 { x: 0.0, y: 0.0 },
}
}
}