From fd8eedab764d76b52d52d5092336bc9debcde36d Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Sat, 30 May 2026 15:56:51 +0200 Subject: [PATCH] =?UTF-8?q?Usa=20l'icona=20real=20de=20icon/=20al=20bundle?= =?UTF-8?q?=20macOS=20i=20al=20=C2=ABQuant=20a=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 -- README.md | 6 +-- assets/icon.png | Bin 60257 -> 0 bytes assets/make_icon.py | 99 -------------------------------------------- build.sh | 32 ++++---------- jlauncher/paths.py | 2 +- 6 files changed, 12 insertions(+), 130 deletions(-) delete mode 100644 assets/icon.png delete mode 100644 assets/make_icon.py diff --git a/.gitignore b/.gitignore index f16df8f..b47393f 100644 --- a/.gitignore +++ b/.gitignore @@ -86,9 +86,6 @@ __pycache__/ # Distribution / packaging .Python -# Artefactos del icono macOS (regenerables desde assets/icon.png con build.sh) -assets/icon.icns -assets/icon.iconset/ build/ develop-eggs/ dist/ diff --git a/README.md b/README.md index d239941..af162c1 100644 --- a/README.md +++ b/README.md @@ -99,9 +99,9 @@ binario suelto sino una **app nativa**: # -> dist/jlauncher-v-macos-.dmg (arrastrar la app a Aplicaciones) ``` -El icono es provisional y se construye a `assets/icon.icns` desde `assets/icon.png` -(regenerable con `QT_QPA_PLATFORM=offscreen .venv/bin/python assets/make_icon.py`). Para -cambiarlo, sustituye `assets/icon.png` por un PNG cuadrado 1024×1024 y recompila. +El icono vive en `icon/`: el build usa `icon/icon.icns` para el bundle y copia +`icon/icon.png` (1024×1024) dentro del `.app` para el diálogo «Quant a». Para cambiarlo, +sustituye esos ficheros (regenerables con `icon/create_icons.py`). A diferencia del onefile, la `.app` **no** escribe junto a sí misma (rompería al moverla a `/Applications`): guarda sus datos en diff --git a/assets/icon.png b/assets/icon.png deleted file mode 100644 index 2d6f3806fcd2940a8a1da25d2390a24b8e46c076..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60257 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 QImage: - img = QImage(SIZE, SIZE, QImage.Format_ARGB32) - img.fill(Qt.transparent) - - p = QPainter(img) - p.setRenderHint(QPainter.Antialiasing, True) - - # «Squircle»: rectángulo con esquinas redondeadas estilo macOS (~22% del lado). - margin = SIZE * 0.06 - rect = QRectF(margin, margin, SIZE - 2 * margin, SIZE - 2 * margin) - radius = rect.width() * 0.2237 - body = QPainterPath() - body.addRoundedRect(rect, radius, radius) - - grad = QLinearGradient(rect.topLeft(), rect.bottomRight()) - grad.setColorAt(0.0, QColor("#4b3bd6")) - grad.setColorAt(1.0, QColor("#7b2ff7")) - p.fillPath(body, QBrush(grad)) - - # Barras verticales tenues: guiño a «jail». - p.save() - p.setClipPath(body) - p.setPen(Qt.NoPen) - p.setBrush(QColor(255, 255, 255, 26)) - bars = 5 - bar_w = rect.width() * 0.052 - gap = (rect.width() - bars * bar_w) / (bars + 1) - x = rect.left() + gap - for _ in range(bars): - p.drawRoundedRect(QRectF(x, rect.top(), bar_w, rect.height()), bar_w / 2, bar_w / 2) - x += bar_w + gap - p.restore() - - # Triángulo de «play» centrado, blanco con esquinas redondeadas. - cx, cy = rect.center().x(), rect.center().y() - r = rect.width() * 0.26 - tri = QPainterPath() - tri.moveTo(QPointF(cx - r * 0.55, cy - r * 0.95)) - tri.lineTo(QPointF(cx - r * 0.55, cy + r * 0.95)) - tri.lineTo(QPointF(cx + r * 1.0, cy)) - tri.closeSubpath() - - pen_brush = QColor("#ffffff") - stroker_pen = p.pen() - stroker_pen.setColor(pen_brush) - stroker_pen.setWidthF(r * 0.28) - stroker_pen.setJoinStyle(Qt.RoundJoin) - stroker_pen.setCapStyle(Qt.RoundCap) - p.strokePath(tri, stroker_pen) - p.fillPath(tri, pen_brush) - - p.end() - return img - - -def main() -> int: - QGuiApplication([]) - out = Path(__file__).resolve().parent / "icon.png" - img = render() - if not img.save(str(out), "PNG"): - print(f"[icon] no se pudo guardar {out}") - return 1 - print(f"[icon] generado {out} ({SIZE}x{SIZE})") - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/build.sh b/build.sh index 79b8afb..0dc9b61 100755 --- a/build.sh +++ b/build.sh @@ -40,39 +40,23 @@ echo "[build] versión: v${VERSION}" echo "[build] limpiando artefactos previos…" rm -rf dist build app.build app.dist app.onefile-build -# --------------------------------------------------------------------------- -# Construye assets/icon.icns desde assets/icon.png (regenerable con make_icon.py). -# --------------------------------------------------------------------------- -build_icns() { - local png="assets/icon.png" - local icns="assets/icon.icns" - if [ ! -f "$png" ]; then - echo "[build] generando icono provisional (assets/icon.png)…" - QT_QPA_PLATFORM=offscreen .venv/bin/python assets/make_icon.py - fi - echo "[build] construyendo ${icns}…" - local iconset="assets/icon.iconset" - rm -rf "$iconset"; mkdir -p "$iconset" - local s - for s in 16 32 128 256 512; do - sips -z "$s" "$s" "$png" --out "$iconset/icon_${s}x${s}.png" >/dev/null - sips -z $((s*2)) $((s*2)) "$png" --out "$iconset/icon_${s}x${s}@2x.png" >/dev/null - done - iconutil -c icns "$iconset" -o "$icns" - rm -rf "$iconset" -} +ICON_ICNS="icon/icon.icns" +ICON_PNG="icon/icon.png" if [ "$OS" = "darwin" ]; then # ------------------------------------------------------------------------- # macOS: app bundle + DMG # ------------------------------------------------------------------------- - build_icns + if [ ! -f "$ICON_ICNS" ]; then + echo "[build] falta ${ICON_ICNS}" >&2 + exit 1 + fi echo "[build] compilando jlauncher.app (PySide6; puede tardar varios minutos)…" .venv/bin/python -m nuitka \ --standalone \ --macos-create-app-bundle \ - --macos-app-icon=assets/icon.icns \ + --macos-app-icon="$ICON_ICNS" \ --macos-app-name=jlauncher \ --macos-app-version="$VERSION" \ --macos-signed-app-name=com.jailgames.jlauncher \ @@ -102,7 +86,7 @@ if [ "$OS" = "darwin" ]; then echo "[build] sembrando games.toml y icon.png en Contents/Resources…" cp games.toml "$APP/Contents/Resources/games.toml" - cp assets/icon.png "$APP/Contents/Resources/icon.png" # usado por el diálogo «Quant a» + cp "$ICON_PNG" "$APP/Contents/Resources/icon.png" # usado por el diálogo «Quant a» # Bundle ad-hoc (sin Developer ID): quitamos quarantine para abrir sin fricción local. xattr -dr com.apple.quarantine "$APP" 2>/dev/null || true diff --git a/jlauncher/paths.py b/jlauncher/paths.py index b15dc17..48a94d9 100644 --- a/jlauncher/paths.py +++ b/jlauncher/paths.py @@ -65,7 +65,7 @@ def app_icon_path() -> Path | None: if bundle is not None: candidate = bundle / "Contents" / "Resources" / "icon.png" else: - candidate = base_dir() / "assets" / "icon.png" + candidate = base_dir() / "icon" / "icon.png" return candidate if candidate.exists() else None