X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/a1a9522c1bf4d5e785dd92bc9321420d4c8a90f2..1bc2bfe02d8c6b79b9202471feb13af7f1379372:/skin.py diff --git a/skin.py b/skin.py index 21839435..13d56cf1 100644 --- a/skin.py +++ b/skin.py @@ -1,12 +1,10 @@ import xml.dom.minidom -from xml.dom import EMPTY_NAMESPACE from os import path from enigma import eSize, ePoint, gFont, eWindow, eLabel, ePixmap, eWindowStyleManager, \ loadPNG, addFont, gRGB, eWindowStyleSkinned from Components.config import ConfigSubsection, ConfigText, config -from Components.Element import Element from Components.Converter.Converter import Converter from Tools.Directories import resolveFilename, SCOPE_SKIN, SCOPE_SKIN_IMAGE, SCOPE_FONTS from Tools.Import import my_import @@ -54,7 +52,7 @@ config.skin.primary_skin = ConfigText(default = "skin.xml") try: loadSkin(config.skin.primary_skin.value) -except (SkinError, IOError), err: +except (SkinError, IOError, AssertionError), err: print "SKIN ERROR:", err print "defaulting to standard skin..." loadSkin('skin.xml') @@ -90,7 +88,7 @@ def collectAttributes(skinAttributes, node, skin_path_prefix=None, ignore=[]): # TODO: localization? as in e1? value = a.value.encode("utf-8") - if attrib in ["pixmap", "pointer", "seek_pointer"]: + if attrib in ["pixmap", "pointer", "seek_pointer", "backgroundPixmap", "selectionPixmap"]: value = resolveFilename(SCOPE_SKIN_IMAGE, value, path_prefix=skin_path_prefix) if attrib not in ignore: @@ -117,11 +115,15 @@ def applySingleAttribute(guiObject, desktop, attrib, value): guiObject.setFont(parseFont(value)) elif attrib == 'zPosition': guiObject.setZPosition(int(value)) - elif attrib == "pixmap": + elif attrib in ["pixmap", "backgroundPixmap", "selectionPixmap"]: ptr = loadPixmap(value) # this should already have been filename-resolved. - # that __deref__ still scares me! - desktop.makeCompatiblePixmap(ptr.__deref__()) - guiObject.setPixmap(ptr.__deref__()) + desktop.makeCompatiblePixmap(ptr) + if attrib == "pixmap": + guiObject.setPixmap(ptr) + elif attrib == "backgroundPixmap": + guiObject.setBackgroundPicture(ptr) + elif attrib == "selectionPixmap": + guiObject.setSelectionPicture(ptr) # guiObject.setPixmapFromFile(value) elif attrib == "alphatest": # used by ePixmap guiObject.setAlphatest( @@ -189,8 +191,8 @@ def applySingleAttribute(guiObject, desktop, attrib, value): (name, pos) = value.split(':') pos = parsePosition(pos) ptr = loadPixmap(name) - desktop.makeCompatiblePixmap(ptr.__deref__()) - guiObject.setPointer({"pointer": 0, "seek_pointer": 1}[attrib], ptr.__deref__(), pos) + desktop.makeCompatiblePixmap(ptr) + guiObject.setPointer({"pointer": 0, "seek_pointer": 1}[attrib], ptr, pos) elif attrib == 'shadowOffset': guiObject.setShadowOffset(parsePosition(value)) elif attrib == 'noWrap': @@ -253,8 +255,8 @@ def loadSingleSkinData(desktop, dom_skin, path_prefix): png = loadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, filename, path_prefix=path_prefix)) # adapt palette - desktop.makeCompatiblePixmap(png.__deref__()) - style.setPixmap(eWindowStyleSkinned.__dict__[bsName], eWindowStyleSkinned.__dict__[bpName], png.__deref__()) + desktop.makeCompatiblePixmap(png) + style.setPixmap(eWindowStyleSkinned.__dict__[bsName], eWindowStyleSkinned.__dict__[bpName], png) for color in elementsWithTag(windowstyle.childNodes, "color"): type = str(color.getAttribute("name")) @@ -284,9 +286,15 @@ def lookupScreen(name): return None, None def readSkin(screen, skin, name, desktop): - - myscreen, path = lookupScreen(name) - + if not isinstance(name, list): + name = [name] + + # try all skins, first existing one have priority + for n in name: + myscreen, path = lookupScreen(n) + if myscreen is not None: + break + # otherwise try embedded skin myscreen = myscreen or getattr(screen, "parsedSkin", None) @@ -294,7 +302,7 @@ def readSkin(screen, skin, name, desktop): if myscreen is None and getattr(screen, "skin", None): myscreen = screen.parsedSkin = xml.dom.minidom.parseString(screen.skin).childNodes[0] - assert myscreen is not None, "no skin for screen '" + name + "' found!" + assert myscreen is not None, "no skin for screen '" + repr(name) + "' found!" screen.skinAttributes = [ ]