From f7eba40a9bce8903dc74cf60f9e536132aa69102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Tue, 3 Feb 2026 22:08:36 +0100 Subject: [PATCH] Version info in ffdec.exe and on its splashscreen --- .github/workflows/main.yml | 31 +- CHANGELOG.md | 1 + README.md | 1 + build.xml | 215 +++--- cicd_scripts/before_install.sh | 2 +- graphics/splash3.png | Bin 0 -> 40730 bytes graphics/splash3.svg | 677 ++++++++++++++++++ src/com/jpexs/build/ChangelogUpdater.java | 2 +- src/com/jpexs/build/LocaleConverter.java | 2 +- src/com/jpexs/build/MetainfoUpdater.java | 2 +- .../jpexs/build/SplashScreenGenerator.java | 53 ++ versioninfo.rc | 28 + 12 files changed, 882 insertions(+), 132 deletions(-) create mode 100644 graphics/splash3.png create mode 100644 graphics/splash3.svg create mode 100644 src/com/jpexs/build/SplashScreenGenerator.java create mode 100644 versioninfo.rc diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ec7ecea9d..2c3216ead 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -56,12 +56,41 @@ jobs: apt-get -y update apt-get -y install nsis makensis -VERSION + - name: Install Wine + run: | + sudo dpkg --add-architecture i386 + apt-get update + apt-get install -y --no-install-recommends wine64 + + - name: Init Wine prefix + env: + WINEPREFIX: ${{ github.workspace }}/.wine + WINEDEBUG: "-all" + run: | + mkdir -p "$WINEPREFIX" + wineboot -u + + - name: Install Resource Hacker + env: + RH_DIR: ${{ github.workspace }}/tools/resourcehacker + RH_ZIP: ${{ github.workspace }}/tools/resourcehacker.zip + RH_URL: https://www.angusj.com/resourcehacker/resource_hacker.zip + run: | + set -euxo pipefail + mkdir -p "$(dirname "$RH_ZIP")" + mkdir -p "$RH_DIR" + + wget -O "$RH_ZIP" "$RH_URL" + unzip -o "$RH_ZIP" -d "$RH_DIR" + + # find exe (sometimes it's in subfolder) + find "$RH_DIR" -maxdepth 3 -type f -iname "ResourceHacker.exe" -print - name: Set up ant run: | apt install -y -qq ant - name: Build run: | - export CICD_TEMP=${{ runner.temp }} + export CICD_TEMP=${{ github.workspace }} chmod a+x ./cicd_scripts/*.sh ./cicd_scripts/before_install.sh ./cicd_scripts/script.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 0610abba3..a099567dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ All notable changes to this project will be documented in this file. - Updated German translation (AI used) - Slovak translation (AI used) - APNG (animated PNG) export for frames, sprites and morphshapes +- Version info in ffdec.exe and on its splashscreen ### Fixed - [#2603] Export Sprite as SWF - sprite frames as timeline frames, without sprite itself diff --git a/README.md b/README.md index f24678fe5..30428c20f 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,7 @@ For creating EXE Installer and ZIP version, there exist Ant tasks "installer","r You must configure installation path of this tool in tools.properties file, which could look like this for windows: ``` nsis.path = c:\\program files (x86)\\NSIS +reshack.path = c:\\Program Files (x86)\\Resource Hacker\\ ``` ### Building libraries diff --git a/build.xml b/build.xml index 5954e1653..673d64cd4 100644 --- a/build.xml +++ b/build.xml @@ -44,9 +44,7 @@ - - - + @@ -264,7 +262,7 @@ - + @@ -405,123 +403,8 @@ - - - - - - - - - - - - - true - gui - ${jar.filename}.jar - ${basedir}/${dist.dir}/${translator_exe.filename}.exe - - -translator - - normal - http://java.com/download - - false - false - false - - - - - ${min.java.version} - - preferJre - 64/32 - ${max.heap.size.percent} - - - ${version.number} - ${version}${version.suffix} - ${translator_product.name} - ${vendor} - ${version.number} - ${version}${version.suffix} - ${translator_product.name} - - ${translator_internal.name} - ${translator_exe.filename}.exe - - - - - - - - - - - - - - - + + @@ -539,7 +422,7 @@ tools.properties NOT found. Please create file named "tools.properties" and add two lines: nsis.path = Path to Nullsoft Install System - launch4j.path = Path to launch4j + reshack.path = Path to Resource Hacker WARNING: You must use double backslash in paths on Windows System or forward slash @@ -548,11 +431,8 @@ - - - - - + + @@ -732,7 +612,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cicd_scripts/before_install.sh b/cicd_scripts/before_install.sh index 1116fa397..877fb4fe9 100644 --- a/cicd_scripts/before_install.sh +++ b/cicd_scripts/before_install.sh @@ -14,7 +14,7 @@ MAKENSIS_FULLPATH=`which makensis` MAKENSIS_PATH=`dirname "$MAKENSIS_FULLPATH"` echo "nsis.path = $MAKENSIS_PATH" > tools.properties -echo "launch4j.path = -" >> tools.properties +echo "reshack.path = $tools_dir/resourcehacker/" >> tools.properties cat tools.properties diff --git a/graphics/splash3.png b/graphics/splash3.png new file mode 100644 index 0000000000000000000000000000000000000000..66802b9f1d9b8c91be5d25d0e2297f5f7afec38e GIT binary patch literal 40730 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + +   + + + + JPEXS + + Free + Free + + + flash decompiler + flash decompiler + + JPEXS + + + + + + + + + + + + + + + + + dec + dec + + + diff --git a/src/com/jpexs/build/ChangelogUpdater.java b/src/com/jpexs/build/ChangelogUpdater.java index bdee5b743..b66e8a8ec 100644 --- a/src/com/jpexs/build/ChangelogUpdater.java +++ b/src/com/jpexs/build/ChangelogUpdater.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021-2026 JPEXS + * Copyright (C) 2010-2026 JPEXS * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/com/jpexs/build/LocaleConverter.java b/src/com/jpexs/build/LocaleConverter.java index 60c6a163e..442762a1c 100644 --- a/src/com/jpexs/build/LocaleConverter.java +++ b/src/com/jpexs/build/LocaleConverter.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021-2026 JPEXS + * Copyright (C) 2010-2026 JPEXS * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/com/jpexs/build/MetainfoUpdater.java b/src/com/jpexs/build/MetainfoUpdater.java index c548f51f4..5a1790762 100644 --- a/src/com/jpexs/build/MetainfoUpdater.java +++ b/src/com/jpexs/build/MetainfoUpdater.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023-2026 JPEXS + * Copyright (C) 2010-2026 JPEXS * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/com/jpexs/build/SplashScreenGenerator.java b/src/com/jpexs/build/SplashScreenGenerator.java new file mode 100644 index 000000000..e4bb73dcb --- /dev/null +++ b/src/com/jpexs/build/SplashScreenGenerator.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2010-2026 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.build; + +import com.jpexs.decompiler.flash.ApplicationInfo; +import com.jpexs.decompiler.flash.helpers.BMPFile; +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import javax.imageio.ImageIO; + +/** + * Generates BMP splashscreen with version info for inclusion in ffdec.exe + * + * @author JPEXS + */ +public class SplashScreenGenerator { + + public static void main(String[] args) throws IOException { + BufferedImage img = ImageIO.read(new File("graphics/splash3.png")); + Graphics2D g = img.createGraphics(); + g.setColor(new Color(0, 100, 255, 128)); + g.setFont(new Font("Arial", Font.BOLD, 25)); + int sw = g.getFontMetrics().stringWidth(ApplicationInfo.version); + int x = 190; + int y = 170; + int w = 220; + int h = 25; + g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g.drawString(ApplicationInfo.version, x + w / 2 - sw / 2, y + h); + + BMPFile.saveBitmap(img, new File("build/splash.bmp")); + } +} diff --git a/versioninfo.rc b/versioninfo.rc new file mode 100644 index 000000000..6379d8b3b --- /dev/null +++ b/versioninfo.rc @@ -0,0 +1,28 @@ +1 VERSIONINFO +FILEVERSION @MAJOR@,@MINOR@,@RELEASE@,@BUILD@ +PRODUCTVERSION @MAJOR@,@MINOR@,@RELEASE@,@BUILD@ +FILEOS 0x40004 +FILETYPE 0x1 +{ +BLOCK "StringFileInfo" +{ + BLOCK "000004B0" + { + VALUE "ProductName", "JPEXS Free Flash Decompiler launcher" + VALUE "FileDescription", "JPEXS Free Flash Decompiler launcher" + VALUE "ProductVersion", "@VERSION@" + VALUE "FileVersion", "@VERSION@" + VALUE "InternalName", "Launch5j" + VALUE "OriginalFilename", "ffdec.exe" + VALUE "LegalCopyright", "JPEXS" + VALUE "CompanyName", "JPEXS" + VALUE "LegalTrademarks", "JPEXS" + VALUE "Comments", "-" + } +} + +BLOCK "VarFileInfo" +{ + VALUE "Translation", 0x0000 0x04B0 +} +}