mirror of
https://github.com/clockworkpi/launcher_deot.git
synced 2025-12-12 15:38:52 +01:00
182 lines
6.6 KiB
Python
182 lines
6.6 KiB
Python
# -*- 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()
|