mirror of
https://github.com/clockworkpi/launcher.git
synced 2025-12-12 17:58:50 +01:00
134 lines
3.6 KiB
Python
134 lines
3.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import pygame
|
|
from libs.roundrects import aa_round_rect
|
|
|
|
|
|
|
|
|
|
## local UI import
|
|
from UI.page import Page,PageStack,PageSelector
|
|
from UI.label import Label
|
|
from UI.fonts import fonts
|
|
|
|
class Textarea:
|
|
_PosX =0
|
|
_PosY = 0
|
|
_Width = 0
|
|
_Height = 0
|
|
_BackgroundColor = pygame.Color(229,229,229)
|
|
_CanvasHWND = None
|
|
_MyWords = []
|
|
_FontObj = None
|
|
_LineNumber = 0
|
|
_TextFull = False
|
|
_TextIndex = 0
|
|
|
|
def __init__(self):
|
|
pass
|
|
|
|
def Init(self):
|
|
self._FontObj = fonts["veramono24"]
|
|
#pygame.font.Font(fonts_path["veramono"],24)
|
|
|
|
def SubTextIndex(self):
|
|
|
|
self._TextIndex-=1
|
|
if self._TextIndex < 0:
|
|
self._TextIndex = 0
|
|
|
|
def AddTextIndex(self):
|
|
self._TextIndex +=1
|
|
if self._TextIndex > len(self._MyWords):
|
|
self._TextIndex = len(self._MyWords)
|
|
|
|
def ResetMyWords(self):
|
|
self._MyWords = []
|
|
self._TextIndex = 0
|
|
|
|
def RemoveFromLastText(self):
|
|
if len(self._MyWords) > 0:
|
|
self.SubTextIndex()
|
|
|
|
del self._MyWords[self._TextIndex]
|
|
|
|
return self._MyWords
|
|
|
|
def AppendText(self,alphabet):
|
|
|
|
self.AppendAndBlitText(alphabet)
|
|
|
|
def AppendAndBlitText(self,alphabet):
|
|
|
|
if self._TextFull != True:
|
|
|
|
self._MyWords.insert(self._TextIndex,alphabet)
|
|
self.BlitText()
|
|
self.AddTextIndex()
|
|
else:
|
|
print("is Full %s" % "".join(self._MyWords))
|
|
|
|
|
|
def BlitText(self):
|
|
"""
|
|
blit every single word into surface and calc the width ,check multi line
|
|
"""
|
|
w = 0
|
|
xmargin = 5
|
|
endmargin = 15
|
|
x = self._PosX+xmargin
|
|
y = self._PosY
|
|
linenumber = 0
|
|
self._TextFull = False
|
|
for i,v in enumerate(self._MyWords):
|
|
t = self._FontObj.render(v,True,(8,135,174))
|
|
w += t.get_width()
|
|
|
|
if w >= self._Width-endmargin and linenumber == 0:
|
|
x = self._PosX+xmargin
|
|
y = self._PosY+ t.get_height()
|
|
w = 0
|
|
linenumber +=1
|
|
|
|
if w >= self._Width-endmargin*4 and linenumber > 0:
|
|
self._TextFull = True
|
|
self._CanvasHWND.blit(t, (x,y))
|
|
break
|
|
self._CanvasHWND.blit(t, (x,y))
|
|
x += t.get_width()
|
|
|
|
def Cursor(self):
|
|
w = 0
|
|
xmargin = 5
|
|
endmargin = 15
|
|
x = self._PosX+xmargin
|
|
y = self._PosY
|
|
linenumber = 0
|
|
for i,v in enumerate(self._MyWords[:self._TextIndex]):
|
|
t = self._FontObj.render(v,True,(8,135,174))
|
|
w += t.get_width()
|
|
|
|
if w >= self._Width-endmargin and linenumber == 0:
|
|
x = self._PosX+xmargin
|
|
y = self._PosY+ t.get_height()
|
|
w = 0
|
|
linenumber +=1
|
|
|
|
if w >= self._Width-endmargin*3 and linenumber > 0:
|
|
x += t.get_width()
|
|
break
|
|
x += t.get_width()
|
|
|
|
self._CanvasHWND.blit(self._FontObj.render("_",True,(0,0,0)),(x+1,y-2))
|
|
|
|
def Draw(self):
|
|
#aa_round_rect(self._CanvasHWND, (4,24.5+6,312,60),self._BackgroundColor,4,0,self._BackgroundColor)
|
|
|
|
aa_round_rect(self._CanvasHWND,
|
|
(self._PosX,self._PosY,self._Width,self._Height),self._BackgroundColor,4,0,self._BackgroundColor)
|
|
|
|
|
|
|
|
self.BlitText()
|
|
self.Cursor()
|