aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2006-01-13 19:57:25 +0000
committerFelix Domke <tmbinc@elitedvb.net>2006-01-13 19:57:25 +0000
commit5d26224540dac9315066c52dc37197dbc8e0b24e (patch)
tree272d6e3abf6a56e77161a84bd35014954ed19c7e
parent76e2a3397cf1b137a5972a6f78ed383bebe3ba2f (diff)
downloadenigma2-5d26224540dac9315066c52dc37197dbc8e0b24e.tar.gz
enigma2-5d26224540dac9315066c52dc37197dbc8e0b24e.zip
allow forcing replacement font for some glyphs
-rw-r--r--lib/gdi/font.cpp10
-rw-r--r--lib/gdi/font.h4
-rw-r--r--main/enigma.cpp10
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<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)
{
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 <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);
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));