desktop: Use suitable CJK fonts for each language on Windows
This commit is contained in:
parent
57ede6e1f2
commit
c60742428c
|
@ -1667,6 +1667,19 @@ version = "1.0.7"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
||||
|
||||
[[package]]
|
||||
name = "fontdb"
|
||||
version = "0.14.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "af8d8cbea8f21307d7e84bca254772981296f058a1d36b461bf4d83a7499fc9e"
|
||||
dependencies = [
|
||||
"log",
|
||||
"memmap2 0.6.2",
|
||||
"slotmap",
|
||||
"tinyvec",
|
||||
"ttf-parser",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "foreign-types"
|
||||
version = "0.3.2"
|
||||
|
@ -2733,6 +2746,15 @@ dependencies = [
|
|||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "memmap2"
|
||||
version = "0.6.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "memoffset"
|
||||
version = "0.6.5"
|
||||
|
@ -3843,6 +3865,7 @@ dependencies = [
|
|||
"egui-winit",
|
||||
"embed-resource",
|
||||
"fluent-templates",
|
||||
"fontdb",
|
||||
"futures",
|
||||
"generational-arena",
|
||||
"isahc",
|
||||
|
@ -4202,7 +4225,7 @@ checksum = "cda4e97be1fd174ccc2aae81c8b694e803fa99b34e8fd0f057a9d70698e3ed09"
|
|||
dependencies = [
|
||||
"ab_glyph",
|
||||
"log",
|
||||
"memmap2",
|
||||
"memmap2 0.5.10",
|
||||
"smithay-client-toolkit",
|
||||
"tiny-skia",
|
||||
]
|
||||
|
@ -4379,7 +4402,7 @@ dependencies = [
|
|||
"dlib",
|
||||
"lazy_static",
|
||||
"log",
|
||||
"memmap2",
|
||||
"memmap2 0.5.10",
|
||||
"nix 0.24.3",
|
||||
"pkg-config",
|
||||
"wayland-client",
|
||||
|
|
|
@ -14,6 +14,7 @@ use ruffle_render_wgpu::utils::{format_list, get_backend_names};
|
|||
use std::rc::Rc;
|
||||
use std::sync::{Arc, MutexGuard};
|
||||
use std::time::{Duration, Instant};
|
||||
use unic_langid::LanguageIdentifier;
|
||||
use url::Url;
|
||||
use winit::dpi::PhysicalSize;
|
||||
use winit::event_loop::EventLoop;
|
||||
|
@ -83,9 +84,7 @@ impl GuiController {
|
|||
},
|
||||
);
|
||||
let descriptors = Descriptors::new(adapter, device, queue);
|
||||
let system_fonts = load_system_fonts().unwrap_or_default();
|
||||
let egui_ctx = Context::default();
|
||||
egui_ctx.set_fonts(system_fonts);
|
||||
if let Some(Theme::Light) = window.theme() {
|
||||
egui_ctx.set_visuals(egui::Visuals::light());
|
||||
}
|
||||
|
@ -104,6 +103,8 @@ impl GuiController {
|
|||
let egui_renderer = egui_wgpu::Renderer::new(&descriptors.device, surface_format, None, 1);
|
||||
let event_loop = event_loop.create_proxy();
|
||||
let gui = RuffleGui::new(event_loop, opt.movie_url.clone(), PlayerOptions::from(opt));
|
||||
let system_fonts = load_system_fonts(gui.locale.to_owned()).unwrap_or_default();
|
||||
egui_ctx.set_fonts(system_fonts);
|
||||
Ok(Self {
|
||||
descriptors: Arc::new(descriptors),
|
||||
egui_ctx,
|
||||
|
@ -316,17 +317,33 @@ impl GuiController {
|
|||
}
|
||||
|
||||
// try to load known unicode supporting fonts to draw cjk characters in egui
|
||||
fn load_system_fonts() -> anyhow::Result<egui::FontDefinitions> {
|
||||
fn load_system_fonts(locale: LanguageIdentifier) -> anyhow::Result<egui::FontDefinitions> {
|
||||
let mut font_database = Database::default();
|
||||
font_database.load_system_fonts();
|
||||
|
||||
let system_unicode_fonts = Query {
|
||||
families: &[
|
||||
Family::Name("MS UI Gothic"), // windows
|
||||
let mut families = Vec::new();
|
||||
if let Some(windows_font) = match locale.language.as_str() {
|
||||
"ja" => Some(Family::Name("MS UI Gothic")),
|
||||
"zh" => Some(match locale.to_string().as_str() {
|
||||
"zh-CN" => Family::Name("Microsoft YaHei"),
|
||||
_ => Family::Name("Microsoft JhengHei"),
|
||||
}),
|
||||
"ko" => Some(Family::Name("Malgun Gothic")),
|
||||
_ => None,
|
||||
} {
|
||||
families.push(windows_font);
|
||||
}
|
||||
families.extend(
|
||||
[
|
||||
Family::Name("Arial Unicode MS"), // macos
|
||||
Family::Name("Noto Sans"), // linux
|
||||
Family::SansSerif,
|
||||
],
|
||||
]
|
||||
.iter(),
|
||||
);
|
||||
|
||||
let system_unicode_fonts = Query {
|
||||
families: &families,
|
||||
..Query::default()
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue