X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/9248bf86cddef4cf3904748bcd94ddabef68f8c7..0923ac50c8dc0d3f77363adb093b6e7e29f030ed:/skin.py diff --git a/skin.py b/skin.py index cb433269..d40c593b 100644 --- a/skin.py +++ b/skin.py @@ -1,13 +1,12 @@ 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 Components.Sources.Source import Source from Tools.Directories import resolveFilename, SCOPE_SKIN, SCOPE_SKIN_IMAGE, SCOPE_FONTS from Tools.Import import my_import @@ -15,6 +14,9 @@ from Tools.XMLTools import elementsWithTag, mergeText colorNames = dict() +def queryColor(colorName): + return colorNames.get(colorName) + def dump(x, i=0): print " " * i + str(x) try: @@ -90,7 +92,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,10 +119,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. desktop.makeCompatiblePixmap(ptr) - guiObject.setPixmap(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( @@ -283,9 +290,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) @@ -293,7 +306,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 = [ ] @@ -336,7 +349,13 @@ def readSkin(screen, skin, name, desktop): # get corresponding source source = screen.get(wsource) if source is None: - raise SkinError("source '" + wsource + "' was not found in screen '" + name + "'!") + if wsource == "fake": + if screen.get("fake"): + raise SkinError("screen '" + name + "has a element named 'fake' but its not a Source!!") + source = Source() + screen["fake"] = source + else: + raise SkinError("source '" + wsource + "' was not found in screen '" + name + "'!") wrender = widget.getAttribute('render')