Подтвердить что ты не робот

Встраивание шрифтов в JUCE

Я ищу простое пошаговое решение для встраивания шрифтов в JUCE.

У меня возникли проблемы с встраиванием шрифтов в мое приложение (полностью забыл поместить время в это до выхода приложения, и теперь мое приложение не отображает мой шрифт в пользовательских системах - понятно).

Я искал и следил за всеми сообщениями по этому вопросу, но у меня все еще есть проблемы. Я хотел бы добавить встроенный шрифт в метки, уже присутствующие в моем приложении, которые мы создали и выложили через компонент GUI ProJucer.

Что я сделал до сих пор:

1) Добавил шрифт в мой сеанс ProJucer, чтобы он добавился в BinaryData​​p >

2) Создал класс, который я назвал "EmbeddedFont:"

#include "../JuceLibraryCode/JuceHeader.h"

class EmbeddedFonts
{
private:
    Font calistoMT;

public:
    EmbeddedFonts();
    Font& getCalistoMT();
};

и

EmbeddedFonts::EmbeddedFonts()
{
    // in the line below is where I'm getting the assertion error: jassert (typefaceName.isNotEmpty());
    calistoMT = Font(Typeface::createSystemTypefaceFor(BinaryData::Calisto_MT,
                                                       BinaryData::Calisto_MTSize));
}

Font& EmbeddedFonts::getCalistoMT()
{
    return calistoMT;
}

3) Сделал экземпляр этого в заголовке моего компонента компонента GUI 4) Пробовал передать этот шрифт шрифту метки:

genericLabelName->setFont(embeddedFont.getCalistoMT());

Не совсем уверен, что делать дальше. Кроме того, после того, как я получу встроенный шрифт для работы, есть ли что-то конкретное, что я должен делать с полем шрифта в компоненте GUI projucer? Должен ли я просто установить его на тот же шрифт? Я только спрашиваю, потому что я технически буду устанавливать шрифт дважды в конструкторе (один раз из раскрывающегося меню "Параметры компонента GUI" и один раз из ручного кодирования встроенного шрифта).

Я пробовал это в течение нескольких дней и все еще испытываю проблемы. Спасибо за любую помощь. Это последнее, что мне нужно сделать, прежде чем выпустить мое следующее обновление приложения, поэтому вам будет очень благодарна любая помощь.

4b9b3361

Ответ 1

Поскольку похоже, что вы делаете что-то правильно на стороне JUCE, я считаю, что файл шрифта, который вы пытаетесь загрузить, не имеет имени, связанного с ним. Я бы попробовал следующее:

  • Проверьте имя Typeface, возвращенный из вашего вызова createSystemTypefaceFor, прежде чем передать его конструктору Font. Я считаю, что он должен иметь getName() или аналогичный вызов, чтобы получить свое имя. Если это имя пуст (и я ожидаю, что это будет, учитывая ваше утверждение), там ваша проблема.

  • Вы можете попробовать загрузить программу просмотра TTF файлов, которая может предоставить вам некоторую информацию о том файле, который вы пытаетесь загрузить. Он также может указать, имеет ли шрифт, который вы читаете, имя в это или нет. Если у него есть имя в своих метаданных, это может указывать на ошибку в библиотеке JUCE.

  • Вы можете попробовать загрузить другой шрифт или разные шрифты, которые, как вы знаете, имеют правильное имя в метаданных (потому что вы отметили какой-то просмотрщик или инструмент) и посмотрите, создан ли для них шрифт имеет заданное имя и, если да, попробуйте создать Font с одного из этих шрифтов и посмотреть, удастся ли ему это сделать.

Если загруженный на самом деле тип шрифта имеет заданное имя, то эта теория выходит из окна, но я все равно попытаюсь сделать третий шаг и посмотрю, всегда ли вы получите эту ошибку с каждым шрифтом или если она ограничена тот самый.