@@ -1477,20 +1477,9 @@ bool ImFontAtlas::Build()
1477
1477
1478
1478
float ascent = unscaled_ascent * font_scale;
1479
1479
float descent = unscaled_descent * font_scale;
1480
- if (!cfg.MergeMode )
1481
- {
1482
- dst_font->ContainerAtlas = this ;
1483
- dst_font->ConfigData = &cfg;
1484
- dst_font->ConfigDataCount = 0 ;
1485
- dst_font->FontSize = cfg.SizePixels ;
1486
- dst_font->Ascent = ascent;
1487
- dst_font->Descent = descent;
1488
- dst_font->Glyphs .resize (0 );
1489
- dst_font->MetricsTotalSurface = 0 ;
1490
- }
1491
- dst_font->ConfigDataCount ++;
1480
+ ImFontAtlasBuildSetupFont (this , dst_font, &cfg, ascent, descent);
1492
1481
float off_x = cfg.GlyphOffset .x ;
1493
- float off_y = cfg.GlyphOffset .y ;
1482
+ float off_y = cfg.GlyphOffset .y + ( float )( int )(dst_font-> Ascent + 0 . 5f ) ;
1494
1483
1495
1484
dst_font->FallbackGlyph = NULL ; // Always clear fallback so FindGlyph can return NULL. It will be set again in BuildLookupTable()
1496
1485
for (int i = 0 ; i < tmp.RangesCount ; i++)
@@ -1513,11 +1502,16 @@ bool ImFontAtlas::Build()
1513
1502
dst_font->Glyphs .resize (dst_font->Glyphs .Size + 1 );
1514
1503
ImFont::Glyph& glyph = dst_font->Glyphs .back ();
1515
1504
glyph.Codepoint = (ImWchar)codepoint;
1516
- glyph.X0 = q.x0 + off_x; glyph.Y0 = q.y0 + off_y; glyph.X1 = q.x1 + off_x; glyph.Y1 = q.y1 + off_y;
1517
- glyph.U0 = q.s0 ; glyph.V0 = q.t0 ; glyph.U1 = q.s1 ; glyph.V1 = q.t1 ;
1518
- glyph.Y0 += (float )(int )(dst_font->Ascent + 0 .5f );
1519
- glyph.Y1 += (float )(int )(dst_font->Ascent + 0 .5f );
1505
+ glyph.X0 = q.x0 + off_x;
1506
+ glyph.Y0 = q.y0 + off_y;
1507
+ glyph.X1 = q.x1 + off_x;
1508
+ glyph.Y1 = q.y1 + off_y;
1509
+ glyph.U0 = q.s0 ;
1510
+ glyph.V0 = q.t0 ;
1511
+ glyph.U1 = q.s1 ;
1512
+ glyph.V1 = q.t1 ;
1520
1513
glyph.XAdvance = (pc.xadvance + cfg.GlyphExtraSpacing .x ); // Bake spacing into XAdvance
1514
+
1521
1515
if (cfg.PixelSnapH )
1522
1516
glyph.XAdvance = (float )(int )(glyph.XAdvance + 0 .5f );
1523
1517
dst_font->MetricsTotalSurface += (int )((glyph.U1 - glyph.U0 ) * TexWidth + 1 .99f ) * (int )((glyph.V1 - glyph.V0 ) * TexHeight + 1 .99f ); // +1 to account for average padding, +0.99 to round
@@ -1544,6 +1538,22 @@ void ImFontAtlasBuildRegisterDefaultCustomRects(ImFontAtlas* atlas)
1544
1538
atlas->CustomRectRegister (FONT_ATLAS_DEFAULT_TEX_DATA_ID, FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF*2 +1 , FONT_ATLAS_DEFAULT_TEX_DATA_H);
1545
1539
}
1546
1540
1541
+ void ImFontAtlasBuildSetupFont (ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent)
1542
+ {
1543
+ if (!font_config->MergeMode )
1544
+ {
1545
+ font->ContainerAtlas = atlas;
1546
+ font->ConfigData = font_config;
1547
+ font->ConfigDataCount = 0 ;
1548
+ font->FontSize = font_config->SizePixels ;
1549
+ font->Ascent = ascent;
1550
+ font->Descent = descent;
1551
+ font->Glyphs .resize (0 );
1552
+ font->MetricsTotalSurface = 0 ;
1553
+ }
1554
+ font->ConfigDataCount ++;
1555
+ }
1556
+
1547
1557
void ImFontAtlasBuildPackCustomRects (ImFontAtlas* atlas, void * pack_context_opaque)
1548
1558
{
1549
1559
stbrp_context* pack_context = (stbrp_context*)pack_context_opaque;
0 commit comments