Абзац 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

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