allow forcing replacement font for some glyphs
authorFelix Domke <tmbinc@elitedvb.net>
Fri, 13 Jan 2006 19:57:25 +0000 (19:57 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Fri, 13 Jan 2006 19:57:25 +0000 (19:57 +0000)
lib/gdi/font.cpp
lib/gdi/font.h
main/enigma.cpp

index b2df471..4c08b4f 100644 (file)
@@ -361,7 +361,7 @@ void eTextPara::calc_bbox()
        boundBox = i->bbox; 
        ++i;
 
-       for (; 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<int> 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)
                        {
index 7c8211b..b898391 100644 (file)
@@ -17,6 +17,8 @@
 #include <string>
 #include <lib/base/object.h> 
 
+#include <set>
+
 class FontRenderClass;
 class Font;
 class gDC;
@@ -98,6 +100,7 @@ private:
        int use_kerning;
        int previous;
        static std::string replacement_facename;
+       static std::set<int> 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);
index a3770b8..65ba405 100644 (file)
@@ -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));