mirror of
https://github.com/clockworkpi/launcher.git
synced 2025-12-15 11:18:51 +01:00
Add SkinManager to all parts
This commit is contained in:
parent
27ad115c83
commit
3bfd917ea1
@ -65,7 +65,6 @@ class ListItem(object):
|
|||||||
_PlayingProcess = 0 # 0 - 100
|
_PlayingProcess = 0 # 0 - 100
|
||||||
_Parent = None
|
_Parent = None
|
||||||
|
|
||||||
_ActiveBackgroundColor = pygame.Color(232,232,232)
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._Labels = {}
|
self._Labels = {}
|
||||||
|
|||||||
3
skin/default/config.cfg
Normal file
3
skin/default/config.cfg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[Colors]
|
||||||
|
High = #33a6ff
|
||||||
|
White = #ffffff
|
||||||
BIN
skin/default/sys.py/gameshell/icons/blueselector.png
Normal file
BIN
skin/default/sys.py/gameshell/icons/blueselector.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.3 KiB |
File diff suppressed because one or more lines are too long
@ -53,7 +53,8 @@ class FootBar:
|
|||||||
_IconHeight = 18
|
_IconHeight = 18
|
||||||
_LabelFont = fonts["veramono10"]
|
_LabelFont = fonts["veramono10"]
|
||||||
_State = "normal"
|
_State = "normal"
|
||||||
_BgColor = pygame.Color(255,255,255)
|
|
||||||
|
_SkinManager = None
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._Icons = {}
|
self._Icons = {}
|
||||||
@ -105,7 +106,7 @@ class FootBar:
|
|||||||
|
|
||||||
def UpdateNavText(self,texts):
|
def UpdateNavText(self,texts):
|
||||||
self._State = "tips"
|
self._State = "tips"
|
||||||
my_text = self._LabelFont.render(texts,True,(83,83,83))
|
my_text = self._LabelFont.render(texts,True,self._SkinManager.GiveColor("Text"))
|
||||||
"""
|
"""
|
||||||
_w = 0
|
_w = 0
|
||||||
for i, x in enumerate(("b","a","y","x")):
|
for i, x in enumerate(("b","a","y","x")):
|
||||||
@ -120,7 +121,7 @@ class FootBar:
|
|||||||
final_piece = ""
|
final_piece = ""
|
||||||
for i ,v in enumerate(texts):
|
for i ,v in enumerate(texts):
|
||||||
text_slice = texts[:i+1]
|
text_slice = texts[:i+1]
|
||||||
my_text = self._LabelFont.render(text_slice,True,(83,83,83))
|
my_text = self._LabelFont.render(text_slice,True, self._SkinManager.GiveColor("Text"))
|
||||||
final_piece = text_slice
|
final_piece = text_slice
|
||||||
if my_text.get_width() >= left_width:
|
if my_text.get_width() >= left_width:
|
||||||
break
|
break
|
||||||
@ -139,7 +140,7 @@ class FootBar:
|
|||||||
|
|
||||||
|
|
||||||
def ClearCanvas(self):
|
def ClearCanvas(self):
|
||||||
self._CanvasHWND.fill( self._BgColor )
|
self._CanvasHWND.fill( self._SkinManager.GiveColor("White") )
|
||||||
|
|
||||||
self._Icons["round_corners"].NewCoord(5,self._Height -5 )
|
self._Icons["round_corners"].NewCoord(5,self._Height -5 )
|
||||||
self._Icons["round_corners"]._IconIndex = 2
|
self._Icons["round_corners"]._IconIndex = 2
|
||||||
@ -178,7 +179,7 @@ class FootBar:
|
|||||||
self._Icons[x].Draw()
|
self._Icons[x].Draw()
|
||||||
|
|
||||||
|
|
||||||
pygame.draw.line(self._CanvasHWND,(169,169,169),(0,0),(Width,0),self._BorderWidth)
|
pygame.draw.line(self._CanvasHWND,self._SkinManager.GiveColor("Line"),(0,0),(Width,0),self._BorderWidth)
|
||||||
|
|
||||||
if self._HWND != None:
|
if self._HWND != None:
|
||||||
self._HWND.blit(self._CanvasHWND,(self._PosX,Height - self._Height,Width,self._BarHeight))
|
self._HWND.blit(self._CanvasHWND,(self._PosX,Height - self._Height,Width,self._BarHeight))
|
||||||
|
|||||||
@ -9,7 +9,6 @@ import sys
|
|||||||
from libs import easing
|
from libs import easing
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
import base64
|
|
||||||
from beeprint import pp
|
from beeprint import pp
|
||||||
|
|
||||||
## local package import
|
## local package import
|
||||||
@ -26,6 +25,8 @@ from label import Label
|
|||||||
from untitled_icon import UntitledIcon
|
from untitled_icon import UntitledIcon
|
||||||
from Emulator import MyEmulator
|
from Emulator import MyEmulator
|
||||||
|
|
||||||
|
from skin_manager import SkinManager
|
||||||
|
|
||||||
class MessageBox(Label):
|
class MessageBox(Label):
|
||||||
_Parent = None
|
_Parent = None
|
||||||
|
|
||||||
@ -122,6 +123,7 @@ class MainScreen(object):
|
|||||||
_MsgBox = None
|
_MsgBox = None
|
||||||
_MsgBoxFont = fonts["veramono20"]
|
_MsgBoxFont = fonts["veramono20"]
|
||||||
_IconFont = fonts["varela15"]
|
_IconFont = fonts["varela15"]
|
||||||
|
_SkinManager = None
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._Pages = []
|
self._Pages = []
|
||||||
@ -132,6 +134,9 @@ class MainScreen(object):
|
|||||||
self._MsgBox= MessageBox()
|
self._MsgBox= MessageBox()
|
||||||
self._MsgBox._Parent= self
|
self._MsgBox._Parent= self
|
||||||
self._MsgBox.Init(" ", self._MsgBoxFont)
|
self._MsgBox.Init(" ", self._MsgBoxFont)
|
||||||
|
|
||||||
|
self._SkinManager = SkinManager()
|
||||||
|
self._SkinManager.Init()
|
||||||
|
|
||||||
def FartherPages(self):
|
def FartherPages(self):
|
||||||
self._PageMax = len(self._Pages)
|
self._PageMax = len(self._Pages)
|
||||||
|
|||||||
@ -9,18 +9,14 @@ import math
|
|||||||
|
|
||||||
from libs import easing
|
from libs import easing
|
||||||
|
|
||||||
import base64
|
#import base64
|
||||||
from beeprint import pp
|
#from beeprint import pp
|
||||||
|
|
||||||
### local import
|
### local import
|
||||||
from constants import ALIGN,icon_width,icon_height,Width,Height,ICON_TYPES
|
from constants import ALIGN,icon_width,icon_height,Width,Height,ICON_TYPES
|
||||||
from util_funcs import midRect
|
from util_funcs import midRect
|
||||||
from keys_def import CurKeys
|
from keys_def import CurKeys
|
||||||
|
from icon_pool import MyIconPool
|
||||||
from blueselector_b64 import blueselector
|
|
||||||
|
|
||||||
|
|
||||||
blueselector_surf = pygame.image.frombuffer(base64.b64decode(blueselector),(92,92),"RGBA")
|
|
||||||
|
|
||||||
class PageStack:
|
class PageStack:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -107,6 +103,7 @@ class Page(object):
|
|||||||
|
|
||||||
_SelectedIconTopOffset=20
|
_SelectedIconTopOffset=20
|
||||||
_EasingDur = 30
|
_EasingDur = 30
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._Icons = []
|
self._Icons = []
|
||||||
|
|
||||||
@ -132,9 +129,9 @@ class Page(object):
|
|||||||
if cnt >= (self._IconNumbers -1):
|
if cnt >= (self._IconNumbers -1):
|
||||||
break
|
break
|
||||||
cnt+=1
|
cnt+=1
|
||||||
#icon的实际surface是要另行赋值的,这儿只创建空的icon,输入了坐标等信息
|
|
||||||
ps = PageSelector()
|
ps = PageSelector()
|
||||||
ps._IconSurf = blueselector_surf
|
ps._IconSurf = MyIconPool._Icons["blueselector"]
|
||||||
ps._Parent = self
|
ps._Parent = self
|
||||||
ps.Init(icon_width/2, TitleBar._BarHeight+icon_height/2,92,92,128)
|
ps.Init(icon_width/2, TitleBar._BarHeight+icon_height/2,92,92,128)
|
||||||
self._Ps = ps
|
self._Ps = ps
|
||||||
@ -158,7 +155,7 @@ class Page(object):
|
|||||||
it._ImgSurf = pygame.transform.smoothscale(it._ImgSurf,(it._Width,it._Height))
|
it._ImgSurf = pygame.transform.smoothscale(it._ImgSurf,(it._Width,it._Height))
|
||||||
|
|
||||||
ps = PageSelector()
|
ps = PageSelector()
|
||||||
ps._IconSurf = blueselector_surf
|
ps._IconSurf = MyIconPool._Icons["blueselector"]
|
||||||
ps._Parent = self
|
ps._Parent = self
|
||||||
ps.Init(start_x,start_y,92,92,128)
|
ps.Init(start_x,start_y,92,92,128)
|
||||||
|
|
||||||
@ -211,7 +208,7 @@ class Page(object):
|
|||||||
it._ImgSurf = pygame.transform.smoothscale(it._ImgSurf,(it._Width,it._Height))
|
it._ImgSurf = pygame.transform.smoothscale(it._ImgSurf,(it._Width,it._Height))
|
||||||
|
|
||||||
ps = PageSelector()
|
ps = PageSelector()
|
||||||
ps._IconSurf = blueselector_surf
|
ps._IconSurf = MyIconPool._Icons["blueselector"]
|
||||||
ps._Parent = self
|
ps._Parent = self
|
||||||
ps.Init(start_x,start_y,92,92,128)
|
ps.Init(start_x,start_y,92,92,128)
|
||||||
|
|
||||||
@ -247,9 +244,9 @@ class Page(object):
|
|||||||
if cnt >= (self._IconNumbers -1):
|
if cnt >= (self._IconNumbers -1):
|
||||||
break
|
break
|
||||||
cnt+=1
|
cnt+=1
|
||||||
#icon的实际surface是要另行赋值的,这儿只创建空的icon,输入了坐标等信息
|
|
||||||
ps = PageSelector()
|
ps = PageSelector()
|
||||||
ps._IconSurf = blueselector_surf
|
ps._IconSurf = MyIconPool._Icons["blueselector"]
|
||||||
ps._Parent = self
|
ps._Parent = self
|
||||||
ps.Init(icon_width/2,icon_height/2,92,92,128)
|
ps.Init(icon_width/2,icon_height/2,92,92,128)
|
||||||
self._Ps = ps
|
self._Ps = ps
|
||||||
@ -291,7 +288,7 @@ class Page(object):
|
|||||||
|
|
||||||
|
|
||||||
ps = PageSelector()
|
ps = PageSelector()
|
||||||
ps._IconSurf = blueselector_surf
|
ps._IconSurf = MyIconPool._Icons["blueselector"]
|
||||||
ps._Parent = self
|
ps._Parent = self
|
||||||
ps.Init(start_x,start_y-self._SelectedIconTopOffset,92,92,128)
|
ps.Init(start_x,start_y-self._SelectedIconTopOffset,92,92,128)
|
||||||
|
|
||||||
@ -324,10 +321,10 @@ class Page(object):
|
|||||||
it._Index = i
|
it._Index = i
|
||||||
it.Init(start_x+i*icon_width,start_y,icon_width,icon_height,0)
|
it.Init(start_x+i*icon_width,start_y,icon_width,icon_height,0)
|
||||||
self._Icons.append(it)
|
self._Icons.append(it)
|
||||||
#icon的实际surface是要另行赋值的,这儿只创建空的icon,输入了坐标等信息
|
|
||||||
if self._IconNumbers > 0:
|
if self._IconNumbers > 0:
|
||||||
ps = PageSelector()
|
ps = PageSelector()
|
||||||
ps._IconSurf = blueselector_surf
|
ps._IconSurf = MyIconPool._Icons["blueselector"]
|
||||||
ps._Parent = self
|
ps._Parent = self
|
||||||
ps.Init(start_x,start_y,icon_width+4,icon_height+4,128)
|
ps.Init(start_x,start_y,icon_width+4,icon_height+4,128)
|
||||||
self._Ps = ps
|
self._Ps = ps
|
||||||
@ -546,7 +543,7 @@ class Page(object):
|
|||||||
print("OnTopLevel ",self._Screen._PageIndex)
|
print("OnTopLevel ",self._Screen._PageIndex)
|
||||||
|
|
||||||
def ClearCanvas(self):
|
def ClearCanvas(self):
|
||||||
self._CanvasHWND.fill((255,255,255))
|
self._CanvasHWND.fill(self._Screen._SkinManager.GiveColor("White"))
|
||||||
|
|
||||||
def ClearIcons(self):
|
def ClearIcons(self):
|
||||||
for i in range(0,self._IconNumbers):
|
for i in range(0,self._IconNumbers):
|
||||||
|
|||||||
74
sys.py/UI/skin_manager.py
Normal file
74
sys.py/UI/skin_manager.py
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
import config
|
||||||
|
import ConfigParser
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def ConvertToRGB(self,hexstr):
|
||||||
|
|
||||||
|
h = hexstr.lstrip('#')
|
||||||
|
return tuple(int(h[i:i+2], 16) for i in (0, 2 ,4))
|
||||||
|
|
||||||
|
def Init(self):
|
||||||
|
|
||||||
|
Colors = {}
|
||||||
|
Colors["High"] = pygame.Color(51,166,255)
|
||||||
|
Colors["Text"] = pygame.Color(83,83,83)
|
||||||
|
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["White"] = pygame.Color(255,255,255)
|
||||||
|
|
||||||
|
self._Colors = Colors
|
||||||
|
|
||||||
|
self._Config = CaseConfigParser()
|
||||||
|
|
||||||
|
fname = "../skin/"+config.SKIN+"/config.cfg"
|
||||||
|
|
||||||
|
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 self._Colors:
|
||||||
|
if i in colour_opts:
|
||||||
|
try:
|
||||||
|
self._Colors[i] = self.ConvertToRGB(self._Config.get("Colors",i))
|
||||||
|
except Exception,e:
|
||||||
|
print("error in ConvertToRGB %s" % str(e))
|
||||||
|
continue
|
||||||
|
|
||||||
|
|
||||||
|
def GiveColor(self,name):
|
||||||
|
if name in self._Colors:
|
||||||
|
return self._Colors[name]
|
||||||
|
else:
|
||||||
|
return pygame.Color(255,0,0)
|
||||||
|
|
||||||
@ -31,13 +31,9 @@ class TitleBar:
|
|||||||
_PosY = 0
|
_PosY = 0
|
||||||
_Width = Width
|
_Width = Width
|
||||||
_Height = 25
|
_Height = 25
|
||||||
_IconColor = pygame.Color(114,114,144)
|
|
||||||
_BarHeight = 24.5
|
_BarHeight = 24.5
|
||||||
_LOffset = 3
|
_LOffset = 3
|
||||||
_ROffset = 3
|
_ROffset = 3
|
||||||
_BgColor = pygame.Color(228,228,228)
|
|
||||||
_TxtColor = pygame.Color(83,83,83)
|
|
||||||
_BottomLineColor = pygame.Color(169,169,169)
|
|
||||||
_Icons = {}
|
_Icons = {}
|
||||||
_icon_width = 18
|
_icon_width = 18
|
||||||
_icon_height = 18
|
_icon_height = 18
|
||||||
@ -45,8 +41,11 @@ class TitleBar:
|
|||||||
_CanvasHWND = None
|
_CanvasHWND = None
|
||||||
_HWND = None
|
_HWND = None
|
||||||
_Title = ""
|
_Title = ""
|
||||||
|
|
||||||
_InLowBackLight = -1
|
_InLowBackLight = -1
|
||||||
|
|
||||||
|
_SkinManager = None
|
||||||
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._Icons = {}
|
self._Icons = {}
|
||||||
@ -240,7 +239,7 @@ class TitleBar:
|
|||||||
print( wifi_strength())
|
print( wifi_strength())
|
||||||
|
|
||||||
def ClearCanvas(self):
|
def ClearCanvas(self):
|
||||||
self._CanvasHWND.fill( self._BgColor )
|
self._CanvasHWND.fill( self._SkinManager.GiveColor("TitleBg") )
|
||||||
|
|
||||||
self._Icons["round_corners"].NewCoord(5,5)
|
self._Icons["round_corners"].NewCoord(5,5)
|
||||||
self._Icons["round_corners"]._IconIndex = 0
|
self._Icons["round_corners"]._IconIndex = 0
|
||||||
@ -267,10 +266,10 @@ class TitleBar:
|
|||||||
time_text_size = fonts["varela12"].size(cur_time)
|
time_text_size = fonts["varela12"].size(cur_time)
|
||||||
title_text_size = fonts["varela16"].size(title)
|
title_text_size = fonts["varela16"].size(title)
|
||||||
|
|
||||||
self._CanvasHWND.blit(fonts["varela16"].render(title,True,self._TxtColor),midRect(title_text_size[0]/2+self._LOffset,
|
self._CanvasHWND.blit(fonts["varela16"].render(title,True,self._SkinManager.GiveColor("Text")),midRect(title_text_size[0]/2+self._LOffset,
|
||||||
title_text_size[1]/2+(self._BarHeight-title_text_size[1])/2,
|
title_text_size[1]/2+(self._BarHeight-title_text_size[1])/2,
|
||||||
title_text_size[0],title_text_size[1],Width,Height))
|
title_text_size[0],title_text_size[1],Width,Height))
|
||||||
self._CanvasHWND.blit(fonts["varela12"].render(cur_time,True,self._TxtColor),midRect(Width-time_text_size[0]/2-self._ROffset,
|
self._CanvasHWND.blit(fonts["varela12"].render(cur_time,True,self._SkinManager.GiveColor("Text")),midRect(Width-time_text_size[0]/2-self._ROffset,
|
||||||
time_text_size[1]/2+(self._BarHeight-time_text_size[1])/2,
|
time_text_size[1]/2+(self._BarHeight-time_text_size[1])/2,
|
||||||
time_text_size[0],time_text_size[1],Width,Height))
|
time_text_size[0],time_text_size[1],Width,Height))
|
||||||
|
|
||||||
@ -302,7 +301,7 @@ class TitleBar:
|
|||||||
|
|
||||||
self._Icons["battery"].Draw()
|
self._Icons["battery"].Draw()
|
||||||
|
|
||||||
pygame.draw.line(self._CanvasHWND,self._BottomLineColor,(0,self._BarHeight),(self._Width,self._BarHeight),self._BorderWidth)
|
pygame.draw.line(self._CanvasHWND,self._SkinManager.GiveColor("Line"),(0,self._BarHeight),(self._Width,self._BarHeight),self._BorderWidth)
|
||||||
|
|
||||||
if self._HWND != None:
|
if self._HWND != None:
|
||||||
self._HWND.blit(self._CanvasHWND,(self._PosX,self._PosY,self._Width,self._Height))
|
self._HWND.blit(self._CanvasHWND,(self._PosX,self._PosY,self._Width,self._Height))
|
||||||
|
|||||||
@ -11,10 +11,10 @@ from datetime import datetime
|
|||||||
import base64
|
import base64
|
||||||
from beeprint import pp
|
from beeprint import pp
|
||||||
|
|
||||||
from util_funcs import midRect
|
from util_funcs import midRect,SkinMap
|
||||||
from fonts import fonts
|
from fonts import fonts
|
||||||
|
|
||||||
BlankPng = "gameshell/blank.png" ## 80x80
|
BlankPng = SkinMap("gameshell/blank.png") ## 80x80
|
||||||
## use blank circle as bg, Two alpha As Icon Label
|
## use blank circle as bg, Two alpha As Icon Label
|
||||||
#Upper and Lower
|
#Upper and Lower
|
||||||
class UntitledIcon(object):
|
class UntitledIcon(object):
|
||||||
|
|||||||
@ -322,7 +322,9 @@ def big_loop():
|
|||||||
main_screen.ReadTheDirIntoPages("../Menu",0,None)
|
main_screen.ReadTheDirIntoPages("../Menu",0,None)
|
||||||
main_screen.FartherPages()
|
main_screen.FartherPages()
|
||||||
|
|
||||||
|
title_bar._SkinManager = main_screen._SkinManager
|
||||||
|
foot_bar._SkinManager = main_screen._SkinManager
|
||||||
|
|
||||||
sound_patch = SoundPatch()
|
sound_patch = SoundPatch()
|
||||||
sound_patch._Parent = main_screen
|
sound_patch._Parent = main_screen
|
||||||
sound_patch.Init()
|
sound_patch.Init()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user