C++ Вопрос Как сделать выбор шрифта в меню

std::X$$V::Z::_Func_impl_no_alloc
Пользователь
Статус
Оффлайн
Регистрация
30 Мар 2019
Сообщения
389
Реакции[?]
103
Поинты[?]
1K
  1. Пожалуйста, авторизуйтесь для просмотра ссылки.
  2. Если там используются окна, то перед отрисовкой PushFont, после PopFont. Если дровлисты, то там AddText перегружен и есть вариант с прямой передачей шрифта, но проще просто перед и после AddText пушнуть и попнуть шрифт.
Для выбора их в меню можешь пройтись по IO.Fonts и вывести все шрифты, но проще просто сделать отдельную мапу вида <std::string, ImFont*>, где первый элемент название шрифта, второй указатель на него, а потом в менюшке вывести названия
Сейчас простенький пример скину
 
std::X$$V::Z::_Func_impl_no_alloc
Пользователь
Статус
Оффлайн
Регистрация
30 Мар 2019
Сообщения
389
Реакции[?]
103
Поинты[?]
1K
C++:
//globals or settings
std::map<std::string, ImFont*> fonts_map;
ImFont* current_font = nullptr;

//where imgui is initialized
void init_fonts()
{
    ImGuiIO& io = ImGui::GetIO();
    fonts_map.emplace("font1", io.Fonts->AddFontFromFileTTF("font1.ttf", 13.f));
    fonts_map.emplace("font2", io.Fonts->AddFontFromFileTTF("font2.ttf", 13.f));
    fonts_map.emplace("font3", io.Fonts->AddFontFromFileTTF("font3.ttf", 13.f));
    current_font = fonts_map["font1"];
}


//menu
void draw_fonts_choice()
{
    if (BeginListBox("Font##CHOICE_FONT_FOR_WATERMARK"))
    {  
        for (auto [name, font] : fonts_map)
        {
            if (Selectable((name + "##CHOICE_FONT_FOR_WATERMARK_LIST_BOX").c_str(), *current_font == *font)) //*current_font == *font mb not exactly
                current_font = font;
        }
        EndListBox();
    }
}

//watermark
void draw_watermark()
{
    PushFont(current_font);

    //draw watermark

    PopFont();
}
Примерно так
Це цпп20 если что
 
Сверху Снизу