pub struct JagTextProvider { /* private fields */ }Expand description
Text provider backed by jag-text (HarfBuzz) for shaping and swash for rasterization.
This uses a primary jag-text FontFace for text and an optional emoji font
for color emoji fallback. Delegates shaping to TextShaper::shape_ltr, then
rasterizes glyphs via swash bitmap images.
Supports CSS font-family stack resolution: when a TextRun specifies a
family string (e.g. "Georgia, 'Times New Roman', serif"), the provider
parses the stack and resolves candidates against the system font database,
caching loaded fonts for subsequent requests.
Implementations§
Source§impl JagTextProvider
impl JagTextProvider
pub fn from_bytes( bytes: &[u8], orientation: SubpixelOrientation, ) -> Result<Self>
Sourcepub fn from_bytes_with_emoji(
bytes: &[u8],
emoji_bytes: &[u8],
orientation: SubpixelOrientation,
) -> Result<Self>
pub fn from_bytes_with_emoji( bytes: &[u8], emoji_bytes: &[u8], orientation: SubpixelOrientation, ) -> Result<Self>
Create a provider with a primary font and an emoji font for fallback.
Sourcepub fn from_system_fonts(orientation: SubpixelOrientation) -> Result<Self>
pub fn from_system_fonts(orientation: SubpixelOrientation) -> Result<Self>
Construct from a reasonable system sans-serif font using fontdb.
Also attempts to load a system emoji font for color emoji fallback.
Sourcepub fn register_web_font(
&self,
family: &str,
data: Vec<u8>,
weight: u16,
style: FontStyle,
) -> Result<bool>
pub fn register_web_font( &self, family: &str, data: Vec<u8>, weight: u16, style: FontStyle, ) -> Result<bool>
Register a web font from raw TTF/OTF bytes.
Idempotent: returns Ok(false) if a font with the same
family + weight + style is already registered.
Thread-safe: font_cache is Mutex-protected.
The data must be raw TTF or OTF — WOFF/WOFF2 must be decompressed
before calling this method.
Sourcepub fn layout_paragraph(
&self,
text: &str,
size_px: f32,
max_width: Option<f32>,
) -> TextLayout
pub fn layout_paragraph( &self, text: &str, size_px: f32, max_width: Option<f32>, ) -> TextLayout
Layout a paragraph using jag-text’s TextLayout with optional width-based wrapping.
This exposes jag-text’s multi-line layout (including per-line baselines) so that
callers can build GPU-ready glyph batches without relying on PassManager
baseline heuristics.
Trait Implementations§
Source§impl TextProvider for JagTextProvider
impl TextProvider for JagTextProvider
fn rasterize_run(&self, run: &TextRun) -> Vec<RasterizedGlyph>
Source§fn shape_paragraph(&self, text: &str, size_px: f32) -> Option<ShapedParagraph>
fn shape_paragraph(&self, text: &str, size_px: f32) -> Option<ShapedParagraph>
fn line_metrics(&self, px: f32) -> Option<LineMetrics>
Source§fn measure_run(&self, run: &TextRun) -> f32
fn measure_run(&self, run: &TextRun) -> f32
run.size). The default delegates to shape_paragraph,
ignoring weight/style/family. Providers that support multiple font faces
should override this to select the correct face.Auto Trait Implementations§
impl !Freeze for JagTextProvider
impl !RefUnwindSafe for JagTextProvider
impl Send for JagTextProvider
impl Sync for JagTextProvider
impl Unpin for JagTextProvider
impl UnsafeUnpin for JagTextProvider
impl !UnwindSafe for JagTextProvider
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other into Self, while performing the appropriate scaling,
rounding and clamping.Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
Source§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self into T, while performing the appropriate scaling,
rounding and clamping.Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds error is returned which contains
the unclamped color. Read more