From 5d26224540dac9315066c52dc37197dbc8e0b24e Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 13 Jan 2006 19:57:25 +0000 Subject: [PATCH] allow forcing replacement font for some glyphs --- lib/gdi/font.cpp | 10 ++++++---- lib/gdi/font.h | 4 ++++ main/enigma.cpp | 10 ++++++++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/lib/gdi/font.cpp b/lib/gdi/font.cpp index b2df471b..4c08b4fc 100644 --- a/lib/gdi/font.cpp +++ b/lib/gdi/font.cpp @@ -361,7 +361,7 @@ void eTextPara::calc_bbox() boundBox = i->bbox; ++i; - for (i ; i != glyphs.end(); ++i) + for (; i != glyphs.end(); ++i) { if ( i->flags & GS_ISSPACE ) continue; @@ -406,6 +406,7 @@ void eTextPara::setFont(const gFont *font) } std::string eTextPara::replacement_facename; +std::set eTextPara::forced_replaces; void eTextPara::setFont(Font *fnt, Font *replacement) { @@ -587,9 +588,10 @@ nprint: isprintable=0; } if (isprintable) { - FT_UInt index; - - index=(rflags&RS_DIRECT)? *i : FT_Get_Char_Index(current_face, *i); + FT_UInt index = 0; + + if (forced_replaces.find(*i) == forced_replaces.end()) + index=(rflags&RS_DIRECT)? *i : FT_Get_Char_Index(current_face, *i); if (!index) { diff --git a/lib/gdi/font.h b/lib/gdi/font.h index 7c8211b8..b8983914 100644 --- a/lib/gdi/font.h +++ b/lib/gdi/font.h @@ -17,6 +17,8 @@ #include #include +#include + class FontRenderClass; class Font; class gDC; @@ -98,6 +100,7 @@ private: int use_kerning; int previous; static std::string replacement_facename; + static std::set forced_replaces; eRect area; ePoint cursor; @@ -120,6 +123,7 @@ public: virtual ~eTextPara(); static void setReplacementFont(std::string font) { replacement_facename=font; } + static void forceReplacementGlyph(int unicode) { forced_replaces.insert(unicode); } void setFont(const gFont *font); int renderString(const std::string &string, int flags=0); diff --git a/main/enigma.cpp b/main/enigma.cpp index a3770b86..65ba4050 100644 --- a/main/enigma.cpp +++ b/main/enigma.cpp @@ -174,6 +174,16 @@ int main(int argc, char **argv) gLCDDC::getInstance(my_lcd_dc); fontRenderClass::getInstance()->AddFont(FONTDIR "/md_khmurabi_10.ttf", "Regular", 100); + fontRenderClass::getInstance()->AddFont(FONTDIR "/ae_AlMateen.ttf", "Replacement", 90); + eTextPara::setReplacementFont("Replacement"); + + /* some characters are wrong in the regular font, force them to use the replacement font */ + for (int i = 0x60c; i <= 0x66d; ++i) + eTextPara::forceReplacementGlyph(i); + eTextPara::forceReplacementGlyph(0xfdf2); + for (int i = 0xfe80; i < 0xff00; ++i) + eTextPara::forceReplacementGlyph(i); + eWidgetDesktop dsk(eSize(720, 576)); eWidgetDesktop dsk_lcd(eSize(132, 64)); -- 2.30.2