|
|
|
@ -2567,7 +2567,7 @@ static bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas) |
|
|
|
|
|
|
|
|
|
// Convert our ranges in the format stb_truetype wants
|
|
|
|
|
ImFontConfig& cfg = atlas->ConfigData[src_i]; |
|
|
|
|
src_tmp.PackRange.font_size = cfg.SizePixels; |
|
|
|
|
src_tmp.PackRange.font_size = cfg.SizePixels * cfg.RasterizerDensity; |
|
|
|
|
src_tmp.PackRange.first_unicode_codepoint_in_range = 0; |
|
|
|
|
src_tmp.PackRange.array_of_unicode_codepoints = src_tmp.GlyphsList.Data; |
|
|
|
|
src_tmp.PackRange.num_chars = src_tmp.GlyphsList.Size; |
|
|
|
@ -2576,7 +2576,7 @@ static bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas) |
|
|
|
|
src_tmp.PackRange.v_oversample = (unsigned char)cfg.OversampleV; |
|
|
|
|
|
|
|
|
|
// Gather the sizes of all rectangles we will need to pack (this loop is based on stbtt_PackFontRangesGatherRects)
|
|
|
|
|
const float scale = (cfg.SizePixels > 0) ? stbtt_ScaleForPixelHeight(&src_tmp.FontInfo, cfg.SizePixels) : stbtt_ScaleForMappingEmToPixels(&src_tmp.FontInfo, -cfg.SizePixels); |
|
|
|
|
const float scale = (cfg.SizePixels > 0) ? stbtt_ScaleForPixelHeight(&src_tmp.FontInfo, cfg.SizePixels * cfg.RasterizerDensity) : stbtt_ScaleForMappingEmToPixels(&src_tmp.FontInfo, -cfg.SizePixels * cfg.RasterizerDensity); |
|
|
|
|
const int padding = atlas->TexGlyphPadding; |
|
|
|
|
for (int glyph_i = 0; glyph_i < src_tmp.GlyphsList.Size; glyph_i++) |
|
|
|
|
{ |
|
|
|
@ -2678,6 +2678,8 @@ static bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas) |
|
|
|
|
const float font_off_x = cfg.GlyphOffset.x; |
|
|
|
|
const float font_off_y = cfg.GlyphOffset.y + IM_ROUND(dst_font->Ascent); |
|
|
|
|
|
|
|
|
|
const float inv_rasterization_scale = 1.0f / cfg.RasterizerDensity; |
|
|
|
|
|
|
|
|
|
for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++) |
|
|
|
|
{ |
|
|
|
|
// Register glyph
|
|
|
|
@ -2686,7 +2688,11 @@ static bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas) |
|
|
|
|
stbtt_aligned_quad q; |
|
|
|
|
float unused_x = 0.0f, unused_y = 0.0f; |
|
|
|
|
stbtt_GetPackedQuad(src_tmp.PackedChars, atlas->TexWidth, atlas->TexHeight, glyph_i, &unused_x, &unused_y, &q, 0); |
|
|
|
|
dst_font->AddGlyph(&cfg, (ImWchar)codepoint, q.x0 + font_off_x, q.y0 + font_off_y, q.x1 + font_off_x, q.y1 + font_off_y, q.s0, q.t0, q.s1, q.t1, pc.xadvance); |
|
|
|
|
float x0 = q.x0 * inv_rasterization_scale + font_off_x; |
|
|
|
|
float y0 = q.y0 * inv_rasterization_scale + font_off_y; |
|
|
|
|
float x1 = q.x1 * inv_rasterization_scale + font_off_x; |
|
|
|
|
float y1 = q.y1 * inv_rasterization_scale + font_off_y; |
|
|
|
|
dst_font->AddGlyph(&cfg, (ImWchar)codepoint, x0, y0, x1, y1, q.s0, q.t0, q.s1, q.t1, pc.xadvance * inv_rasterization_scale); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|