@ -2688,13 +2688,22 @@ Dictionary TextServerAdvanced::font_get_glyph_contours(const RID &p_font_rid, in
|
||||
int error = FT_Load_Glyph(fd->cache[size]->face, index, FT_LOAD_NO_BITMAP | (fd->force_autohinter ? FT_LOAD_FORCE_AUTOHINT : 0));
|
||||
ERR_FAIL_COND_V(error, Dictionary());
|
||||
|
||||
double h = fd->cache[size]->ascent;
|
||||
if (fd->embolden != 0.f) {
|
||||
FT_Pos strength = fd->embolden * p_size * 4; // 26.6 fractional units (1 / 64).
|
||||
FT_Outline_Embolden(&fd->cache[size]->face->glyph->outline, strength);
|
||||
}
|
||||
|
||||
if (fd->transform != Transform2D()) {
|
||||
FT_Matrix mat = { FT_Fixed(fd->transform[0][0] * 65536), FT_Fixed(fd->transform[0][1] * 65536), FT_Fixed(fd->transform[1][0] * 65536), FT_Fixed(fd->transform[1][1] * 65536) }; // 16.16 fractional units (1 / 65536).
|
||||
FT_Outline_Transform(&fd->cache[size]->face->glyph->outline, &mat);
|
||||
}
|
||||
|
||||
double scale = (1.0 / 64.0) / fd->cache[size]->oversampling * fd->cache[size]->scale;
|
||||
if (fd->msdf) {
|
||||
scale = scale * (double)p_size / (double)fd->msdf_source_size;
|
||||
}
|
||||
for (short i = 0; i < fd->cache[size]->face->glyph->outline.n_points; i++) {
|
||||
points.push_back(Vector3(fd->cache[size]->face->glyph->outline.points[i].x * scale, h - fd->cache[size]->face->glyph->outline.points[i].y * scale, FT_CURVE_TAG(fd->cache[size]->face->glyph->outline.tags[i])));
|
||||
points.push_back(Vector3(fd->cache[size]->face->glyph->outline.points[i].x * scale, -fd->cache[size]->face->glyph->outline.points[i].y * scale, FT_CURVE_TAG(fd->cache[size]->face->glyph->outline.tags[i])));
|
||||
}
|
||||
for (short i = 0; i < fd->cache[size]->face->glyph->outline.n_contours; i++) {
|
||||
contours.push_back(fd->cache[size]->face->glyph->outline.contours[i]);
|
||||
|
||||
Reference in New Issue
Block a user