diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index b244e37..97eccea 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -48,9 +48,9 @@ jobs: - name: Build app bundle run: | - QT_QPA_PLATFORM=offscreen python tools/create_icon.py --source assets/app-icon-source.png --macos-iconset assets/AppIcon.iconset - iconutil -c icns assets/AppIcon.iconset -o assets/pdfreader_by_sparsh.icns - pyinstaller --windowed --onedir --noupx --name "OpenReader" --argv-emulation --icon "assets/pdfreader_by_sparsh.icns" main.py + QT_QPA_PLATFORM=offscreen python tools/create_icon.py --source assets/branding/app-icon-source.png --macos-iconset assets/branding/AppIcon.iconset + iconutil -c icns assets/branding/AppIcon.iconset -o assets/branding/pdfreader_by_sparsh.icns + pyinstaller --windowed --onedir --noupx --name "OpenReader" --argv-emulation --icon "assets/branding/pdfreader_by_sparsh.icns" main.py - name: Package app bundle run: | diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index 3716f0b..f345fd3 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -57,7 +57,7 @@ jobs: - name: Build executable run: | - pyinstaller --noconsole --onedir --noupx --name "OpenReader" --add-data "assets;assets" --icon ".\assets\pdfreader_by_sparsh.ico" main.py + pyinstaller --noconsole --onedir --noupx --name "OpenReader" --add-data "assets;assets" --icon ".\assets\branding\pdfreader_by_sparsh.ico" main.py - name: Determine artifact suffix shell: bash diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f0303ba..6af3c03 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -35,7 +35,7 @@ jobs: - name: Build Windows app run: | - pyinstaller --noconsole --onedir --noupx --name "OpenReader" --add-data "assets;assets" --icon ".\assets\pdfreader_by_sparsh.ico" main.py + pyinstaller --noconsole --onedir --noupx --name "OpenReader" --add-data "assets;assets" --icon ".\assets\branding\pdfreader_by_sparsh.ico" main.py - name: Package Windows ZIP run: | @@ -271,9 +271,9 @@ jobs: - name: Build macOS app run: | - QT_QPA_PLATFORM=offscreen python tools/create_icon.py --source assets/app-icon-source.png --macos-iconset assets/AppIcon.iconset - iconutil -c icns assets/AppIcon.iconset -o assets/pdfreader_by_sparsh.icns - pyinstaller --windowed --onedir --noupx --name "OpenReader" --argv-emulation --icon "assets/pdfreader_by_sparsh.icns" main.py + QT_QPA_PLATFORM=offscreen python tools/create_icon.py --source assets/branding/app-icon-source.png --macos-iconset assets/branding/AppIcon.iconset + iconutil -c icns assets/branding/AppIcon.iconset -o assets/branding/pdfreader_by_sparsh.icns + pyinstaller --windowed --onedir --noupx --name "OpenReader" --argv-emulation --icon "assets/branding/pdfreader_by_sparsh.icns" main.py - name: Package macOS ZIP run: | diff --git a/main.py b/main.py index 626aff2..215a356 100644 --- a/main.py +++ b/main.py @@ -3113,16 +3113,16 @@ def _set_app_icon(self): # 1. Frozen (PyInstaller) standard onedir layout: assets/ next to EXE if getattr(sys, "frozen", False): - icon_paths.append(Path(sys.executable).parent / "assets" / "pdfreader_by_sparsh.ico") + icon_paths.append(Path(sys.executable).parent / "assets" / "branding" / "pdfreader_by_sparsh.ico") # 2. _internal/assets/ layout (some PyInstaller configs) - icon_paths.append(Path(sys.executable).parent / "_internal" / "assets" / "pdfreader_by_sparsh.ico") + icon_paths.append(Path(sys.executable).parent / "_internal" / "assets" / "branding" / "pdfreader_by_sparsh.ico") # 3. Dev/source build: icon in repo root assets/ - icon_paths.append(Path(__file__).parent / "assets" / "pdfreader_by_sparsh.ico") + icon_paths.append(Path(__file__).parent / "assets" / "branding" / "pdfreader_by_sparsh.ico") # 4. Frozen with MEIPASS (legacy PyInstaller attribute) if getattr(sys, "frozen", False) and hasattr(sys, '_MEIPASS'): - icon_paths.append(Path(sys._MEIPASS) / "assets" / "pdfreader_by_sparsh.ico") + icon_paths.append(Path(sys._MEIPASS) / "assets" / "branding" / "pdfreader_by_sparsh.ico") # Try each path for p in icon_paths: @@ -3989,7 +3989,7 @@ def main(): ipc_server.listen(IPC_SERVER_NAME) # Set app-level icon before window creation for taskbar/Wayland - icon_path = Path(__file__).parent / "assets" / "pdfreader_by_sparsh.ico" + icon_path = Path(__file__).parent / "assets" / "branding" / "pdfreader_by_sparsh.ico" if icon_path.exists(): app.setWindowIcon(QIcon(str(icon_path))) diff --git a/scripts/build_windows.ps1 b/scripts/build_windows.ps1 index beaedbf..157e1ba 100644 --- a/scripts/build_windows.ps1 +++ b/scripts/build_windows.ps1 @@ -23,7 +23,7 @@ if (!(Test-Path -LiteralPath ".\.venv")) { --onedir ` --noupx ` --name "OpenReader" ` - --icon ".\assets\pdfreader_by_sparsh.ico" ` + --icon ".\assets\branding\pdfreader_by_sparsh.ico" ` main.py Write-Host "Built dist\OpenReader.exe (version ${version})" diff --git a/tools/create_icon.py b/tools/create_icon.py index 13a3986..d7c6a5a 100644 --- a/tools/create_icon.py +++ b/tools/create_icon.py @@ -140,9 +140,9 @@ def write_macos_iconset(img: Image.Image, output_dir: Path): def main(): parser = argparse.ArgumentParser(description="Create app icon assets from source PNG.") parser.add_argument("--source", required=True, help="Path to source PNG (1024x1024 recommended)") - parser.add_argument("--ico", default="assets/pdfreader_by_sparsh.ico", help="Output .ico path") - parser.add_argument("--msix-dir", default="assets", help="Output directory for MSIX PNGs") - parser.add_argument("--macos-iconset", default="assets/AppIcon.iconset", help="Output macOS .iconset dir") + parser.add_argument("--ico", default="assets/branding/pdfreader_by_sparsh.ico", help="Output .ico path") + parser.add_argument("--msix-dir", default="assets/branding", help="Output directory for MSIX PNGs") + parser.add_argument("--macos-iconset", default="assets/branding/AppIcon.iconset", help="Output macOS .iconset dir") args = parser.parse_args() source_path = Path(args.source)