123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- # -*- coding: utf-8 -*-
- import pygame
- import os
- ##local import
- from constants import Width,Height,ICON_TYPES,ALIGN
- from util_funcs import FileExists,midRect
- from icon_item import IconItem
- from multi_icon_item import MultiIconItem
- from icon_pool import MyIconPool
- from libs.roundrects import aa_round_rect
- from lang_manager import MyLangManager
- from widget import Widget
- from skin_manager import MySkinManager
- import config
- icon_base_path = MySkinManager.GiveIcon("gameshell/footbar_icons/")
- class FootBarIcon(MultiIconItem):
- def TotalWidth(self):
- return self._Width+self._Label._Width
- def Draw(self):
- if self._Align==ALIGN["VCenter"]: #default
- if self._Label != None:
- self._Label._PosX = self._PosX - self._Label._Width/2
- self._Label._PosY = self._PosY + self._Height/2 + 12
- elif self._Align ==ALIGN["HLeft"]:
- if self._Label != None:
- self._Label._PosX = self._PosX + self._Width/2 + 3
- self._Label._PosY = self._PosY - self._Label._Height/2
- if self._Label!=None:
- self._Label.Draw()
- if self._ImgSurf != None:
- self._Parent._CanvasHWND.blit(self._ImgSurf,midRect(self._PosX,
- self._PosY,
- self._Width,self._Height,Width,Height),
- (0,self._IconIndex*self._IconHeight,self._IconWidth,self._IconHeight))
- class FootBar(Widget):
- _Width = Width
- _Height = 20
- _BarHeight = 20.5
- _BorderWidth = 1
- _CanvasHWND = None
- _HWND = None
- _Icons = {}
- _IconWidth = 18
- _IconHeight = 18
- _LabelFont = MyLangManager.TrFont("veramono10")
- _State = "normal"
- _SkinManager = None
- def __init__(self):
- self._Icons = {}
- def ReadFootBarIcons(self,icondir):
- if FileExists(icondir) == False and os.path.isdir(icondir) == False:
- return
- keynames = ["nav","x","y","a","b","select"]
- share_surf = pygame.image.load(icon_base_path+"footbar.png").convert_alpha()
- files = os.listdir(icondir)
- for _i,i in enumerate( keynames):
- it = FootBarIcon()
- it._MyType = ICON_TYPES["NAV"]
- it._Parent = self
- it._ImgSurf= share_surf
- it._Align = ALIGN["HLeft"] # (x)text <=
- it.AddLabel("game",self._LabelFont)
- it.Adjust(self._IconWidth/2+_i*self._IconWidth, self._IconHeight/2+2, self._IconWidth, self._IconHeight,0)
- it._IconIndex = _i
- self._Icons[i] = it
- def Init(self,screen):
- self._HWND = screen
- self._CanvasHWND = pygame.Surface((Width,int(self._BarHeight)))
- self.ReadFootBarIcons(icon_base_path)
- round_corners = MultiIconItem()
- round_corners._IconWidth = 10
- round_corners._IconHeight = 10
- round_corners._MyType = ICON_TYPES["STAT"]
- round_corners._Parent = self
- round_corners._ImgSurf = MyIconPool.GiveIconSurface("roundcorners")
- round_corners.Adjust(0,0,10,10,0)
- self._Icons["round_corners"] = round_corners
- def ResetNavText(self):
- self._Icons["nav"]._Label.SetText(MyLangManager.Tr("Nav"))
- self._State = "normal"
- self.Draw()
- return False
- def UpdateNavText(self,texts):
- self._State = "tips"
- texts = MyLangManager.Tr(texts)
- my_text = self._LabelFont.render(texts,True,self._SkinManager.GiveColor("Text"))
- """
- _w = 0
- for i, x in enumerate(("b","a","y","x")):
- if self._Icons[x]._Label._Text!="":
- if i==0:
- _w += self._Icons[x].TotalWidth()
- else:
- _w += self._Icons[x].TotalWidth()+5
- """
- left_width = self._Width - 18
- final_piece = ""
- for i ,v in enumerate(texts):
- text_slice = texts[:i+1]
- my_text = self._LabelFont.render(text_slice,True, self._SkinManager.GiveColor("Text"))
- final_piece = text_slice
- if my_text.get_width() >= left_width:
- break
- print("finalpiece %s" %final_piece)
- self._Icons["nav"]._Label.SetText( final_piece )
- self.Draw()
- def SetLabelTexts(self,texts):
- barr = ["nav","y","x","b","a","select"]
- texts2 = texts + [""] if len(texts) == 5 else texts
- for idx,x in enumerate(barr):
- try:
- self._Icons[x]._Label.SetText(MyLangManager.Tr(texts2[idx]))
- except IndexError:
- print("Index "+x+" doesn't exist!")
- def ClearCanvas(self):
- self._CanvasHWND.fill( self._SkinManager.GiveColor("White") )
- self._Icons["round_corners"].NewCoord(5,self._Height -5 )
- self._Icons["round_corners"]._IconIndex = 2
- self._Icons["round_corners"].Draw()
- self._Icons["round_corners"].NewCoord(self._Width-5,self._Height-5)
- self._Icons["round_corners"]._IconIndex = 3
- self._Icons["round_corners"].Draw()
- """
- aa_round_rect(self._CanvasHWND,
- (0,0,self._Width,self._Height),self._BgColor,8,0, self._BgColor)
- pygame.draw.rect(self._CanvasHWND,self._BgColor,(0,0,Width,self._BarHeight/2), 0 )
- """
- def Draw(self):
- self.ClearCanvas()
- self._Icons["nav"].NewCoord(self._IconWidth/2+3,self._IconHeight/2+2)
- self._Icons["nav"].Draw()
- if self._State == "normal":
- _w=0
- #for i,x in enumerate(("a","b","x","y")):
- for i, x in enumerate(("b","a","y","x","select")):
- if self._Icons[x]._Label._Text!="":
- if i==0:
- _w += self._Icons[x].TotalWidth()
- else:
- _w += self._Icons[x].TotalWidth()+5
- start_x = self._Width - _w
- start_y = self._IconHeight/2+2
- self._Icons[x].NewCoord(start_x,start_y)
- self._Icons[x].Draw()
- pygame.draw.line(self._CanvasHWND,self._SkinManager.GiveColor("Line"),(0,0),(Width,0),self._BorderWidth)
- if self._HWND != None:
- self._HWND.blit(self._CanvasHWND,(self._PosX,Height - self._Height,Width,self._BarHeight))
|