From c0731d3b2a46ac329664e5139423bef856f8e97e Mon Sep 17 00:00:00 2001 From: MeexReay Date: Sat, 20 Sep 2025 15:56:18 +0300 Subject: [PATCH] refactorization --- .gitignore | 4 + LICENSE | 28 +- README.md | 21 +- build/lib/pygwin/__main__.py | 8 - build/lib/pygwin/_win.py | 231 ------ build/lib/pygwin/build.py | 7 - build/lib/pygwin/console.py | 67 -- dist/pgw-0.1.2-py3.7.egg | Bin 51006 -> 0 bytes dist/pygwin2-2.0.0-py3-none-any.whl | Bin 0 -> 18924 bytes dist/pygwin2-2.0.0.tar.gz | Bin 0 -> 15726 bytes docs/DOCS.md | 1 + pygwin2.egg-info/PKG-INFO | 56 ++ pygwin2.egg-info/SOURCES.txt | 0 .../dependency_links.txt | 0 .../requires.txt | 14 +- .../top_level.txt | 0 pyproject.toml | 43 +- setup.bat | 4 - setup.cfg | 21 - setup.py | 6 - src/pgw.egg-info/PKG-INFO | 28 - src/pgw.egg-info/SOURCES.txt | 26 - src/pygwin/__init__.py | 16 - .../__pycache__/__init__.cpython-37.pyc | Bin 672 -> 0 bytes src/pygwin/__pycache__/_pg.cpython-37.pyc | Bin 517 -> 0 bytes src/pygwin/__pycache__/_win.cpython-37.pyc | Bin 7514 -> 0 bytes src/pygwin/__pycache__/console.cpython-37.pyc | Bin 3673 -> 0 bytes src/pygwin/__pycache__/font.cpython-37.pyc | Bin 2007 -> 0 bytes src/pygwin/__pycache__/gamepad.cpython-37.pyc | Bin 3198 -> 0 bytes src/pygwin/__pycache__/image.cpython-37.pyc | Bin 1558 -> 0 bytes .../__pycache__/keyboard.cpython-37.pyc | Bin 989 -> 0 bytes src/pygwin/__pycache__/mixer.cpython-37.pyc | Bin 4683 -> 0 bytes src/pygwin/__pycache__/mouse.cpython-37.pyc | Bin 1908 -> 0 bytes src/pygwin/__pycache__/rect.cpython-37.pyc | Bin 2228 -> 0 bytes src/pygwin/__pycache__/surface.cpython-37.pyc | Bin 5679 -> 0 bytes src/pygwin/__pycache__/tray.cpython-37.pyc | Bin 2966 -> 0 bytes src/pygwin/__pycache__/ui.cpython-37.pyc | Bin 23057 -> 0 bytes src/pygwin/_pg.py | 16 - src/pygwin/color.py | 27 - src/pygwin/font.py | 43 - src/pygwin/gamepad.py | 114 --- src/pygwin/image.py | 43 - src/pygwin/keyboard.py | 22 - src/pygwin/mixer.py | 92 --- src/pygwin/mouse.py | 36 - src/pygwin/record.py | 107 --- src/pygwin/rect.py | 60 -- src/pygwin/surface.py | 150 ---- src/pygwin/tray.py | 49 -- src/pygwin/ui.py | 734 ------------------ src/pygwin2.egg-info/PKG-INFO | 54 ++ src/pygwin2.egg-info/SOURCES.txt | 24 + src/pygwin2.egg-info/dependency_links.txt | 1 + src/pygwin2.egg-info/requires.txt | 14 + src/pygwin2.egg-info/top_level.txt | 1 + {build/lib/pygwin => src/pygwin2}/__init__.py | 0 {build/lib/pygwin => src/pygwin2}/_pg.py | 0 src/{pygwin => pygwin2}/_win.py | 0 {build/lib/pygwin => src/pygwin2}/color.py | 0 src/{pygwin => pygwin2}/console.py | 0 {build/lib/pygwin => src/pygwin2}/font.py | 0 {build/lib/pygwin => src/pygwin2}/gamepad.py | 0 {build/lib/pygwin => src/pygwin2}/image.py | 0 {build/lib/pygwin => src/pygwin2}/keyboard.py | 0 {build/lib/pygwin => src/pygwin2}/mixer.py | 0 {build/lib/pygwin => src/pygwin2}/mouse.py | 0 {build/lib/pygwin => src/pygwin2}/record.py | 0 {build/lib/pygwin => src/pygwin2}/rect.py | 0 {build/lib/pygwin => src/pygwin2}/surface.py | 0 {build/lib/pygwin => src/pygwin2}/tray.py | 0 {build/lib/pygwin => src/pygwin2}/ui.py | 0 71 files changed, 218 insertions(+), 1950 deletions(-) create mode 100644 .gitignore delete mode 100644 build/lib/pygwin/__main__.py delete mode 100644 build/lib/pygwin/_win.py delete mode 100644 build/lib/pygwin/build.py delete mode 100644 build/lib/pygwin/console.py delete mode 100644 dist/pgw-0.1.2-py3.7.egg create mode 100644 dist/pygwin2-2.0.0-py3-none-any.whl create mode 100644 dist/pygwin2-2.0.0.tar.gz create mode 100644 docs/DOCS.md create mode 100644 pygwin2.egg-info/PKG-INFO create mode 100644 pygwin2.egg-info/SOURCES.txt rename {src/pgw.egg-info => pygwin2.egg-info}/dependency_links.txt (100%) rename {src/pgw.egg-info => pygwin2.egg-info}/requires.txt (85%) rename {src/pgw.egg-info => pygwin2.egg-info}/top_level.txt (100%) delete mode 100644 setup.bat delete mode 100644 setup.cfg delete mode 100644 setup.py delete mode 100644 src/pgw.egg-info/PKG-INFO delete mode 100644 src/pgw.egg-info/SOURCES.txt delete mode 100644 src/pygwin/__init__.py delete mode 100644 src/pygwin/__pycache__/__init__.cpython-37.pyc delete mode 100644 src/pygwin/__pycache__/_pg.cpython-37.pyc delete mode 100644 src/pygwin/__pycache__/_win.cpython-37.pyc delete mode 100644 src/pygwin/__pycache__/console.cpython-37.pyc delete mode 100644 src/pygwin/__pycache__/font.cpython-37.pyc delete mode 100644 src/pygwin/__pycache__/gamepad.cpython-37.pyc delete mode 100644 src/pygwin/__pycache__/image.cpython-37.pyc delete mode 100644 src/pygwin/__pycache__/keyboard.cpython-37.pyc delete mode 100644 src/pygwin/__pycache__/mixer.cpython-37.pyc delete mode 100644 src/pygwin/__pycache__/mouse.cpython-37.pyc delete mode 100644 src/pygwin/__pycache__/rect.cpython-37.pyc delete mode 100644 src/pygwin/__pycache__/surface.cpython-37.pyc delete mode 100644 src/pygwin/__pycache__/tray.cpython-37.pyc delete mode 100644 src/pygwin/__pycache__/ui.cpython-37.pyc delete mode 100644 src/pygwin/_pg.py delete mode 100644 src/pygwin/color.py delete mode 100644 src/pygwin/font.py delete mode 100644 src/pygwin/gamepad.py delete mode 100644 src/pygwin/image.py delete mode 100644 src/pygwin/keyboard.py delete mode 100644 src/pygwin/mixer.py delete mode 100644 src/pygwin/mouse.py delete mode 100644 src/pygwin/record.py delete mode 100644 src/pygwin/rect.py delete mode 100644 src/pygwin/surface.py delete mode 100644 src/pygwin/tray.py delete mode 100644 src/pygwin/ui.py create mode 100644 src/pygwin2.egg-info/PKG-INFO create mode 100644 src/pygwin2.egg-info/SOURCES.txt create mode 100644 src/pygwin2.egg-info/dependency_links.txt create mode 100644 src/pygwin2.egg-info/requires.txt create mode 100644 src/pygwin2.egg-info/top_level.txt rename {build/lib/pygwin => src/pygwin2}/__init__.py (100%) rename {build/lib/pygwin => src/pygwin2}/_pg.py (100%) rename src/{pygwin => pygwin2}/_win.py (100%) rename {build/lib/pygwin => src/pygwin2}/color.py (100%) rename src/{pygwin => pygwin2}/console.py (100%) rename {build/lib/pygwin => src/pygwin2}/font.py (100%) rename {build/lib/pygwin => src/pygwin2}/gamepad.py (100%) rename {build/lib/pygwin => src/pygwin2}/image.py (100%) rename {build/lib/pygwin => src/pygwin2}/keyboard.py (100%) rename {build/lib/pygwin => src/pygwin2}/mixer.py (100%) rename {build/lib/pygwin => src/pygwin2}/mouse.py (100%) rename {build/lib/pygwin => src/pygwin2}/record.py (100%) rename {build/lib/pygwin => src/pygwin2}/rect.py (100%) rename {build/lib/pygwin => src/pygwin2}/surface.py (100%) rename {build/lib/pygwin => src/pygwin2}/tray.py (100%) rename {build/lib/pygwin => src/pygwin2}/ui.py (100%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a319ecc --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +build/ +dist/ +pygwin2.egg-info/ +src/pygwin2/__pycache__/ diff --git a/LICENSE b/LICENSE index a788751..22c2c75 100644 --- a/LICENSE +++ b/LICENSE @@ -1,19 +1,13 @@ -Copyright (c) 2018 The Python Packaging Authority + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + +Copyright (C) 2004 Sam Hocevar -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Everyone is permitted to copy and distribute verbatim or modified +copies of this license document, and changing it is allowed as long +as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/README.md b/README.md index 9a50aed..8afd435 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,12 @@ -

- PyGWin -

-

- A library for creating Python applications. -

+# Pygwin2 -

- - Documentation - -

+A library for creating GUI-applications on pygame. -

- Template -

+[Documentation](docs/DOCS.md) + +## Usage + +Here is a small example of usage (pygame style): ```py import pygwin diff --git a/build/lib/pygwin/__main__.py b/build/lib/pygwin/__main__.py deleted file mode 100644 index 01ba041..0000000 --- a/build/lib/pygwin/__main__.py +++ /dev/null @@ -1,8 +0,0 @@ -import argparse - -parser = argparse.ArgumentParser(description='Process some integers.') -parser.add_argument('args') -# parser.add_argument() - -args = parser.parse_args() -print(args.args) diff --git a/build/lib/pygwin/_win.py b/build/lib/pygwin/_win.py deleted file mode 100644 index 4eae82d..0000000 --- a/build/lib/pygwin/_win.py +++ /dev/null @@ -1,231 +0,0 @@ -from pygwin.surface import surface as _surface -from pygwin.tray import tray as _tray -from datetime import datetime as _dt -from pygwin.image import save as _s -from pygwin._pg import pg as _pg -import pygwin.image as _img -try: - import win32job as _w32j - import win32api as _w32a - import win32con as _w32c - import win32gui as _w32g - nonwin32api = False -except: - nonwin32api = True -import sys as _sys -import warnings as _warn -import winwerror as _we -import requests as _req -import tempfile as _tf -import threading as _t -import pickle as _p -import mouse as _m -import time as _ti - -class _win(_surface): - def __init__(self, iconpath=None): - self._orig = _pg.display.get_surface() - super().__init__(self._orig.get_size()) - self._orig = _pg.display.get_surface() - self._clock = _pg.time.Clock() - self._withfps = False - self._iconpath = iconpath - self._isallowdrag = False - # self._issmartdrag = False - if iconpath != None: - self.tray = _tray(self.title,iconpath) - def update(self, fps=-1): - if fps != -1: - self._clock.tick(fps) - self._withfps = True - _pg.display.update() - def resize(self, size=None): - if size == None: - return self.size - else: - self._orig = _pg.display.set_mode(size) - def title(): - def fget(self): - return _pg.display.get_caption()[0] - def fset(self, value): - if type(value) != str: - return - _pg.display.set_caption(value) - def fdel(self): - pass - return locals() - title = property(**title()) - def icon(value): - _pg.display.set_icon(_pg.image.load(value)) - self._iconpath = iconpath - def size(): - def fget(self): - return _pg.display.get_window_size() - def fset(self, value): - if type(value) in [list,tuple]: - return - _pg.display.set_mode(value) - def fdel(self): - pass - return locals() - size = property(**size()) - def fullscreen(self): - _pg.display.toogle_fullscreen() - def close(self): - # _w32g.PostMessage(self.hwnd, _w32c.WM_CLOSE, 0, 0) - _pg.display.quit() - try:self.tray.stop() - except:pass - def focus(self): - if not nonwin32api: - self.hide() - self.show() - _w32g.BringWindowToTop(self.hwnd) - _w32g.ShowWindow(self.hwnd, _w32c.SW_SHOWNORMAL) - _w32g.SetForegroundWindow(self.hwnd) - def hide(self): - if not nonwin32api: - _w32g.ShowWindow(self.hwnd, _w32c.SW_HIDE) - def show(self): - if not nonwin32api: - _w32g.ShowWindow(self.hwnd, _w32c.SW_SHOW) - def move(self, x, y): - if not nonwin32api: - rect = self._getRect() - _w32g.MoveWindow(self.hwnd, int(x), int(y), - rect[2]-x, rect[3]-y, 0) - def screenshot(self, path): - _s(self._orig, path) - return path - def center(self,x=_pg.display.get_desktop_sizes()[0][0]/2, - y=_pg.display.get_desktop_sizes()[0][1]/2): - self.move(x-self.size[0]/2,y-self.size[1]/2) - def _getRect(self): - if not nonwin32api: - return _w32g.GetWindowRect(self.hwnd) - def denyDrag(self): - if not nonwin32api: - self._isallowdrag = True - def loop(self): - while self._isallowdrag: - pos = _m.get_position() - pos = [pos[i]-self.position[i] for i in range(2)] - if pos[0] < self._getRect()[2]-137: - if pos[1] < 30: - _m.release('left') - _t.Thread(target=lambda:loop(self),daemon=1).start() - def allowDrag(self): - if not nonwin32api: - self._isallowdrag = False - # def smartDrag(self, x): - # self.allowDrag() - # self._issmartdrag = x - # if x: - # self._isallowdrag = True - # def loop(self): - # wsd = None - # while self._issmartdrag: - # self.update() - # pos = _m.get_position() - # pos = [pos[i]-self.position[i] for i in range(2)] - # if pos[0] < _w32g.GetWindowRect(self.hwnd)[2]-137: - # if pos[1] < 30: - # if _m.is_pressed('left'): - # _m.release('left') - # if wsd == None: - # wsd = pos+list(self.position) - # else: - # if wsd != pos+list(self.position): - # self.move(wsd[2]+(pos[0]-wsd[0]), - # wsd[3]+(pos[1]-wsd[1])) - # else: - # wsd = None - # _ti.sleep(0.5) - # _t.Thread(target=lambda:loop(self),daemon=1).start() - @property - def position(self): - if not nonwin32api: - rect = self._getRect() - x = rect[0] - y = rect[1] - return (x, y) - @property - def rawFps(self): - if self._withfps: - return self._clock.get_fps() - else: - return float(f'2010.{_dt.now().year}') - @property - def fps(self): - return int(self.rawFps) - @property - def hwnd(self): - if not nonwin32api: - return _pg.display.get_wm_info()['window'] - @property - def visible(self): - if not nonwin32api: - return _w32g.IsWindowVisible(self._win) - -def create(title=None, size=(0,0), icon=None, resizable=False, noframe=False): - screen = _pg.display.set_mode(size) - if resizable: - screen = _pg.display.set_mode(size,_pg.RESIZABLE) - if noframe: - screen = _pg.display.set_mode(size,_pg.NOFRAME) - else: - if title != None: - _pg.display.set_caption(title) - if icon != None: - _pg.display.set_icon(_pg.image.load(icon)) - return _win(icon) - -def ramLimit(memory_limit): - if not nonwin32api: - g_hjob = None - def create_job(job_name='', breakaway='silent'): - hjob = _w32j.CreateJobObject(None, job_name) - if breakaway: - info = _w32j.QueryInformationJobObject(hjob, - _w32j.JobObjectExtendedLimitInformation) - if breakaway == 'silent': - info['BasicLimitInformation']['LimitFlags'] |= ( - _w32j.JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK) - else: - info['BasicLimitInformation']['LimitFlags'] |= ( - _w32j.JOB_OBJECT_LIMIT_BREAKAWAY_OK) - _w32j.SetInformationJobObject(hjob, - _w32j.JobObjectExtendedLimitInformation, info) - return hjob - def assign_job(hjob): - global g_hjob - hprocess = _w32a.GetCurrentProcess() - try: - _w32j.AssignProcessToJobObject(hjob, hprocess) - g_hjob = hjob - except _w32j.error as e: - if (e._we != _we.ERROR_ACCESS_DENIED or - _sys.getwindowsversion() >= (6, 2) or - not _w32j.IsProcessInJob(hprocess, None)): - raise - _warn.warn('The process is already in a job. Nested jobs are not ' - 'supported prior to Windows 8.') - def limit_memory(memory_limit): - if g_hjob is None: - return - info = _w32j.QueryInformationJobObject(g_hjob, - _w32j.JobObjectExtendedLimitInformation) - info['ProcessMemoryLimit'] = memory_limit - info['BasicLimitInformation']['LimitFlags'] |= ( - _w32j.JOB_OBJECT_LIMIT_PROCESS_MEMORY) - _w32j.SetInformationJobObject(g_hjob, - _w32j.JobObjectExtendedLimitInformation, info) - assign_job(create_job()) - limit_memory(memory_limit) - -def close(): - _pg.quit() - quit() - -def getEvents(): - return _pg.event.get() diff --git a/build/lib/pygwin/build.py b/build/lib/pygwin/build.py deleted file mode 100644 index ca6c3ba..0000000 --- a/build/lib/pygwin/build.py +++ /dev/null @@ -1,7 +0,0 @@ -import argparse - -parser = argparse.ArgumentParser(description='Process some integers.') -parser.add_argument('args') - -args = parser.parse_args() -print(args.accumulate(args.args)) diff --git a/build/lib/pygwin/console.py b/build/lib/pygwin/console.py deleted file mode 100644 index 1495e70..0000000 --- a/build/lib/pygwin/console.py +++ /dev/null @@ -1,67 +0,0 @@ -import win32console as w32con -import win32con as w32c -import win32gui as w32g -import win32api as w32a -import pyautogui as pag - -class console: - def __init__(self): - self._hwnd = w32con.GetConsoleWindow() - @property - def hwnd(self): - return self._hwnd - def focus(self): - self.hide() - self.show() - w32g.BringWindowToTop(self.hwnd) - w32g.ShowWindow(self.hwnd, w32c.SW_SHOWNORMAL) - w32g.SetForegroundWindow(self.hwnd) - def unfocus(self): - pass - def hide(self): - w32g.ShowWindow(self.hwnd, w32c.SW_HIDE) - def show(self): - w32g.ShowWindow(self.hwnd, w32c.SW_SHOW) - def move(self, x, y): - w32g.SetWindowPos(self.hwnd, x, y, self.size[0], self.size[1]) - def resize(self, width, height): - w32g.SetWindowPos(self.hwnd, self.position[0], self.position[1], width, height) - def minimize(self): - w32g.ShowWindow(hwnd, w32c.SW_MINIMIZE) - return self.size - def maximize(self): - w32g.ShowWindow(hwnd, w32c.SW_MAXIMIZE) - return self.size - def title(): - def fget(self): - return w32con.GetConsoleTitle() - def fset(self, value): - w32con.SetConsoleTitle(str(value)) - def fdel(self): - pass - return locals() - title = property(**title()) - def center(self,x=w32a.GetSystemMetrics(0)/2, - y=w32a.GetSystemMetrics(1)/2): - self.move(x-self.size[0]/2,y-self.size[1]/2) - @property - def visible(self): - return w32g.IsWindowVisible(self.hwnd) - @property - def position(self): - rect = w32g.GetWindowRect(self.hwnd) - x = rect[0]+7 - y = rect[1] - return (x, y) - @property - def size(self): - rect = w32g.GetWindowRect(self.hwnd) - w = rect[2] - self.position[0]-7 - h = rect[3] - self.position[1]-7 - return (w, h) - def screenshot(self, path): - rect = self.position+self.size - self.focus() - pag.screenshot(path, region=rect) - return path -console = console() diff --git a/dist/pgw-0.1.2-py3.7.egg b/dist/pgw-0.1.2-py3.7.egg deleted file mode 100644 index ca09cf0755232e9cb9f4ba1584c81d94ac53fae6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51006 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 MC}L$`NO1x20Gd=K#{d8T literal 0 HcmV?d00001 diff --git a/dist/pygwin2-2.0.0.tar.gz b/dist/pygwin2-2.0.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..fd7d8e794050edfcdf97dbfedcc593a10dbabbae GIT binary patch literal 15726 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 literal 0 HcmV?d00001 diff --git a/docs/DOCS.md b/docs/DOCS.md new file mode 100644 index 0000000..37950d8 --- /dev/null +++ b/docs/DOCS.md @@ -0,0 +1 @@ +empty for now diff --git a/pygwin2.egg-info/PKG-INFO b/pygwin2.egg-info/PKG-INFO new file mode 100644 index 0000000..e8838e9 --- /dev/null +++ b/pygwin2.egg-info/PKG-INFO @@ -0,0 +1,56 @@ +Metadata-Version: 2.4 +Name: pygwin2 +Version: 2.0.0 +Summary: A small example package +Author: themixray +Author-email: MeexReay +License-Expression: WTFPL +Project-URL: Homepage, https://github.com/MeexReay/pygwin2 +Project-URL: Issues, https://github.com/MeexReay/pygwin2/issues +Keywords: gui,pygame,windows +Classifier: Programming Language :: Python :: 3 +Classifier: Operating System :: OS Independent +Requires-Python: >=3.7 +Description-Content-Type: text/markdown +License-File: LICENSE +Requires-Dist: pydub +Requires-Dist: pygame +Requires-Dist: requests +Requires-Dist: pyautogui +Requires-Dist: inputs +Requires-Dist: pillow +Requires-Dist: wxPython +Requires-Dist: randstr +Requires-Dist: cython +Requires-Dist: pywin32 +Requires-Dist: moviepy +Requires-Dist: pipwin +Requires-Dist: wave +Requires-Dist: opencv-python +Dynamic: author +Dynamic: license-file + +# Pygwin2 + +A library for creating GUI-applications on pygame. + +[Documentation](docs/DOCS.md) + +## Usage + +Here is a small example of usage (pygame style): + +```py +import pygwin + +win = pygwin.create('Title',(500,500)) + +run = True +while run: + for event in pygwin.getEvents(): + if event.type == pygwin.QUIT: + run = False + + win.update() +pygwin.close() +``` diff --git a/pygwin2.egg-info/SOURCES.txt b/pygwin2.egg-info/SOURCES.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/pgw.egg-info/dependency_links.txt b/pygwin2.egg-info/dependency_links.txt similarity index 100% rename from src/pgw.egg-info/dependency_links.txt rename to pygwin2.egg-info/dependency_links.txt diff --git a/src/pgw.egg-info/requires.txt b/pygwin2.egg-info/requires.txt similarity index 85% rename from src/pgw.egg-info/requires.txt rename to pygwin2.egg-info/requires.txt index a486ac9..c94d044 100644 --- a/src/pgw.egg-info/requires.txt +++ b/pygwin2.egg-info/requires.txt @@ -1,11 +1,13 @@ +pydub +pygame +requests +pyautogui +inputs +pillow +wxPython +randstr cython pywin32 -pygame -inputs -randstr -pydub -wxPython -pyautogui moviepy pipwin wave diff --git a/src/pgw.egg-info/top_level.txt b/pygwin2.egg-info/top_level.txt similarity index 100% rename from src/pgw.egg-info/top_level.txt rename to pygwin2.egg-info/top_level.txt diff --git a/pyproject.toml b/pyproject.toml index 1f0309a..3e8e411 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,13 +1,44 @@ -[build-system] -requires = [ +[project] +name = "pygwin2" +version = "2.0.0" +authors = [ + { name="MeexReay", email="meexreay@gmail.com" }, +] +description = "A small example package" +readme = "README.md" +requires-python = ">=3.7" +classifiers = [ + "Programming Language :: Python :: 3", + "Operating System :: OS Independent", +] +license = "WTFPL" +license-files = ["LICENSE"] +dependencies = [ "pydub", "pygame", - "requests", + "requests", # ????????? "pyautogui", "inputs", "pillow", - "wxPython", - "randstr", - "setuptools >=42" + "wxPython", # crazy + "randstr", # just why + "cython", + "pywin32", + "moviepy", + "pipwin", + "wave", + "opencv-python", +] +keywords = [ + "gui", "pygame", "windows" +] + +[project.urls] +Homepage = "https://github.com/MeexReay/pygwin2" +Issues = "https://github.com/MeexReay/pygwin2/issues" + +[build-system] +requires = [ + "setuptools >= 42" ] build-backend = "setuptools.build_meta" diff --git a/setup.bat b/setup.bat deleted file mode 100644 index 1dfddbb..0000000 --- a/setup.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -pip uninstall pgw -y -python setup.py install -pipwin install pyaudio diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 49538ab..0000000 --- a/setup.cfg +++ /dev/null @@ -1,21 +0,0 @@ -[metadata] -name = pgw -version = 0.1.2 -author = themixray -author_email = simindeymo@gmail.com -description = Python Grapchical Window. -long_description = file: README.md -long_description_content_type = text/markdown -url = https://github.com/themixray/pygwin -project_urls = - Bug Tracker = https://github.com/themixray/pygwin/issues - Wiki = https://github.com/themixray/pygwin/wiki -classifiers = - Programming Language :: Python :: 3 - License :: OSI Approved :: MIT License - Operating System :: OS Independent - -[options] -package_dir = - = src -packages = find: diff --git a/setup.py b/setup.py deleted file mode 100644 index 450f6bf..0000000 --- a/setup.py +++ /dev/null @@ -1,6 +0,0 @@ -from setuptools import setup - -setup(name='pgw',packages=['pygwin'],version='0.1.2', -author='themixray',description='A library for creating Python applications.', -license='MIT',install_requires=['cython','pywin32','pygame','inputs','randstr', -'pydub','wxPython','pyautogui','moviepy','pipwin','wave','opencv-python']) diff --git a/src/pgw.egg-info/PKG-INFO b/src/pgw.egg-info/PKG-INFO deleted file mode 100644 index f2b1d30..0000000 --- a/src/pgw.egg-info/PKG-INFO +++ /dev/null @@ -1,28 +0,0 @@ -Metadata-Version: 2.1 -Name: pgw -Version: 0.1.2 -Summary: A library for creating Python applications. -Home-page: https://github.com/themixray/pygwin -Author: themixray -Author-email: simindeymo@gmail.com -License: MIT -Project-URL: Bug Tracker, https://github.com/themixray/pygwin/issues -Project-URL: Wiki, https://github.com/themixray/pygwin/wiki -Description:

- PyGWin -

-

- A library for creating Python applications. -

- -

- - Documentation - -

- -Platform: UNKNOWN -Classifier: Programming Language :: Python :: 3 -Classifier: License :: OSI Approved :: MIT License -Classifier: Operating System :: OS Independent -Description-Content-Type: text/markdown diff --git a/src/pgw.egg-info/SOURCES.txt b/src/pgw.egg-info/SOURCES.txt deleted file mode 100644 index 981ddec..0000000 --- a/src/pgw.egg-info/SOURCES.txt +++ /dev/null @@ -1,26 +0,0 @@ -LICENSE -README.md -pyproject.toml -setup.cfg -setup.py -src/pgw.egg-info/PKG-INFO -src/pgw.egg-info/SOURCES.txt -src/pgw.egg-info/dependency_links.txt -src/pgw.egg-info/requires.txt -src/pgw.egg-info/top_level.txt -src/pygwin/__init__.py -src/pygwin/_pg.py -src/pygwin/_win.py -src/pygwin/color.py -src/pygwin/console.py -src/pygwin/font.py -src/pygwin/gamepad.py -src/pygwin/image.py -src/pygwin/keyboard.py -src/pygwin/mixer.py -src/pygwin/mouse.py -src/pygwin/record.py -src/pygwin/rect.py -src/pygwin/surface.py -src/pygwin/tray.py -src/pygwin/ui.py \ No newline at end of file diff --git a/src/pygwin/__init__.py b/src/pygwin/__init__.py deleted file mode 100644 index 0e013ae..0000000 --- a/src/pygwin/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ -from pygwin.surface import surface -import pygwin.keyboard as keyboard -from pygwin.console import console -from pygwin.color import color -import pygwin.gamepad as _gp -import pygwin.mouse as mouse -from pygwin.rect import rect -import pygwin.image as image -import pygwin.mixer as mixer -from pygwin.tray import tray -from pygame.locals import * -import pygwin.font as font -from pygwin._win import * -from pygwin._pg import pg -import pygwin.ui as ui -gamepad = _gp.gamepad(pg) diff --git a/src/pygwin/__pycache__/__init__.cpython-37.pyc b/src/pygwin/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index e96bb2bbb87d2d5272382add6c03f90a41fd9846..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 672 zcmZ?b<>g{vU|{G^-;j8Sk%8echy%mS3=9ko3=9m#>lhdqQW#Pga~N_NqZk=MY^EHh zT;?cdFq=7tC6_gd70hPJVasKY;()R_bGf3pz-*Qr?p&TI9x$6Jhc}lmiVw=>&lQLg z0JB+h1apO=guraJ9N`d%JtDcHQKC>WF|ZhWj(Dy_lmu9eDMvC_DoToxA(dkRd#c1j z#whj_reFq5j+Y=`XfobnFD@-gOH5An1F@6y^NRCxQZ*TGu@t2ymw@P!qQpu~##@Y9 znvA!Y3eq*DqxcFc)5|mS^q?Axm>3usqWGbL*{PLD`H4j-Q5r?br$(_tC~l}A$Yn(=AWLD&GIJBtQ=?cR6ihHTvm&)9 ziWNe^^n!d-#0t{OTTltIQZFYzIWea=3Z@_}Kd&T;1x&((;>$DhqPU=z#}}j*v4iw; zLIp}QqnJuFS27fFFfc%fU)C;GF~#|%Maii#1(hWk`FSzx6=Rs diff --git a/src/pygwin/__pycache__/_pg.cpython-37.pyc b/src/pygwin/__pycache__/_pg.cpython-37.pyc deleted file mode 100644 index 915ad64d27b71ec053ee75e0424a36a49e21a30e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 517 zcmZ?b<>g{vU|@Kx(2!Wi$iVOz#DQT>1_lNP1_p*=KL!Sd6owSW9EM!RC?-Y_n<45~S}j8fa~4Z2V+}(Ib398GR|-QI#14iUMvzDZ$UX+BeGI`2noNGT7|S(TZ?WVT zq~_gXj?XW?#h#K{mRFjSbBiUuxU%>bTX9KBerbs&QxO{j149&7eojg}L}(>L5y&CG z%v`Kuit|g0l2c;}DoZl*^J4N#GE$3T3M$jfGxK0naZxgi8DEgDS5SFNAilV?pr9zV zxEN|6D=1KTz@Fq|WMgDwWMbrED&l5fV9?~g#RUzJoXn&mP#8op$0z6BV#+Tr0%^O& zTwGaP#LmFL09GHxR#2Iqn45ZwsUSUyB{MIx1ng8K0u;TsIBatBQ%ZAE?HFM;^DuHS Naxn35axii*0sxD!dshGe diff --git a/src/pygwin/__pycache__/_win.cpython-37.pyc b/src/pygwin/__pycache__/_win.cpython-37.pyc deleted file mode 100644 index 2224e8a684a1e9e8121ab3e81a08ea6473140359..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7514 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 NlRzpLFNZJ(3jlf?Tqytm diff --git a/src/pygwin/__pycache__/console.cpython-37.pyc b/src/pygwin/__pycache__/console.cpython-37.pyc deleted file mode 100644 index 35333aeeb93fe3dd1ffef0f0acbc94c7f1cd5ce9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3673 zcmZ?b<>g{vU|^7*y*V+IgMr~Ohy%mS3=9ko3=9m#AR>h!g)xUAiV;jRMKObEmMB&* z%@)NDra7WG-5FAtQkYv9Qka{WqPSAIni-PHaG#K6Gd3<^j-1_p)_h6RiZ8EP2f znNk>n88jLFG?{O)l^Yu+=jTNUxTlslLktMd%uC5Hzr`A#QJ$Bg$#{#UI5j72B|{M# z0|Ub^D;KMn;{4L0cte0yf@;fq|ihVFANJ21XFg2%<}v7BJT^WU(w{WMn8| zTEGfom#}5AFJuDqIY4}nTnf}toVQpqGE-7-u@qik|fXoGltOzvW)i7i+l`v@B+0Olm5~7)F3f&KpxAi{A~adRA#{r;IJE?l2m=H_}LM<%1{F?enrXpAhW=ULkC&~)-cvEWHEw@rW7V=1_=gmQN@_TEXe@j!wYa0 zNI_KuidV3?noLDvAUA^Z6{KV;0u}#7pyC=FIuHWva<=5uypq%+kgbqJ!Bhp$^AIVN z00*Tuuron51}GhX>XU__)*YxB1J3JF{GP>-LNY9~I5R0H6HQ!A<$#%HopLT;J4^qRiytB2|zIP)H$p8svH;A0eUwlo>$DwHTDI zIT$&Zc$hiZK!pkvGjlL=aDY;s7!waO4;v3#5lDw7cN9-~W*)dR0qTW7%480h5Ts=X z;ii{ng7ZKWgqv89S!BY%z!1e*P?=a-k`I#B1vwaGEH)S3;;?}PpdBay7J~`|P?Hyo HnfPn~E_A?k diff --git a/src/pygwin/__pycache__/font.cpython-37.pyc b/src/pygwin/__pycache__/font.cpython-37.pyc deleted file mode 100644 index 20564d1295350a6cc8a62678029ab1196b8c890b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2007 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 diff --git a/src/pygwin/__pycache__/keyboard.cpython-37.pyc b/src/pygwin/__pycache__/keyboard.cpython-37.pyc deleted file mode 100644 index 076b40c9e98048216b5258e86b085ed5d07558e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 989 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 diff --git a/src/pygwin/__pycache__/mouse.cpython-37.pyc b/src/pygwin/__pycache__/mouse.cpython-37.pyc deleted file mode 100644 index aa8175f52682704a5d5ec876bb3fd8f76c6d621d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1908 zcmZ?b<>g{vU|>j_wmES+3j@Pr5C?{N7#J8F7#J9ee=#sHq%fo~<}lo689@weUzd zLt#TWLyAB!gQogRP>5(U-eM|9PX;kTn2~{jfrWvA!5I`lDhvz^B@9`N3z$+E7c$l| z)G(wlNrFgbFv%jxkit5LIha9{&F>{M0|P@5NcT%H!NkD8pvioTB_}nlMhoy%=C;BP3Bw7@dfF(Sab7Bi&JlLr>B<07Zjxy7pJCZGTvgzFUm|`$xy`0z`*d! z!o@14IKQ+gIW?xBvLquvFDAbvBef`|pfbHYGY>`;7bU}(U?cSkDsOS6r-Z8Jj+!ve;I43Z4N44RC7noM9Fw^(!X%TtRq z8E-LGfSm>*Kw55bW)?$jVgm&l$ma}0~8$S=+;$;{8=K(bT>WGTpFFbr}G*mEFLAyK&yn|0tg z$S;Oifo>TnD4~{tj41{g%D`A82C@umND|{ikQd_1GK({la#C^llB+niBn+YglxJb~ zN`UNzc@RW{+(U#X!3hm&BUX=s(hSr-P{hLQlOoeTka6+JrA5X0MOdxlOiwLw21|p& z3uc=P0|SF!GB~+Hvmz)}fxTzLz`#($n8J|FRHRnJ1f`iFG$d{z2`Wzr%ww)$s9~&O zs$pKp!pM*Ujdd2JL?#GIWW|-mC8@bkcisX8Ih3u*a*L%nvnur#dq#dqaY24b6h}pV zQEp;!c5xI(VqOZEh2$|%klo@ehWQDU{)<6QXJC|Igo?4Pr zl2?3-HM1DRXG>5R zk_^p^6PXHGKpDOW6!Mykx0s7diZq#SG3goHV$4MI*^G_{>`z@rgN^iN&d)z${74EiTdohjVI0 zYVs|Xl+5IkTP&c^xy4nGSd^HXT9OJ1=dAq9yjx6}21xz_=Xr1xa@geNrw diff --git a/src/pygwin/__pycache__/rect.cpython-37.pyc b/src/pygwin/__pycache__/rect.cpython-37.pyc deleted file mode 100644 index b7491c9449967a2340a1855ae72da3cd8087e621..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2228 zcmZ?b<>g{vU|_hoWpm;@HU@^rAPx+3FfcGUFfcF_J25aYq%fo~<}l2rZc6mr8B0mr!%H-q%)>)rZc8+&0&vXa%V{4PT^@`Na1N_iegUT4Q9~f zdkHdGlkpZ)LHaG$^30Tyj3~B@)XemZl3Q%asd*)-MNw?InJFnbskc~iQqxMJm`V$7 zu@-?8M6smgm*;7+-(oDk#h7u6G5Ho_#Vy9lTZ~1w7*mo#=E5)&%+(&rJSWJ}AZIWzvO!@LFIW{!MKZ{5Ag_XGHUf3}#>iL%0|NNGt{FSLR!+@gQTPxRdj9axzm=!5l8I z7?{vxDiQ#N0mv<2&p`+w1_p*(>`*=YAjg6NiGh)cfsc`mp^67&j2=`vnHl6v1_lNY z%>r{NA1Fqk?yO;2$OH*{rXmpr28JjesMdn~%)Am!W+W$oV+9n*NbcZB&d)1J%*-nW zxvCfx9t@1o(1OV%GeX?}qT!*H26aOUqclSeLlz^576-AIK&%>uEM^cb&X5L5Gc2GG z1gV0k0Lh9oFfr6H#Ix2g#Iu#KFW`WxU;?QE$u9(@FHUe+Gx@y)IZTral5W813hWn9 zxD|n-yNCxA&b%N3r1BO^P-=1sI5;#JApwBu?IKXHgF>qqA|H?oB#@Da5hl`6`dg8Gt6d40fhkLY=#tOP-sB; z%(EF%SmtsDGib8<{bIBM2g@%;onMT0nxupgdwhIxNl|>f43YyOc>^i|&l{l93WUMV z^8=+z#uA1Fj0+jE*@|pZ7;2d-)Jhl@FfC+oVThHgWvO9FVU%R3Va#SLlB!`zVUlF1 zWe#8{lnQ64VXkE?VP3#e11j&B7BWN2HD92i><^2>-$r`)TrkvQ1uM zZfbn|Ew1?Z-29YMPy)Wi6CYn#nwSHTDG~-*FA5^WKm;hG7fFIxpoCro3Se+Z7iodS zz@d*I!0`YoTtQhE>@p5U4mJ*E4kiv34kj?jJ?HS197k&C@hP)7#J9Mm_TvM!N|u10A!lBZ~y=R diff --git a/src/pygwin/__pycache__/surface.cpython-37.pyc b/src/pygwin/__pycache__/surface.cpython-37.pyc deleted file mode 100644 index deb060cd779a93f6351cb76ae039fd762ca6272a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5679 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 Y)`ZROTO2l!IJN_Ya52agJd8X{0DoUN-2eap diff --git a/src/pygwin/__pycache__/tray.cpython-37.pyc b/src/pygwin/__pycache__/tray.cpython-37.pyc deleted file mode 100644 index 89e32475b79c4e1b342e0527a67239914e132154..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2966 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 diff --git a/src/pygwin/_pg.py b/src/pygwin/_pg.py deleted file mode 100644 index b8aa9e7..0000000 --- a/src/pygwin/_pg.py +++ /dev/null @@ -1,16 +0,0 @@ -from contextlib import contextmanager as _cm -import os as _os -import sys as _sys - -@_cm -def _suppress_stdout(): - with open(_os.devnull, "w") as devnull: - old_stdout = _sys.stdout - _sys.stdout = devnull - try: - yield - finally: - _sys.stdout = old_stdout -with _suppress_stdout(): - import pygame as pg - pg.init() diff --git a/src/pygwin/color.py b/src/pygwin/color.py deleted file mode 100644 index db99f34..0000000 --- a/src/pygwin/color.py +++ /dev/null @@ -1,27 +0,0 @@ -class color: - def __init__(self,r,g=None,b=None,a=255): - try: - r,g,b = tuple(int(r[i:i+2],16)for i in(0,2,4)) - except: - pass - self.r = r - self.g = g - self.b = b - self.a = a - def hex(self): - return '%02x%02x%02x' % (self.r,self.g,self.b) - def rgb(self): - return (self.r,self.g,self.b,self.a) - def inverse(self): - return color(255-self.r,255-self.g, - 255-self.b,255-self.a) - def __getitem__(self,x): - return [self.r,self.g,self.b,self.a][x] - def __list__(self): - return [self.r,self.g,self.b,self.a] - def __tuple__(self): - return self.rgb() - def __repr__(self): - return self.__str__() - def __str__(self): - return f'({",".join(str(i)for i in self.__list__())})' diff --git a/src/pygwin/font.py b/src/pygwin/font.py deleted file mode 100644 index 615ae8a..0000000 --- a/src/pygwin/font.py +++ /dev/null @@ -1,43 +0,0 @@ -from pygwin.surface import surface as _surface -from pygwin._pg import pg as _pg - -class font: - def __init__(self, path): - self._path = path - def _font(self, size): - return _pg.font.Font(self._path,size) - def render(self, text, size, color, newLineSpace=5, - italic=False, bold=False, underline=False): - text = str(text) - font = self._font(size) - font.set_italic(italic) - font.set_bold(bold) - font.set_underline(underline) - if text.replace('\n', '') != text: - text = text.split('\n') - 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, (0, y)) - y += font.size(i)[1] - if i != text[-1]: - y += newLineSpace - else: - surf = font.render(text, True, color) - surface = _surface(surf.get_size()) - surface._surface_orig = surf - return surface - def size(self, text, size, newLineSpace=5, - italic=False,bold=False,underline=False): - return self.render(text, size, (255,255,255), - newLineSpace=newLineSpace, - italic=italic, bold=bold, - underline=underline).size - -class sysFont(font): - def __init__(self, name): - self._path = _pg.font.match_font(name) - -defaultFont = font(_pg.font.get_default_font()) diff --git a/src/pygwin/gamepad.py b/src/pygwin/gamepad.py deleted file mode 100644 index fb1b366..0000000 --- a/src/pygwin/gamepad.py +++ /dev/null @@ -1,114 +0,0 @@ -import inputs as _inputs -import threading as _threading -import time as _time - -class gamepad: - def __init__(self, pygame): - self._lasty = '' - self._lastx = '' - self.founded = False - self._buttons = {'left-joystick': False, - 'right-joystick': False, - 'north': False, - 'south': False, - 'west': False, - 'east': False, - 'l1': False, - 'l2': False, - 'r1': False, - 'r2': False, - 'up': False, - 'down': False, - 'left': False, - 'right': False, - 'start': False, - 'select': False} - self.leftJoystick = [0, 0] - self.rightJoystick = [0, 0] - self._pygame = pygame - self._start() - def _tick(self): - try: - events = _inputs.get_gamepad() - except: - return - if not self._pygame.display.get_active(): - return - self.founded = True - if events: - for event in events: - if event.code == 'ABS_X': - self.leftJoystick[0] = event.state - elif event.code == 'ABS_Y': - self.leftJoystick[1] = event.state - elif event.code == 'ABS_RY': - self.rightJoystick[1] = event.state - elif event.code == 'ABS_RX': - self.rightJoystick[0] = event.state - elif event.code == 'BTN_THUMBL': - self._buttons['left-joystick'] = event.state - elif event.code == 'BTN_THUMBR': - self._buttons['right-joystick'] = event.state - elif event.code == 'BTN_TL': - self._buttons['l1'] = event.state - elif event.code == 'BTN_TR': - self._buttons['r1'] = event.state - elif event.code == 'ABS_Z': - if event.state == 255: - self._buttons['l2'] = 1 - elif event.state == 0: - self._buttons['l2'] = 0 - elif event.code == 'ABS_RZ': - if event.state == 255: - self._buttons['r2'] = 1 - elif event.state == 0: - self._buttons['r2'] = 0 - elif event.code == 'BTN_WEST': - self._buttons['west'] = event.state - elif event.code == 'BTN_NORTH': - self._buttons['north'] = event.state - elif event.code == 'BTN_EAST': - self._buttons['east'] = event.state - elif event.code == 'BTN_SOUTH': - self._buttons['south'] = event.state - elif event.code == 'ABS_HAT0Y': - if event.state == 1: - self._buttons['down'] = True - self._lasty = 'down' - elif event.state == -1: - self._buttons['up'] = True - self._lasty = 'up' - else: - self._buttons[self._lasty] = False - elif event.code == 'ABS_HAT0X': - if event.state == 1: - self._buttons['right'] = True - self._lastx = 'right' - elif event.state == -1: - self._buttons['left'] = True - self._lastx = 'left' - else: - self._buttons[self._lastx] = False - elif event.code == 'BTN_START': - self._buttons['select'] = event.state - elif event.code == 'BTN_SELECT': - self._buttons['start'] = event.state - def _start(self): - self.founded = False - self._started = True - def ttcb(self): - while self._started: - self._tick() - _threading.Thread(target=lambda:ttcb(self),daemon=True).start() - def close(self): - self._started = False - def isPressed(self, btn): - return btn in self._buttons - def reset(self): - self._lasty = '' - self._lastx = '' - self._buttons = [] - self.leftJoystick = [0, 0] - self.rightJoystick = [0, 0] - def getPressed(self): - return self._buttons diff --git a/src/pygwin/image.py b/src/pygwin/image.py deleted file mode 100644 index bebce07..0000000 --- a/src/pygwin/image.py +++ /dev/null @@ -1,43 +0,0 @@ -from pygwin._pg import pg as _pg -from pygwin.surface import surface as _surface -from PIL import Image as _im -import tempfile as _tf -import randstr as _rs -import pickle as _p -import bz2 as _bz2 -import os as _os - -def load(path): - if path.endswith('.gif'): - im = _im.open(path) - with _tf.TemporaryDirectory() as td: - surfs = [] - for i in range(im.n_frames): - im.seek(i) - p = _os.path.join(td,f'{i}.png') - im.save(p) - s = _pg.image.load(p) - _os.remove(p) - sg = _surface(s.get_size()) - sg.blit(s,(0,0)) - surfs.append(sg) - return surfs - else: - im = _im.open(path.encode('utf8').decode('utf8')) - image = _pg.image.fromstring(im.tobytes(),im.size,im.mode) - surf = _surface(im.size) - surf.blit(image,(0,0)) - return surf - -def save(surface, dest): - _pg.image.save_extended(surface._grp(), dest) - -def toBytes(surface): - return _bz2.compress(_p.dumps([_pg.image.tostring(surface._grp(),"RGBA"),list(surface.size)])) - -def fromBytes(bytes): - string = _p.loads(_bz2.decompress(bytes)) - surf = _pg.image.fromstring(string[0],tuple(string[1]),"RGBA") - surface = _surface(tuple(string[1])) - surface.blit(surf,(0,0)) - return surface diff --git a/src/pygwin/keyboard.py b/src/pygwin/keyboard.py deleted file mode 100644 index b0fb356..0000000 --- a/src/pygwin/keyboard.py +++ /dev/null @@ -1,22 +0,0 @@ -from pygwin._pg import pg as _pg - -def getPressed(): - fkeys = {} - keys = _pg.key.get_pressed() - for i in range(len(keys)): - fkeys.update({_pg.key.name(i):keys[i]}) - return fkeys -def isPressed(key): - return getPressed()[key] - -import inspect as _i - -_aliases = {'getPressed':['gprs','getkeys'], - 'isPressed':['isprs','keyprs']} - -for i in _aliases.items(): - exec(f'args = _i.signature({i[0]})') - args = [str(i[1]) for i in dict(args.parameters).items()] - args = ', '.join(args) - for i0 in i[1]: - exec(f"def {i0}({args}):return {i[0]}({args})") diff --git a/src/pygwin/mixer.py b/src/pygwin/mixer.py deleted file mode 100644 index a33522b..0000000 --- a/src/pygwin/mixer.py +++ /dev/null @@ -1,92 +0,0 @@ -from pygwin._pg import pg as _pg -import os as _os -import tempfile as _tf - -ffmpeg = None - -class sound: - def __init__(self, path): - if not (path.endswith('.wav') or path.endswith('.ogg')): - try: - from pydub import AudioSegment as _as - if ffmpeg != None: - _as.ffmpeg = ffmpeg - _as.converter = ffmpeg - sound = _as.from_file(path, _os.path.splitext(path)[1]) - path = _tf.mkstemp('.wav') - sound.export(path, format="wav") - except: - print('Set ffmpeg to path so that you don'+\ - "'t have to convert the file to "+\ - '".wav". If you have installed, but the error still appears, write down the path to ffmpeg.exe in plugin.ffmpeg.') - self._sound = _pg.mixer.Sound(path) - def play(self): - self._sound.play() - def stop(self): - self._sound.stop() - def volume(): - def fget(self): - return self._sound.get_volume() - def fset(self, value): - if type(value) == int: - self._sound.set_volume(value) - def fdel(self): - pass - return locals() - volume = property(**volume()) - @property - def length(self): - return self._sound.get_length() - -class music: - def __init__(self, path): - if path.endswith('.wav') or path.endswith('.ogg'): - self._path = path - else: - try: - from pydub import AudioSegment as _as - if ffmpeg != None: - _as.ffmpeg = ffmpeg - _as.converter = ffmpeg - sound = _as.from_file(path, _os.path.splitext(path)[1]) - path = _tf.mkstemp('.wav') - sound.export(path, format="wav") - except: - print('Set ffmpeg to path so that you don'+\ - "'t have to convert the file to "+\ - '".wav". If you have installed, but the error still appears, write down the path to ffmpeg.exe in plugin.ffmpeg.') - _pg.mixer.music.load(path) - def play(self, loops=0): - _pg.mixer.music.play(loops) - def stop(self): - _pg.mixer.music.stop() - def restart(self): - _pg.mixer.music.rewind() - def pause(self): - _pg.mixer.music.pause() - def release(self): - _pg.mixer.music.unpause() - def queue(self): - _pg.mixer.music.queue(self._path) - - def volume(): - def fget(self): - return _pg.mixer.music.get_volume() - def fset(self, value): - if type(value) == int: - _pg.mixer.music.set_volume(value) - def fdel(self): - pass - return locals() - volume = property(**volume()) - - def pos(): - def fget(self): - return _pg.mixer.music.get_pos() - def fset(self, value): - if type(value) == int: - _pg.mixer.music.set_pos(value) - def fdel(self): - pass - return locals() - pos = property(**pos()) diff --git a/src/pygwin/mouse.py b/src/pygwin/mouse.py deleted file mode 100644 index 6c1772d..0000000 --- a/src/pygwin/mouse.py +++ /dev/null @@ -1,36 +0,0 @@ -from pygwin._pg import pg as _pg - -def getPressed(): - orig = _pg.mouse.get_pressed(3) - return {'left':orig[0],'middle':orig[1],'right':orig[2]} -def isPressed(x): - return getPressed()[x.lower()] -def setPosition(x): - _pg.mouse.set_pos(x) -def getPosition(): - return _pg.mouse.get_pos() -def setVisible(x): - _pg.mouse.set_visible(x) -def getVisible(): - return _pg.mouse.get_visible() -def getCursor(): - return _pg.mouse.get_cursor() -def setCursor(size, hotspot=None, xormasks=None, andmasks=None): - if hotspot == None and xormasks == None and andmasks == None: - _pg.mouse.set_system_cursor(size) - else: - _pg.mouse.set_cursor(size, hotspot, xormasks, andmasks) - -import inspect as _i - -_aliases = {'getPressed':['gprs','getbtns'], - 'isPressed':['isprs','btnprs'], - 'setPosition':['spos','setpos','move'], - 'getPosition':['gpos','getpos']} - -for i in _aliases.items(): - exec(f'args = _i.signature({i[0]})') - args = [str(i[1]) for i in dict(args.parameters).items()] - args = ', '.join(args) - for i0 in i[1]: - exec(f"def {i0}({args}):return {i[0]}({args})") diff --git a/src/pygwin/record.py b/src/pygwin/record.py deleted file mode 100644 index c2c2d0f..0000000 --- a/src/pygwin/record.py +++ /dev/null @@ -1,107 +0,0 @@ -from contextlib import contextmanager -from pygwin._pg import pg as _pg -import moviepy.editor as mpe -from array import array -from PIL import Image -import numpy as np -import threading -import pyautogui -import tempfile -import pyaudio -import wave -import time -import sys -import cv2 -import os - -class record: - def __init__(self,win,audio=False): - self._isaudio = audio - self._surface = win - self.reset() - def reset(self): - self._run = False - self._fpss = [] - self._frames = [] - self._codec = cv2.VideoWriter_fourcc(*"mp4v") - if self._isaudio: - self._apy = pyaudio.PyAudio() - self._aframs = [] - self._astrm = self.apy.open(format=pyaudio.paInt16,channels=1, - rate=44100,input=True,frames_per_buffer=1024) - def start(self,newThread=True): - self._run = True - if self._isaudio: - def audiot(self): - while self._run: - self._aframs.append(self.astrm.read(1024)) - self._athread = threading.Thread(target=lambda:audiot(self)) - self._athread.start() - def main(self): - while self.run: - self._record() - if newThread: - self._thread = threading.Thread(target=lambda:main(self)) - self._thread.start() - else:main() - def _record(self): - if self._run: - try: - self._frames.append(self._surface) - self._fpss.append(self._surface.rawFps) - except: - pass - def render(self, path): - temp = tempfile.gettempdir() - if self.isaudio: - wavpath = os.path.join(temp, 'audio.wav') - wavfile = wave.open(wavpath, 'wb') - wavfile.setnchannels(1) - wavfile.setsampwidth(self._apy.get_sample_size(pyaudio.paInt16)) - wavfile.setframerate(44100) - af = [] - for i in self._aframs: - af.append(array('h',i)) - wavfile.writeframes(b''.join(af)) - wavfile.close() - - fps = 0 - for i in self._fpss: - fps += i - fps = fps/len(self._fpss) - if self._isaudio: - noaudiopath = os.path.join(temp, 'noaudio.mp4') - else: - noaudiopath = path - out = cv2.VideoWriter(noaudiopath,self._codec, - fps,self._surface.size) - for i in self._frames: - frame = np.array(_pg.surfarray.array3d(i).swapaxes(0,1)) - frame = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB) - out.write(frame) - out.release() - - if self._isaudio: - videoclip = mpe.VideoFileClip(noaudiopath) - audioclip = mpe.AudioFileClip(wavpath) - new_audioclip = mpe.CompositeAudioClip([audioclip]) - videoclip.audio = new_audioclip - @contextmanager - def ss(): - with open(os.devnull, "w") as devnull: - oso = sys.stdout - sys.stdout = devnull - try:yield - finally:sys.stdout=oso - with ss(): - videoclip.write_videofile(path) - os.remove(noaudiopath) - os.remove(wavpath) - def stop(self): - self._run = False - try: - self._thread.join() - except: - pass - if self._isaudio: - self._athread.join() diff --git a/src/pygwin/rect.py b/src/pygwin/rect.py deleted file mode 100644 index 1792bfc..0000000 --- a/src/pygwin/rect.py +++ /dev/null @@ -1,60 +0,0 @@ -from pygwin._pg import pg - -_aliases = {'w':['width'],'h':['height'], - 'c':['center','middle'], - 'x':['left'],'y':['up'], - 'r':['right'],'d':['down']} - -class rect: - def __init__(self,x,y,w,h): - self.x = x - self.y = y - self.w = w - self.h = h - self._reload() - def collide(self, x): - try:return self._rect.colliderect(x._rect_rect) - except:return self._rect.colliderect(x._rect) - def contains(self, x, y): - return self._rect.collidepoint(x,y) - def copy(self): - return rect(self.x,self.y,self.w,self.h) - def _reload(self): - self.c = (self.x/2+self.w/2,self.y/2+self.h/2) - self.cx, self.cy = self.c - self.r,self.d = self.x+self.w,self.y+self.h - self._rect = pg.Rect(self.x,self.y,self.w,self.h) - def __getitem__(self,x): - return [self.x,self.y,self.w,self.h][x] - def __list__(self): - return [self.x,self.y,self.w,self.h] - def __tuple__(self): - return (self.x,self.y,self.w,self.h) - def __str__(self): - return f'<{self.x}x{self.y},{self.w}x{self.h}>' - def __setattr__(self,attr,data): - if attr in _aliases.values(): - ma = None - for i in _aliases.items(): - if i[1] in attr: - ma = i[0] - break - attr = ma - object.__setattr__(self,attr,data) - def __getattr__(self,attr): - if attr in _aliases.values(): - ma = None - for i in _aliases.items(): - if i[1] == attr: - ma = i[0] - break - attr = ma - data = self.__dict__[attr] - return data - - -# def fromSurface(surf,x=0,y=0,c=()) -# -# # print(dir(property)) -# r = rect(123,321,654,987) -# print(r.width) diff --git a/src/pygwin/surface.py b/src/pygwin/surface.py deleted file mode 100644 index 804ced6..0000000 --- a/src/pygwin/surface.py +++ /dev/null @@ -1,150 +0,0 @@ -from pygwin.rect import rect as _r -from pygwin.color import color as _clr -from pygwin._pg import pg as _pg -from PIL import Image as _im -import tempfile as _tf -import randstr as _rs -import time as _t -import os as _os - -class surface: - def __init__(self, size): - self._size = size - self._orig = _pg.Surface(size, _pg.SRCALPHA) - @property - def pixels(self): - pixels = [] - for x in range(self.size[0]): - pixels.append([]) - for y in range(self.size[1]): - pixels[x].append(self.getPixel(x,y)) - return pixels - @property - def size(self): - return self._size - def _grp(self): - return self._orig - def rect(self, x=0, y=0, center=[]): - if center == []: - return _r(x, y, self.size[0], self.size[1]) - else: - return _r(center[0]-(self.size[0]/2), - center[1]-(self.size[1]/2), - self.size[0], self.size[1]) - def copy(self): - surf = surface(self._size) - surf._surface_orig = self._orig - surf._surface_size = self._size - return surf - def getPixel(self, x, y): - return _clr(*self._orig.get_at((x,y))) - def setPixel(self, x, y, color): - self._orig.set_at((x,y),color) - return self.copy() - def blit(self, surf, xy): - if type(surf) != surface and type(surf) != _pg.Surface: - from pygwin.font import defaultFont as _df - surf = _df.render(surf, 25, (0,0,0)) - try: - self._orig.blit(surf._surface_orig, xy) - except: - try: - self._orig.blit(surf._orig, xy) - except: - self._orig.blit(surf, xy) - return self.copy() - def fill(self, color): - self._orig.fill(list(color)) - return self.copy() - def crop(self, rect): - self._orig = self._orig.subsurface(rect) - self._size = self._orig.get_size() - return self.copy() - def scale(self, size, smooth=False): - if not smooth: - self._orig = _pg.transform.scale(self._orig, size) - else: - self._orig = _pg.transform.smoothscale(self._orig, size) - self._size = self._orig.get_size() - return self.copy() - def rotate(self, angle): - self._orig = _pg.transform.rotate(self._orig, angle) - self._size = self._orig.get_size() - return self.copy() - def flip(self, x, y): - self._orig = _pg.transform.flip(self._orig, x, y) - return self.copy() - def blur(self, amt): - if amt < 0:return self.copy() - scale = (int(self._orig.get_width()*(amt+1)), - int(self._orig.get_height()*(amt+1))) - size = self._orig.get_size() - self._orig = _pg.transform.smoothscale(self._orig,scale) - self._orig = _pg.transform.smoothscale(self._orig,size) - return self.copy() - - class _draw: - def __init__(self,surface): - self._surf = surface - def rect(self,color,rect, - width=0,borderRadius=0, - borderTopLeftRadius=-1, - borderTopRightRadius=-1, - borderBottomLeftRadius=-1, - borderBottomRightRadius=-1): - try: - orig = self._surf._surface_orig - except: - orig = self._surf._orig - _pg.draw.rect(orig,color,_pg.Rect(rect[0],rect[1],rect[2],rect[3]), - width,borderRadius,borderTopLeftRadius,borderTopRightRadius, - borderBottomLeftRadius,borderBottomRightRadius) - return self._surf.copy() - def polygon(self, color, points, width=0): - try: - orig = self._surf._surface_orig - except: - orig = self._surf._orig - _pg.draw.polygon(orig,color,points,width) - return self._surf.copy() - def circle(self,color,center, - radius,width=0, - drawTopLeft=1, - drawTopRight=1, - drawBottomLeft=1, - drawBottomRight=1): - try: - orig = self._surf._surface_orig - except: - orig = self._surf._orig - _pg.draw.circle(orig,color,center,radius, - width,drawTopRight,drawTopLeft, - drawBottomLeft,drawBottomRight) - return self._surf.copy() - def ellipse(self,color,rect,width=0): - try: - orig = self._surf._surface_orig - except: - orig = self._surf._orig - _pg.draw.ellipse(orig,color,_pg.Rect(rect[0], - rect[1],rect[2],rect[3]),width) - return self._surf.copy() - def line(self,color,start,end,width=1): - try: - orig = self._surf._surface_orig - except: - orig = self._surf._orig - _pg.draw.line(orig,color,start,end,width) - return self._surf.copy() - def arc(self,color,rect,startAngle,stopAngle,width=1): - try: - orig = self._surf._surface_orig - except: - orig = self._surf._orig - _pg.draw.arc(orig,color,_pg.Rect(rect[0], - rect[1],rect[2],rect[3]), - startAngle,stopAngle,width) - return self._surf.copy() - @property - def draw(self): - return self._draw(self) diff --git a/src/pygwin/tray.py b/src/pygwin/tray.py deleted file mode 100644 index 27ba6ac..0000000 --- a/src/pygwin/tray.py +++ /dev/null @@ -1,49 +0,0 @@ -import threading -import wx -import wx.adv -from pygwin._pg import pg -import copy - -class tray(wx.adv.TaskBarIcon): - def __init__(self, tooltip, iconpath): - class App(wx.App): - def OnInit(self): - self.frame = wx.Frame(None) - self.SetTopWindow(self.frame) - return True - self._app = App(False) - self.frame = self._app.frame - super().__init__() - self._tooltip = tooltip - self._iconpath = iconpath - self.setIcon(iconpath) - self._menu = wx.Menu() - def CreatePopupMenu(self): - return self._menu - def GetPopupMenu(self): - return self._menu - def setIcon(self, path): - self._bicon = wx.Icon(wx.Bitmap(path)) - self.SetIcon(self._bicon, self._tooltip) - def setTooltip(self, tooltip): - self.SetIcon(self._bicon, tooltip) - self._tooltip = tooltip - def onLeftMouseButton(self): - pass - def addSeparator(self): - self._menu.AppendSeparator() - def addCommand(self,text,func=lambda:None): - item = wx.MenuItem(self._menu,-1,text) - self._menu.Bind(wx.EVT_MENU, - lambda x:func(), - id=item.GetId()) - self._menu.Append(item) - def start(self, thread=True): - cbotld = lambda x:self.onLeftMouseButton() - self.Bind(wx.adv.EVT_TASKBAR_LEFT_DOWN,cbotld) - if thread: threading.Thread( - target=self._app.MainLoop, - daemon=1).start() - else: self._app.MainLoop() - def stop(self): - wx.CallAfter(self._app.frame.Close) diff --git a/src/pygwin/ui.py b/src/pygwin/ui.py deleted file mode 100644 index 4720f02..0000000 --- a/src/pygwin/ui.py +++ /dev/null @@ -1,734 +0,0 @@ -from pygwin._pg import pg as _pg -from pygwin.surface import surface as _s -from pygwin.font import defaultFont as _df -from pygwin.image import load as _l -from pygwin.rect import rect as _r -import pygwin.mouse as _m -import pygwin.keyboard as _k -import ctypes as _ct -import copy as _copy - -class widget: - power = True - destroyed = False - def _args(self, locals): - args = _copy.copy(locals) - for i in args.items(): - if i[0] != 'self': - exec(f'self.{i[0]} = args["{i[0]}"]') - self._args = args - def __init__(self, surface): - self._args(locals()) - def draw(self, win, pos): - win.blit(self.surface,pos) - def on(self): - self.power = True - def off(self): - self.power = False - def destroy(self): - self.destroyed = True - def config(self, **parameters): - if parameters != {}: - for i in parameters.items(): - if i[0] in list(self.__dict__.keys()): - exec(f'self.{i[0]} = parameters["{i[0]}"]') - self._args[i[0]] = i[1] - else: - return self._args - self.__init__(**self._args) -class button(widget): - def __init__(self,text, - func=lambda:None, - fontSize=30,font=_df, - width=None,height=None, - bg=(70,70,70),fg=(180,180,200), - afg=(50,50,50),abg=(200,200,200), - borderColor=(50,50,50),borderWidth=5): - super()._args(locals()) - self.cl0 = False - self.cl1 = False - self.nc0 = True - self._generate() - def _generate(self, position=None): - if self.width == None or self.height == None: - textSize = self.font.size(self.text,self.fontSize) - if self.width != None: - self.surface = _s((self.width,textSize[1]+10)) - elif self.height != None: - self.surface = _s((textSize[0]+50,self.height)) - else: - self.surface = _s((textSize[0]+50,textSize[1]+10)) - else: - self.surface = _s((self.width,self.height)) - if position != None: - contains = self.surface.rect(position[0], position[1]).contains( - _m.getPosition()[0], _m.getPosition()[1]) - cacm = contains and _m.isPressed('left') - else: - contains = False - cacm = False - if contains and not self.cl0: - _m.setCursor(_pg.SYSTEM_CURSOR_HAND) - self.cl0 = True - self.nc0 = True - elif not contains: - if self.nc0: - _m.setCursor(_pg.SYSTEM_CURSOR_ARROW) - self.nc0 = False - self.cl0 = False - if cacm and not self.cl1: - self.func() - self.cl1 = True - elif not cacm: - self.cl1 = False - self.surface.fill(self.borderColor) - if cacm: - self.surface.draw.rect(self.abg,_r(self.borderWidth,self.borderWidth, - self.surface.size[0]-self.borderWidth*2, - self.surface.size[1]-self.borderWidth*2)) - else: - self.surface.draw.rect(self.bg,_r(self.borderWidth,self.borderWidth, - self.surface.size[0]-self.borderWidth*2, - self.surface.size[1]-self.borderWidth*2)) - if cacm: - text = self.font.render(self.text,self.fontSize,self.afg) - else: - text = self.font.render(self.text,self.fontSize,self.fg) - pos = text.rect(center=( - self.surface.size[0]/2, - self.surface.size[1]/2)) - pos = [pos.x, pos.y] - self.surface.blit(text,pos) - def draw(self, win, pos): - self._generate(pos) - win.blit(self.surface,pos) -class label(widget): - def __init__(self,text,size=30, - color=(0,0,0),font=_df): - self.surface = font.render(text,size,color) -class entry(widget): - def __init__(self,hint='',fontSize=30,font=_df, - width=None,height=None,hide=False, - bg=(70,70,70),fg=(180,180,200), - afg=(200,200,200),abg=(50,50,50), - hintColor=(100,100,100), - lineColor=(200,200,200), - borderColor=(50,50,50), - borderWidth=5,maxSymbols=None, - whitelist=None,blacklist=[]): - super()._args(locals()) - self.text = '' - self.focus = False - self.tick = 0 - self.wcl = False - self.startHint = self.hint - self.ws = False - if self.width == None or self.height == None: - if self.hint != '': - hintSize = self.font.size(self.hint,self.fontSize) - else: - hintSize = (150,self.font.size('X',self.fontSize)[1]) - if self.height == None: - self.height = hintSize[1]+10 - if self.width == None: - self.width = hintSize[0]+50 - self.surface = _s((self.width,self.height)) - self.wclk = [] - self.wsnr = False - def _generate(self,position=None): - self.surface.fill(self.borderColor) - if self.focus: - self.surface.draw.rect(self.abg,_r(self.borderWidth,self.borderWidth, - self.surface.size[0]-self.borderWidth*2, - self.surface.size[1]-self.borderWidth*2)) - if self.text == '': - if not self.hide: - text = self.font.render(self.hint,self.fontSize,self.hintColor) - else: - text = self.font.render('*'*len(self.hint),self.fontSize,self.hintColor) - else: - if not self.hide: - text = self.font.render(self.text,self.fontSize,self.afg) - else: - text = self.font.render('*'*len(self.text),self.fontSize,self.afg) - x = 10 - if text.size[0] >= self.surface.size[0]-20: - x = self.surface.size[0]-text.size[0]-10 - self.surface.blit(text,(x,self.surface.size[1]/2-text.size[1]/2)) - for i in _k.getPressed().items(): - if i[1]: - if i[0] not in self.wclk: - if len(i[0]) == 1: - self.insert(i[0]) - elif i[0] == 'backspace': - self.delete() - elif i[0] == 'return': - self.focus = False - elif i[0] == 'space': - self.insert(' ') - self.wclk.append(i[0]) - else: - if i[0] in self.wclk: - self.wclk.remove(i[0]) - 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]] - self.surface.draw.line(self.lineColor,points[0],points[1],3) - if self.tick == 120: - self.tick = 0 - else: - self.surface.draw.rect(self.bg,_r(self.borderWidth,self.borderWidth, - self.surface.size[0]-self.borderWidth*2, - self.surface.size[1]-self.borderWidth*2)) - if self.text == '': - if not self.hide: - text = self.font.render(self.hint,self.fontSize,self.hintColor) - else: - text = self.font.render('*'*len(self.hint),self.fontSize,self.hintColor) - else: - if self.hide: - text = self.font.render(self.text,self.fontSize,self.fg) - else: - text = self.font.render('*'*len(self.text),self.fontSize,self.fg) - 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 - self.surface.blit(text,(x,self.surface.size[1]/2-text.size[1]/2)) - - if position != None: - if self.surface.rect(position[0], - position[1]).contains(_m.getPosition()[0], - _m.getPosition()[1]): - if not self.wcl: - _m.setCursor(_pg.SYSTEM_CURSOR_HAND) - else: - if not self.ws: - _m.setCursor(_pg.SYSTEM_CURSOR_ARROW) - self.ws = True - if _m.isPressed('left'): - if not self.wcl: - self.focus=self.focus==0 - self.wcl = True - else: - self.wcl = False - self.wsnr = False - else: - if not self.wsnr: - _m.setCursor(_pg.SYSTEM_CURSOR_ARROW) - self.wsnr = True - if _m.isPressed('left'): - self.focus = False - def insert(self,text): - if _ct.WinDLL("User32.dll").GetKeyState(0x14): - text = text.upper() - if hex(getattr(_ct.windll.LoadLibrary("user32.dll"), "GetKeyboardLayout")(0))=='0x4190419': - text = text.translate(dict(zip(map(ord, - '''qwertyuiop[]asdfghjkl;'zxcvbnm,./`QWERTYUIOPASDFGHJKLZXCVBNM'''), - '''йцукенгшщзхъфывапролджэячсмитьбю.ёЙЦУКЕНГШЩЗФЫВАПРОЛДЯЧСМИТЬ'''))) - if _pg.key.get_pressed()[_pg.K_LSHIFT] or _pg.key.get_pressed()[_pg.K_RSHIFT]: - text = text.translate(dict(zip(map(ord, - u'''1234567890-=[]\;',./`'''), - u'''!@#$%^&*()_+{}|:"<>?~'''))) - if text in self.blacklist: - return - if self.whitelist != None: - if text not in self.whitelist: - return - if self.maxSymbols != None: - if len(self.text) > self.maxSymbols: - return - self.text += text - def delete(self,symbols=1): - self.text = self.text[:0-symbols] - def draw(self, win, pos): - self._generate(pos) - win.blit(self.surface,pos) - def get(self): - return self.text -class textarea(widget): - def __init__(self,hint='',fontSize=30, - font=_df,width=None,bg=(70,70,70), - fg=(180,180,200),afg=(200,200,200), - abg=(50,50,50),hintColor=(100,100,100), - lineColor=(200,200,200), - borderColor=(50,50,50), - borderWidth=5,maxSymbols=None, - whitelist=None,blacklist=[]): - super()._args(locals()) - self.text = '' - self.focus = False - self.tick = 0 - 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: - self.width = hintSize[0]+50 - self.surface = _s((self.width,self.height)) - self.wclk = [] - self.wsnr = False - def _generate(self,position=None): - self.surface.fill(self.borderColor) - if self.focus: - if self.text != '': - self.height = self.font.size(self.text,self.fontSize)[1]+10 - else: - self.height = self.font.size('X',self.fontSize)[1]+10 - self.surface = _s((self.width,self.height)) - self.surface.fill(self.borderColor) - self.surface.draw.rect(self.abg,_r(self.borderWidth,self.borderWidth, - self.surface.size[0]-self.borderWidth*2, - self.surface.size[1]-self.borderWidth*2)) - if self.text == '': - 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 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]: - if i[0] not in self.wclk: - if len(i[0]) == 1: - self.insert(i[0]) - elif i[0] == 'backspace': - self.delete() - elif i[0] == 'return': - if self.maxSymbols != None: - if len(self.text) > self.maxSymbols: - continue - self.text += '\n' - elif i[0] == 'space': - self.insert(' ') - self.wclk.append(i[0]) - else: - if i[0] in self.wclk: - self.wclk.remove(i[0]) - self.tick += 1 - if self.tick >= 60: - if self.text != '': - points = [[x+self.font.size(last,self.fontSize)[0], - self.surface.size[1]-(self.font.size('X',self.fontSize)[1])], - [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 - else: - self.surface.draw.rect(self.bg,_r(self.borderWidth,self.borderWidth, - self.surface.size[0]-self.borderWidth*2, - self.surface.size[1]-self.borderWidth*2)) - if self.text == '': - 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 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: - if self.surface.rect(position[0], - position[1]).contains(_m.getPosition()[0], - _m.getPosition()[1]): - if not self.wcl: - _m.setCursor(_pg.SYSTEM_CURSOR_HAND) - else: - if not self.ws: - _m.setCursor(_pg.SYSTEM_CURSOR_ARROW) - self.ws = True - if _m.isPressed('left'): - if not self.wcl: - self.focus=self.focus==0 - self.wcl = True - else: - self.wcl = False - self.wsnr = False - else: - if not self.wsnr: - _m.setCursor(_pg.SYSTEM_CURSOR_ARROW) - self.wsnr = True - if _m.isPressed('left'): - self.focus = False - 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: - if text not in self.whitelist: - return - if self.maxSymbols != None: - if len(self.text) > self.maxSymbols: - return - self.text += text - def delete(self,symbols=1): - self.text = self.text[:0-symbols] - def draw(self, win, pos): - self._generate(pos) - win.blit(self.surface,pos) - def get(self): - return self.text -class keySelect(entry): - def __init__(self,keyBefore='', - fontSize=30,font=_df, - width=None,height=None, - bg=(70,70,70),fg=(180,180,200), - afg=(200,200,200),abg=(50,50,50), - hintColor=(100,100,100), - lineColor=(200,200,200), - borderColor=(50,50,50), - borderWidth=5,maxSymbols=None, - whitelist=None,blacklist=[]): - super()._args(locals()) - self.hint = '' - self.text = keyBefore - self.focus = False - self.tick = 0 - self.wcl = False - self.startHint = self.hint - self.ws = False - if self.width == None or self.height == None: - if self.hint != '': - hintSize = self.font.size(self.hint,self.fontSize) - else: - hintSize = (150,self.font.size('X',self.fontSize)[1]) - if self.height == None: - self.height = hintSize[1]+10 - if self.width == None: - self.width = hintSize[0]+50 - self.surface = _s((self.width,self.height)) - self.wclk = [] - self.wsnr = False - def _generate(self,position=None): - self.surface.fill(self.borderColor) - if self.focus: - self.surface.draw.rect(self.abg,_r(self.borderWidth,self.borderWidth, - self.surface.size[0]-self.borderWidth*2, - self.surface.size[1]-self.borderWidth*2)) - if self.text == '': - text = self.font.render(self.hint,self.fontSize,self.hintColor) - else: - text = self.font.render(self.text,self.fontSize,self.afg) - 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 - self.surface.blit(text,(x,self.surface.size[1]/2-text.size[1]/2)) - for i in _k.getPressed().items(): - if i[1] and self.focus: - if i[0] in self.blacklist: - continue - if self.whitelist != None: - if i[0] not in self.whitelist: - continue - if self.maxSymbols != None: - if len(self.text) > self.maxSymbols: - continue - self.text = i[0] - break - 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]] - self.surface.draw.line(self.lineColor,points[0],points[1],3) - if self.tick == 120: - self.tick = 0 - else: - self.surface.draw.rect(self.bg,_r(self.borderWidth,self.borderWidth, - self.surface.size[0]-self.borderWidth*2, - self.surface.size[1]-self.borderWidth*2)) - if self.text == '': - text = self.font.render(self.hint,self.fontSize,self.hintColor) - else: - text = self.font.render(self.text,self.fontSize,self.fg) - 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 - self.surface.blit(text,(x,self.surface.size[1]/2-text.size[1]/2)) - - if position != None: - if self.surface.rect(position[0], - position[1]).contains(_m.getPosition()[0], - _m.getPosition()[1]): - if not self.wcl: - _m.setCursor(_pg.SYSTEM_CURSOR_HAND) - else: - if not self.ws: - _m.setCursor(_pg.SYSTEM_CURSOR_ARROW) - self.ws = True - if _m.isPressed('left'): - if not self.wcl: - self.focus=self.focus==0 - self.wcl = True - else: - self.wcl = False - self.wsnr = False - else: - if not self.wsnr: - _m.setCursor(_pg.SYSTEM_CURSOR_ARROW) - self.wsnr = True - if _m.isPressed('left'): - self.focus = False - def draw(self, win, pos): - self._generate(pos) - win.blit(self.surface,pos) - def get(self): - return self.text -class image(widget): - def __init__(self, path): - self.surface = _l(path) -class loadingBar(widget): - def __init__(self,width, - height=50, - length=100, - bg=(70,70,70), - loadedColor=(50,200,50), - borderColor=(50,50,50), - borderWidth=5): - super()._args(locals()) - self.loaded = 0 - def step(self,count=1): - self.loaded += 1 - if self.loaded > self.length: - self.loaded = self.length - def set(self, x): - self.loaded = x - if self.loaded > self.length: - self.loaded = self.length - def reset(self): - self.loaded = 0 - def get(self): - return self.loaded - def draw(self, win, pos): - self.surface = _s((self.width,self.height)) - self.surface.fill(self.borderColor) - self.surface.draw.rect(self.bg,_r(5,5, - self.surface.size[0]-10, - self.surface.size[1]-10)) - self.surface.draw.rect(self.loadedColor,_r(self.borderWidth,self.borderWidth, - (self.surface.size[0]/self.length*self.loaded)-self.borderWidth*2, - self.surface.size[1]-self.borderWidth*2)) - win.blit(self.surface, pos) -class slider(widget): - def __init__(self,width, - bg=(70,70,70), - fg=(200,200,200), - horizontal=True): - super()._args(locals()) - self.s = False - self.x = 12.5 - self._generate(None) - def _generate(self, pos): - if self.horizontal: - self.surface = _s((self.width,50)) - self.surface.draw.line(self.bg,[12.5,25],[self.width-12.5,25],10) - self.surface.draw.circle(self.bg,[12.5,26],5) - self.surface.draw.circle(self.bg,[self.width-12.5,26],5) - self.surface.draw.circle(self.fg,[self.x,25],12.5) - else: - self.surface = _s((50,self.width)) - self.surface.draw.line(self.bg,[25,12.5],[25,self.width-12.5],10) - self.surface.draw.circle(self.bg,[26,12.5],5) - self.surface.draw.circle(self.bg,[26,self.width-12.5],5) - self.surface.draw.circle(self.fg,[25,self.x],12.5) - if pos != None: - if _m.isPressed('left'): - if self.horizontal: - rect = _r(pos[0]+5,pos[1], - self.surface.size[0]-10, - self.surface.size[1]) - if rect.contains(_m.getPosition()[0], - _m.getPosition()[1]) or self.s: - self.x = _m.getPosition()[0]-pos[0] - if self.x < 12.5: self.x = 12.5 - if self.x > self.width-12.5: self.x = self.width-12.5 - self.s = True - else: - rect = _r(pos[0],pos[1]+5, - self.surface.size[0], - self.surface.size[1]-10) - if rect.contains(_m.getPosition()[0], - _m.getPosition()[1]) or self.s: - self.x = _m.getPosition()[1]-pos[1] - if self.x < 12.5: self.x = 12.5 - if self.x > self.width-12.5: self.x = self.width-12.5 - self.s = True - else: - self.s = False - def get(self): - return int(self.x/(self.width-10)*101) - def set(self, x): - self.x = x/101*(self.width-10) - def draw(self, win, pos): - self._generate(pos) - win.blit(self.surface, pos) -class checkBox(widget): - def __init__(self,width=50,bg=(180,180,180), - fg=(50,180,50),afg=(70,200,70), - abg=(120,120,120),borderColor=(220,220,220), - borderWidth=5): - super()._args(locals()) - self.cl0 = False - self.cl1 = False - self.nc0 = True - self.x = False - self._generate() - def set(self, x): - self.x = x - def get(self): - return self.x - def _generate(self, position=None): - self.surface = _s((self.width,self.width)) - if position != None: - contains = self.surface.rect(position[0], position[1]).contains( - _m.getPosition()[0], _m.getPosition()[1]) - cacm = contains and _m.isPressed('left') - else: - contains = False - cacm = False - if contains and not self.cl0: - _m.setCursor(_pg.SYSTEM_CURSOR_HAND) - self.cl0 = True - self.nc0 = True - elif not contains: - if self.nc0: - _m.setCursor(_pg.SYSTEM_CURSOR_ARROW) - self.nc0 = False - self.cl0 = False - if cacm and not self.cl1: - self.x=self.x==0 - self.cl1 = True - elif not cacm: - self.cl1 = False - self.surface.fill(self.borderColor) - if cacm: - self.surface.draw.rect(self.abg,_r(self.borderWidth,self.borderWidth, - self.surface.size[0]-self.borderWidth*2, - self.surface.size[1]-self.borderWidth*2)) - if self.x: - self.surface.draw.line(self.afg,[self.borderWidth,self.width/2+self.borderWidth], - [self.width/2,self.width-self.borderWidth],self.borderWidth) - self.surface.draw.line(self.afg,[self.width/2,self.width-self.borderWidth], - [self.width-self.borderWidth,self.borderWidth],self.borderWidth) - else: - self.surface.draw.rect(self.bg,_r(self.borderWidth,self.borderWidth, - self.surface.size[0]-self.borderWidth*2, - self.surface.size[1]-self.borderWidth*2)) - if self.x: - self.surface.draw.line(self.fg,[self.borderWidth,self.width/2+self.borderWidth], - [self.width/2,self.width-self.borderWidth],self.borderWidth) - self.surface.draw.line(self.fg,[self.width/2,self.width-self.borderWidth], - [self.width-self.borderWidth,self.borderWidth],self.borderWidth) - def draw(self, win, pos): - self._generate(pos) - win.blit(self.surface,pos) -class comboBox(widget): - def __init__(self,text,values=[], -fontSize=30,font=_df,width=None,height=None, -bg=(70,70,70),fg=(180,180,200),afg=(50,50,50), -abg=(200,200,200),borderColor=(50,50,50),borderWidth=5): - super()._args(locals()) - self._generate() - - def _generate(self, position=None): - self.surface = _s((255,self.width)) - - def draw(self, win, pos): - self._generate(pos) - win.blit(self.surface,pos) -class tip(widget): - def __init__(self,text,responceWidth,responceHeight,fontSize=15,font=_df, - borderColor=(180,180,50),borderWidth=2,bg=(255,255,128), - fg=(35,35,5),waitBeforeShowing=0, - tipPosRelativeCursor=(10,10)): - super()._args(locals()) - self.tick = -1 - self.lcp = (0,0) - self.tprc = self.tipPosRelativeCursor - self._generate() - def _generate(self, position=None): - self.surface = _s((self.responceWidth, - self.responceHeight)) - if position != None: - self.tick += 1 - if self.lcp != _m.getPosition(): - self.tick = 0 - self.lcp = _m.getPosition() - if self.tick >= self.waitBeforeShowing: - mp = _m.getPosition() - mp = [mp[0]+self.tprc[0]-position[0], - mp[1]+self.tprc[1]-position[1]] - rect = _r(mp[0],mp[1], - self.font.size(self.text,self.fontSize)[0]+4, - self.font.size(self.text,self.fontSize)[1]+6) - if mp[0]<0 or mp[1]<0:return - if mp[0]>self.responceWidth:return - if mp[1]>self.responceHeight:return - if mp[0]>self.responceWidth-rect.w: - mp[0]=self.responceWidth-rect.w - if mp[1]>self.responceHeight-rect.h: - mp[1]=self.responceHeight-rect.h - rect = _r(mp[0],mp[1], - self.font.size(self.text,self.fontSize)[0]+4, - self.font.size(self.text,self.fontSize)[1]+6) - self.surface.draw.rect(self.bg,rect) - self.surface.draw.rect( - self.borderColor,rect,self.borderWidth) - ts = self.font.render( - self.text,self.fontSize,self.fg) - self.surface.blit(ts,(mp[0]+2,mp[1]+3)) - def draw(self, win, pos): - self._generate(pos) - win.blit(self.surface,pos) - -class base: - def __init__(self, win, bg=(128,128,128)): - self._widgets = {} - self._bg = bg - self._win = win - self._page = 0 - def draw(self): - self._win.fill(self._bg) - for i in self._widgets[self._page]: - if i[0].power: - i[0].draw(self._win, i[1]) - if i[0].destroyed: - self._widgets[self._page].remove(i) - def put(self, widget, pos, page=0): - if page not in self._widgets: - self.blankPage(page) - self._widgets[page].append([widget, pos]) - def selectPage(self, page): - self._page = page - def getPage(self): - 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] - def blankPage(self,page): - self._widgets.update({page:[]}) diff --git a/src/pygwin2.egg-info/PKG-INFO b/src/pygwin2.egg-info/PKG-INFO new file mode 100644 index 0000000..2de04b1 --- /dev/null +++ b/src/pygwin2.egg-info/PKG-INFO @@ -0,0 +1,54 @@ +Metadata-Version: 2.4 +Name: pygwin2 +Version: 2.0.0 +Summary: A small example package +Author-email: MeexReay +License-Expression: WTFPL +Project-URL: Homepage, https://github.com/MeexReay/pygwin2 +Project-URL: Issues, https://github.com/MeexReay/pygwin2/issues +Keywords: gui,pygame,windows +Classifier: Programming Language :: Python :: 3 +Classifier: Operating System :: OS Independent +Requires-Python: >=3.7 +Description-Content-Type: text/markdown +License-File: LICENSE +Requires-Dist: pydub +Requires-Dist: pygame +Requires-Dist: requests +Requires-Dist: pyautogui +Requires-Dist: inputs +Requires-Dist: pillow +Requires-Dist: wxPython +Requires-Dist: randstr +Requires-Dist: cython +Requires-Dist: pywin32 +Requires-Dist: moviepy +Requires-Dist: pipwin +Requires-Dist: wave +Requires-Dist: opencv-python +Dynamic: license-file + +# Pygwin2 + +A library for creating GUI-applications on pygame. + +[Documentation](docs/DOCS.md) + +## Usage + +Here is a small example of usage (pygame style): + +```py +import pygwin + +win = pygwin.create('Title',(500,500)) + +run = True +while run: + for event in pygwin.getEvents(): + if event.type == pygwin.QUIT: + run = False + + win.update() +pygwin.close() +``` diff --git a/src/pygwin2.egg-info/SOURCES.txt b/src/pygwin2.egg-info/SOURCES.txt new file mode 100644 index 0000000..86864d0 --- /dev/null +++ b/src/pygwin2.egg-info/SOURCES.txt @@ -0,0 +1,24 @@ +LICENSE +README.md +pyproject.toml +src/pygwin2/__init__.py +src/pygwin2/_pg.py +src/pygwin2/_win.py +src/pygwin2/color.py +src/pygwin2/console.py +src/pygwin2/font.py +src/pygwin2/gamepad.py +src/pygwin2/image.py +src/pygwin2/keyboard.py +src/pygwin2/mixer.py +src/pygwin2/mouse.py +src/pygwin2/record.py +src/pygwin2/rect.py +src/pygwin2/surface.py +src/pygwin2/tray.py +src/pygwin2/ui.py +src/pygwin2.egg-info/PKG-INFO +src/pygwin2.egg-info/SOURCES.txt +src/pygwin2.egg-info/dependency_links.txt +src/pygwin2.egg-info/requires.txt +src/pygwin2.egg-info/top_level.txt \ No newline at end of file diff --git a/src/pygwin2.egg-info/dependency_links.txt b/src/pygwin2.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/pygwin2.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/src/pygwin2.egg-info/requires.txt b/src/pygwin2.egg-info/requires.txt new file mode 100644 index 0000000..c94d044 --- /dev/null +++ b/src/pygwin2.egg-info/requires.txt @@ -0,0 +1,14 @@ +pydub +pygame +requests +pyautogui +inputs +pillow +wxPython +randstr +cython +pywin32 +moviepy +pipwin +wave +opencv-python diff --git a/src/pygwin2.egg-info/top_level.txt b/src/pygwin2.egg-info/top_level.txt new file mode 100644 index 0000000..66807cb --- /dev/null +++ b/src/pygwin2.egg-info/top_level.txt @@ -0,0 +1 @@ +pygwin2 diff --git a/build/lib/pygwin/__init__.py b/src/pygwin2/__init__.py similarity index 100% rename from build/lib/pygwin/__init__.py rename to src/pygwin2/__init__.py diff --git a/build/lib/pygwin/_pg.py b/src/pygwin2/_pg.py similarity index 100% rename from build/lib/pygwin/_pg.py rename to src/pygwin2/_pg.py diff --git a/src/pygwin/_win.py b/src/pygwin2/_win.py similarity index 100% rename from src/pygwin/_win.py rename to src/pygwin2/_win.py diff --git a/build/lib/pygwin/color.py b/src/pygwin2/color.py similarity index 100% rename from build/lib/pygwin/color.py rename to src/pygwin2/color.py diff --git a/src/pygwin/console.py b/src/pygwin2/console.py similarity index 100% rename from src/pygwin/console.py rename to src/pygwin2/console.py diff --git a/build/lib/pygwin/font.py b/src/pygwin2/font.py similarity index 100% rename from build/lib/pygwin/font.py rename to src/pygwin2/font.py diff --git a/build/lib/pygwin/gamepad.py b/src/pygwin2/gamepad.py similarity index 100% rename from build/lib/pygwin/gamepad.py rename to src/pygwin2/gamepad.py diff --git a/build/lib/pygwin/image.py b/src/pygwin2/image.py similarity index 100% rename from build/lib/pygwin/image.py rename to src/pygwin2/image.py diff --git a/build/lib/pygwin/keyboard.py b/src/pygwin2/keyboard.py similarity index 100% rename from build/lib/pygwin/keyboard.py rename to src/pygwin2/keyboard.py diff --git a/build/lib/pygwin/mixer.py b/src/pygwin2/mixer.py similarity index 100% rename from build/lib/pygwin/mixer.py rename to src/pygwin2/mixer.py diff --git a/build/lib/pygwin/mouse.py b/src/pygwin2/mouse.py similarity index 100% rename from build/lib/pygwin/mouse.py rename to src/pygwin2/mouse.py diff --git a/build/lib/pygwin/record.py b/src/pygwin2/record.py similarity index 100% rename from build/lib/pygwin/record.py rename to src/pygwin2/record.py diff --git a/build/lib/pygwin/rect.py b/src/pygwin2/rect.py similarity index 100% rename from build/lib/pygwin/rect.py rename to src/pygwin2/rect.py diff --git a/build/lib/pygwin/surface.py b/src/pygwin2/surface.py similarity index 100% rename from build/lib/pygwin/surface.py rename to src/pygwin2/surface.py diff --git a/build/lib/pygwin/tray.py b/src/pygwin2/tray.py similarity index 100% rename from build/lib/pygwin/tray.py rename to src/pygwin2/tray.py diff --git a/build/lib/pygwin/ui.py b/src/pygwin2/ui.py similarity index 100% rename from build/lib/pygwin/ui.py rename to src/pygwin2/ui.py