diff options
| -rw-r--r-- | data/skin.xml | 5 | ||||
| -rw-r--r-- | lib/python/enigma_python.i | 8 | ||||
| -rw-r--r-- | main/enigma.cpp | 13 | ||||
| -rw-r--r-- | skin.py | 13 |
4 files changed, 32 insertions, 7 deletions
diff --git a/data/skin.xml b/data/skin.xml index 995c51a7..fa6cadeb 100644 --- a/data/skin.xml +++ b/data/skin.xml @@ -38,6 +38,11 @@ </borderset> </windowstyle> + <fonts> + <font filename="md_khmurabi_10.ttf" name="Regular" scale="100" /> + <font filename="ae_AlMateen.ttf" name="Replacement" scale="90" is_replacement="1" /> + </fonts> + <screen name="InfoBar" flags="wfNoBorder" position="0,380" size="720,148" title="InfoBar"> <ePixmap position="0,0" zPosition="-1" size="720,148" pixmap="info-bg.png" /> diff --git a/lib/python/enigma_python.i b/lib/python/enigma_python.i index 04134636..eee5ef00 100644 --- a/lib/python/enigma_python.i +++ b/lib/python/enigma_python.i @@ -242,6 +242,14 @@ public: PyObject *get(); }; +/************** temp *****************/ + + /* need a better place for this, i agree. */ +%{ +void addFont(const char *filename, const char *alias, int scale_factor, int is_replacement); +%} +void addFont(const char *filename, const char *alias, int scale_factor, int is_replacement); + /************** debug **************/ void runMainloop(); diff --git a/main/enigma.cpp b/main/enigma.cpp index 31b81a3f..f9b88e7f 100644 --- a/main/enigma.cpp +++ b/main/enigma.cpp @@ -140,10 +140,8 @@ int main(int argc, char **argv) ePtr<gLCDDC> my_lcd_dc; 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"); - + + /* ok, this is currently hardcoded for arabic. */ /* 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); @@ -226,3 +224,10 @@ void quitMainloop(int exitCode) exit_code = exitCode; eApp->quit(0); } + +void addFont(const char *filename, const char *alias, int scale_factor, int is_replacement) +{ + fontRenderClass::getInstance()->AddFont(filename, alias, scale_factor); + if (is_replacement) + eTextPara::setReplacementFont(alias); +} @@ -14,7 +14,7 @@ def dump(x, i=0): except: None -from Tools.Directories import resolveFilename, SCOPE_SKIN, SCOPE_SKIN_IMAGE +from Tools.Directories import resolveFilename, SCOPE_SKIN, SCOPE_SKIN_IMAGE, SCOPE_FONTS dom_skins = [ ] @@ -84,7 +84,7 @@ def applySingleAttribute(guiObject, desktop, attrib, value): elif attrib == "pixmap": ptr = loadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, value)) # that __deref__ still scares me! -# desktop.makeCompatiblePixmap(ptr.__deref__()) + desktop.makeCompatiblePixmap(ptr.__deref__()) guiObject.setPixmap(ptr.__deref__()) # guiObject.setPixmapFromFile(value) elif attrib == "alphatest": # used by ePixmap @@ -159,7 +159,6 @@ def applySingleAttribute(guiObject, desktop, attrib, value): guiObject.setShadowOffset(parsePosition(value)) elif attrib != 'name': print "unsupported attribute " + attrib + "=" + value - except int: # AttributeError: print "widget %s (%s) doesn't support attribute %s!" % ("", guiObject.__class__.__name__, attrib) @@ -184,6 +183,14 @@ def loadSingleSkinData(desktop, dom_skin): colorNames[name] = parseColor(color) + for c in elementsWithTag(skin.childNodes, "fonts"): + for font in elementsWithTag(c.childNodes, "font"): + filename = str(font.getAttribute("filename") or "<NONAME>") + name = str(font.getAttribute("name") or "Regular") + scale = int(font.getAttribute("scale") or "100") + is_replacement = font.getAttribute("replacement") != "" + addFont(resolveFilename(SCOPE_FONTS, filename), name, scale, is_replacement) + for windowstyle in elementsWithTag(skin.childNodes, "windowstyle"): style = eWindowStyleSkinned() |
