Fallback to embedded font when system font fails
This commit is contained in:
		
							parent
							
								
									84874ac5dc
								
							
						
					
					
						commit
						a99aa1dd61
					
				| @ -4,14 +4,14 @@ version = "0.1.0" | |||||||
| authors = ["Héctor Ramón Jiménez <hector0193@gmail.com>"] | authors = ["Héctor Ramón Jiménez <hector0193@gmail.com>"] | ||||||
| edition = "2018" | edition = "2018" | ||||||
| description = "A wgpu renderer for Iced" | description = "A wgpu renderer for Iced" | ||||||
| license = "MIT" | license = "MIT AND OFL-1.1" | ||||||
| repository = "https://github.com/hecrj/iced" | repository = "https://github.com/hecrj/iced" | ||||||
| 
 | 
 | ||||||
| [dependencies] | [dependencies] | ||||||
| iced_native = { version = "0.1.0", path = "../native" } | iced_native = { version = "0.1.0", path = "../native" } | ||||||
| wgpu = "0.4" | wgpu = "0.4" | ||||||
| glyph_brush = "0.6" | glyph_brush = "0.6" | ||||||
| wgpu_glyph = "0.6" | wgpu_glyph = { version = "0.7", git = "https://github.com/hecrj/wgpu_glyph", branch = "fix/font-load-panic" } | ||||||
| raw-window-handle = "0.3" | raw-window-handle = "0.3" | ||||||
| image = "0.22" | image = "0.22" | ||||||
| glam = "0.8" | glam = "0.8" | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								wgpu/fonts/Lato-Regular.ttf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								wgpu/fonts/Lato-Regular.ttf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										93
									
								
								wgpu/fonts/OFL.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								wgpu/fonts/OFL.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,93 @@ | |||||||
|  | Copyright (c) 2010-2014 by tyPoland Lukasz Dziedzic (team@latofonts.com) with Reserved Font Name "Lato" | ||||||
|  | 
 | ||||||
|  | This Font Software is licensed under the SIL Open Font License, Version 1.1. | ||||||
|  | This license is copied below, and is also available with a FAQ at: | ||||||
|  | http://scripts.sil.org/OFL | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ----------------------------------------------------------- | ||||||
|  | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 | ||||||
|  | ----------------------------------------------------------- | ||||||
|  | 
 | ||||||
|  | PREAMBLE | ||||||
|  | The goals of the Open Font License (OFL) are to stimulate worldwide | ||||||
|  | development of collaborative font projects, to support the font creation | ||||||
|  | efforts of academic and linguistic communities, and to provide a free and | ||||||
|  | open framework in which fonts may be shared and improved in partnership | ||||||
|  | with others. | ||||||
|  | 
 | ||||||
|  | The OFL allows the licensed fonts to be used, studied, modified and | ||||||
|  | redistributed freely as long as they are not sold by themselves. The | ||||||
|  | fonts, including any derivative works, can be bundled, embedded,  | ||||||
|  | redistributed and/or sold with any software provided that any reserved | ||||||
|  | names are not used by derivative works. The fonts and derivatives, | ||||||
|  | however, cannot be released under any other type of license. The | ||||||
|  | requirement for fonts to remain under this license does not apply | ||||||
|  | to any document created using the fonts or their derivatives. | ||||||
|  | 
 | ||||||
|  | DEFINITIONS | ||||||
|  | "Font Software" refers to the set of files released by the Copyright | ||||||
|  | Holder(s) under this license and clearly marked as such. This may | ||||||
|  | include source files, build scripts and documentation. | ||||||
|  | 
 | ||||||
|  | "Reserved Font Name" refers to any names specified as such after the | ||||||
|  | copyright statement(s). | ||||||
|  | 
 | ||||||
|  | "Original Version" refers to the collection of Font Software components as | ||||||
|  | distributed by the Copyright Holder(s). | ||||||
|  | 
 | ||||||
|  | "Modified Version" refers to any derivative made by adding to, deleting, | ||||||
|  | or substituting -- in part or in whole -- any of the components of the | ||||||
|  | Original Version, by changing formats or by porting the Font Software to a | ||||||
|  | new environment. | ||||||
|  | 
 | ||||||
|  | "Author" refers to any designer, engineer, programmer, technical | ||||||
|  | writer or other person who contributed to the Font Software. | ||||||
|  | 
 | ||||||
|  | PERMISSION & CONDITIONS | ||||||
|  | Permission is hereby granted, free of charge, to any person obtaining | ||||||
|  | a copy of the Font Software, to use, study, copy, merge, embed, modify, | ||||||
|  | redistribute, and sell modified and unmodified copies of the Font | ||||||
|  | Software, subject to the following conditions: | ||||||
|  | 
 | ||||||
|  | 1) Neither the Font Software nor any of its individual components, | ||||||
|  | in Original or Modified Versions, may be sold by itself. | ||||||
|  | 
 | ||||||
|  | 2) Original or Modified Versions of the Font Software may be bundled, | ||||||
|  | redistributed and/or sold with any software, provided that each copy | ||||||
|  | contains the above copyright notice and this license. These can be | ||||||
|  | included either as stand-alone text files, human-readable headers or | ||||||
|  | in the appropriate machine-readable metadata fields within text or | ||||||
|  | binary files as long as those fields can be easily viewed by the user. | ||||||
|  | 
 | ||||||
