except:
None
-from Tools.Directories import resolveFilename, SCOPE_SKIN, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_SKIN, SCOPE_SKIN_IMAGE, SCOPE_FONTS
-# read the skin
-dom_skin = xml.dom.minidom.parse(resolveFilename(SCOPE_SKIN, 'skin.xml'))
-dom_skin_default = xml.dom.minidom.parse(resolveFilename(SCOPE_SKIN, 'skin_default.xml'))
+dom_skins = [ ]
+
+def loadSkin(name):
+ # read the skin
+ dom_skins.append(xml.dom.minidom.parse(resolveFilename(SCOPE_SKIN, name)))
+
+loadSkin('skin.xml')
+loadSkin('skin_default.xml')
def parsePosition(str):
x, y = str.split(',')
guiObject.setBackgroundColor(parseColor(value))
elif attrib == "foregroundColor":
guiObject.setForegroundColor(parseColor(value))
+ elif attrib == "shadowColor":
+ guiObject.setShadowColor(parseColor(value))
elif attrib == "selectionDisabled":
guiObject.setSelectionEnable(0)
elif attrib == "transparent":
ptr = loadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, name))
desktop.makeCompatiblePixmap(ptr.__deref__())
guiObject.setPointer(ptr.__deref__(), pos)
+ elif attrib == 'shadowOffset':
+ guiObject.setShadowOffset(parsePosition(value))
elif attrib != 'name':
print "unsupported attribute " + attrib + "=" + value
except int:
for (attrib, value) in attributes:
applySingleAttribute(guiObject, desktop, attrib, value)
-def loadSkin(desktop):
- print "loading skin..."
+def loadSingleSkinData(desktop, dom_skin):
+ """loads skin data like colors, windowstyle etc."""
skin = dom_skin.childNodes[0]
assert skin.tagName == "skin", "root element in skin must be '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()
- style.setTitleFont(gFont("Regular", 20));
- style.setTitleOffset(eSize(20, 5));
+ # defaults
+ font = gFont("Regular", 20)
+ offset = eSize(20, 5)
+
+ for title in elementsWithTag(windowstyle.childNodes, "title"):
+ offset = parseSize(title.getAttribute("offset"))
+ font = parseFont(str(title.getAttribute("font")))
+
+ style.setTitleFont(font);
+ style.setTitleOffset(offset)
for borderset in elementsWithTag(windowstyle.childNodes, "borderset"):
bsName = str(borderset.getAttribute("name"))
eWindowStyleManager.getInstance(x)
x.setStyle(style)
-def readSkin(screen, skin, name, desktop):
- myscreen = None
-
- # first, find the corresponding screen element
- skin = dom_skin.childNodes[0]
- skin_default = dom_skin_default.childNodes[0]
-
- for x in elementsWithTag(skin.childNodes, "screen"):
- if x.getAttribute('name') == name:
- myscreen = x
- break
-
- # if not found, check default skin
- if myscreen is None:
- for x in elementsWithTag(skin_default.childNodes, "screen"):
+def loadSkinData(desktop):
+ for dom_skin in dom_skins:
+ loadSingleSkinData(desktop, dom_skin)
+
+def lookupScreen(name):
+ for dom_skin in dom_skins:
+ # first, find the corresponding screen element
+ skin = dom_skin.childNodes[0]
+ for x in elementsWithTag(skin.childNodes, "screen"):
if x.getAttribute('name') == name:
- myscreen = x
- break
+ return x
+ return None
- del skin, skin_default
+def readSkin(screen, skin, name, desktop):
+ myscreen = lookupScreen(name)
# otherwise try embedded skin
myscreen = myscreen or getattr(screen, "parsedSkin", None)