Further work on theme Mgr
This commit is contained in:
parent
633e669fad
commit
a80ef8740c
|
@ -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
23
Menu.py
|
@ -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:
|
||||
|
|
57
themeMgr.py
57
themeMgr.py
|
@ -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"))
|
|
@ -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">
|
||||
|
|
Loading…
Reference in New Issue