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