@@ -11,7 +11,7 @@ use util::{
1111} ;
1212
1313use super :: FreeTypeError ;
14- use crate :: text:: { FontSizeCacheKey , GlyphCache , OpenTypeTag } ;
14+ use crate :: text:: { FontSizeKey , GlyphCache , GlyphKey , OpenTypeTag } ;
1515
1616pub mod freetype;
1717pub use freetype:: GlyphDisplayError ;
@@ -191,7 +191,7 @@ impl Font {
191191 forward_methods ! (
192192 variants = Font :: [ FreeType , Tofu ] ;
193193
194- fn size_cache_key[ & ] ( ) -> FontSizeCacheKey ;
194+ fn size_cache_key[ & ] ( ) -> FontSizeKey ;
195195 pub fn metrics[ & ] ( ) -> & FontMetrics ;
196196 pub fn point_size[ & ] ( ) -> I26Dot6 ;
197197 pub fn harfbuzz_scale_factor_for[ & ] ( glyph: u32 ) -> I26Dot6 ;
@@ -224,15 +224,20 @@ impl Font {
224224 rasterizer : & mut dyn Rasterizer ,
225225 ) -> Result < & ' c GlyphSubscene , GlyphDisplayError > {
226226 let ( render_offset, subpixel_bucket) =
227- FontSizeCacheKey :: get_subpixel_bucket ( offset_value, offset_axis_is_y) ;
228- let key = self
229- . size_cache_key ( )
230- . for_glyph ( self . face ( ) , glyph, subpixel_bucket) ;
231-
232- cache. get_or_try_insert_with ( key, || match self {
233- Self :: FreeType ( font) => font. glyph_subscene_uncached ( glyph, render_offset, rasterizer) ,
234- Self :: Tofu ( font) => Ok ( font. glyph_subscene_uncached ( glyph, render_offset, rasterizer) ) ,
235- } )
227+ GlyphKey :: get_subpixel_bucket ( offset_value, offset_axis_is_y) ;
228+ let key = self . size_cache_key ( ) . for_glyph ( self . face ( ) , glyph) ;
229+
230+ cache. get_or_try_insert_with (
231+ key. clone ( ) . for_subpixel_bucket ( subpixel_bucket) ,
232+ || match self {
233+ Self :: FreeType ( font) => {
234+ font. glyph_subscene_uncached ( glyph, render_offset, rasterizer, cache, key)
235+ }
236+ Self :: Tofu ( font) => {
237+ Ok ( font. glyph_subscene_uncached ( glyph, render_offset, rasterizer) )
238+ }
239+ } ,
240+ )
236241 }
237242}
238243
0 commit comments