|  | 3) No Modified Version of the Font Software may use the Reserved Font | ||||||
|  | Name(s) unless explicit written permission is granted by the corresponding | ||||||
|  | Copyright Holder. This restriction only applies to the primary font name as | ||||||
|  | presented to the users. | ||||||
|  | 
 | ||||||
|  | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font | ||||||
|  | Software shall not be used to promote, endorse or advertise any | ||||||
|  | Modified Version, except to acknowledge the contribution(s) of the | ||||||
|  | Copyright Holder(s) and the Author(s) or with their explicit written | ||||||
|  | permission. | ||||||
|  | 
 | ||||||
|  | 5) The Font Software, modified or unmodified, in part or in whole, | ||||||
|  | must be distributed entirely under this license, and must not be | ||||||
|  | distributed under any other license. The requirement for fonts to | ||||||
|  | remain under this license does not apply to any document created | ||||||
|  | using the Font Software. | ||||||
|  | 
 | ||||||
|  | TERMINATION | ||||||
|  | This license becomes null and void if any of the above conditions are | ||||||
|  | not met. | ||||||
|  | 
 | ||||||
|  | DISCLAIMER | ||||||
|  | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||||||
|  | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF | ||||||
|  | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT | ||||||
|  | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE | ||||||
|  | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | ||||||
|  | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL | ||||||
|  | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||||||
|  | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM | ||||||
|  | OTHER DEALINGS IN THE FONT SOFTWARE. | ||||||
| @ -11,6 +11,8 @@ pub const BUILTIN_ICONS: iced_native::Font = iced_native::Font::External { | |||||||
| 
 | 
 | ||||||
| pub const CHECKMARK_ICON: char = '\u{F00C}'; | pub const CHECKMARK_ICON: char = '\u{F00C}'; | ||||||
| 
 | 
 | ||||||
|  | const FALLBACK_FONT: &[u8] = include_bytes!("../fonts/Lato-Regular.ttf"); | ||||||
|  | 
 | ||||||
| #[derive(Debug)] | #[derive(Debug)] | ||||||
| pub struct Pipeline { | pub struct Pipeline { | ||||||
|     draw_brush: RefCell<wgpu_glyph::GlyphBrush<'static, ()>>, |     draw_brush: RefCell<wgpu_glyph::GlyphBrush<'static, ()>>, | ||||||
| @ -26,24 +28,36 @@ impl Pipeline { | |||||||
| 
 | 
 | ||||||
|         let default_font = font_source |         let default_font = font_source | ||||||
|             .load(&[font::Family::SansSerif, font::Family::Serif]) |             .load(&[font::Family::SansSerif, font::Family::Serif]) | ||||||
|             .expect("Find sans-serif or serif font"); |             .unwrap_or_else(|_| FALLBACK_FONT.to_vec()); | ||||||
| 
 | 
 | ||||||
|         let mono_font = font_source |         let mono_font = font_source | ||||||
|             .load(&[font::Family::Monospace]) |             .load(&[font::Family::Monospace]) | ||||||
|             .expect("Find monospace font"); |             .unwrap_or_else(|_| FALLBACK_FONT.to_vec()); | ||||||
| 
 | 
 | ||||||
|         let draw_brush = |         let load_glyph_brush = |font: Vec<u8>| { | ||||||
|  |             let builder = | ||||||
|                 wgpu_glyph::GlyphBrushBuilder::using_fonts_bytes(vec![ |                 wgpu_glyph::GlyphBrushBuilder::using_fonts_bytes(vec![ | ||||||
|                 mono_font, |                     mono_font.clone(), | ||||||
|                 default_font.clone(), |                     font.clone(), | ||||||
|             ]) |                 ])?; | ||||||
|  | 
 | ||||||
|  |             Ok(( | ||||||
|  |                 builder, | ||||||
|  |                 glyph_brush::GlyphBrushBuilder::using_font_bytes(font).build(), | ||||||
|  |             )) | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         let (brush_builder, measure_brush) = load_glyph_brush(default_font) | ||||||
|  |             .unwrap_or_else(|_: wgpu_glyph::rusttype::Error| { | ||||||
|  |                 log::warn!("System font failed to load. Falling back to embedded font..."); | ||||||
|  | 
 | ||||||
|  |                 load_glyph_brush(FALLBACK_FONT.to_vec()).expect("Load fallback font") | ||||||
|  |             }); | ||||||
|  | 
 | ||||||
|  |         let draw_brush = brush_builder | ||||||
|             .initial_cache_size((2048, 2048)) |             .initial_cache_size((2048, 2048)) | ||||||
|             .build(device, wgpu::TextureFormat::Bgra8UnormSrgb); |             .build(device, wgpu::TextureFormat::Bgra8UnormSrgb); | ||||||
| 
 | 
 | ||||||
|         let measure_brush = |  | ||||||
|             glyph_brush::GlyphBrushBuilder::using_font_bytes(default_font) |  | ||||||
|                 .build(); |  | ||||||
| 
 |  | ||||||
|         Pipeline { |         Pipeline { | ||||||
|             draw_brush: RefCell::new(draw_brush), |             draw_brush: RefCell::new(draw_brush), | ||||||
|             draw_font_map: RefCell::new(HashMap::new()), |             draw_font_map: RefCell::new(HashMap::new()), | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user