123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- # -*- coding: utf-8 -*-
- import pygame
- import config
- import ConfigParser
- from util_funcs import FileExists
- class CaseConfigParser(ConfigParser.SafeConfigParser):
- def optionxform(self, optionstr):
- return optionstr
- class SkinManager(object):
- """
- _HighColor = pygame.Color(51,166,255) # #33a6ff
- _TextColor = pygame.Color(83,83,83) # #535353
- _FrontColor = pygame.Color(131,199,219) ## light blue,#83c7db
- _URLColor = pygame.Color(51,166,255) ## blue more #33a6ff
- _LineColor = pygame.Color(169,169,169) # #a9a9a9
- _TitleBgColor = pygame.Color(228,228,228) # #e4e4e4
- _ActiveColor = pygame.Color(175,90,0) ## light brown #af5a00
- """
-
- _Colors = {}
- _Config = None
- _Fonts = {}
-
- #backup skin
- DefaultSkin = "../skin/default"
- def __init__(self):
- self.Init()
- def ConvertToRGB(self,hexstr):
-
- h = hexstr.lstrip('#')
- return tuple(int(h[i:i+2], 16) for i in (0, 2 ,4))
-
- def Init(self):
- if not SkinManager._Colors:
- self.SetColors()
- if not SkinManager._Fonts:
- self.SetFonts()
-
- def SetFonts(self):
- if not pygame.font.get_init():
- pygame.font.init()
-
- skinpath = config.SKIN+"/truetype"
- fonts_path = {}
- fonts_path["varela"] = "%s/VarelaRound-Regular.ttf" % skinpath
- fonts_path["veramono"] = "%s/VeraMono.ttf" % skinpath
- fonts_path["noto"] = "%s/NotoSansMono-Regular.ttf" % skinpath
- fonts_path["notocjk"] = "%s/NotoSansCJK-Regular.ttf" % skinpath
- fonts_path["Eurostile"] = "%s/EurostileMN-Medium.pfb.ttf" %skinpath
- #print(fonts_path["Eurostile"])
- fonts_path["EurostileBold"] = "%s/EurostileMN-ExtendedBold.pfb.ttf" % skinpath
-
- for i in range(10,29):
- self._Fonts["varela%d"%i] = pygame.font.Font(fonts_path["varela"],i)
-
- for i in range(10,26):
- self._Fonts["veramono%d"%i] = pygame.font.Font(fonts_path["veramono"],i)
-
- for i in range(10,28):
- self._Fonts["notosansmono%d"%i] = pygame.font.Font(fonts_path["noto"],i)
- for i in range(10,28):
- self._Fonts["notosanscjk%d"%i] = pygame.font.Font(fonts_path["notocjk"],i)
- for i in range(10,29):
- self._Fonts["Eurostile%d"%i] = pygame.font.Font(fonts_path["Eurostile"],i)
-
- self._Fonts["Eurostile11"] = pygame.font.Font(fonts_path["Eurostile"],11)
- self._Fonts["Eurostile12"] = pygame.font.Font(fonts_path["Eurostile"],12)
- self._Fonts["Eurostile15"] = pygame.font.Font(fonts_path["Eurostile"],15)
- self._Fonts["Eurostile34"] = pygame.font.Font(fonts_path["Eurostile"],34)
- self._Fonts["Eurostile40"] = pygame.font.Font(fonts_path["Eurostile"],40)
- self._Fonts["Eurostile120"] = pygame.font.Font(fonts_path["Eurostile"],120)
- for i in range(10,30):
- self._Fonts["EurostileBold%d"%i] = pygame.font.Font(fonts_path["EurostileBold"],i)
- self._Fonts["EurostileBold13"] = pygame.font.Font(fonts_path["EurostileBold"],13)
- self._Fonts["EurostileBold30"] = pygame.font.Font(fonts_path["EurostileBold"],30)
-
- self._Fonts["arial"] = pygame.font.SysFont("arial",16)
-
- def SetColors(self):
- Colors = {}
- Colors["High"] = pygame.Color(51, 166, 255)
- Colors["Text"] = pygame.Color(83, 83, 83)
- Colors["ReadOnlyText"] = pygame.Color(130,130,130)
- Colors["Front"] = pygame.Color(131, 199, 219)
- Colors["URL"] = pygame.Color(51, 166, 255)
- Colors["Line"] = pygame.Color(169, 169, 169)
- Colors["TitleBg"] = pygame.Color(228, 228, 228)
- Colors["Active"] = pygame.Color(175, 90, 0)
- Colors["Inactive"] = pygame.Color(120, 160, 140)
- Colors["Disabled"] = pygame.Color(204, 204, 204)
- Colors["White"] = pygame.Color(255, 255, 255)
- Colors["Black"] = pygame.Color(0, 0, 0)
- SkinManager._Colors = Colors
- self._Config = CaseConfigParser()
- fname = config.SKIN+"/config.ini"
- try:
- self._Config.read(fname)
- except Exception, e:
- print("read skin config.cfg error %s" % str(e))
- return
- else:
- if "Colors" in self._Config.sections():
- colour_opts = self._Config.options("Colors")
- # print(colour_opts)
- for i in SkinManager._Colors:
- if i in colour_opts:
- try:
- SkinManager._Colors[i] = self.ConvertToRGB(
- self._Config.get("Colors", i))
- except Exception, e:
- print("error in ConvertToRGB %s" % str(e))
- continue
-
- def GiveFont(self,name):
- return SkinManager._Fonts[name]
-
- def GiveColor(self,name):
- if name in SkinManager._Colors:
- return SkinManager._Colors[name]
- else:
- return pygame.Color(255,0,0)
-
- def GiveIcon(self,orig_file_or_dir): ## return is string,not Surface
- #doing a wrapper for items under /home/cpi/apps/Menu/*, to be like Menu/GameShell/*
- if orig_file_or_dir.startswith("/home/cpi/apps/Menu"):
- orig_file_or_dir = orig_file_or_dir.replace("/home/cpi/apps/Menu/","../Menu/GameShell/")
-
- if orig_file_or_dir.startswith(".."):
- ret = orig_file_or_dir.replace("..",config.SKIN)
- if FileExists(ret) == False:
- ret = orig_file_or_dir.replace("..",self.DefaultSkin)
- else:
- ret = config.SKIN+"/sys.py/"+orig_file_or_dir
- if FileExists(ret) == False:
- ret = self.DefaultSkin+"/sys.py/"+orig_file_or_dir
-
- if FileExists( ret ):
- return ret
- else: ## if not existed both in default or custom skin ,return where it is
- return orig_file_or_dir
-
- def GiveWallpaper(self,png_name):
- #first SKIN/wallpapers/xxxx.png
- #second ../skin/DEOT/wallpapers/xxxx.png
- #finnal gameshell/wallpaper/xxxx.png
- #loading.png,seeyou.png,updating.png,gameover.png,desktopbg.png
- wlp = "/wallpaper/"
- if FileExists(config.SKIN+wlp+png_name):
- return config.SKIN+wlp+png_name
- elif FileExists(self.DefaultSkin+wlp+png_name):
- return self.DefaultSkin+wlp+png_name
- else:
- return "gameshell/wallpaper/"+png_name
-
-
-
- ##global MySkinManager Handler
- MySkinManager = None
- def InitMySkinManager():
- global MySkinManager
- if MySkinManager == None:
- MySkinManager = SkinManager()
-
- InitMySkinManager()
|