Version info in ffdec.exe and on its splashscreen

This commit is contained in:
Jindra Petřík
2026-02-03 22:08:36 +01:00
parent 5ef51beb3d
commit f7eba40a9b
12 changed files with 882 additions and 132 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

215
build.xml
View File

@@ -44,9 +44,7 @@
<include name="**/?*.swf"/>
<include name="**/?*.css"/>
</patternset>
<target name="-loadversion" depends="-loadversion-prop,-loadversion-private">
</target>
@@ -264,7 +262,7 @@
<delete file="${app.deb.desktop.temp}" />
</target>
<target name="osx-app-installer" depends="osx-app-bundle">
<target name="osx-app-installer" depends="osx-app-bundle" unless="is_windows">
<mkdir dir="${app.installer.dir}/flat/base.pkg"/>
<mkdir dir="${app.installer.dir}/flat/Resources/en.lproj"/>
<mkdir dir="${app.installer.dir}/root/Applications"/>
@@ -405,123 +403,8 @@
<zipfileset dir="${app.bundle.dir}" includes="${app.osx.dir}.app/Contents/Resources/${app.script}" filemode="777" />
</zip>
</target>
<target name="-set-gui-type">
<property name="exe.type" value="gui" />
</target>
<target name="-set-console-type">
<property name="exe.type" value="console" />
</target>
<!--<target name="-exe-config" depends="-loadversion">
<echoxml file="${exe.config}">
<launch4jConfig>
<dontWrapJar>true</dontWrapJar>
<headerType>${exe.type}</headerType>
<jar>${jar.filename}.jar</jar>
<outfile>${basedir}/${dist.dir}/${exe.filename}.exe</outfile>
<errTitle></errTitle>
<cmdLine></cmdLine>
<chdir></chdir>
<priority>normal</priority>
<downloadUrl>http://java.com/download</downloadUrl>
<supportUrl></supportUrl>
<customProcName>false</customProcName>
<stayAlive>false</stayAlive>
<restartOnCrash>false</restartOnCrash>
<manifest></manifest>
<icon>${basedir}/${exe.icon}</icon>
<jre>
<path></path>
<minVersion>${min.java.version}</minVersion>
<maxVersion></maxVersion>
<jdkPreference>preferJre</jdkPreference>
<runtimeBits>64/32</runtimeBits>
<maxHeapPercent>${max.heap.size.percent}</maxHeapPercent>
<opt>-Djava.net.preferIPv4Stack=true</opt>
<opt>-Djna.nosys=true</opt>
</jre>
<splash>
<file>graphics/splash2.bmp</file>
<waitForWindow>true</waitForWindow>
<timeout>60</timeout>
<timeoutErr>true</timeoutErr>
</splash>
<versionInfo>
<fileVersion>${version.number}</fileVersion>
<txtFileVersion>${version}${version.suffix}</txtFileVersion>
<fileDescription>${product.name}</fileDescription>
<copyright>${vendor}</copyright>
<productVersion>${version.number}</productVersion>
<txtProductVersion>${version}${version.suffix}</txtProductVersion>
<productName>${product.name}</productName>
<companyName></companyName>
<internalName>${internal.name}</internalName>
<originalFilename>${exe.filename}.exe</originalFilename>
</versionInfo>
</launch4jConfig>
</echoxml>
</target>-->
<target name="-exe-translator-config">
<echoxml file="${translator_exe.config}">
<launch4jConfig>
<dontWrapJar>true</dontWrapJar>
<headerType>gui</headerType>
<jar>${jar.filename}.jar</jar>
<outfile>${basedir}/${dist.dir}/${translator_exe.filename}.exe</outfile>
<errTitle></errTitle>
<cmdLine>-translator</cmdLine>
<chdir></chdir>
<priority>normal</priority>
<downloadUrl>http://java.com/download</downloadUrl>
<supportUrl></supportUrl>
<customProcName>false</customProcName>
<stayAlive>false</stayAlive>
<restartOnCrash>false</restartOnCrash>
<manifest></manifest>
<icon></icon>
<jre>
<path></path>
<minVersion>${min.java.version}</minVersion>
<maxVersion></maxVersion>
<jdkPreference>preferJre</jdkPreference>
<runtimeBits>64/32</runtimeBits>
<maxHeapPercent>${max.heap.size.percent}</maxHeapPercent>
</jre>
<versionInfo>
<fileVersion>${version.number}</fileVersion>
<txtFileVersion>${version}${version.suffix}</txtFileVersion>
<fileDescription>${translator_product.name}</fileDescription>
<copyright>${vendor}</copyright>
<productVersion>${version.number}</productVersion>
<txtProductVersion>${version}${version.suffix}</txtProductVersion>
<productName>${translator_product.name}</productName>
<companyName></companyName>
<internalName>${translator_internal.name}</internalName>
<originalFilename>${translator_exe.filename}.exe</originalFilename>
</versionInfo>
</launch4jConfig>
</echoxml>
</target>
<target name="-exe-linux" unless="is_windows" depends="-load-tools,-exe-translator-config"> <!-- -exe-config -->
<!--<java jar="${launch4j.path}/launch4j.jar" fork="true">
<arg line="${exe.config}" />
</java>-->
<!--<java jar="${launch4j.path}/launch4j.jar" fork="true">
<arg line="${translator_exe.config}" />
</java>-->
</target>
<target name="-exe-windows" if="is_windows" depends="-load-tools,-exe-translator-config"> <!-- -exe-config -->
<!--<java jar="${launch4j.path}/launch4j.jar" fork="true">
<arg line="${exe.config}" />
</java>-->
<!-- <java jar="${launch4j.path}/launch4j.jar" fork="true">
<arg line="${translator_exe.config}" />
</java> -->
</target>
<target name="exe" depends="-set-gui-type,-exe-linux,-exe-windows">
<target name="exe" depends="-load-tools,-exe-splashscreen,-exe-versioninfo">
</target>
@@ -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
</fail>
@@ -548,11 +431,8 @@
<target name="-load-tools" depends="-check-tools,-load-tools-ok,-load-tools-fail">
</target>
<target name="exe-console" depends="-set-console-type,-exe-linux,-exe-windows">
</target>
<target name="release" depends="library,archive,deb,osx-app-archive,installer,osx-app-installer">
<target name="release" depends="library,exe,archive,deb,osx-app-archive,installer,osx-app-installer">
</target>
@@ -732,7 +612,88 @@
<arg line="${run.params}" />
</java>
</target>
<target name="-exe-splashscreen-generate" depends="build">
<java classname="com.jpexs.build.SplashScreenGenerator" fork="true" failonerror="true">
<classpath>
<pathelement location="${compile.dir}"/>
<pathelement location="${lib.dir}/ffdec_lib.jar"/>
</classpath>
</java>
</target>
<target name="-exe-splashscreen-inject-unix" depends="-exe-splashscreen-generate,-load-tools" unless="is_windows">
<exec executable="wine" failonerror="true">
<arg value="${reshack.path}ResourceHacker.exe"/>
<arg value="-open"/><arg value="${dist.dir}/ffdec.exe"/>
<arg value="-save"/><arg value="${dist.dir}/ffdec.exe"/>
<arg value="-action"/><arg value="addoverwrite"/>
<arg value="-res"/><arg value="build/splash.bmp"/>
<arg value="-mask"/><arg value="BITMAP,1"/>
</exec>
</target>
<target name="-exe-splashscreen-inject-windows" depends="-exe-splashscreen-generate,-load-tools" if="is_windows">
<exec executable="${reshack.path}ResourceHacker.exe" failonerror="true">
<arg value="-open"/><arg value="${dist.dir}/ffdec.exe"/>
<arg value="-save"/><arg value="${dist.dir}/ffdec.exe"/>
<arg value="-action"/><arg value="addoverwrite"/>
<arg value="-res"/><arg value="build/splash.bmp"/>
<arg value="-mask"/><arg value="BITMAP,1"/>
</exec>
</target>
<target name="-exe-splashscreen" depends="-exe-splashscreen-inject-unix, -exe-splashscreen-inject-windows">
</target>
<target name="-exe-versioninfo-generate" depends="-loadversion,git-tag,-suffix">
<copy file="versioninfo.rc" tofile="build/versioninfo.rc" overwrite="true">
<filterset>
<filter token="MAJOR" value="${version.major}"/>
<filter token="MINOR" value="${version.minor}"/>
<filter token="RELEASE" value="${version.release}"/>
<filter token="BUILD" value="${version.build}"/>
<filter token="VERSION" value="${version}${version.suffix}"/>
</filterset>
</copy>
</target>
<target name="-exe-versioninfo-inject-unix" depends="-exe-versioninfo-generate,-load-tools" unless="is_windows">
<exec executable="wine" failonerror="true">
<arg value="${reshack.path}ResourceHacker.exe"/>
<arg value="-open"/><arg value="build/versioninfo.rc"/>
<arg value="-save"/><arg value="build/versioninfo.res"/>
<arg value="-action"/><arg value="compile"/>
</exec>
<exec executable="wine" failonerror="true">
<arg value="${reshack.path}ResourceHacker.exe"/>
<arg value="-open"/><arg value="${dist.dir}/ffdec.exe"/>
<arg value="-save"/><arg value="${dist.dir}/ffdec.exe"/>
<arg value="-action"/><arg value="addoverwrite"/>
<arg value="-res"/><arg value="build/versioninfo.res"/>
<arg value="-mask"/><arg value="Version Info,1"/>
</exec>
</target>
<target name="-exe-versioninfo-inject-windows" depends="-exe-versioninfo-generate,-load-tools" if="is_windows">
<exec executable="${reshack.path}ResourceHacker.exe" failonerror="true">
<arg value="-open"/><arg value="build/versioninfo.rc"/>
<arg value="-save"/><arg value="build/versioninfo.res"/>
<arg value="-action"/><arg value="compile"/>
</exec>
<exec executable="${reshack.path}ResourceHacker.exe" failonerror="true">
<arg value="-open"/><arg value="${dist.dir}/ffdec.exe"/>
<arg value="-save"/><arg value="${dist.dir}/ffdec.exe"/>
<arg value="-action"/><arg value="addoverwrite"/>
<arg value="-res"/><arg value="build/versioninfo.res"/>
<arg value="-mask"/><arg value="Version Info,1"/>
</exec>
</target>
<target name="-exe-versioninfo" depends="-exe-versioninfo-inject-unix, -exe-versioninfo-inject-windows">
</target>
<target name="javadoc">
<mkdir dir="${javadoc.dir}"/>

