From acc18cd6e4764ad400fc84c314dec2fdc23a3354 Mon Sep 17 00:00:00 2001 From: themixray <35273590+themixray@users.noreply.github.com> Date: Mon, 8 Nov 2021 21:37:15 +0300 Subject: [PATCH] Add files via upload --- build/lib/pygwin/font.py | 8 +++--- build/lib/pygwin/ui.py | 47 ++++++++++++++++++++++++------------ dist/pygwin-0.1.0-py3.7.egg | Bin 291999 -> 292541 bytes pygwin/font.py | 8 +++--- pygwin/ui.py | 47 ++++++++++++++++++++++++------------ 5 files changed, 68 insertions(+), 42 deletions(-) diff --git a/build/lib/pygwin/font.py b/build/lib/pygwin/font.py index 9b1cdf2..4532537 100644 --- a/build/lib/pygwin/font.py +++ b/build/lib/pygwin/font.py @@ -15,14 +15,12 @@ class font: font.set_underline(underline) if text.replace('\n', '') != text: text = text.split('\n') - surf = _pg.Surface([ - font.size(max(text, key=len))[0], - (font.size('123')[1]+newLineSpace)*len(text)], - pygame.SRCALPHA) + surf = _pg.Surface([font.size(max(text,key=lambda x:font.size(x)[0]))[0], + (font.size('123')[1]+newLineSpace)*len(text)],_pg.SRCALPHA) y = 0 for i in text: r = font.render(i, True, color) - surf.blit(r, (r.get_rect(center=(int(surf.get_width()/2),y)).x, y)) + surf.blit(r, (0, y)) y += font.size(i)[1] if i != text[-1]: y += newLineSpace diff --git a/build/lib/pygwin/ui.py b/build/lib/pygwin/ui.py index bded428..590a305 100644 --- a/build/lib/pygwin/ui.py +++ b/build/lib/pygwin/ui.py @@ -208,9 +208,12 @@ class entry(widget): def insert(self,text): if _ct.WinDLL("User32.dll").GetKeyState(0x14): text = text.upper() + if _pg.key.get_pressed()[_pg.K_LSHIFT] or _pg.key.get_pressed()[_pg.K_RSHIFT]: + text = text.translate(dict(zip(map(ord, '''1234567890-=[]\\;'''+"',./`"), + '''!@#$%^&*()_+{}|:"<>?~'''))) if hex(getattr(_ct.windll.LoadLibrary("user32.dll"), "GetKeyboardLayout")(0))=='0x4190419': text = text.translate(dict(zip(map(ord, '''qwertyuiop[]asdfghjkl;'zxcvbnm,./`QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>?~'''), - '''йцукенгшщзхъфывапролджэячсмитьбю.ёЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,Ё'''))) + '''йцукенгшщзхъфывапролджэячсмитьбю.ёЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,Ё'''))) if text in self.blacklist: return if self.whitelist != None: @@ -226,7 +229,7 @@ class entry(widget): self._generate(pos) win.blit(self.surface,pos) def get(self): - return text + return self.text class textarea(widget): def __init__(self,hint='',fontSize=30, font=_df,width=None,bg=(70,70,70), @@ -243,14 +246,13 @@ class textarea(widget): self.wcl = False self.startHint = self.hint self.ws = False + if self.hint != '': + hintSize = self.font.size(self.hint,self.fontSize) + else: + hintSize = (150,self.font.size('X',self.fontSize)[1]) + self.height = hintSize[1]+10 if self.width == None: - if self.hint != '': - hintSize = self.font.size(self.hint,self.fontSize) - else: - hintSize = (150,self.font.size('X',self.fontSize)[1]) - self.height = hintSize[1]+10 - if self.width == None: - self.width = hintSize[0]+50 + self.width = hintSize[0]+50 self.surface = _s((self.width,self.height)) self.wclk = [] self.wsnr = False @@ -268,9 +270,13 @@ class textarea(widget): text = self.font.render(self.hint,self.fontSize,self.hintColor) else: text = self.font.render(self.text,self.fontSize,self.afg) + try: + last = self.text.split('\n')[-1] + except: + last = self.text x = 10 - if text.size[0] >= self.surface.size[0]-20: - x = self.surface.size[0]-text.size[0]-10 + if self.font.size(last,self.fontSize)[0] >= self.surface.size[0]-20: + x = self.surface.size[0]-self.font.size(last,self.fontSize)[0] self.surface.blit(text,(x,self.surface.size[1]/2-text.size[1]/2)) for i in _k.getPressed().items(): if i[1]: @@ -293,8 +299,8 @@ class textarea(widget): self.tick += 1 if self.tick >= 60: if self.text != '': - points = [[x+text.size[0],self.surface.size[1]/2-text.size[1]/2], - [x+text.size[0],self.surface.size[1]/2-text.size[1]/2+self.surface.size[1]-10]] + points = [[x+self.font.size(last,self.fontSize)[0],self.surface.size[1]-(self.font.size('X',self.fontSize)[1]+10)], + [x+self.font.size(last,self.fontSize)[0],self.surface.size[1]/2-text.size[1]/2+self.surface.size[1]-10]] self.surface.draw.line(self.lineColor,points[0],points[1],3) if self.tick == 120: self.tick = 0 @@ -306,9 +312,13 @@ class textarea(widget): text = self.font.render(self.hint,self.fontSize,self.hintColor) else: text = self.font.render(self.text,self.fontSize,self.fg) + try: + last = self.text.split('\n')[-1] + except: + last = self.text x = self.surface.size[0]/2-text.size[0]/2 - if text.size[0] >= self.surface.size[0]-20: - x = self.surface.size[0]-text.size[0]-10 + if self.font.size(last,self.fontSize)[0] >= self.surface.size[0]-20: + x = self.surface.size[0]-self.font.size(last,self.fontSize)[0] self.surface.blit(text,(x,self.surface.size[1]/2-text.size[1]/2)) if position != None: @@ -337,6 +347,9 @@ class textarea(widget): def insert(self,text): if _ct.WinDLL("User32.dll").GetKeyState(0x14): text = text.upper() + if _pg.key.get_pressed()[_pg.K_LSHIFT] or _pg.key.get_pressed()[_pg.K_RSHIFT]: + text = text.translate(dict(zip(map(ord, '''1234567890-=[]\\;'''+"',./`"), + '''!@#$%^&*()_+{}|:"<>?~'''))) if hex(getattr(_ct.windll.LoadLibrary("user32.dll"), "GetKeyboardLayout")(0))=='0x4190419': text = text.translate(dict(zip(map(ord, '''qwertyuiop[]asdfghjkl;'zxcvbnm,./`QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>?~'''), '''йцукенгшщзхъфывапролджэячсмитьбю.ёЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,Ё'''))) @@ -355,7 +368,7 @@ class textarea(widget): self._generate(pos) win.blit(self.surface,pos) def get(self): - return text + return self.text class keySelect(entry): def __init__(self,keyBefore='', fontSize=30,font=_df, @@ -629,3 +642,5 @@ class menu: return self._page def getWidgets(self, page=0): return self._widgets[page] + def setWidgetPos(self,index,pos,page=0): + self._widgets[page][index] = [self._widgets[page][index][0], pos] diff --git a/dist/pygwin-0.1.0-py3.7.egg b/dist/pygwin-0.1.0-py3.7.egg index cea2cb3a271de7f5af07474d7180d25ac772854e..f28b5c834db8c35a74ff0adc55aa9d2d3d78ba70 100644 GIT binary patch delta 14131 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'''))) if hex(getattr(_ct.windll.LoadLibrary("user32.dll"), "GetKeyboardLayout")(0))=='0x4190419': text = text.translate(dict(zip(map(ord, '''qwertyuiop[]asdfghjkl;'zxcvbnm,./`QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>?~'''), - '''йцукенгшщзхъфывапролджэячсмитьбю.ёЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,Ё'''))) + '''йцукенгшщзхъфывапролджэячсмитьбю.ёЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,Ё'''))) if text in self.blacklist: return if self.whitelist != None: @@ -226,7 +229,7 @@ class entry(widget): self._generate(pos) win.blit(self.surface,pos) def get(self): - return text + return self.text class textarea(widget): def __init__(self,hint='',fontSize=30, font=_df,width=None,bg=(70,70,70), @@ -243,14 +246,13 @@ class textarea(widget): self.wcl = False self.startHint = self.hint self.ws = False + if self.hint != '': + hintSize = self.font.size(self.hint,self.fontSize) + else: + hintSize = (150,self.font.size('X',self.fontSize)[1]) + self.height = hintSize[1]+10 if self.width == None: - if self.hint != '': - hintSize = self.font.size(self.hint,self.fontSize) - else: - hintSize = (150,self.font.size('X',self.fontSize)[1]) - self.height = hintSize[1]+10 - if self.width == None: - self.width = hintSize[0]+50 + self.width = hintSize[0]+50 self.surface = _s((self.width,self.height)) self.wclk = [] self.wsnr = False @@ -268,9 +270,13 @@ class textarea(widget): text = self.font.render(self.hint,self.fontSize,self.hintColor) else: text = self.font.render(self.text,self.fontSize,self.afg) + try: + last = self.text.split('\n')[-1] + except: + last = self.text x = 10 - if text.size[0] >= self.surface.size[0]-20: - x = self.surface.size[0]-text.size[0]-10 + if self.font.size(last,self.fontSize)[0] >= self.surface.size[0]-20: + x = self.surface.size[0]-self.font.size(last,self.fontSize)[0] self.surface.blit(text,(x,self.surface.size[1]/2-text.size[1]/2)) for i in _k.getPressed().items(): if i[1]: @@ -293,8 +299,8 @@ class textarea(widget): self.tick += 1 if self.tick >= 60: if self.text != '': - points = [[x+text.size[0],self.surface.size[1]/2-text.size[1]/2], - [x+text.size[0],self.surface.size[1]/2-text.size[1]/2+self.surface.size[1]-10]] + points = [[x+self.font.size(last,self.fontSize)[0],self.surface.size[1]-(self.font.size('X',self.fontSize)[1]+10)], + [x+self.font.size(last,self.fontSize)[0],self.surface.size[1]/2-text.size[1]/2+self.surface.size[1]-10]] self.surface.draw.line(self.lineColor,points[0],points[1],3) if self.tick == 120: self.tick = 0 @@ -306,9 +312,13 @@ class textarea(widget): text = self.font.render(self.hint,self.fontSize,self.hintColor) else: text = self.font.render(self.text,self.fontSize,self.fg) + try: + last = self.text.split('\n')[-1] + except: + last = self.text x = self.surface.size[0]/2-text.size[0]/2 - if text.size[0] >= self.surface.size[0]-20: - x = self.surface.size[0]-text.size[0]-10 + if self.font.size(last,self.fontSize)[0] >= self.surface.size[0]-20: + x = self.surface.size[0]-self.font.size(last,self.fontSize)[0] self.surface.blit(text,(x,self.surface.size[1]/2-text.size[1]/2)) if position != None: @@ -337,6 +347,9 @@ class textarea(widget): def insert(self,text): if _ct.WinDLL("User32.dll").GetKeyState(0x14): text = text.upper() + if _pg.key.get_pressed()[_pg.K_LSHIFT] or _pg.key.get_pressed()[_pg.K_RSHIFT]: + text = text.translate(dict(zip(map(ord, '''1234567890-=[]\\;'''+"',./`"), + '''!@#$%^&*()_+{}|:"<>?~'''))) if hex(getattr(_ct.windll.LoadLibrary("user32.dll"), "GetKeyboardLayout")(0))=='0x4190419': text = text.translate(dict(zip(map(ord, '''qwertyuiop[]asdfghjkl;'zxcvbnm,./`QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>?~'''), '''йцукенгшщзхъфывапролджэячсмитьбю.ёЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,Ё'''))) @@ -355,7 +368,7 @@ class textarea(widget): self._generate(pos) win.blit(self.surface,pos) def get(self): - return text + return self.text class keySelect(entry): def __init__(self,keyBefore='', fontSize=30,font=_df, @@ -629,3 +642,5 @@ class menu: return self._page def getWidgets(self, page=0): return self._widgets[page] + def setWidgetPos(self,index,pos,page=0): + self._widgets[page][index] = [self._widgets[page][index][0], pos]