Абзац Skia не имеет четкой толщины шрифта.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Абзац Skia не имеет четкой толщины шрифта.

Сообщение Anonymous »

Абзац имеет только три веса в зависимости от используемого бэкэнда.
В Windows с прямой записью:
от 100 до 500 — тонкий
от 501 до 899 — толстый
от 900 — толще
В Linux с freetype и fontconfig:
от 100 до 549 — тонкий
от 550 до 899 толстый
по сравнению с 900 он толще
Как приложениям, зависящим от Skia, удается получить детализированную толщину шрифта?
Это пример, демонстрирующий проблему:

Код: Выделить всё

void draw(SkCanvas* canvas) {

skia::textlayout::ParagraphStyle paraStyle;

auto fontCollection = sk_make_sp();
fontCollection->setDefaultFontManager(fontMgr);

auto builder =  skia::textlayout::ParagraphBuilder::make(paraStyle, fontCollection);

skia::textlayout::TextStyle textStyle;
textStyle.setFontSize(24);
textStyle.setColor(SK_ColorBLACK);

textStyle.setFontStyle(SkFontStyle{300, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant});
builder->pushStyle(textStyle);
builder->addText("line 1\n");
textStyle.setFontStyle(SkFontStyle{400, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant});
builder->pushStyle(textStyle);
builder->addText("line 2\n");
textStyle.setFontStyle(SkFontStyle{500, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant});
builder->pushStyle(textStyle);
builder->addText("line 3\n");
textStyle.setFontStyle(SkFontStyle{600, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant});
builder->pushStyle(textStyle);
builder->addText("line 4\n");
textStyle.setFontStyle(SkFontStyle{700, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant});
builder->pushStyle(textStyle);
builder->addText("line 5\n");
textStyle.setFontStyle(SkFontStyle{800, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant});
builder->pushStyle(textStyle);
builder->addText("line 6\n");
textStyle.setFontStyle(SkFontStyle{900, SkFontStyle::kNormal_Width, SkFontStyle::kUpright_Slant});
builder->pushStyle(textStyle);
builder->addText("line 7\n");
builder->pop();
builder->pop();
builder->pop();
builder->pop();
builder->pop();
builder->pop();
builder->pop();
auto paragraph = builder->Build();

paragraph->layout(200);

paragraph->paint(canvas, SkScalar(0), SkScalar(0));

}
И скрипт для вывода:
https://fiddle.skia.org/c/b5b255306001f ... 3f3a51d799

Подробнее здесь: https://stackoverflow.com/questions/798 ... ont-weight
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»