View File

@@ -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

BIN
graphics/splash3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

677
graphics/splash3.svg Normal file
View File

@@ -0,0 +1,677 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="450"
height="240"
id="svg2"
inkscape:label="Pozadí"
version="1.1"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
sodipodi:docname="splash3.svg"
inkscape:export-filename="splash2.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs3">
<rect
x="259.39629"
y="197.17623"
width="96.397268"
height="40.487494"
id="rect1" />
<linearGradient
id="linearGradient10739">
<stop
id="stop10741"
offset="0"
style="stop-color:#a4c9ff;stop-opacity:1" />
<stop
id="stop10743"
offset="1"
style="stop-color:#55b5f4;stop-opacity:1" />
</linearGradient>
<linearGradient
id="linearGradient6683">
<stop
style="stop-color:#c4efff;stop-opacity:1"
offset="0"
id="stop6685" />
<stop
style="stop-color:#b4d3ff;stop-opacity:1"
offset="1"
id="stop6687" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective9" />
<inkscape:perspective
id="perspective3609"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective3635"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective3660"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective3685"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<filter
inkscape:collect="always"
id="filter3706"
color-interpolation-filters="sRGB"
x="-0.041734104"
y="-0.11517233"
width="1.0834682"
height="1.2303447">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.83384766"
id="feGaussianBlur3708" />
</filter>
<inkscape:perspective
id="perspective3718"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<filter
inkscape:collect="always"
id="filter3823"
x="-0.014389062"
width="1.0287781"
y="-0.1151411"
height="1.2302822"
color-interpolation-filters="sRGB">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="1.157168"
id="feGaussianBlur3825" />
</filter>
<inkscape:perspective
id="perspective3835"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective3860"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<filter
inkscape:collect="always"
id="filter3901"
color-interpolation-filters="sRGB"
x="-0.022358958"
y="-0.066885571"
width="1.0447179"
height="1.1337711">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.73429527"
id="feGaussianBlur3903" />
</filter>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3223"
id="radialGradient3218"
cx="24.910715"
cy="25.625"
fx="24.910715"
fy="25.625"
r="24.732143"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient3223">
<stop
id="stop3225"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0.32329962"
id="stop3238" />
<stop
style="stop-color:#c9c9c9;stop-opacity:1"
offset="0.83780611"
id="stop3231" />
<stop
id="stop3229"
offset="1"
style="stop-color:#7c7c7c;stop-opacity:1" />
</linearGradient>
<radialGradient
r="24.732143"
fy="25.625"
fx="24.910715"
cy="25.625"
cx="24.910715"
gradientUnits="userSpaceOnUse"
id="radialGradient5862"
xlink:href="#linearGradient3223"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6683"
id="linearGradient6691"
x1="1024.2947"
y1="1041.4436"
x2="566.75861"
y2="616.56152"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.2973031,0,0,0.47194874,2.336283,553.36502)" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3223-1"
id="radialGradient3218-6"
cx="24.910715"
cy="25.625"
fx="24.910715"
fy="25.625"
r="24.732143"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient3223-1">
<stop
id="stop3225-4"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0.32329962"
id="stop3238-2" />
<stop
style="stop-color:#c9c9c9;stop-opacity:1"
offset="0.83780611"
id="stop3231-3" />
<stop
id="stop3229-2"
offset="1"
style="stop-color:#7c7c7c;stop-opacity:1" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient10739"
id="linearGradient10737"
x1="358.78299"
y1="1038.6146"
x2="-1.8106551"
y2="742.47198"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1133187,0,0,0.78442481,2.336283,224.52699)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3877"
id="linearGradient3997"
gradientUnits="userSpaceOnUse"
x1="222.2654"
y1="788.08118"
x2="203.69397"
y2="609.50977" />
<linearGradient
inkscape:collect="always"
id="linearGradient3877">
<stop
style="stop-color:#8f0000;stop-opacity:1"
offset="0"
id="stop3879" />
<stop
style="stop-color:#ff0000;stop-opacity:1"
offset="1"
id="stop3881" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3877"
id="linearGradient3995"
gradientUnits="userSpaceOnUse"
x1="222.2654"
y1="788.08118"
x2="203.69397"
y2="609.50977" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3869"
id="linearGradient3983"
gradientUnits="userSpaceOnUse"
x1="429.66144"
y1="541.00714"
x2="471.56793"
y2="272.92804" />
<linearGradient
inkscape:collect="always"
id="linearGradient3869">
<stop
style="stop-color:#000000;stop-opacity:1"
offset="0"
id="stop3871" />
<stop
style="stop-color:#00aeef;stop-opacity:1"
offset="1"
id="stop3873" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3869"
id="linearGradient3981"
gradientUnits="userSpaceOnUse"
x1="429.66144"
y1="541.00714"
x2="471.56793"
y2="272.92804" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3004"
id="linearGradient3010"
x1="405.63779"
y1="748.06122"
x2="404.22449"
y2="13.826509"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
id="linearGradient3004">
<stop
style="stop-color:#000000;stop-opacity:1"
offset="0"
id="stop3006" />
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="1"
id="stop3008" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3004"
id="linearGradient3010-8"
x1="405.63779"
y1="748.06122"
x2="404.22449"
y2="13.826509"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.37746203,0,0,0.38724808,-175.07844,-347.55321)" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3811"
id="radialGradient3809"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.325561,0,0,0.325561,-155.5238,-322.16266)"
cx="398.57144"
cy="387.14285"
fx="398.57144"
fy="387.14285"
r="395.71429" />
<linearGradient
id="linearGradient3811"
inkscape:collect="always">
<stop
id="stop3813"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0.42236024"
id="stop3819" />
<stop
id="stop3821"
offset="0.69565213"
style="stop-color:#ececec;stop-opacity:1" />
<stop
style="stop-color:#b6b6b6;stop-opacity:1;"
offset="0.97722566"
id="stop3815" />
<stop
id="stop3817"
offset="1"
style="stop-color:#ffffff;stop-opacity:1" />
</linearGradient>
<filter
inkscape:collect="always"
style="color-interpolation-filters:sRGB"
id="filter1247"
x="-0.024013229"
y="-0.037297224"
width="1.0480265"
height="1.0745944">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="1.2791688"
id="feGaussianBlur1249" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient380"
id="linearGradient259"
x1="96.383926"
y1="130.40178"
x2="96.383926"
y2="52.916668"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0469866,0,0,1.0469867,-6.1717513,0.07354311)" />
<linearGradient
inkscape:collect="always"
id="linearGradient380">
<stop
style="stop-color:#000000;stop-opacity:1"
offset="0"
id="stop376" />
<stop
style="stop-color:#05aeee;stop-opacity:1"
offset="1"
id="stop378" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient380"
id="linearGradient467"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.052957,0,0,1.0469867,-6.433531,0.07354311)"
x1="96.383926"
y1="130.40178"
x2="96.383926"
y2="52.916668" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient380"
id="linearGradient598"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.052957,0,0,1.0469867,56.967854,-0.38625086)"
x1="96.383926"
y1="130.40178"
x2="96.383926"
y2="52.916668" />
<filter
inkscape:collect="always"
style="color-interpolation-filters:sRGB"
id="filter1398"
x="-0.018924975"
width="1.0378499"
y="-0.039373755"
height="1.0787475">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.83859643"
id="feGaussianBlur1400" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.123478"
inkscape:cx="162.44199"
inkscape:cy="130.84368"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="930"
inkscape:window-x="-6"
inkscape:window-y="-6"
inkscape:window-maximized="1"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1" />
<metadata
id="metadata6">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="background"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-812.3622)"
style="display:inline"
sodipodi:insensitive="true">
<rect
style="fill:url(#linearGradient6691);fill-opacity:1;stroke:url(#linearGradient10737);stroke-width:4.67257;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect2815"
width="445.32742"
height="235.32744"
x="2.336283"
y="814.69849" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none"
x="165.47122"
y="1019.081"
id="text3597-1"
transform="scale(0.98890576,1.0112187)"><tspan
sodipodi:role="line"
id="tspan3599-7"
x="165.47122"
y="1019.081"
style="font-size:27.6954px;line-height:1.25"> </tspan></text>
</g>
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="Layer"
transform="translate(0,-60)" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="text"
transform="translate(0,190)">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#676767;fill-opacity:1;stroke:none;filter:url(#filter3901)"
x="7.5546227"
y="37.095638"
id="text3597-2-5"
transform="matrix(1.9487261,0,0,1.9932144,232.77331,-187.54889)"><tspan
sodipodi:role="line"
id="tspan3599-45-1"
x="7.5546227"
y="37.095638"
style="font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:28.1798px;line-height:1.25;font-family:Neris;-inkscape-font-specification:'Neris Bold Oblique';fill:#ffffff;fill-opacity:1">JPEXS</tspan></text>
<g
id="g3027"
transform="matrix(1.6776457,0,0,1.6776456,143.16993,-127.30739)">
<text
transform="matrix(0.83039113,0,0,0.96470084,78.866062,0.31214013)"
id="text3597-9"
y="36.770775"
x="6.3993211"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#595959;fill-opacity:1;stroke:none;filter:url(#filter3706)"
xml:space="preserve"><tspan
style="font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:24px;line-height:1.25;font-family:Neris;-inkscape-font-specification:'Neris Bold Oblique';fill:#ffffff;fill-opacity:1"
y="36.770775"
x="6.3993211"
id="tspan3599-4"
sodipodi:role="line">Free</tspan></text>
<text
transform="scale(0.92778003,1.0778417)"
id="text3597"
y="32.52689"
x="90.150703"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#00e400;fill-opacity:1;stroke:none"
xml:space="preserve"><tspan
style="font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:21.4807px;line-height:1.25;font-family:Neris;-inkscape-font-specification:'Neris Bold Oblique';fill:#00e400;fill-opacity:1"
y="32.52689"
x="90.150703"
id="tspan3599"
sodipodi:role="line">Free</tspan></text>
</g>
<g
id="g3805"
transform="matrix(1.1363515,0,0,1.3201479,36.000503,-74.881223)">
<text
id="text3597-4-8"
y="36.500076"
x="159.39526"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#6c0000;fill-opacity:1;stroke:none;filter:url(#filter3823)"
xml:space="preserve"><tspan
style="font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:24px;line-height:1.25;font-family:Neris;-inkscape-font-specification:'Neris Bold Oblique';fill:#ffffff;fill-opacity:1"
y="36.500076"
x="159.39526"
id="tspan3599-0-8"
sodipodi:role="line">flash decompiler</tspan></text>
<text
id="text3597-4"
y="35.605125"
x="159.50061"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#ff0000;fill-opacity:1;stroke:none"
xml:space="preserve"><tspan
style="font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:24px;line-height:1.25;font-family:Neris;-inkscape-font-specification:'Neris Bold Oblique';fill:#ff0000"
y="35.605125"
x="159.50061"
id="tspan3599-0"
sodipodi:role="line">flash decompiler</tspan></text>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Bitstream Vera Sans';fill:#0069d6;fill-opacity:1;stroke:none"
x="249.89923"
y="-113.6102"
id="text3597-2"
transform="scale(0.98877709,1.0113503)"><tspan
sodipodi:role="line"
id="tspan3599-45"
x="249.89923"
y="-113.6102"
style="font-style:oblique;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:55.5381px;line-height:1.25;font-family:Neris;-inkscape-font-specification:'Neris Bold Oblique';fill:#0069d6;fill-opacity:1">JPEXS</tspan></text>
<text
xml:space="preserve"
transform="translate(0,-190)"
id="text1"
style="font-size:40px;font-family:TerminaxW02-Regular;-inkscape-font-specification:TerminaxW02-Regular;text-align:start;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect1);display:inline;fill:#cbcbcb;stroke-width:7.104;stroke-linecap:round;stroke-linejoin:round" />
<text
xml:space="preserve"
style="font-size:30.4089px;font-family:TerminaxW02-Regular;-inkscape-font-specification:TerminaxW02-Regular;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:none;fill:#000000;stroke-width:5.40061;stroke-linecap:round;stroke-linejoin:round"
x="288.10101"
y="23.067413"
id="text2"
inkscape:label="version"><tspan
sodipodi:role="line"
id="tspan2"
x="288.10101"
y="23.067413"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:5.40061">1.0.0</tspan></text>
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="logo">
<g
id="g1"
transform="matrix(0.57170809,0,0,0.57170809,125.92316,233.98959)">
<circle
id="path2984"
style="display:inline;fill:url(#linearGradient3010-8);fill-opacity:1;stroke:none;stroke-width:0.382324"
cx="-24.632851"
cy="-197.63286"
r="149.36713" />
<circle
id="path2984-1"
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.334533"
cx="-25.764494"
cy="-196.12405"
r="130.69623" />
<path
id="path2984-1-7"
d="m -25.764492,-324.95318 c -71.150364,0 -128.829138,57.67877 -128.829138,128.82915 0,71.15037 57.678774,128.829143 128.829138,128.829143 71.150367,0 128.829142,-57.678773 128.829142,-128.829143 0,-71.15038 -57.678775,-128.82915 -128.829142,-128.82915 z"
style="display:inline;fill:url(#radialGradient3809);fill-opacity:1;stroke:none;stroke-width:0.373417" />
<g
aria-label="FF"
transform="matrix(1.4909072,0,0,1.3360246,-168.23018,-336.36809)"
id="text218-2"
style="font-size:114.499px;line-height:1.25;display:inline;opacity:0.5;fill:#bdbdbd;fill-opacity:1;stroke-width:2.86248;filter:url(#filter1247)">
<path
d="M 39.734485,136.99821 52.470961,55.245928 H 104.17951 L 98.23367,69.443804 H 64.666721 l -3.328059,22.365491 h 29.194182 l -1.946236,13.998235 -29.551987,-0.29946 -4.826036,31.58996 z"
style="font-style:italic;font-weight:bold;font-family:Neris;-inkscape-font-specification:'Neris Bold Italic';fill:#bdbdbd;fill-opacity:1;stroke-width:2.87063"
id="path462-34"
sodipodi:nodetypes="ccccccccccc" />
<path
d="m 103.13587,136.53841 12.73648,-81.752276 h 51.70855 l -5.94584,14.197876 h -33.56695 l -3.32806,22.365491 h 29.19418 l -1.94624,13.998239 -29.55198,-0.29946 -4.82604,31.58995 z"
style="font-style:italic;font-weight:bold;font-size:114.499px;line-height:1.25;font-family:Neris;-inkscape-font-specification:'Neris Bold Italic';display:inline;fill:#bdbdbd;fill-opacity:1;stroke-width:2.87063"
id="path462-3-6"
sodipodi:nodetypes="ccccccccccc" />
</g>
<g
aria-label="FF"
transform="matrix(1.4909072,0,0,1.3360246,-175.13161,-345.49116)"
id="text218"
style="font-size:114.499px;line-height:1.25;display:inline;fill:url(#linearGradient259);stroke-width:2.86248">
<path
d="M 39.734485,136.99821 52.470961,55.245928 H 104.17951 L 98.23367,69.443804 H 64.666721 l -3.328059,22.365491 h 29.194182 l -1.946236,13.998235 -29.551987,-0.29946 -4.826036,31.58996 z"
style="font-style:italic;font-weight:bold;font-family:Neris;-inkscape-font-specification:'Neris Bold Italic';fill:url(#linearGradient467);stroke-width:2.87063"
id="path462"
sodipodi:nodetypes="ccccccccccc" />
<path
d="m 103.13587,136.53841 12.73648,-81.752276 h 51.70855 l -5.94584,14.197876 h -33.56695 l -3.32806,22.365491 h 29.19418 l -1.94624,13.998239 -29.55198,-0.29946 -4.82604,31.58995 z"
style="font-style:italic;font-weight:bold;font-size:114.499px;line-height:1.25;font-family:Neris;-inkscape-font-specification:'Neris Bold Italic';display:inline;fill:url(#linearGradient598);stroke-width:2.87063"
id="path462-3"
sodipodi:nodetypes="ccccccccccc" />
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:66.3845px;line-height:1.25;font-family:sans-serif;display:inline;opacity:0.5;fill:#aaaaaa;fill-opacity:1;stroke:none;stroke-width:1.6596;filter:url(#filter1398)"
x="52.163963"
y="182.72766"
id="text218-6-0"
transform="matrix(1.2993574,0,0,1.2993574,-167.32424,-325.86021)"><tspan
sodipodi:role="line"
id="tspan216-0-3"
x="52.163963"
y="182.72766"
style="font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Neris;-inkscape-font-specification:'Neris Bold Italic';fill:#aaaaaa;fill-opacity:1;stroke-width:1.6596">dec</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:86.2573px;line-height:1.25;font-family:sans-serif;display:inline;fill:#d50101;fill-opacity:1;stroke:none;stroke-width:2.15642"
x="-102.41499"
y="-94.659897"
id="text218-6"
inkscape:label="text218-6"><tspan
sodipodi:role="line"
id="tspan216-0"
x="-102.41499"
y="-94.659897"
style="font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Neris;-inkscape-font-specification:'Neris Bold Italic';fill:#d50101;fill-opacity:1;stroke-width:2.15642">dec</tspan></text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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 <http://www.gnu.org/licenses/>.
*/
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"));
}
}

28
versioninfo.rc Normal file
View File

@@ -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
}
}