@@ -148,10 +148,16 @@ pub struct WebUiBackend {
148148
149149 /// Is a dialog currently open
150150 dialog_open : bool ,
151+
152+ use_canvas_font_renderer : bool ,
151153}
152154
153155impl WebUiBackend {
154- pub fn new ( js_player : JavascriptPlayer , canvas : & HtmlCanvasElement ) -> Self {
156+ pub fn new (
157+ js_player : JavascriptPlayer ,
158+ canvas : & HtmlCanvasElement ,
159+ use_canvas_font_renderer : bool ,
160+ ) -> Self {
155161 let window = web_sys:: window ( ) . expect ( "window()" ) ;
156162 let preferred_language = window. navigator ( ) . language ( ) ;
157163 let language = preferred_language
@@ -165,6 +171,7 @@ impl WebUiBackend {
165171 language,
166172 clipboard_content : "" . into ( ) ,
167173 dialog_open : false ,
174+ use_canvas_font_renderer,
168175 }
169176 }
170177
@@ -299,9 +306,39 @@ impl UiBackend for WebUiBackend {
299306 self . js_player . display_unsupported_video ( url. as_str ( ) ) ;
300307 }
301308
302- fn load_device_font ( & self , _query : & FontQuery , _register : & mut dyn FnMut ( FontDefinition ) ) {
303- // Because fonts must be loaded instantly (no async),
304- // we actually just provide them all upfront at time of Player creation.
309+ fn load_device_font ( & self , query : & FontQuery , register : & mut dyn FnMut ( FontDefinition ) ) {
310+ if !self . use_canvas_font_renderer {
311+ // In case we don't use the canvas font renderer,
312+ // because fonts must be loaded instantly (no async),
313+ // we actually just provide them all upfront at time of Player creation.
314+ return ;
315+ }
316+
317+ let renderer =
318+ font_renderer:: CanvasFontRenderer :: new ( query. is_italic , query. is_bold , & query. name ) ;
319+
320+ match renderer {
321+ Ok ( renderer) => {
322+ tracing:: info!(
323+ "Loaded a new canvas font renderer for font \" {}\" , italic: {}, bold: {}" ,
324+ query. name,
325+ query. is_italic,
326+ query. is_bold
327+ ) ;
328+ register ( FontDefinition :: ExternalRenderer {
329+ name : query. name . clone ( ) ,
330+ is_bold : query. is_bold ,
331+ is_italic : query. is_italic ,
332+ font_renderer : Box :: new ( renderer) ,
333+ } ) ;
334+ }
335+ Err ( e) => {
336+ tracing:: error!(
337+ "Failed to set up canvas font renderer for font \" {}\" : {e:?}" ,
338+ query. name
339+ )
340+ }
341+ }
305342 }
306343
307344 fn sort_device_fonts (
0 commit comments