@@ -363,8 +363,8 @@ namespace Gui
363
363
Point bottom_right;
364
364
float width;
365
365
float height;
366
- float u2; // appears unused, always 0
367
- float kerning ;
366
+ float kerningLeft;
367
+ float kerningRight ;
368
368
float ascent;
369
369
} GlyphInfo;
370
370
@@ -570,6 +570,12 @@ namespace Gui
570
570
additional.emplace (69 , 0x0401 ); // Ё (Cyrillic Capital Letter Io) => E (latin capital E)
571
571
additional.emplace (137 , 0x0451 ); // ё (Cyrillic Small Letter Io) => ë (latin small E-diaeresis)
572
572
573
+ // ASCII vertical bar, use this as text input cursor
574
+ additional.emplace (124 , MyGUI::FontCodeType::Cursor);
575
+
576
+ // Underscore, use for NotDefined marker (used for glyphs not existing in the font)
577
+ additional.emplace (95 , MyGUI::FontCodeType::NotDefined);
578
+
573
579
for (int i = 0 ; i < 256 ; i++)
574
580
{
575
581
float x1 = data[i].top_left .x * width;
@@ -579,64 +585,31 @@ namespace Gui
579
585
580
586
ToUTF8::Utf8Encoder encoder (mEncoding );
581
587
unsigned long unicodeVal = getUnicode (i, encoder, mEncoding );
588
+ const std::string coord = MyGUI::utility::toString (x1) + " " + MyGUI::utility::toString (y1 ) + " "
589
+ + MyGUI::utility::toString (w) + " " + MyGUI::utility::toString (h);
590
+ float advance = data[i].width + data[i].kerningRight ;
591
+ // Yes MyGUI, we really do want an advance of 0 sometimes, thank you.
592
+ if (advance == 0 .f && data[i].width != 0 .f )
593
+ advance = std::numeric_limits<float >::min ();
594
+ const std::string bearing = MyGUI::utility::toString (data[i].kerningLeft ) + ' '
595
+ + MyGUI::utility::toString ((fontSize - data[i].ascent ));
596
+ const MyGUI::IntSize size (static_cast <int >(data[i].width ), static_cast <int >(data[i].height ));
582
597
583
598
MyGUI::xml::ElementPtr code = codes->createChild (" Code" );
584
599
code->addAttribute (" index" , unicodeVal);
585
- code->addAttribute (" coord" ,
586
- MyGUI::utility::toString (x1) + " " + MyGUI::utility::toString (y1 ) + " " + MyGUI::utility::toString (w)
587
- + " " + MyGUI::utility::toString (h));
588
- code->addAttribute (" advance" , data[i].width );
589
- code->addAttribute (" bearing" ,
590
- MyGUI::utility::toString (data[i].kerning ) + " "
591
- + MyGUI::utility::toString ((fontSize - data[i].ascent )));
592
- code->addAttribute (
593
- " size" , MyGUI::IntSize (static_cast <int >(data[i].width ), static_cast <int >(data[i].height )));
600
+ code->addAttribute (" coord" , coord);
601
+ code->addAttribute (" advance" , advance);
602
+ code->addAttribute (" bearing" , bearing);
603
+ code->addAttribute (" size" , size);
594
604
595
605
for (auto [it, end] = additional.equal_range (i); it != end; ++it)
596
606
{
597
607
code = codes->createChild (" Code" );
598
608
code->addAttribute (" index" , it->second );
599
- code->addAttribute (" coord" ,
600
- MyGUI::utility::toString (x1) + " " + MyGUI::utility::toString (y1 ) + " "
601
- + MyGUI::utility::toString (w) + " " + MyGUI::utility::toString (h));
602
- code->addAttribute (" advance" , data[i].width );
603
- code->addAttribute (" bearing" ,
604
- MyGUI::utility::toString (data[i].kerning ) + " "
605
- + MyGUI::utility::toString ((fontSize - data[i].ascent )));
606
- code->addAttribute (
607
- " size" , MyGUI::IntSize (static_cast <int >(data[i].width ), static_cast <int >(data[i].height )));
608
- }
609
-
610
- // ASCII vertical bar, use this as text input cursor
611
- if (i == 124 )
612
- {
613
- MyGUI::xml::ElementPtr cursorCode = codes->createChild (" Code" );
614
- cursorCode->addAttribute (" index" , MyGUI::FontCodeType::Cursor);
615
- cursorCode->addAttribute (" coord" ,
616
- MyGUI::utility::toString (x1) + " " + MyGUI::utility::toString (y1 ) + " "
617
- + MyGUI::utility::toString (w) + " " + MyGUI::utility::toString (h));
618
- cursorCode->addAttribute (" advance" , data[i].width );
619
- cursorCode->addAttribute (" bearing" ,
620
- MyGUI::utility::toString (data[i].kerning ) + " "
621
- + MyGUI::utility::toString ((fontSize - data[i].ascent )));
622
- cursorCode->addAttribute (
623
- " size" , MyGUI::IntSize (static_cast <int >(data[i].width ), static_cast <int >(data[i].height )));
624
- }
625
-
626
- // Underscore, use for NotDefined marker (used for glyphs not existing in the font)
627
- if (i == 95 )
628
- {
629
- MyGUI::xml::ElementPtr cursorCode = codes->createChild (" Code" );
630
- cursorCode->addAttribute (" index" , MyGUI::FontCodeType::NotDefined);
631
- cursorCode->addAttribute (" coord" ,
632
- MyGUI::utility::toString (x1) + " " + MyGUI::utility::toString (y1 ) + " "
633
- + MyGUI::utility::toString (w) + " " + MyGUI::utility::toString (h));
634
- cursorCode->addAttribute (" advance" , data[i].width );
635
- cursorCode->addAttribute (" bearing" ,
636
- MyGUI::utility::toString (data[i].kerning ) + " "
637
- + MyGUI::utility::toString ((fontSize - data[i].ascent )));
638
- cursorCode->addAttribute (
639
- " size" , MyGUI::IntSize (static_cast <int >(data[i].width ), static_cast <int >(data[i].height )));
609
+ code->addAttribute (" coord" , coord);
610
+ code->addAttribute (" advance" , advance);
611
+ code->addAttribute (" bearing" , bearing);
612
+ code->addAttribute (" size" , size);
640
613
}
641
614
}
642
615
@@ -645,12 +618,12 @@ namespace Gui
645
618
omitted.push_back (MyGUI::FontCodeType::SelectedBack);
646
619
for (const UnicodeIndex index : omitted)
647
620
{
648
- MyGUI::xml::ElementPtr cursorCode = codes->createChild (" Code" );
649
- cursorCode ->addAttribute (" index" , index );
650
- cursorCode ->addAttribute (" coord" , " 0 0 0 0" );
651
- cursorCode ->addAttribute (" advance" , " 0" );
652
- cursorCode ->addAttribute (" bearing" , " 0 0" );
653
- cursorCode ->addAttribute (" size" , " 0 0" );
621
+ MyGUI::xml::ElementPtr code = codes->createChild (" Code" );
622
+ code ->addAttribute (" index" , index );
623
+ code ->addAttribute (" coord" , " 0 0 0 0" );
624
+ code ->addAttribute (" advance" , " 0" );
625
+ code ->addAttribute (" bearing" , " 0 0" );
626
+ code ->addAttribute (" size" , " 0 0" );
654
627
}
655
628
656
629
// Register the font with MyGUI
0 commit comments