Rust egui 한글 폰트 적용하기

wangki·2024년 12월 11일

rust_egui

목록 보기
4/4

설명

egui 초기 폰트가 한글을 지원하지 않는다. 따라서 한글 폰트를 설정해주어야 한다.

1.폰트 등록

  • 기본 폰트 정의 객체를 생성
  • 사용자 정의 폰트 추가
  • 폰트를 Proportional(비례) 폰트 패밀리에 추가
  • 폰트를 Monospace(고정 폭) 폰트 패밀리에 추가
  • 컨텍스트에 폰트 적용

위와같은 순서를 따른다.

구현된 코드이다.

fn replace_fonts(ctx : &egui::Context) {
    let mut fonts = egui::FontDefinitions::default();

    fonts.font_data.insert(
        "my_font".to_owned(), 
        std::sync::Arc::new(egui::FontData::from_static(include_bytes!(
            "../assets/NotoSansKR-Regular.ttf"
        ))),
    );

    fonts  
        .families
        .entry(egui::FontFamily::Proportional)
        .or_default()
        .insert(0, "my_font".to_owned());

    fonts  
        .families
        .entry(egui::FontFamily::Monospace)
        .or_default()
        .insert(0, "my_font".to_owned());

    ctx.set_fonts(fonts);
}

2. 폰트 적용

fn add_fonts(ctx : &egui::Context) {
    ctx.add_font(FontInsert::new(
        "my_font",
        egui::FontData::from_static(include_bytes!(
            "../assets/NotoSansKR-Regular.ttf"
        )),
        vec![
            InsertFontFamily {
                family: egui::FontFamily::Proportional,
                priority: egui::epaint::text::FontPriority::Highest,
            },
            InsertFontFamily {
                family: egui::FontFamily::Monospace,
                priority: egui::epaint::text::FontPriority::Lowest,
            },
        ],
    ));
}

3. 코드 적용

impl Dashboard {
    fn new(cc: &eframe::CreationContext<'_>) ->Self {
        replace_fonts(&cc.egui_ctx);
        add_fonts(&cc.egui_ctx);
        Self {}
    }
}

state의 new를 정의할 때 egui::Context를 매개변수로 받아서
replace_font와 add_font를 호출해주면 된다.

참조

https://docs.rs/egui/latest/egui/?search=add_font
https://github.com/emilk/egui

0개의 댓글