#![allow(dead_code)]
use crate::utility::*;
use winapi::um::dwrite_3::*;
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
#[repr(u32)]
pub enum FontAxisAttributes {
None = DWRITE_FONT_AXIS_ATTRIBUTES_NONE,
Variable = DWRITE_FONT_AXIS_ATTRIBUTES_VARIABLE,
Hiden = DWRITE_FONT_AXIS_ATTRIBUTES_HIDDEN,
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
#[repr(u32)]
pub enum FontAxisTag {
Weight = DWRITE_FONT_AXIS_TAG_WEIGHT,
Width = DWRITE_FONT_AXIS_TAG_WIDTH,
Slant = DWRITE_FONT_AXIS_TAG_SLANT,
OpticalSize = DWRITE_FONT_AXIS_TAG_OPTICAL_SIZE,
Italic = DWRITE_FONT_AXIS_TAG_ITALIC,
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
#[repr(u32)]
pub enum FontLineGapUsage {
Default = DWRITE_FONT_LINE_GAP_USAGE_DEFAULT,
Disabled = DWRITE_FONT_LINE_GAP_USAGE_DISABLED,
Enabled = DWRITE_FONT_LINE_GAP_USAGE_ENABLED,
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
#[repr(u32)]
pub enum FontPropertyID {
None = DWRITE_FONT_PROPERTY_ID_NONE,
FullName = DWRITE_FONT_PROPERTY_ID_FULL_NAME,
Win32FamilyName = DWRITE_FONT_PROPERTY_ID_WIN32_FAMILY_NAME,
PostScriptName = DWRITE_FONT_PROPERTY_ID_POSTSCRIPT_NAME,
DesignScriptLanguageTag = DWRITE_FONT_PROPERTY_ID_DESIGN_SCRIPT_LANGUAGE_TAG,
SupportedScriptLanguageTag = DWRITE_FONT_PROPERTY_ID_SUPPORTED_SCRIPT_LANGUAGE_TAG,
SemanticTag = DWRITE_FONT_PROPERTY_ID_SEMANTIC_TAG,
Weight = DWRITE_FONT_PROPERTY_ID_WEIGHT,
Stretch = DWRITE_FONT_PROPERTY_ID_STRETCH,
Style = DWRITE_FONT_PROPERTY_ID_STYLE,
Total = DWRITE_FONT_PROPERTY_ID_TOTAL,
PreferredFamilyName = DWRITE_FONT_PROPERTY_ID_PREFERRED_FAMILY_NAME,
FamilyName = DWRITE_FONT_PROPERTY_ID_FAMILY_NAME,
FaceName = DWRITE_FONT_PROPERTY_ID_FACE_NAME,
}
impl From<Option<FontPropertyID>> for FontPropertyID {
fn from(src: Option<FontPropertyID>) -> FontPropertyID {
match src {
Some(id) => id,
None => FontPropertyID::None,
}
}
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
#[repr(u32)]
pub enum Locality {
Remote = DWRITE_LOCALITY_REMOTE,
Partial = DWRITE_LOCALITY_PARTIAL,
Local = DWRITE_LOCALITY_LOCAL,
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
#[repr(u32)]
pub enum RenderingMode1 {
Default = DWRITE_RENDERING_MODE1_DEFAULT,
Aliased = DWRITE_RENDERING_MODE1_ALIASED,
GDIClasssic = DWRITE_RENDERING_MODE1_GDI_CLASSIC,
GDINatural = DWRITE_RENDERING_MODE1_GDI_NATURAL,
Natural = DWRITE_RENDERING_MODE1_NATURAL,
NaturalSymmetric = DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC,
Outline = DWRITE_RENDERING_MODE1_OUTLINE,
NaturalSymmetricDownsampled = DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC_DOWNSAMPLED,
}
#[derive(Clone, Debug)]
pub struct FontAxisRange {
pub axis_tag: FontAxisTag,
pub min_value: f32,
pub max_value: f32,
}
impl FontAxisRange {
fn to_c_struct(&self) -> DWRITE_FONT_AXIS_RANGE {
DWRITE_FONT_AXIS_RANGE {
axisTag: self.axis_tag as u32,
minValue: self.min_value,
maxValue: self.max_value,
}
}
}
#[derive(Clone, Debug)]
pub struct FontAxisValue {
pub axis_tag: FontAxisTag,
pub value: f32,
}
impl FontAxisValue {
fn to_c_struct(&self) -> DWRITE_FONT_AXIS_VALUE {
DWRITE_FONT_AXIS_VALUE {
axisTag: self.axis_tag as u32,
value: self.value,
}
}
}
#[derive(Clone, Debug)]
pub struct FontProperty {
pub property_id: FontPropertyID,
pub property_value: String,
pub locale_name: String,
}
impl FontProperty {
fn to_c_struct(&self) -> (DWRITE_FONT_PROPERTY, Vec<u16>, Vec<u16>) {
let value = self
.property_value
.encode_utf16()
.chain(Some(0))
.collect::<Vec<_>>();
let locale_name = self
.locale_name
.encode_utf16()
.chain(Some(0))
.collect::<Vec<_>>();
(
DWRITE_FONT_PROPERTY {
propertyId: self.property_id as u32,
propertyValue: value.as_ptr(),
localeName: locale_name.as_ptr(),
},
value,
locale_name,
)
}
}
#[derive(Clone, Debug)]
pub struct LineMetrics1 {
pub length: u32,
pub trailing_whitespace_length: u32,
pub newline_length: u32,
pub height: f32,
pub baseline: f32,
pub is_trimmed: bool,
pub leading_before: f32,
pub leading_after: f32,
}
impl LineMetrics1 {
fn to_c_struct(&self) -> DWRITE_LINE_METRICS1 {
DWRITE_LINE_METRICS1 {
length: self.length,
trailingWhitespaceLength: self.trailing_whitespace_length,
newlineLength: self.newline_length,
height: self.height,
baseline: self.baseline,
isTrimmed: to_BOOL(self.is_trimmed),
leadingBefore: self.leading_before,
leadingAfter: self.leading_after,
}
}
}