pretext-render 0.1.0

Shaping-backed text rasterization helpers for Pretext layouts.
Documentation
# pretext-render

Shared rasterization helpers for Pretext text layouts.

`pretext-render` converts shaped text from `pretext` into alpha-mask rasters and exposes baseline
metrics that renderer crates can reuse. Most apps should use `pretext` for layout and a renderer
crate such as `pretext-egui`; use this crate when you are building your own rendering backend.

## Install

```toml
[dependencies]
pretext = "0.1.0"
pretext-render = "0.1.0"
```

## Rasterize a shaped text run

```rust
use pretext::{BidiDirection, PretextEngine, PretextStyle};
use pretext_render::{BaselineMode, TextRasterRequest, TextRenderCache};

let engine = PretextEngine::builder().build();
let style = PretextStyle {
    families: vec!["Arial".to_owned()],
    size_px: 18.0,
    weight: 400,
    italic: false,
};
let request = TextRasterRequest {
    text: "Hello, raster cache.",
    style: &style,
    direction: BidiDirection::Ltr,
    slot_height: 24.0,
    padding_x: 2.0,
    padding_y: 2.0,
    slack_x: 0.0,
    slack_y: 0.0,
    baseline_mode: BaselineMode::AutoFontMetrics,
};

let cache = TextRenderCache::default();
let rasterized = cache
    .rasterized_text(&engine, request, 1.0)
    .expect("text should rasterize with an available font");

let size = rasterized.pixel_size();
let alpha = rasterized.alpha_pixels();
assert_eq!(alpha.len(), size[0] * size[1]);
```

## Baseline metrics

```rust
# use pretext::{BidiDirection, PretextEngine, PretextStyle};
# use pretext_render::{BaselineMode, TextRasterRequest, text_baseline_metrics};
# let engine = PretextEngine::builder().build();
# let style = PretextStyle { families: vec!["Arial".to_owned()], size_px: 18.0, weight: 400, italic: false };
let request = TextRasterRequest {
    text: "Align me",
    style: &style,
    direction: BidiDirection::Ltr,
    slot_height: 24.0,
    padding_x: 0.0,
    padding_y: 0.0,
    slack_x: 0.0,
    slack_y: 0.0,
    baseline_mode: BaselineMode::AutoFontMetrics,
};
let metrics = text_baseline_metrics(&engine, request);
assert!(metrics.content_height_px() > 0.0);
```