Further work on theme Mgr

This commit is contained in:
noisymime 2008-01-01 01:21:28 +00:00
parent 633e669fad
commit a80ef8740c
4 changed files with 100 additions and 14 deletions

View File

@ -15,7 +15,7 @@ class GlossMgr:
self.uiMsg = message(stage)
self.themeMgr = ThemeMgr(self.stage)
background = self.themeMgr.get_texture("background", None)
background = self.themeMgr.get_texture("background", None, None)
background.show()
self.stage.add(background)

23
Menu.py
View File

@ -7,14 +7,18 @@ from ReflectionTexture import Texture_Reflection
class Menu:
item_gap = 10 #Distance between items
font = ""
zoomLevel = 0.5
opacityStep = 120
def __init__ (self, glossMgr):
self.glossMgr = glossMgr
self.stage = self.glossMgr.get_stage()
self.glossMgr.themeMgr.setup_menu("main", self)
self.menuItems = []
self.selected = 0
self.displayMin = 0 #The number of menu items that will be shown at a time
self.displayMax = 6
self.moveQueue = 0
self.displaySize = self.displayMax - self.displayMin
self.displayPosition = (0, 0)
@ -277,9 +281,10 @@ class ListItem (clutter.Label):
def __init__ (self, menu, itemLabel, y, imagePath):
clutter.Label.__init__ (self)
glossMgr = menu.getGlossMgr()
self.itemTexturesGroup = clutter.Group()
font = glossMgr.get_themeMgr().get_font("menu_item")
self.stage = glossMgr.get_stage()
self.itemTexturesGroup = clutter.Group()
font = menu.font #glossMgr.get_themeMgr().get_font("menu_item")
self.set_font_name(font)
self.set_text(itemLabel)
self.color = clutter.Color(0xff, 0xff, 0xff, 0xdd)
@ -313,16 +318,16 @@ class ListItem (clutter.Label):
zoomTo=0
opacityTo = 255
if level==0:
zoomTo = 1 #self.zoomLevel * 1.5
opacityTo = 255
zoomTo = self.menu.zoomStep0 #self.zoomLevel * 1.5
opacityTo = self.menu.opacityStep0
self.itemTexturesGroup.show_all()
if level==1:
zoomTo = self.zoomLevel * 1.2
opacityTo = 255 - self.opacityStep
zoomTo = self.zoomLevel * self.menu.zoomStep1
opacityTo = self.menu.opacityStep1
self.itemTexturesGroup.hide_all()
if level==2:
zoomTo = self.zoomLevel
opacityTo = 255 - 2*self.opacityStep
zoomTo = self.zoomLevel * self.menu.zoomStep2
opacityTo = self.menu.opacityStep2
self.itemTexturesGroup.hide_all()
if zoomTo == self.currentZoom:

View File

@ -214,9 +214,10 @@ class ThemeMgr:
opacity = int(opacity)
actor.set_opacity(opacity)
def get_texture(self, name, parent):
def get_texture(self, name, parent, texture):
texture_src = None
texture = clutter.Texture()
if texture is None:
texture = clutter.Texture()
element = self.search_docs("texture", name).childNodes
#Quick check to make sure we found something
@ -234,5 +235,53 @@ class ThemeMgr:
return texture
def get_font(self, name):
return 'Tahoma 40'
def get_font(self, name, element):
if element is None:
element = self.search_docs("font", name).childNodes
#Quick check to make sure we found something
if element is None:
return None
face = self.find_child_value(element, "face")
res = str(self.stage.get_width()) + "x" + str(self.stage.get_height())
size = None
defSize = None
#Loop through all the different sizes until we find the right one (or else use the default)
for node in element:
if node.nodeType == node.ELEMENT_NODE:
if node.tagName == "size":
if node.attributes["id"].value == res:
size = node.childNodes[0].data
elif node.attributes["id"].value == "default":
defSize = node.childNodes[0].data
if size is None:
size = defSize
fontString = str(face) + " " + str(size)
return fontString
def setup_menu(self, name, menu):
element = self.search_docs("menu", name).childNodes
#Quick check to make sure we found something
if element is None:
return None
menu.item_gap = int(self.find_child_value(element, "item_gap"))
menu.displayMax = int(self.find_child_value(element, "num_visible_elements"))
#Grab the font
for node in element:
if node.nodeType == node.ELEMENT_NODE:
if node.tagName == "font":
fontString = self.get_font("main", node.childNodes) #print node.tagName
menu.font = fontString
#Set the selection effect steps
menu.zoomStep0 = float(self.find_child_value(element, "scale_step0"))
menu.zoomStep1 = float(self.find_child_value(element, "scale_step1"))
menu.zoomStep2 = float(self.find_child_value(element, "scale_step2"))
menu.opacityStep0 = int(self.find_child_value(element, "opacity_step0"))
menu.opacityStep1 = int(self.find_child_value(element, "opacity_step1"))
menu.opacityStep2 = int(self.find_child_value(element, "opacity_step2"))

View File

@ -1,4 +1,36 @@
<gloss-theme>
<menu id="main">
<font id="main">
<face>Tahoma</face>
<size id="default">40</size>
<size id="1024x768">40</size>
<size id="800x600">30</size>
</font>
<item_gap>10</item_gap>
<num_visible_elements>6</num_visible_elements>
<!-- These are the opacity and scale values for the 3 possible steps in the menu
Make all the values the same if you do not want these effects -->
<opacity_step0>255</opacity_step0>
<opacity_step1>135</opacity_step1>
<opacity_step2>50</opacity_step2>
<scale_step0>1</scale_step0>
<scale_step1>0.85</scale_step1>
<scale_step2>0.75</scale_step2>
</menu>
<font id="main">
<face>Tahoma</face>
<size id="default">40</size>
<size id="1024x768">40</size>
<size id="800x600">30</size>
</font>
<texture id="background">
<image>background.png</image>
<dimensions type="relativeToStage">