From 3e80c276500401073291811cbd4ac26d14e4a2cb Mon Sep 17 00:00:00 2001 From: u8slvn Date: Sat, 24 Aug 2024 18:52:42 +0200 Subject: [PATCH] build: add splash image and icon --- .gitignore | 7 +++++++ images/icon-48.png | Bin 0 -> 1131 bytes scripts/build.py | 13 +++++++++---- src/doggo/__init__.py | 11 +++++++---- src/doggo/__main__.py | 2 ++ src/doggo/assets/icon-256.ico | Bin 0 -> 2256 bytes src/doggo/assets/icon-256.png | Bin 0 -> 15285 bytes src/doggo/assets/splash.png | Bin 0 -> 17591 bytes src/doggo/world.py | 14 ++++++++++++-- 9 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 images/icon-48.png create mode 100644 src/doggo/assets/icon-256.ico create mode 100644 src/doggo/assets/icon-256.png create mode 100644 src/doggo/assets/splash.png diff --git a/.gitignore b/.gitignore index 3c69019..83f601e 100644 --- a/.gitignore +++ b/.gitignore @@ -153,3 +153,10 @@ dmypy.json # Cython debug symbols cython_debug/ + +# UPX archive +upx-*.zip +packaging/upx-* + +# Versionfile +**/versionfile.txt diff --git a/images/icon-48.png b/images/icon-48.png new file mode 100644 index 0000000000000000000000000000000000000000..279e36d8571cce93f729e4e809b2e0cb65520b52 GIT binary patch literal 1131 zcmV-x1eE)UP)Px(B}qg3t+>9d=-7iB zBR)!A_E3TZ$wS>s@Ub$A4}%m7>#A-HpVWaexao`o9UAZtbcETc1xG0^WDnPKye7Ff z_vYSM2l>8e&bhhg`}zHT=f^pLy6URye=U!jFFWI*;N<)Hf_*=(00`q_S3-{7)3=ni z4RO}Vf^HfAyo9U(oHT^qxEQkq;J?kXk?p<3{E!1C%qb*K~TrRS02RbV4OMZwO%6h3-aIjiyR; zJ#>Ngo+-`+&dY_X=}sN9Gjz<(pvJqf(#FB$O4%O|N{BlTExikXbAj_b%j}@Wy9_fS zAdDie*WgITbUjx}NJx|tSlifEj1LV2OiReorQS^CG9lErlm;prw<1G;yU|tp<3U@d zi&YFE@_(*IFcbB3IY^ZTrDXh z(-Lx;0W%GbWSBfOt%QBFUwi>Ta`@l~3ZShCCG0~T-7Nba*Y`lB(i5dJ+15mF!V5rh zcpr7*=$YPxm$j7!0Mv9S4BIB(9 zByMeM>tB39a`=GAcq`e|9?*z7nk!k)($6aY{_&mdHVRrc?mYa4?hkJ>G!Qsm8i$I^ zb&|NXEsc8LZ_*&LIXS0vH)mQs}dQ|cNQh=lcf`x>m-}n zBQoAf;)6c{w7=OLy$LVb)E-KABe~deS@RVEib3)PJk#k7QxGdhkYpqaz>k3xYbyJU02peSo~`XC(pXFE(y?sh zV#_i^0?_|>i}k;sSijIXm1w_f_iy08e3QjT_vBeff2tH4bN#)ykBsX62Mmo1)dWCD x|D&1FaoDK4R5C79Qvj list[str]: logger.info("Build Pyinstaller args.") build_args = [] - script_entrypoint = f"{PACKAGE_NAME}/__main__.py" + script_entrypoint = f"src/{PACKAGE_NAME}/__main__.py" logger.info(f"entrypoint: {script_entrypoint}") build_args += [script_entrypoint] @@ -75,11 +75,16 @@ def build_pyinstaller_args( logger.info(f"Output exe filename: {output_filename}") build_args += ["-n", output_filename] - logger.info(f"Output file icon: {ASSETS_PATH.joinpath('icon-48.png')}") - build_args += ["--icon", f"{ASSETS_PATH.joinpath('icon-48.png')}"] + logger.info(f"Output file icon: {ASSETS_PATH.joinpath('icon-256.ico')}") + build_args += ["--icon", f"{ASSETS_PATH.joinpath('icon-256.ico')}"] logger.info(f"Add assets folder: {ASSETS_PATH}") - build_args += ["--add-data", f"{ASSETS_PATH};./{ASSETS_FOLDER}"] + build_args += ["--add-data", f"{ASSETS_PATH}/*;./{ASSETS_FOLDER}"] + for items in ASSETS_PATH.glob("**/*"): + if not items.is_dir(): + continue + logger.info(f"Add data: {items};./{ASSETS_FOLDER}/{items.name}") + build_args += ["--add-data", f"{items};./{ASSETS_FOLDER}/{items.name}"] logger.info(f"Add splash image: {ASSETS_PATH.joinpath('splash.png')}") build_args += ["--splash", f"{ASSETS_PATH.joinpath('splash.png')}"] diff --git a/src/doggo/__init__.py b/src/doggo/__init__.py index 2119d2f..4ba13ff 100644 --- a/src/doggo/__init__.py +++ b/src/doggo/__init__.py @@ -1,11 +1,14 @@ from __future__ import annotations -from importlib import metadata +import sys + from pathlib import Path +from doggo.config import COMPILED_ENV -__app_name__ = "doggo" -__version__ = metadata.version(__app_name__) -ROOT_PATH = Path(__file__).parent +if COMPILED_ENV: + ROOT_PATH = Path(sys._MEIPASS) # type: ignore +elif __file__: + ROOT_PATH = Path(__file__).parent ASSETS_PATH = ROOT_PATH.joinpath("assets") diff --git a/src/doggo/__main__.py b/src/doggo/__main__.py index a45609d..bfa7691 100644 --- a/src/doggo/__main__.py +++ b/src/doggo/__main__.py @@ -2,6 +2,7 @@ import pygame as pg +from doggo import ASSETS_PATH from doggo import config from doggo.config import COMPILED_ENV from doggo.world import World @@ -21,6 +22,7 @@ def run() -> None: world = World( title=config.WORLD_TITLE, size=(config.WORLD_WIDTH, config.WORLD_HEIGHT), + icon=ASSETS_PATH.joinpath("icon-256.png"), fps=config.WORLD_FPS, ) diff --git a/src/doggo/assets/icon-256.ico b/src/doggo/assets/icon-256.ico new file mode 100644 index 0000000000000000000000000000000000000000..c7510968bbd1dc6975d4a162c084ad78c2a2b67d GIT binary patch literal 2256 zcmZ`)3pkYd8vka>wRBNyZLxZGAICu!IU!(rT(la~VrDQg%*CA1c4Ru|eBbju-~V~O_y4}X_xJw(zYhQ) z>U;Hq0DFKYT>vmrue1IAybbhs>8qCpKHqyCU;VoJ=xVE9VTt!*0YLYPkJq8V{7*i*<$3mthiA5b`+dVp$KUs5 zCshB|vCAe3G32Qi@%(m0$M!oJo>tU$qhpf)(}A2r)`0F`fIYW>bPx(;m`2F8F`UA1Y)^|)nw^h(EN6LNt6L3S zQQo+w8LJ2A8VzFn>?=oA9b>$@?$GRaz5TdWIjaP}@~*bAJdIz(I7vO-K+Rmf*sc#` zsN+8r(jon}6!|#6jl@MY!xVG*J#$;bvBETN-@O`Rq!28(0JQ+dMquNP_s}V2-`Isb zj7Ov5#jMa8W0O++$S0`PnQ29+%A1&x{rq1!XU9aWUIj}c9!P;A)|ywR3w>1h)<%jP z<>adCmNM(dSTeDM?51)&x0?oi-~OKvnKRH1Qp=@LDt$~s4&NLCdC%TQJoTuH1EQt@ zIO_)jzFV@fc8xvtcFa91#fJ(*#hl?`Jb|Oo5g&wTuxts5`)S_2H5@z16E6#lGBr@D zo36dA@6k4u-OcKyEI$+w63f#+`wtnbb2L(-=4%qz&En1@+>Tb)ON;jzOeSKA%Cm67 zFDgzP_;EdZcIM;Sfn8uc#^5LX?d76$kI&T^KK3$1fQF^cTsKFb;wgp8CCy|Z$MN#E z(lZit>`IdIodsvaWh<~`tCq%x@fjv;a6Gn|Mq81;nT(8GY3$ zMCl7zpQV%+y2S-P4)*avMZGqQRh0Eiuc}UG-qK@ek&bX$p%WgT84eTJhKX8fvWG5k zkS-w9qv-W96Onc6cQN})(gSGHJ{!ekjeck4HO6ovx0>LpDvUz+z{gIg5WXJZ{x!tR z*HrX)XdGd8E^fKCG^pWb?*rdwJCa}rjCWffevnA9x;yL+2WMPMSX8IQvKBs9on|EX z)0wMz3e3YV#DFi9`C+j44-YDA-N_ zLEf#)Jd9P5Fv^2hP#MT}EQU(c)kthd&-qG{2-?K>5 zv^r)y>M?ulvUMjGTHh)ue^K_$|^Vh$)$=OkH8&9rh0l8pE ziLwB%*VtjBJhPLgj)+Zi%aZ$HO)%Bl4Jwn|OC@>Hhed5oBQ00)PH56?jbouc_)LVm zRt3#E&f;i_S=(6!Og{cf)DM%jKgg_Wxxg{A&FjVg;Y1e86x_zwZh0=LG0vE=-cBKd zh>FRfXy_kd3xTthZ@`&>=%m^Ni!rolRPVy3PHrN)=TPa8d?~sH)m-GjYaz*9%@i*P z&153YI7s?8M^#S0f@+ML0As|jOPa)IzR{q{2D3E2bHv1Ii?7KXITDAp!z>MBd*acs zltC2^e#8a;I`M!z-Gr#$DK}G1fir#iX+*{46QbUuv>%3WM${ypALz%0 ztNy`wS%>KyZ)-FE#A1b)^_)iv4eRK3?7-lLqN^E3Z8HJFWO+Ze)3Da+)l>J#>m^+v z(MmCu=@Q?P#bf$C>v_u?^87Cq^bvF@c~y6g`McROD+8`r6H@PS^+Qp7j;nMEtaWjt zQwyYjJP=ax3anHy^o3TmSdxEk4oCdOTSkf}n##MxI?*)fhMa9{&R&>qU3%R3+{E3A zfI$BECbNd~$?)&&9jmMstB_=yobG~pa#D_%sc69?%=b`qKiZ#OLss!#ZKq?`lo?o z@!oB87RFT~;kyypGw@UEEtpbfX?+Xrd+OwEwFU04G-3Ze+)A3NVKFo9MZ01~z3h{> kJ#V%DNJ)z{NJ)1{cXxv#AdP~Abf>@> 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⪙4~!djkw*{&%gb9 zS$2Kl#Sm)JF6)0h zZJHK&vV8HK+nd=Ze_JZTyEc3%3gki)b;)@&NKX-JAHKYOnRVaJN2FHUUy9+y%u&}t zIeEBLpkcF$*^|0`R$ZK=Yu>->4$RD{*zrwcCL7pj0?yI*dw8}J@wQW1-hKTnjX7MZ zX+2N<@a3hs`_5S#oK|EuJ7fFmN3Oir+ZQ$TSDZ;#$8*a|FlI3DcQqMx#`#hgtCF8O zsC{6`LhPTvu?pK`e%w1K*<%pDS_6gXsGhE}9e@PAcbAIL(f`;|o+lHP2P4Bud5prl z_cZZ(nwwS2Or$n6KA@qGSx_^+lVka<-=CWbD!@Fh34o?`79kej1ZddtUP!k}X@WVQ zE|GxBKrfMtz0Jsa@Lu7{KMIJ*Ub2WJD7tagKwo39gYjPhCEtr1`Ts9(4}B5< literal 0 HcmV?d00001 diff --git a/src/doggo/assets/splash.png b/src/doggo/assets/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..17aa3b274e61120354252953d9ddff99f12f750f GIT binary patch literal 17591 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 x@~Y|-d9>(EjIu^#)!&sKs>ll*fO(8`Qi?*5 None: + def __init__( + self, title: str, size: tuple[int, int], icon: Path, fps: int = 60 + ) -> None: self.window: pg.window.Window = pg.window.Window( title=title, size=size, @@ -26,6 +35,7 @@ def __init__(self, title: str, size: tuple[int, int], fps: int = 60) -> None: always_on_top=True, ) self.screen: pg.Surface = self.window.get_surface() + self.window.set_icon(pg.image.load(icon).convert_alpha()) self.draggable: DraggableWindow = DraggableWindow(window=self.window) self.fps: int = fps self.clock: pg.time.Clock = pg.time.Clock() @@ -88,4 +98,4 @@ def stop() -> None: """Stop the world.""" pg.quit() logger.info("World stopped. Dog is going to sleep.") - exit() + sys.exit()