Update of /cvsroot/freevo/freevo/src/skins/main In directory sc8-pr-cvs1:/tmp/cvs-serv1723
Added Files: default_areas.py screen.py Log Message: move some classes into extra files --- NEW FILE: default_areas.py --- #if 0 # ----------------------------------------------------------------------- # default_areas.py - Some areas for the skin # ----------------------------------------------------------------------- # $Id: default_areas.py,v 1.1 2003/12/06 16:41:45 dischi Exp $ # # Notes: This file contains only small areas, other areas like # ListingArea have there own file # # Todo: # # ----------------------------------------------------------------------- # $Log: default_areas.py,v $ # Revision 1.1 2003/12/06 16:41:45 dischi # move some classes into extra files # # # ----------------------------------------------------------------------- # Freevo - A Home Theater PC framework # Copyright (C) 2002 Krister Lagerstrom, et al. # Please see the file freevo/Docs/CREDITS for a complete list of authors. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MER- # CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # ----------------------------------------------------------------------- #endif import config import osd import plugin from area import Skin_Area # Create the OSD object osd = osd.get_singleton() class Screen_Area(Skin_Area): """ this area is the screen or background of the skin """ def __init__(self): Skin_Area.__init__(self, 'screen') def update_content_needed(self): """ this area needs never a content update """ return False def update_content(self): """ there is no content in this area """ pass class Title_Area(Skin_Area): """ in this area the title of the menu is drawn """ def __init__(self): Skin_Area.__init__(self, 'title') self.text = '' def update_content_needed(self): """ check if the content needs an update. This function does the same as update_content, so it's faster to return always 1 """ return 1 def update_content(self): """ update the content """ menu = self.menu layout = self.layout area = self.area_val content = self.calc_geometry(layout.content, copy_object=True) text = '' try: if content.type == 'menu': text = menu.heading elif len(menu.choices) == 0: text = '' elif content.type == 'short item': if menu.selected.image and menu.selected.type == 'video' and \ hasattr(menu.selected, 'tv_show') and menu.selected.tv_show: sn = menu.selected.show_name text = sn[1] + "x" + sn[2] + " - " + sn[3] else: text = menu.selected.name else: text = menu.selected.name except AttributeError: try: if menu.type == 'tv': if content.type == 'item' or content.type == 'short item': text = menu.table[1].title else: text = _('TV GUIDE') except: pass if not text: text = self.infoitem.name self.text = text self.drawstring(text, content.font, content, height=-1, mode='hard') class Subtitle_Area(Title_Area): """ in this area the subtitle of the menu is drawn """ def __init__(self): Skin_Area.__init__(self, 'subtitle') self.text = '' class Plugin_Area(Skin_Area): """ in this area all plugins can draw """ def __init__(self): Skin_Area.__init__(self, 'plugin') self.plugins = None self.x = config.OSD_OVERSCAN_X self.y = config.OSD_OVERSCAN_Y self.width = osd.width - 2 * config.OSD_OVERSCAN_X self.height = osd.height - 2 * config.OSD_OVERSCAN_Y def get_font(self, name): try: return self.xml_settings.font[name] except: return self.xml_settings.font['default'] def update_content(self): """ there is no content in this area """ if self.plugins == None: self.plugins = plugin.get('daemon_draw') for p in self.plugins: p.draw((self.widget_type, self.menuw), self) --- NEW FILE: screen.py --- #if 0 # ----------------------------------------------------------------------- # screen.py - The screen for the Freevo areas to draw on # ----------------------------------------------------------------------- # $Id: screen.py,v 1.1 2003/12/06 16:41:45 dischi Exp $ # # ----------------------------------------------------------------------- # $Log: screen.py,v $ # Revision 1.1 2003/12/06 16:41:45 dischi # move some classes into extra files # # # ----------------------------------------------------------------------- # Freevo - A Home Theater PC framework # Copyright (C) 2002 Krister Lagerstrom, et al. # Please see the file freevo/Docs/CREDITS for a complete list of authors. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MER- # CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # ----------------------------------------------------------------------- #endif import osd osd = osd.get_singleton() singleton = None def get_singleton(): global singleton if not singleton: singleton = Screen() return singleton class Screen: """ this call is a set of surfaces for the area to do it's job """ def __init__(self): self.s_content = osd.screen.convert() self.s_alpha = self.s_content.convert_alpha() self.s_bg = self.s_content.convert() self.s_alpha.fill((0,0,0,0)) self.update_bg = None self.update_alpha = [] self.update_content = [] self.drawlist = [] self.avoid_list = [] def clear(self): self.update_bg = None self.update_alpha = [] self.update_content = [] self.drawlist = [] def draw(self, obj): self.drawlist.append(obj) def update(self, layer, rect): if layer == 'content': self.update_content.append(rect) elif layer == 'alpha': self.update_alpha.append(rect) else: if self.update_bg: self.update_bg = ( min(self.update_bg[0], rect[0]), min(self.update_bg[1], rect[1]), max(self.update_bg[2], rect[2]), max(self.update_bg[3], rect[3])) else: self.update_bg = rect def in_update(self, x1, y1, x2, y2, update_area, full=FALSE): if full: for ux1, uy1, ux2, uy2 in update_area: # if the area is not complete inside the area but is inside on # some pixels, return FALSE if (not (ux1 >= x1 and uy1 >= y1 and ux2 <= x2 and uy2 <= y2)) and \ (not (x2 < ux1 or y2 < uy1 or x1 > ux2 or y1 > uy2)): return FALSE return TRUE for ux1, uy1, ux2, uy2 in update_area: if not (x2 < ux1 or y2 < uy1 or x1 > ux2 or y1 > uy2): return TRUE return FALSE def show(self, force_redraw=FALSE): """ the main drawing function """ if osd.must_lock: self.s_bg.lock() self.s_alpha.lock() self.s_content.lock() osd.screen.lock() if force_redraw: _debug_('show, force update', 2) self.update_bg = (0,0,osd.width, osd.height) self.update_alpha = [] self.update_content = [] update_area = self.update_alpha # if the background has some changes ... if self.update_bg: ux1, uy1, ux2, uy2 = self.update_bg for area in self.drawlist: for x1, y1, x2, y2, image in area.bgimages: if not (x2 < ux1 or y2 < uy1 or x1 > ux2 or y1 > uy2): self.s_bg.blit(image, (ux1, uy1), (ux1-x1, uy1-y1, ux2-ux1, uy2-uy1)) update_area.append(self.update_bg) if update_area: # clear it self.s_alpha.fill((0,0,0,0)) for area in self.drawlist: for x1, y1, x2, y2, bgcolor, size, color, radius in area.rectangles: # only redraw if necessary if self.in_update(x1, y1, x2, y2, update_area): # if the radius and the border is not inside the update area, # use drawbox, it's faster if self.in_update(x1+size+radius, y1+size+radius, x2-size-radius, y2-size-radius, update_area, full=TRUE): osd.drawroundbox(x1, y1, x2, y2, color=bgcolor, layer=self.s_alpha) else: osd.drawroundbox(x1, y1, x2, y2, color=bgcolor, border_size=size, border_color=color, radius=radius, layer=self.s_alpha) # and than blit only the changed parts of the screen for x0, y0, x1, y1 in update_area: self.s_content.blit(self.s_bg, (x0, y0), (x0, y0, x1-x0, y1-y0)) self.s_content.blit(self.s_alpha, (x0, y0), (x0, y0, x1-x0, y1-y0)) layer = self.s_content.convert() update_area += self.update_content # if something changed redraw all content objects if update_area: for area in self.drawlist: for x1, y1, x2, y2, image in area.images: if self.in_update(x1, y1, x2, y2, update_area): layer.blit(image, (x1, y1)) for x1, y1, x2, y2, text, font, height, align_h, align_v, mode, \ ellipses in area.text: if self.in_update(x1, y1, x2, y2, update_area): width = x2 - x1 if font.shadow.visible: width -= font.shadow.x osd.drawstringframed(text, x1+font.shadow.x, y1+font.shadow.y, width, height, font.font, font.shadow.color, None, align_h = align_h, align_v = align_v, mode=mode, ellipses=ellipses, layer=layer) osd.drawstringframed(text, x1, y1, width, height, font.font, font.color, None, align_h = align_h, align_v = align_v, mode=mode, ellipses=ellipses, layer=layer) for x0, y0, x1, y1 in update_area: osd.screen.blit(layer, (x0, y0), (x0, y0, x1-x0, y1-y0)) if osd.must_lock: self.s_bg.unlock() self.s_alpha.unlock() self.s_content.unlock() osd.screen.unlock() ------------------------------------------------------- This SF.net email is sponsored by: SF.net Giveback Program. Does SourceForge.net help you be more productive? Does it help you create better code? SHARE THE LOVE, and help us help YOU! Click Here: http://sourceforge.net/donate/ _______________________________________________ Freevo-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/freevo-cvslog