diff --git a/GlossMgr.py b/GlossMgr.py index dd3e7ec..b8488a4 100644 --- a/GlossMgr.py +++ b/GlossMgr.py @@ -17,24 +17,22 @@ class GlossMgr: self.themeMgr = ThemeMgr(self) - #Setup the menu transition - self.transition = "slide" - transition_path = "transitions/menus/" + self.transition - self.transition = __import__(transition_path).Transition(self) + #Set a default menu transition + self.set_menu_transition("slide") #The background is a bit messy due to the depth issues :( background = self.themeMgr.get_texture("background", None, None) (width, height) = background.get_abs_size() print background.get_abs_size() #background.set_anchor_point_from_gravity(clutter.GRAVITY_NORTH_WEST) - background.set_anchor_point(int(background.get_width()/3), int(background.get_height()/3)) + background.set_anchor_point(int(background.get_width()/3.5), int(background.get_height()/3.5)) #background.set_anchor_point_from_gravity(clutter.GRAVITY_CENTER) background.set_depth(-self.stage.get_width()) print background.get_abs_size() # (width_new, height_new) = background.get_abs_size() - #width = width * (width / width_new) + width_new - #height = height * (height / height_new) + height_new + #width = self.stage.get_width() + #height = self.stage.get_height() scale_x = float(width)/float(width_new) scale_y = float(height)/float(height_new) background.set_scale(scale_x, scale_y) @@ -158,6 +156,11 @@ class GlossMgr: def display_msg(self, title, msg): self.uiMsg.display_msg(title, msg) + def set_menu_transition(self, transition_name): + #Setup the menu transition + transition_path = "transitions/menus/" + transition_name + self.transition = __import__(transition_path).Transition(self) + class MenuSelector(clutter.Texture): x_offset = -50 height_percent = 1 diff --git a/modules/video_player/elements/CoverItem.py b/modules/video_player/elements/CoverItem.py index 3d61b9b..a30bb86 100644 --- a/modules/video_player/elements/CoverItem.py +++ b/modules/video_player/elements/CoverItem.py @@ -44,34 +44,37 @@ class cover_item(clutter.Group): self.main_pic.set_height(cover_size) width = int(cover_size * xy_ratio) self.main_pic.set_width(width) - x = x + (cover_size - width)/2 + x = (cover_size - width)/2 + #x = int(cover_size / 2) #x = x + (cover_size - width) else: xy_ratio = float(self.main_pic.get_height()) / float(self.main_pic.get_width()) self.main_pic.set_width(cover_size) height = int(cover_size * xy_ratio) self.main_pic.set_height(height) - y = y + (cover_size - height)/2 + y = (cover_size - height)/2 #y = y + (cover_size - height) #This just seems to keep changing in Clutter so I'll leave it here gap = (cover_size - self.main_pic.get_width())/2 - anchor_x = (cover_size - gap)/2 #cover_size/2 + anchor_x = (cover_size - gap)/2 + #anchor_x = cover_size/2 gap = (cover_size - self.main_pic.get_height())/2 - anchor_y = (cover_size - gap)/2 #cover_size/2 #self.main_pic.get_height()/2 + anchor_y = (cover_size - gap)/2 + #anchor_y = cover_size/2 #self.main_pic.get_height()/2 self.set_anchor_point(anchor_x, anchor_y) #self.set_anchor_point_from_gravity(clutter.GRAVITY_CENTER) - self.main_pic.set_position(x, y) + - + self.main_pic.set_position(x, y) self.add(self.main_pic) - + #If this is a folder, we also add a title if not folder_name is None: self.add_label(folder_name) diff --git a/modules/video_player/elements/cover_viewer.py b/modules/video_player/elements/cover_viewer.py index 2e69b52..8cd4747 100644 --- a/modules/video_player/elements/cover_viewer.py +++ b/modules/video_player/elements/cover_viewer.py @@ -86,7 +86,7 @@ class coverViewer(clutter.Group): def add_texture_group(self, tempGroup): tempGroup.set_opacity(self.inactiveOpacity) - tempGroup.set_position( (self.num_covers * self.cover_size), 0) + #tempGroup.set_position( (self.num_covers * self.cover_size), 0) tempGroup.set_depth(1) self.textureLibrary.append(tempGroup) diff --git a/modules/video_player/video_player.py b/modules/video_player/video_player.py index b029264..8c6334d 100644 --- a/modules/video_player/video_player.py +++ b/modules/video_player/video_player.py @@ -184,6 +184,7 @@ class Module(): self.currentViewer.select_first() self.folderLibrary[self.folder_level].on_key_press_event(event) + self.currentViewer = self.folderLibrary[self.folder_level].get_current_viewer() #********************************************************** elif self.controlState == self.STATE_VIDEO: diff --git a/themeMgr.py b/themeMgr.py index 68b48de..980df65 100644 --- a/themeMgr.py +++ b/themeMgr.py @@ -30,7 +30,7 @@ class ThemeMgr: for file in file_list: conf_file = dir + "/" + file - print conf_file + #print conf_file docs.append(minidom.parse(conf_file)) #Filter function for fiding XML files @@ -359,6 +359,11 @@ class ThemeMgr: except ImportError: print "Theme Error: No menu_item transition titled '" + str(image_transition) + "'" menu.menu_item_transition = None + + #Setup the menu transition + menu_transition = self.find_child_value(element, "menu_transition.name") + menu_transition_options = self.find_child_value(element, "menu_transition.options") + self.glossMgr.set_menu_transition(menu_transition) #Finally set general actor properties (position etc) self.setup_actor(menu.getItemGroup(), element, self.stage) \ No newline at end of file diff --git a/transitions/menus/zoom_fade.py b/transitions/menus/zoom_fade.py new file mode 100644 index 0000000..cee0377 --- /dev/null +++ b/transitions/menus/zoom_fade.py @@ -0,0 +1,67 @@ +import clutter + +class Transition: + out_depth = 1000 + + def __init__(self, GlossMgr): + self.stage = GlossMgr.stage + self.glossMgr = GlossMgr + + def do_transition(self, fromMenu, toMenu): + + + oldGroup = fromMenu.getItemGroup() + oldMenuGroup = fromMenu #.getMenuGroup() + newGroup = toMenu.getItemGroup() + newMenuGroup = toMenu #.getMenuGroup() + + oldGroup.set_opacity(255) + + self.timeline = clutter.Timeline(25, 50) + self.timeline.connect('completed', self.slide_complete, fromMenu) + self.alpha = clutter.Alpha(self.timeline, clutter.ramp_inc_func) + #self.exit_behaviour_scale = clutter.BehaviourScale(self.alpha, 1, 0.5, clutter.GRAVITY_CENTER) + self.exit_behaviour_opacity = clutter.BehaviourOpacity(opacity_start=150, opacity_end=0, alpha=self.alpha) + self.exit_behaviour_depth = clutter.BehaviourDepth(depth_start=fromMenu.get_depth(), depth_end=self.out_depth, alpha=self.alpha) + + #self.exit_behaviour_scale.apply(oldGroup) + self.exit_behaviour_opacity.apply(oldGroup) + self.exit_behaviour_opacity.apply(oldMenuGroup) + self.exit_behaviour_depth.apply(oldGroup) + + + ################################################################## + #Start incoming menu + #self.exit_behaviour_scale = clutter.BehaviourScale(self.alpha, 1, 0.5, clutter.GRAVITY_CENTER) + self.entrance_behaviour_opacity = clutter.BehaviourOpacity(opacity_start=0, opacity_end=255, alpha=self.alpha) + + #Setup some knots + (start_x, start_y) = oldGroup.get_position() + newGroup.set_position(start_x, start_y) + + self.entrance_behaviour_depth = clutter.BehaviourDepth(depth_start=-self.out_depth, depth_end=oldGroup.get_depth()+1, alpha=self.alpha) + + self.entrance_behaviour_opacity.apply(newGroup) + self.entrance_behaviour_opacity.apply(newMenuGroup) + self.entrance_behaviour_depth.apply(newGroup) + newGroup.show() + #newMenuGroup.show_all() + + toMenu.display() + + #Add relevant new items to stage + self.stage.add(toMenu) + self.stage.add(newGroup) + + #Finally, move the selector bar + (bar_x, bar_y) = self.glossMgr.selector_bar.position_0 + self.glossMgr.selector_bar.move_to(bar_x, bar_y, self.timeline) + toMenu.selectFirst(False) + + self.timeline.start() + + self.glossMgr.currentMenu = toMenu + + def slide_complete(self, timeline, fromMenu): + self.stage.remove(fromMenu) + self.stage.remove(fromMenu.getItemGroup()) \ No newline at end of file diff --git a/ui/Pear/main.xml b/ui/Pear/main.xml index d01b2cf..592c2c1 100644 --- a/ui/Pear/main.xml +++ b/ui/Pear/main.xml @@ -44,6 +44,12 @@ 1 0.5 0.4 + + + + zoom_fade + None + diff --git a/ui/default/main.xml b/ui/default/main.xml index 8f21063..36cf4dd 100644 --- a/ui/default/main.xml +++ b/ui/default/main.xml @@ -47,6 +47,12 @@ 1 0.5 0.4 + + + + slide + None +