Skip to content

Commit

Permalink
Update Skrifa to 0.22.0 (#697)
Browse files Browse the repository at this point in the history
The main consequence of this is that there is a new auto-hinter.

I've also removed the `glyph` module from Vello, as the actual code in
there is never used, as far as I can see.
  • Loading branch information
DJMcNab committed Sep 23, 2024
1 parent b2df7b3 commit 96457d0
Show file tree
Hide file tree
Showing 8 changed files with 30 additions and 179 deletions.
12 changes: 6 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ vello = { version = "0.2.0", path = "vello" }
vello_encoding = { version = "0.2.0", path = "vello_encoding" }
vello_shaders = { version = "0.2.0", path = "vello_shaders" }
bytemuck = { version = "1.16.0", features = ["derive"] }
skrifa = "0.19.3"
skrifa = "0.22.0"
peniko = "0.2.0"
futures-intrusive = "0.5.0"
raw-window-handle = "0.6.2"
Expand Down
8 changes: 3 additions & 5 deletions examples/scenes/src/simple_text.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,10 @@

use std::sync::Arc;

use vello::glyph::Glyph;
use vello::kurbo::Affine;
use vello::peniko::{Blob, Brush, BrushRef, Color, Font, StyleRef};
use vello::skrifa::raw::FontRef;
use vello::skrifa::MetadataProvider;
use vello::Scene;
use vello::skrifa::{raw::FontRef, MetadataProvider};
use vello::{Glyph, Scene};

// This is very much a hack to get things working.
// On Windows, can set this to "c:\\Windows\\Fonts\\seguiemj.ttf" to get color emoji
Expand Down Expand Up @@ -179,7 +177,7 @@ impl SimpleText {
let x = pen_x;
pen_x += advance;
Some(Glyph {
id: gid.to_u16() as u32,
id: gid.to_u32(),
x,
y: pen_y,
})
Expand Down
154 changes: 0 additions & 154 deletions vello/src/glyph.rs

This file was deleted.

4 changes: 1 addition & 3 deletions vello/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,8 @@ pub use peniko;
/// 2D geometry, with a focus on curves.
pub use peniko::kurbo;

#[doc(hidden)]
pub use skrifa;

pub mod glyph;
pub use vello_encoding::Glyph;

#[cfg(feature = "wgpu")]
pub use wgpu;
Expand Down
2 changes: 1 addition & 1 deletion vello/src/scene.rs
Original file line number Diff line number Diff line change
Expand Up @@ -464,7 +464,7 @@ impl<'a> DrawGlyphs<'a> {
loop {
let ppem = self.run.font_size;
let outline_glyphs = (&mut glyphs).take_while(|glyph| {
let glyph_id = GlyphId::new(glyph.id.try_into().unwrap());
let glyph_id = GlyphId::new(glyph.id);
match colour_collection.get(glyph_id) {
Some(color) => {
final_glyph = Some((EmojiLikeGlyph::Colr(color), *glyph));
Expand Down
7 changes: 5 additions & 2 deletions vello/src/scene/bitmap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ impl<'a> BitmapStrikes<'a> {
/// This will prefer `sbix`, `CBDT`, and `CBLC` formats in that order.
///
/// To select a specific format, use [`with_format`](Self::with_format).
pub fn new(font: &impl TableProvider<'a>) -> Self {
pub fn new(font: &(impl TableProvider<'a> + MetadataProvider<'a>)) -> Self {
for format in [BitmapFormat::Sbix, BitmapFormat::Cbdt, BitmapFormat::Ebdt] {
if let Some(strikes) = Self::with_format(font, format) {
return strikes;
Expand All @@ -38,7 +38,10 @@ impl<'a> BitmapStrikes<'a> {
/// Creates a new `BitmapStrikes` for the given font and format.
///
/// Returns `None` if the requested format is not available.
pub fn with_format(font: &impl TableProvider<'a>, format: BitmapFormat) -> Option<Self> {
pub fn with_format(
font: &(impl TableProvider<'a> + MetadataProvider<'a>),
format: BitmapFormat,
) -> Option<Self> {
let kind = match format {
BitmapFormat::Sbix => StrikesKind::Sbix(
font.sbix().ok()?,
Expand Down
20 changes: 13 additions & 7 deletions vello_encoding/src/glyph_cache.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use super::{Encoding, StreamOffsets};

use peniko::{Font, Style};
use skrifa::instance::{NormalizedCoord, Size};
use skrifa::outline::{HintingInstance, HintingMode, LcdLayout, OutlineGlyphFormat};
use skrifa::outline::{HintingInstance, HintingOptions, OutlineGlyphFormat};
use skrifa::{GlyphId, MetadataProvider, OutlineGlyphCollection};

#[derive(Default)]
Expand Down Expand Up @@ -162,7 +162,7 @@ impl<'a> GlyphCacheSession<'a> {
entry.serial = self.serial;
return Some((entry.encoding.clone(), entry.stream_sizes));
}
let outline = self.outlines.get(GlyphId::new(key.glyph_id as u16))?;
let outline = self.outlines.get(GlyphId::new(key.glyph_id))?;
let mut encoding = self.free_list.pop().unwrap_or_default();
let encoding_ptr = Arc::make_mut(&mut encoding);
encoding_ptr.reset();
Expand Down Expand Up @@ -245,13 +245,19 @@ pub(crate) struct HintKey<'a> {

impl<'a> HintKey<'a> {
fn instance(&self) -> Option<HintingInstance> {
HintingInstance::new(self.outlines, self.size, self.coords, HINTING_MODE).ok()
HintingInstance::new(self.outlines, self.size, self.coords, HINTING_OPTIONS).ok()
}
}

const HINTING_MODE: HintingMode = HintingMode::Smooth {
lcd_subpixel: Some(LcdLayout::Horizontal),
preserve_linear_metrics: true,
// TODO: We might want to expose making these configurable in future.
// However, these options are probably fine for most users.
const HINTING_OPTIONS: HintingOptions = HintingOptions {
engine: skrifa::outline::Engine::AutoFallback,
target: skrifa::outline::Target::Smooth {
mode: skrifa::outline::SmoothMode::Lcd,
symmetric_rendering: false,
preserve_linear_metrics: true,
},
};

#[derive(Default)]
Expand All @@ -278,7 +284,7 @@ impl HintCache {
entry.font_index = key.font_index;
entry
.instance
.reconfigure(key.outlines, key.size, key.coords, HINTING_MODE)
.reconfigure(key.outlines, key.size, key.coords, HINTING_OPTIONS)
.ok()?;
}
Some(&entry.instance)
Expand Down

0 comments on commit 96457d0

Please sign in to comment.