///|
fn NativeRasterGlyph::is_valid(self : NativeRasterGlyph) -> Bool {
if self.width <= 0 || self.height <= 0 {
return false
}
match self.format {
NativeRasterGlyphFormat::AlphaMask =>
self.width <= self.pixels.length() / self.height
NativeRasterGlyphFormat::ColorRgba =>
self.width <= self.pixels.length() / self.height / 4
}
}
///|
fn NativeTextLayout::is_valid_for_measure(
self : NativeTextLayout,
text : String,
) -> Bool {
self.has_valid_metrics() &&
self.caret_positions.length() >= text.to_array().length() + 1 &&
self.has_monotonic_carets()
}
///|
fn NativeTextLayout::is_valid_for_run(
self : NativeTextLayout,
text : String,
) -> Bool {
self.has_valid_metrics() &&
(
self.caret_positions.is_empty() ||
(
self.caret_positions.length() >= text.to_array().length() + 1 &&
self.has_monotonic_carets()
)
)
}
///|
fn NativeTextLayout::has_valid_metrics(self : NativeTextLayout) -> Bool {
self.size.width >= 0.0 &&
self.size.height > 0.0 &&
self.baseline >= 0.0 &&
self.baseline <= self.size.height
}
///|
fn NativeTextLayout::has_monotonic_carets(self : NativeTextLayout) -> Bool {
if self.caret_positions.is_empty() {
return false
}
let mut last = self.caret_positions[0]
if last < 0.0 {
return false
}
for index in 1.. @core.TextLayoutResult {
{
size: self.size,
baseline: self.baseline,
caret_positions: self.caret_positions,
}
}