Compare commits

..
14 Commits
Author SHA1 Message Date
blumiaandyyc12345 042e0d52c9 fix: REUSE lint for files under msix folder 2026-09-26 09:48:46 +08:00
blumiaandyyc12345 b35d6712f4 chore(CI): add ubuntu 26.04 build 2026-09-26 09:47:01 +08:00
blumiaandyyc12345 85cb638be9 feat: msix deployment support and add store link 2026-09-26 09:43:30 +08:00
yyc12345 014372b9c0 fix: fix windows CI no label error
- fix windows CI no label error
- add lost goto in windows CI
- uniform goto style
2026-09-25 17:27:05 +08:00
yyc12345 2131f4ffa3 feat: introduce InnoSetup for windows package 2026-09-25 17:13:27 +08:00
yyc12345 1cb4d55335 refactor: use metaglot to take macos bundle i18n over
- use metaglot for macos bundle i18n
- set macos icon from PUBLIC to PRIVATE
- remove CFBundleLongVersionString from Info.plist
2026-09-24 16:05:20 +08:00
yyc12345 9b67599979 chore: reduce the length of the error message in cmake 2026-09-22 17:15:49 +08:00
yyc12345 6ff4330f26 chore: move windows icos resources location 2026-09-22 17:13:59 +08:00
yyc12345 aa8e8fecf4 fix: fix invalid install for UNIX app icon 2026-09-22 16:43:04 +08:00
yyc12345 56af1c154a refactor: use metaglot to take appstream file i18n over 2026-09-22 16:06:23 +08:00
yyc12345 22cae20707 refactor: use metaglot to take desktop file i18n over 2026-09-22 15:29:09 +08:00
yyc12345 447a6b45af refactor: use metaglot to enable i18n for Windows artifact 2026-09-22 13:53:16 +08:00
yyc12345 f946247d1d refactor: move translation to independent directory 2026-09-10 09:58:53 +08:00
yyc12345 f9991998ed feat: update icon and change the directory of htmls 2026-09-10 09:48:07 +08:00
140 changed files with 2683 additions and 2762 deletions
+6
View File
@@ -9,6 +9,12 @@ jobs:
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
- name: Install MetaGlot
run: uv tool install git+https://github.com/SarasasChipWorkshop/metaglot.git
- name: Install Qt - name: Install Qt
uses: jurplel/install-qt-action@v4 uses: jurplel/install-qt-action@v4
with: with:
+36
View File
@@ -7,6 +7,12 @@ jobs:
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
- name: Install MetaGlot
run: uv tool install git+https://github.com/SarasasChipWorkshop/metaglot.git
- name: Get build dept. - name: Get build dept.
run: | run: |
sudo apt update sudo apt update
@@ -26,3 +32,33 @@ jobs:
with: with:
name: ubuntu-24.04-deb-package name: ubuntu-24.04-deb-package
path: build/*.deb path: build/*.deb
ubuntu-26-04-build:
runs-on: ubuntu-26.04
steps:
- uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
- name: Install MetaGlot
run: uv tool install git+https://github.com/SarasasChipWorkshop/metaglot.git
- name: Get build dept.
run: |
sudo apt update
sudo apt install cmake qt6-base-dev qt6-svg-dev qt6-tools-dev libexiv2-dev
- name: Build it
run: |
mkdir build
cd build
cmake ../
make
cpack -G DEB
- name: Try install it
run: |
cd build
sudo apt install ./*.deb
- uses: actions/upload-artifact@v6
with:
name: ubuntu-26.04-deb-package
path: build/*.deb
+20 -47
View File
@@ -3,45 +3,6 @@ name: Windows CI
on: [push, pull_request, workflow_dispatch] on: [push, pull_request, workflow_dispatch]
jobs: jobs:
msvc-qmake-build:
strategy:
matrix:
include:
- qt_ver: '6.11.2'
vs: '2022'
aqt_arch: 'win64_msvc2022_64'
msvc_arch: 'x64'
runs-on: windows-2022
steps:
- uses: actions/checkout@v6
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
arch: ${{ matrix.aqt_arch }}
version: ${{ matrix.qt_ver }}
modules: 'qtimageformats'
cache: true
# we need this until miurahr/aqtinstall#1007 ships 3.3.1 for Qt >= 6.11.0 for Windows.
aqtsource: 'aqtinstall @ git+https://github.com/miurahr/aqtinstall@16db45a70b5905ad596941b223469bc86a56901e'
- name: Build
shell: cmd
run: |
set VS=${{ matrix.vs }}
set VCVARS="C:\Program Files (x86)\Microsoft Visual Studio\%VS%\Enterprise\VC\Auxiliary\Build\vcvarsall.bat"
if not exist %VCVARS% set VCVARS="C:\Program Files\Microsoft Visual Studio\%VS%\Enterprise\VC\Auxiliary\Build\vcvarsall.bat"
call %VCVARS% ${{ matrix.msvc_arch }}
qmake pineapple-pictures.pro
nmake
nmake clean
windeployqt --verbose=2 --no-quick-import --no-translations --no-opengl-sw --no-system-d3d-compiler --no-system-dxc-compiler --skip-plugin-types tls,networkinformation release\ppic.exe
- uses: actions/upload-artifact@v6
with:
name: "windows-msvc${{ matrix.vs }}-qt${{ matrix.qt_ver }}-qmake-package"
path: release/*
msvc-cmake-build: msvc-cmake-build:
strategy: strategy:
@@ -56,6 +17,12 @@ jobs:
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
- name: Install MetaGlot
run: uv tool install git+https://github.com/SarasasChipWorkshop/metaglot.git
- name: Install Qt - name: Install Qt
uses: jurplel/install-qt-action@v4 uses: jurplel/install-qt-action@v4
with: with:
@@ -64,7 +31,7 @@ jobs:
modules: 'qtimageformats' modules: 'qtimageformats'
cache: true cache: true
# we need this until miurahr/aqtinstall#1007 ships 3.3.1 for Qt >= 6.11.0 for Windows. # we need this until miurahr/aqtinstall#1007 ships 3.3.1 for Qt >= 6.11.0 for Windows.
aqtsource: 'aqtinstall @ git+https://github.com/miurahr/aqtinstall@16db45a70b5905ad596941b223469bc86a56901e' aqtsource: 'aqtinstall @ git+https://github.com/miurahr/aqtinstall@16db45a70b5905ad596941b223469bc86a56901a'
- name: Build - name: Build
shell: cmd shell: cmd
run: | run: |
@@ -98,7 +65,7 @@ jobs:
curl -fsSL -o libavif-v1_3_0.zip https://github.com/AOMediaCodec/libavif/archive/v1.3.0.zip curl -fsSL -o libavif-v1_3_0.zip https://github.com/AOMediaCodec/libavif/archive/v1.3.0.zip
7z x libavif-v1_3_0.zip -y -o"dependencies_src" 7z x libavif-v1_3_0.zip -y -o"dependencies_src"
ren .\dependencies_src\libavif-1.3.0 libavif || goto :error ren .\dependencies_src\libavif-1.3.0 libavif || goto :error
cmake ./dependencies_src/libavif -Bbuild_dependencies/libavif -DCMAKE_INSTALL_PREFIX="dependencies_bin" -DAVIF_CODEC_AOM=SYSTEM -DAVIF_CODEC_AOM_DECODE=ON -DAVIF_CODEC_AOM_ENCODE=ON -DAVIF_LIBYUV=LOCAL cmake ./dependencies_src/libavif -Bbuild_dependencies/libavif -DCMAKE_INSTALL_PREFIX="dependencies_bin" -DAVIF_CODEC_AOM=SYSTEM -DAVIF_CODEC_AOM_DECODE=ON -DAVIF_CODEC_AOM_ENCODE=ON -DAVIF_LIBYUV=LOCAL || goto :error
cmake --build build_dependencies/libavif --config Release --target=install || goto :error cmake --build build_dependencies/libavif --config Release --target=install || goto :error
echo ::endgroup:: echo ::endgroup::
echo ::group::===== expat ===== echo ::group::===== expat =====
@@ -125,17 +92,23 @@ jobs:
echo ::endgroup:: echo ::endgroup::
:: ------ app ------ :: ------ app ------
echo ::group::===== App (Build'n'Install) ===== echo ::group::===== App (Build'n'Install) =====
cmake -Bbuild . cmake -Bbuild . || goto :error
cmake --build build --config Release cmake --build build --config Release || goto :error
cmake --install build --config Release --prefix "%PWD%\build" cmake --install build --config Release --prefix "%PWD%\build" || goto :error
echo ::endgroup:: echo ::endgroup::
:: ------ pkg ------ :: ------ pkg ------
windeployqt --verbose=2 --no-compiler-runtime --no-quick-import --no-translations --no-network --no-opengl-sw --no-system-d3d-compiler --no-system-dxc-compiler --skip-plugin-types tls,networkinformation build\bin\ppic.exe windeployqt --verbose=2 --no-compiler-runtime --no-quick-import --no-translations --no-network --no-opengl-sw --no-system-d3d-compiler --no-system-dxc-compiler --skip-plugin-types tls,networkinformation build\bin\ppic.exe
robocopy ./dependencies_bin/bin build/bin *.dll robocopy ./dependencies_bin/bin build/bin *.dll
if ErrorLevel 8 (exit /B 1) if ErrorLevel 8 goto :error
copy LICENSE build\bin copy LICENSE build\bin
copy build\inno-metadata\ppic.iss build\bin\ppic.iss
robocopy build\inno-metadata\Strings build\bin\Strings
if ErrorLevel 8 goto :error
iscc /Q build\bin\ppic.iss || goto :error
exit /B 0 exit /B 0
:error
exit /B 1
- uses: actions/upload-artifact@v6 - uses: actions/upload-artifact@v6
with: with:
name: "windows-msvc${{ matrix.vs }}-qt${{ matrix.qt_ver }}-cmake-package" name: "ppic-windows-msvc${{ matrix.vs }}-qt${{ matrix.qt_ver }}-cmake-setup"
path: build/bin/* path: build/bin/ppic-setup.exe
+107 -30
View File
@@ -96,12 +96,31 @@ set (PPIC_RC_FILES
set (EXE_NAME ppic) set (EXE_NAME ppic)
# Translation # Translation
file (GLOB PPIC_TS_FILES app/translations/*.ts) file (GLOB PPIC_TS_FILES locales/app/*.ts)
set (PPIC_CPP_FILES_FOR_I18N ${PPIC_CPP_FILES}) set (PPIC_CPP_FILES_FOR_I18N ${PPIC_CPP_FILES})
find_program (UV_EXECUTABLE uv)
if (NOT UV_EXECUTABLE)
message (FATAL_ERROR "uv is required to run the metaglot tool, install it from https://docs.astral.sh/uv/")
endif ()
if (WIN32) if (WIN32)
configure_file(assets/pineapple-pictures.rc.in pineapple-pictures.rc @ONLY) # Setup Windows RC files
list(APPEND PPIC_RC_FILES ${CMAKE_CURRENT_BINARY_DIR}/pineapple-pictures.rc) set (PPIC_RC_TEMPLATE_FILE ${CMAKE_CURRENT_BINARY_DIR}/pineapple-pictures.rc.in)
execute_process (
COMMAND ${UV_EXECUTABLE} tool run metaglot render rc
--manifest ${CMAKE_SOURCE_DIR}/dist/pineapple-pictures.rc.in.toml
--po ${CMAKE_SOURCE_DIR}/locales/winrc/*.po
--template ${CMAKE_SOURCE_DIR}/dist/pineapple-pictures.rc.in.liquid
--output ${PPIC_RC_TEMPLATE_FILE}
RESULT_VARIABLE METAGLOT_RESULT
)
if (NOT METAGLOT_RESULT EQUAL 0)
message (FATAL_ERROR "Failed to generate Windows RC file template via MetaGlot (exit code: ${METAGLOT_RESULT}).")
endif ()
configure_file (${PPIC_RC_TEMPLATE_FILE} ${CMAKE_CURRENT_BINARY_DIR}/pineapple-pictures.rc @ONLY)
list (APPEND PPIC_RC_FILES ${CMAKE_CURRENT_BINARY_DIR}/pineapple-pictures.rc)
endif () endif ()
add_executable (${EXE_NAME} add_executable (${EXE_NAME}
@@ -210,20 +229,67 @@ if (WIN32)
set_target_properties(${EXE_NAME} PROPERTIES set_target_properties(${EXE_NAME} PROPERTIES
WIN32_EXECUTABLE TRUE WIN32_EXECUTABLE TRUE
) )
# Setup Inno Setup script file
set (PPIC_INNO_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/inno-metadata)
execute_process (
COMMAND ${UV_EXECUTABLE} tool run metaglot render inno
--manifest ${CMAKE_SOURCE_DIR}/dist/ppic.iss.in.toml
--po ${CMAKE_SOURCE_DIR}/locales/inno/*.po
--iss-template ${CMAKE_SOURCE_DIR}/dist/ppic.iss.in.liquid
--isl-template ${CMAKE_SOURCE_DIR}/dist/ppic.isl.liquid
--iss-path ppic.iss.in
--isl-path "Strings/{{ lang }}.isl"
--output ${PPIC_INNO_OUTPUT_DIR}
RESULT_VARIABLE METAGLOT_INNO_RESULT
)
if (NOT METAGLOT_INNO_RESULT EQUAL 0)
message (FATAL_ERROR "Failed to render Inno Setup script via MetaGlot (exit code: ${METAGLOT_INNO_RESULT}).")
endif ()
configure_file (${PPIC_INNO_OUTPUT_DIR}/ppic.iss.in ${PPIC_INNO_OUTPUT_DIR}/ppic.iss @ONLY)
elseif (APPLE) elseif (APPLE)
set_source_files_properties(assets/icons/app-icon.icns PROPERTIES # Include icon to project
set_source_files_properties(dist/sarasacw-picture.icns PROPERTIES
MACOSX_PACKAGE_LOCATION "Resources" MACOSX_PACKAGE_LOCATION "Resources"
) )
target_sources(${EXE_NAME} PUBLIC assets/icons/app-icon.icns) target_sources(${EXE_NAME} PRIVATE dist/sarasacw-picture.icns)
# Setup Info.plist related directory.
set (PPIC_PLIST_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/plist-metadata)
# Render Info.plist and its strings.
execute_process (
COMMAND ${UV_EXECUTABLE} tool run metaglot render plist
--manifest ${CMAKE_SOURCE_DIR}/dist/Info.plist.in.toml
--po ${CMAKE_SOURCE_DIR}/locales/plist/*.po
--plist-template ${CMAKE_SOURCE_DIR}/dist/Info.plist.in.liquid
--strings-template ${CMAKE_SOURCE_DIR}/dist/InfoPlist.strings.liquid
--plist-path Info.plist.in
--strings-path "Resources/{{ lang }}.lproj/InfoPlist.strings"
--output ${PPIC_PLIST_OUTPUT_DIR}
RESULT_VARIABLE METAGLOT_PLIST_RESULT
)
if (NOT METAGLOT_PLIST_RESULT EQUAL 0)
message (FATAL_ERROR "Failed to render Info.plist metadata via MetaGlot (exit code: ${METAGLOT_PLIST_RESULT}).")
endif ()
# Include these to project.
file (GLOB PPIC_PLIST_STRINGS_FILES ${PPIC_PLIST_OUTPUT_DIR}/Resources/*.lproj/InfoPlist.strings)
foreach (plist_strings_file ${PPIC_PLIST_STRINGS_FILES})
get_filename_component (plist_lproj_dir ${plist_strings_file} DIRECTORY)
get_filename_component (plist_lproj_name ${plist_lproj_dir} NAME)
set_source_files_properties (${plist_strings_file} PROPERTIES
MACOSX_PACKAGE_LOCATION "Resources/${plist_lproj_name}"
)
target_sources (${EXE_NAME} PRIVATE ${plist_strings_file})
endforeach ()
# See https://cmake.org/cmake/help/v3.15/prop_tgt/MACOSX_BUNDLE_INFO_PLIST.html # See https://cmake.org/cmake/help/v3.15/prop_tgt/MACOSX_BUNDLE_INFO_PLIST.html
set_target_properties(${EXE_NAME} PROPERTIES set_target_properties(${EXE_NAME} PROPERTIES
MACOSX_BUNDLE TRUE MACOSX_BUNDLE TRUE
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/dist/MacOSXBundleInfo.plist.in MACOSX_BUNDLE_INFO_PLIST ${PPIC_PLIST_OUTPUT_DIR}/Info.plist.in
MACOSX_BUNDLE_BUNDLE_NAME "Pineapple Pictures" MACOSX_BUNDLE_INFO_STRING "${PROJECT_VERSION}, Copyright (C) 2026 Gary Wang"
MACOSX_BUNDLE_GUI_IDENTIFIER net.blumia.pineapple-pictures MACOSX_BUNDLE_GUI_IDENTIFIER net.blumia.pineapple-pictures
MACOSX_BUNDLE_ICON_FILE app-icon.icns # contains the .icns file name, *without* the path. MACOSX_BUNDLE_ICON_FILE sarasacw-picture.icns # contains the .icns file name, *without* the path.
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}
) )
elseif (UNIX) elseif (UNIX)
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
@@ -232,20 +298,45 @@ elseif (UNIX)
# install icon # install icon
install ( install (
FILES assets/icons/app-icon.svg DIRECTORY dist/freedesktop-icons/
DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps" DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor"
RENAME net.blumia.pineapple-pictures.svg
) )
# install shortcut # generate and install desktop entry file
set (PPIC_DESKTOP_FILE ${CMAKE_CURRENT_BINARY_DIR}/net.blumia.pineapple-pictures.desktop)
execute_process (
COMMAND ${UV_EXECUTABLE} tool run metaglot render desktop
--manifest ${CMAKE_SOURCE_DIR}/dist/net.blumia.pineapple-pictures.desktop.toml
--po ${CMAKE_SOURCE_DIR}/locales/desktop/*.po
--template ${CMAKE_SOURCE_DIR}/dist/net.blumia.pineapple-pictures.desktop.liquid
--output ${PPIC_DESKTOP_FILE}
RESULT_VARIABLE METAGLOT_DESKTOP_RESULT
)
if (NOT METAGLOT_DESKTOP_RESULT EQUAL 0)
message (FATAL_ERROR "Failed to generate .desktop via MetaGlot (exit code: ${METAGLOT_DESKTOP_RESULT}).")
endif ()
install ( install (
FILES dist/net.blumia.pineapple-pictures.desktop FILES ${PPIC_DESKTOP_FILE}
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications"
) )
# install app metadata file for appstream (and some other stuff using this metadata like snapcraft) # generate and install app metadata file for appstream (and some other stuff using this metadata like snapcraft)
set (PPIC_METAINFO_FILE ${CMAKE_CURRENT_BINARY_DIR}/net.blumia.pineapple-pictures.metainfo.xml)
execute_process (
COMMAND ${UV_EXECUTABLE} tool run metaglot render appstream
--manifest ${CMAKE_SOURCE_DIR}/dist/net.blumia.pineapple-pictures.metainfo.xml.toml
--po ${CMAKE_SOURCE_DIR}/locales/appstream/*.po
--template ${CMAKE_SOURCE_DIR}/dist/net.blumia.pineapple-pictures.metainfo.xml.liquid
--output ${PPIC_METAINFO_FILE}
RESULT_VARIABLE METAGLOT_METAINFO_RESULT
)
if (NOT METAGLOT_METAINFO_RESULT EQUAL 0)
message (FATAL_ERROR "Failed to generate .metainfo.xml via MetaGlot (exit code: ${METAGLOT_METAINFO_RESULT}).")
endif ()
install ( install (
FILES dist/appstream/net.blumia.pineapple-pictures.metainfo.xml FILES ${PPIC_METAINFO_FILE}
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/metainfo" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/metainfo"
) )
endif() endif()
@@ -281,20 +372,6 @@ if (DEFINED QM_FILE_INSTALL_DIR)
DESTINATION ${QM_FILE_INSTALL_DIR} DESTINATION ${QM_FILE_INSTALL_DIR}
) )
endif() endif()
if (WIN32)
install(
FILES
dist/passoc/generic.ico
dist/passoc/jpeg.ico
dist/passoc/gif.ico
dist/passoc/svg.ico
dist/passoc/png.ico
dist/passoc/psd.ico
DESTINATION "${CMAKE_INSTALL_BINDIR}/icons"
)
endif()
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
# CPACK: General Settings # CPACK: General Settings
+2
View File
@@ -29,6 +29,8 @@ SarasaCW Picture is the **hard fork** of [Pineapple Pictures](https://github.com
- [SourceForge](https://sourceforge.net/projects/pineapple-pictures/) - [SourceForge](https://sourceforge.net/projects/pineapple-pictures/)
- Archlinux AUR: [pineapple-pictures](https://aur.archlinux.org/packages/pineapple-pictures/) | [pineapple-pictures-git](https://aur.archlinux.org/packages/pineapple-pictures-git/) - Archlinux AUR: [pineapple-pictures](https://aur.archlinux.org/packages/pineapple-pictures/) | [pineapple-pictures-git](https://aur.archlinux.org/packages/pineapple-pictures-git/)
- [Itch.io Store](https://blumia.itch.io/pineapple-pictures) - [Itch.io Store](https://blumia.itch.io/pineapple-pictures)
- [Microsoft Store](https://apps.microsoft.com/store/detail/9MXGX66VVGJP)
- Flatpak (on FlatHub): [net.blumia.pineapple-pictures](https://flathub.org/apps/net.blumia.pineapple-pictures) *([Should I use the flatpak version?](https://github.com/BLumia/pineapple-pictures/wiki/Container%E2%80%90based-Packaging-Solutions-Support))*
### Maintained by contributors / certain distro's package maintainers ### Maintained by contributors / certain distro's package maintainers
+1
View File
@@ -31,6 +31,7 @@ SarasaCW 照片查看器是[菠萝看图](https://github.com/BLumia/pineapple-pi
- [SourceForge](https://sourceforge.net/projects/pineapple-pictures/) - [SourceForge](https://sourceforge.net/projects/pineapple-pictures/)
- Archlinux AUR: [pineapple-pictures](https://aur.archlinux.org/packages/pineapple-pictures/) | [pineapple-pictures-git](https://aur.archlinux.org/packages/pineapple-pictures-git/) - Archlinux AUR: [pineapple-pictures](https://aur.archlinux.org/packages/pineapple-pictures/) | [pineapple-pictures-git](https://aur.archlinux.org/packages/pineapple-pictures-git/)
- [Itch.io 商店](https://blumia.itch.io/pineapple-pictures) - [Itch.io 商店](https://blumia.itch.io/pineapple-pictures)
- [Microsoft Store](https://apps.microsoft.com/store/detail/9MXGX66VVGJP)
- Flatpak (于 FlatHub): [net.blumia.pineapple-pictures](https://flathub.org/apps/net.blumia.pineapple-pictures) *([我应当使用 flatpak 版吗?](https://github.com/BLumia/pineapple-pictures/wiki/Container%E2%80%90based-Packaging-Solutions-Support))* - Flatpak (于 FlatHub): [net.blumia.pineapple-pictures](https://flathub.org/apps/net.blumia.pineapple-pictures) *([我应当使用 flatpak 版吗?](https://github.com/BLumia/pineapple-pictures/wiki/Container%E2%80%90based-Packaging-Solutions-Support))*
### 由贡献者/对应发行版的打包人员维护 ### 由贡献者/对应发行版的打包人员维护
+10 -4
View File
@@ -9,21 +9,27 @@ SPDX-FileCopyrightText = "None"
SPDX-License-Identifier = "CC0-1.0" SPDX-License-Identifier = "CC0-1.0"
[[annotations]] [[annotations]]
path = ["README**.md", "NEWS", "assets/**.rc.in", "assets/**.qrc", "dist/appstream/**", "dist/**.in", "dist/**.desktop"] path = ["README**.md", "NEWS", "assets/**.rc.in", "assets/**.qrc", "dist/appstream/**", "dist/**.in", "dist/**.desktop", "dist/**.rc.in.toml", "dist/**.rc.in.liquid"]
precedence = "aggregate" precedence = "aggregate"
SPDX-FileCopyrightText = "None" SPDX-FileCopyrightText = "None"
SPDX-License-Identifier = "CC0-1.0" SPDX-License-Identifier = "CC0-1.0"
[[annotations]] [[annotations]]
path = ["dist/passoc/**"] path = ["locales/app/**.ts", "locales/winrc/**", "assets/plain/translators.html"]
precedence = "aggregate" precedence = "aggregate"
SPDX-FileCopyrightText = "2025 Gary Wang" SPDX-FileCopyrightText = "Translators from hosted.weblate.org"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = ["dist/msix/**.svg", "dist/msix/**.toml"]
precedence = "aggregate"
SPDX-FileCopyrightText = "2026 Gary Wang"
SPDX-License-Identifier = "MIT" SPDX-License-Identifier = "MIT"
[[annotations]] [[annotations]]
path = ["app/translations/**.ts", "assets/plain/translators.html"] path = ["app/translations/**.ts", "assets/plain/translators.html"]
precedence = "aggregate" precedence = "aggregate"
SPDX-FileCopyrightText = "Translators from hosted.weblate.org" SPDX-FileCopyrightText = "2026 yyc12345"
SPDX-License-Identifier = "MIT" SPDX-License-Identifier = "MIT"
[[annotations]] [[annotations]]
+5 -5
View File
@@ -26,7 +26,7 @@ AboutDialog::AboutDialog(QWidget *parent)
// blumia: Chain two arg() here since it seems lupdate will remove one of them if we use // blumia: Chain two arg() here since it seems lupdate will remove one of them if we use
// the old `arg(QCoreApp::translate(), tr())` way, but it's worth to mention // the old `arg(QCoreApp::translate(), tr())` way, but it's worth to mention
// `arg(QCoreApp::translate(), this->tr())` works, but lupdate will complain about the usage. // `arg(QCoreApp::translate(), this->tr())` works, but lupdate will complain about the usage.
const QString HELP_HTML = loadEmbeddedHtml(u":/plain/help.html"_s) const QString HELP_HTML = loadEmbeddedHtml(u":/htmls/help.html"_s)
.arg(tr("General Help")) .arg(tr("General Help"))
.arg(tr("Launch application with image file path as argument to load the file.")) .arg(tr("Launch application with image file path as argument to load the file."))
.arg(tr("Passing in a single image file will load all the images in that directory and start viewing from that image.")) .arg(tr("Passing in a single image file will load all the images in that directory and start viewing from that image."))
@@ -48,7 +48,7 @@ AboutDialog::AboutDialog(QWidget *parent)
#endif // GIT_DESCRIBE_VERSION_STRING #endif // GIT_DESCRIBE_VERSION_STRING
const QString QT_VERSION_ARG = QT_VERSION_STR; const QString QT_VERSION_ARG = QT_VERSION_STR;
const QString QT_ARCH_ARG = QSysInfo::buildCpuArchitecture(); const QString QT_ARCH_ARG = QSysInfo::buildCpuArchitecture();
const QString ABOUT_HTML = loadEmbeddedHtml(u":/plain/about.html"_s) const QString ABOUT_HTML = loadEmbeddedHtml(u":/htmls/about.html"_s)
.arg(APP_NAME_ARG) .arg(APP_NAME_ARG)
.arg(tr("Version: %1").arg(APP_VERSION_ARG)) .arg(tr("Version: %1").arg(APP_VERSION_ARG))
.arg(tr("Upstream author")) .arg(tr("Upstream author"))
@@ -57,19 +57,19 @@ AboutDialog::AboutDialog(QWidget *parent)
.arg(tr("Built with Qt %1 (%2)").arg(QT_VERSION_ARG).arg(QT_ARCH_ARG)) .arg(tr("Built with Qt %1 (%2)").arg(QT_VERSION_ARG).arg(QT_ARCH_ARG))
.arg(tr("Source code")); .arg(tr("Source code"));
const QString SPECIAL_THANKS_HTML = loadEmbeddedHtml(u":/plain/special-thanks.html"_s) const QString SPECIAL_THANKS_HTML = loadEmbeddedHtml(u":/htmls/special-thanks.html"_s)
.arg(tr("Contributors")) .arg(tr("Contributors"))
.arg(tr("List of contributors on GitHub")) .arg(tr("List of contributors on GitHub"))
.arg(tr("Thanks to all people who contributed to this project.")) .arg(tr("Thanks to all people who contributed to this project."))
.arg(tr("Translators")) .arg(tr("Translators"))
.arg(tr("I would like to thank the following people who volunteered to translate this application.")); .arg(tr("I would like to thank the following people who volunteered to translate this application."));
const QString LICENSE_HTML = loadEmbeddedHtml(u":/plain/license.html"_s) const QString LICENSE_HTML = loadEmbeddedHtml(u":/htmls/license.html"_s)
.arg(tr("License")) .arg(tr("License"))
.arg(tr("This application is released under the MIT License.")) .arg(tr("This application is released under the MIT License."))
.arg(tr("License Verbatim Copy")); .arg(tr("License Verbatim Copy"));
const QString THIRD_PARTY_LIBS_HTML = loadEmbeddedHtml(u":/plain/third-party-libs.html"_s) const QString THIRD_PARTY_LIBS_HTML = loadEmbeddedHtml(u":/htmls/third-party-libs.html"_s)
.arg(tr("Third-party Libraries")) .arg(tr("Third-party Libraries"))
.arg(tr("This application is built on the following free software libraries.", "Free as in freedom")) .arg(tr("This application is built on the following free software libraries.", "Free as in freedom"))
.arg(tr("Some of them are optional and might not be included with this distribution depending on the build environment.")); .arg(tr("Some of them are optional and might not be included with this distribution depending on the build environment."));
+15 -21
View File
@@ -16,11 +16,8 @@
static QIcon loadHidpiIcon(const QString &resp, QSize sz = QSize(32, 32)) static QIcon loadHidpiIcon(const QString &resp, QSize sz = QSize(32, 32))
{ {
QSvgRenderer r(resp); QPixmap pm = QPixmap(resp);
QPixmap pm = QPixmap(sz * qApp->devicePixelRatio()); pm.scaled(sz * qApp->devicePixelRatio(), Qt::KeepAspectRatio);
pm.fill(Qt::transparent);
QPainter p(&pm);
r.render(&p);
pm.setDevicePixelRatio(qApp->devicePixelRatio()); pm.setDevicePixelRatio(qApp->devicePixelRatio());
return QIcon(pm); return QIcon(pm);
} }
@@ -32,7 +29,7 @@ void ActionManager::setupAction(MainWindow *mainWindow)
// Declare some convenient macros and lambdas. // Declare some convenient macros and lambdas.
#define ICON_NAME(name)\ #define ICON_NAME(name)\
QStringLiteral(":/icons/" #name ".svg") QStringLiteral(":/icons/" #name ".png")
#define ACTION_NAME(s) QStringLiteral(STRIFY(s)) #define ACTION_NAME(s) QStringLiteral(STRIFY(s))
#define STRIFY(s) #s #define STRIFY(s) #s
@@ -52,38 +49,35 @@ void ActionManager::setupAction(MainWindow *mainWindow)
/// This macro for register action with our custom icon. /// This macro for register action with our custom icon.
#define CREATE_NEW_ICON_ACTION(w, a, i) create_action(w, &a, ICON_NAME(i), ACTION_NAME(a), false) #define CREATE_NEW_ICON_ACTION(w, a, i) create_action(w, &a, ICON_NAME(i), ACTION_NAME(a), false)
// TODO: We may replace all Qt theme icons to our custom icon for visual consistency.
// TODO: Some icons are invalid.
CREATE_NEW_ACTION(mainWindow, actionCopyPixmap); CREATE_NEW_ACTION(mainWindow, actionCopyPixmap);
CREATE_NEW_ACTION(mainWindow, actionCopyFilePath); CREATE_NEW_ACTION(mainWindow, actionCopyFilePath);
CREATE_NEW_ICON_ACTION(mainWindow, actionPrevPicture, go-previous); CREATE_NEW_ICON_ACTION(mainWindow, actionPrevPicture, go-previous);
CREATE_NEW_ICON_ACTION(mainWindow, actionNextPicture, go-next); CREATE_NEW_ICON_ACTION(mainWindow, actionNextPicture, go-next);
CREATE_NEW_ICON_ACTION(mainWindow, actionActualSize, zoom-original); CREATE_NEW_ICON_ACTION(mainWindow, actionActualSize, fit-to-size);
CREATE_NEW_ICON_ACTION(mainWindow, actionFitToScreen, app-icon); CREATE_NEW_ICON_ACTION(mainWindow, actionFitToScreen, fit-to-screen);
CREATE_NEW_ICON_ACTION(mainWindow, actionFitByWidth, app-icon); CREATE_NEW_ACTION(mainWindow, actionFitByWidth);
CREATE_NEW_ICON_ACTION(mainWindow, actionFitByHeight, app-icon); CREATE_NEW_ACTION(mainWindow, actionFitByHeight);
CREATE_NEW_ICON_ACTION(mainWindow, actionZoomIn, zoom-in); CREATE_NEW_ICON_ACTION(mainWindow, actionZoomIn, zoom-in);
CREATE_NEW_ICON_ACTION(mainWindow, actionZoomOut, zoom-out); CREATE_NEW_ICON_ACTION(mainWindow, actionZoomOut, zoom-out);
CREATE_NEW_ICON_ACTION(mainWindow, actionFlipHorizontal, app-icon); CREATE_NEW_ICON_ACTION(mainWindow, actionFlipHorizontal, flip-horizontal);
CREATE_NEW_ICON_ACTION(mainWindow, actionFlipVertical, app-icon); CREATE_NEW_ICON_ACTION(mainWindow, actionFlipVertical, flip-vertical);
CREATE_NEW_ICON_ACTION(mainWindow, actionRotateClockwise, object-rotate-right); CREATE_NEW_ICON_ACTION(mainWindow, actionRotateClockwise, rotate-right);
CREATE_NEW_ICON_ACTION(mainWindow, actionRotateCounterClockwise, app-icon); CREATE_NEW_ICON_ACTION(mainWindow, actionRotateCounterClockwise, rotate-left);
CREATE_NEW_ACTION(mainWindow, actionToggleAvoidResetTransform); CREATE_NEW_ACTION(mainWindow, actionToggleAvoidResetTransform);
CREATE_NEW_ACTION(mainWindow, actionToggleCheckerboard); CREATE_NEW_ACTION(mainWindow, actionToggleCheckerboard);
CREATE_NEW_ACTION(mainWindow, actionTogglePauseAnimation); CREATE_NEW_ACTION(mainWindow, actionTogglePauseAnimation);
CREATE_NEW_ACTION(mainWindow, actionAnimationNextFrame); CREATE_NEW_ACTION(mainWindow, actionAnimationNextFrame);
CREATE_NEW_THEMEICON_ACTION(mainWindow, actionTrash, edit-delete); CREATE_NEW_ACTION(mainWindow, actionTrash/*, edit-delete*/);
CREATE_NEW_THEMEICON_ACTION(mainWindow, actionLocateInFileManager, system-file-manager); CREATE_NEW_ACTION(mainWindow, actionLocateInFileManager/*, system-file-manager*/);
CREATE_NEW_THEMEICON_ACTION(mainWindow, actionProperties, document-properties); CREATE_NEW_ICON_ACTION(mainWindow, actionProperties, image-info);
CREATE_NEW_ACTION(mainWindow, actionSettings); CREATE_NEW_ACTION(mainWindow, actionSettings);
CREATE_NEW_THEMEICON_ACTION(mainWindow, actionHelp, system-help); CREATE_NEW_ACTION(mainWindow, actionHelp/*, system-help*/);
// Remove convenient macros // Remove convenient macros
+1 -1
View File
@@ -61,7 +61,7 @@ MainWindow::MainWindow(QWidget *parent)
// It is too small for modern device, // It is too small for modern device,
// so I level it up to SVGA resolution 800 x 600. // so I level it up to SVGA resolution 800 x 600.
this->setMinimumSize(800, 600); this->setMinimumSize(800, 600);
this->setWindowIcon(QIcon(u":/icons/app-icon.svg"_s)); this->setWindowIcon(QIcon(u":/icons/app-icon.png"_s));
this->setAcceptDrops(true); this->setAcceptDrops(true);
// Initialize playlist manager // Initialize playlist manager
-3
View File
@@ -139,9 +139,6 @@
<property name="title"> <property name="title">
<string>&amp;Copy</string> <string>&amp;Copy</string>
</property> </property>
<property name="icon">
<iconset theme="edit-copy"/>
</property>
</widget> </widget>
<widget class="QMenu" name="m_subMenuTransform"> <widget class="QMenu" name="m_subMenuTransform">
<property name="title"> <property name="title">
@@ -1,6 +1,6 @@
<center> <center>
<p> <p>
<img width='128' height='128' src=':/icons/app-icon.svg'/> <img width='128' height='128' src=':/icons/app-icon.png'/>
<br/> <br/>
<!-- Application name --> <!-- Application name -->
<span>%1</span> <span>%1</span>
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

-15
View File
@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 75 75" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;">
<g transform="matrix(1,0,0,1,-119,-102)">
<g id="go-next" transform="matrix(1.25,0,0,1.44231,119,-7.61538)">
<rect x="0" y="76" width="60" height="52" style="fill:none;"/>
<g transform="matrix(0.8,0,0,0.693333,0.260244,25.056)">
<circle cx="37.175" cy="110.977" r="33.175" style="fill-opacity:0.15;stroke:white;stroke-width:2px;"/>
</g>
<g id="path867" transform="matrix(0.8,0,0,0.693333,1.80436,76.0055)">
<path d="M31.578,26.175L42.911,37.508L31.578,48.809" style="fill:none;fill-rule:nonzero;stroke:white;stroke-width:2px;"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

-15
View File
@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 75 75" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;">
<g transform="matrix(1,0,0,1,-39,-102)">
<g id="go-previous" transform="matrix(1.25,0,0,1.44231,39,-7.61538)">
<rect x="0" y="76" width="60" height="52" style="fill:none;"/>
<g transform="matrix(0.8,0,0,0.693333,0.260244,25.056)">
<circle cx="37.175" cy="110.977" r="33.175" style="fill-opacity:0.15;stroke:white;stroke-width:2px;"/>
</g>
<g id="path867" transform="matrix(0.8,0,0,0.693333,-1.8205,76.0055)">
<path d="M43.442,26.175L32.109,37.508L43.442,48.809" style="fill:none;fill-rule:nonzero;stroke:white;stroke-width:2px;"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

-17
View File
@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
<g transform="matrix(1,0,0,1,-74,-7.10543e-15)">
<g id="object-rotate-right" transform="matrix(1,0,0,1,74,7.10543e-15)">
<rect x="0" y="0" width="32" height="32" style="fill:none;"/>
<g transform="matrix(1,0,0,1,-1,-0.275147)">
<g transform="matrix(1,0,0,1,-74,-7.10543e-15)">
<path d="M100,18C100,22.967 95.967,27 91,27C86.033,27 82,22.967 82,18C82,13.033 86.033,9 91,9" style="fill:none;stroke:white;stroke-width:2px;"/>
</g>
<g transform="matrix(0.984136,-0.177418,0.177418,0.984136,-74.2676,16.4198)">
<path d="M89,13L93,9L89,5" style="fill:none;stroke:white;stroke-width:2px;"/>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -1,24 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
<g transform="matrix(1,0,0,1,0,-37)">
<g id="view-background-checkerboard" transform="matrix(1,0,0,1,0,37)">
<rect x="0" y="0" width="32" height="32" style="fill:none;"/>
<g id="rect814" transform="matrix(0.964431,0,0,0.907545,0.187581,-988.266)">
<rect x="6.027" y="1095.56" width="10.369" height="11.019" style="fill:white;fill-opacity:0.87;"/>
</g>
<g id="rect814-4" transform="matrix(0.984615,0,0,0.898704,-0.143354,-978.502)">
<rect x="16.396" y="1106.6" width="10.156" height="11.127" style="fill:white;fill-opacity:0.87;"/>
</g>
<g id="rect814-2" transform="matrix(0.963684,0,0,0.898697,0.199828,-978.495)">
<rect x="6.019" y="1106.6" width="10.377" height="11.127" style="fill:white;fill-opacity:0.07;"/>
</g>
<g id="rect814-2-6" transform="matrix(0.980558,0,0,0.898693,-0.0768322,-978.47)">
<rect x="16.396" y="1095.45" width="10.198" height="11.127" style="fill:white;fill-opacity:0.07;"/>
</g>
<g transform="matrix(1,0,0,0.952381,-74,-34)">
<rect x="80" y="42" width="20" height="21" style="fill:none;stroke:white;stroke-width:2.05px;"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

-24
View File
@@ -1,24 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
<g transform="matrix(1,0,0,1,-37,-37)">
<g id="view-fullscreen" transform="matrix(1,0,0,1,37,37)">
<rect x="0" y="0" width="32" height="32" style="fill:none;"/>
<g transform="matrix(1,0,0,1,-36,-37)">
<path d="M42,49L42,43L48,43" style="fill:none;stroke:white;stroke-width:2px;"/>
</g>
<g transform="matrix(-1,1.22465e-16,1.22465e-16,1,68,-37)">
<path d="M42,49L42,43L48,43" style="fill:none;stroke:white;stroke-width:2px;"/>
</g>
<g transform="matrix(1,-2.46519e-32,-2.46519e-32,-1,-36,69)">
<path d="M42,49L42,43L48,43" style="fill:none;stroke:white;stroke-width:2px;"/>
</g>
<g transform="matrix(1.11111,0,0,1.14286,-42.3333,-42.8571)">
<rect x="48" y="48" width="9" height="7" style="fill:none;stroke:white;stroke-width:1.77px;"/>
</g>
<g transform="matrix(-1,-1.22465e-16,1.22465e-16,-1,68,69)">
<path d="M42,49L42,43L48,43" style="fill:none;stroke:white;stroke-width:2px;"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

-71
View File
@@ -1,71 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="32"
height="32"
viewBox="0 0 8.4666665 8.4666669"
version="1.1"
id="svg8"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
sodipodi:docname="window-close.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#000000"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.69803922"
inkscape:pageshadow="2"
inkscape:zoom="22.627417"
inkscape:cx="19.29838"
inkscape:cy="15.79404"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
inkscape:window-width="1920"
inkscape:window-height="1001"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-288.5333)">
<path
style="fill:none;stroke:#ffffff;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
d="m 2.100237,290.55098 4.3234589,4.22265"
id="path817"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#ffffff;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
d="m 2.099406,294.78651 4.3414732,-4.24185"
id="path819"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

-17
View File
@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
<rect id="zoom-in" x="0" y="0" width="32" height="32" style="fill:none;"/>
<g id="zoom-in1" serif:id="zoom-in">
<g>
<g transform="matrix(1,0,0,1,-1,0)">
<circle cx="16" cy="15" r="9" style="fill:none;stroke:white;stroke-width:2px;"/>
</g>
<g transform="matrix(0.8,0.8,-0.8,0.8,27.6,-17.2)">
<path d="M21,28L26,28" style="fill:none;stroke:white;stroke-width:2.65px;"/>
</g>
<path d="M11,15L19,15" style="fill:none;stroke:white;stroke-width:2px;"/>
<path d="M15,11L15,19" style="fill:none;stroke:white;stroke-width:2px;"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

-24
View File
@@ -1,24 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-miterlimit:1.5;">
<g transform="matrix(1,0,0,1,-74,-37)">
<g id="zoom-original" transform="matrix(1,0,0,1,74,37)">
<rect x="0" y="0" width="32" height="32" style="fill:none;"/>
<g transform="matrix(1,0,0,1,-73,-37)">
<path d="M85,57L85,49L84,49" style="fill:none;stroke:white;stroke-width:2px;"/>
</g>
<g transform="matrix(1,0,0,1,-74,-37)">
<rect x="89" y="50" width="2" height="2" style="fill:white;"/>
</g>
<g transform="matrix(1,0,0,1,-74,-33)">
<rect x="89" y="50" width="2" height="2" style="fill:white;"/>
</g>
<g transform="matrix(1,0,0,1,-64,-37)">
<path d="M85,57L85,49L84,49" style="fill:none;stroke:white;stroke-width:2px;"/>
</g>
<g transform="matrix(1,0,0,0.952381,-74,-34)">
<rect x="80" y="42" width="20" height="21" style="fill:none;stroke:white;stroke-width:2.05px;stroke-linecap:round;stroke-linejoin:round;"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

-18
View File
@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
<g transform="matrix(1,0,0,1,-74,0)">
<g id="zoom-out" transform="matrix(1,0,0,1,74,0)">
<rect x="0" y="0" width="32" height="32" style="fill:none;"/>
<g>
<g transform="matrix(1,0,0,1,-1,0)">
<circle cx="16" cy="15" r="9" style="fill:none;stroke:white;stroke-width:2px;"/>
</g>
<g transform="matrix(0.8,0.8,-0.8,0.8,27.6,-17.2)">
<path d="M21,28L26,28" style="fill:none;stroke:white;stroke-width:2.65px;"/>
</g>
<path d="M11,15L19,15" style="fill:none;stroke:white;stroke-width:2px;"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

-18
View File
@@ -1,18 +0,0 @@
IDI_ICON1 ICON DISCARDABLE "@CMAKE_CURRENT_SOURCE_DIR@/assets/icons/app-icon.ico"
1 VERSIONINFO
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4"
BEGIN
VALUE "FileDescription", "Pineapple Pictures - Image Viewer"
VALUE "LegalCopyright", "MIT/Expat License - Copyright (C) 2026 Gary Wang"
VALUE "ProductName", "Pineapple Pictures"
VALUE "ProductVersion", "@PROJECT_VERSION@"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
+19 -15
View File
@@ -1,19 +1,23 @@
<RCC> <RCC>
<qresource prefix="/"> <qresource prefix="/">
<file>icons/zoom-in.svg</file> <!-- In-app icon resources -->
<file>icons/zoom-out.svg</file> <file>icons/app-icon.png</file>
<file>icons/view-fullscreen.svg</file> <file>icons/image-info.png</file>
<file>icons/zoom-original.svg</file> <file>icons/fit-to-screen.png</file>
<file>icons/object-rotate-right.svg</file> <file>icons/fit-to-size.png</file>
<file>icons/view-background-checkerboard.svg</file> <file>icons/zoom-in.png</file>
<file>icons/app-icon.svg</file> <file>icons/zoom-out.png</file>
<file>icons/window-close.svg</file> <file>icons/rotate-left.png</file>
<file>icons/go-next.svg</file> <file>icons/rotate-right.png</file>
<file>icons/go-previous.svg</file> <file>icons/go-next.png</file>
<file>plain/help.html</file> <file>icons/go-previous.png</file>
<file>plain/about.html</file> <file>icons/flip-horizontal.png</file>
<file>plain/special-thanks.html</file> <file>icons/flip-vertical.png</file>
<file>plain/license.html</file> <!-- HTML resources -->
<file>plain/third-party-libs.html</file> <file>htmls/help.html</file>
<file>htmls/about.html</file>
<file>htmls/special-thanks.html</file>
<file>htmls/license.html</file>
<file>htmls/third-party-libs.html</file>
</qresource> </qresource>
</RCC> </RCC>
+16 -23
View File
@@ -14,10 +14,8 @@
<string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string> <string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleLongVersionString</key>
<string>${MACOSX_BUNDLE_LONG_VERSION_STRING}</string>
<key>CFBundleName</key> <key>CFBundleName</key>
<string>${MACOSX_BUNDLE_BUNDLE_NAME}</string> <string>{{ default.strings.app_name | xml_escape }}</string>
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
@@ -29,28 +27,23 @@
<key>CSResourcesFileMapped</key> <key>CSResourcesFileMapped</key>
<true/> <true/>
<key>NSHumanReadableCopyright</key> <key>NSHumanReadableCopyright</key>
<string>${MACOSX_BUNDLE_COPYRIGHT}</string> <string>MIT/Expat License - Copyright (C) 2026 Gary Wang</string>
<!-- FIXME: this list can't be automatically generated by Qt's CMake API, don't know why. --> <!--
CFBundleLocalizations is generated from the metadata localization languages (the metaglot
"langs" list), while this field by definition describes the application's language
availability. This deviation works around an upstream Qt bug: since the Qt 6.7.0 refactor,
the CMake function _qt_internal_store_languages_from_ts_files_in_targets loses the parsed
TS language codes (a missing list(APPEND)), so Qt's own CFBundleLocalizations generation
yields an empty list. Consistency between the metadata languages and the application
languages is maintained manually at release time.
TODO: drop this workaround and let Qt generate CFBundleLocalizations itself once the
upstream bug is fixed and the fix ships in the CI toolchain.
-->
<key>CFBundleLocalizations</key> <key>CFBundleLocalizations</key>
<array> <array>
<string>en</string> {% for lang in langs %}
<string>ca</string> <string>{{ lang }}</string>
<string>de</string> {% endfor %}
<string>es</string>
<string>fr</string>
<string>id</string>
<string>it</string>
<string>ja</string>
<string>ko</string>
<string>nb_NO</string>
<string>nl</string>
<string>pa_PK</string>
<string>ru</string>
<string>si</string>
<string>ta</string>
<string>tr</string>
<string>uk</string>
<string>zh_CN</string>
</array> </array>
<key>CFBundleDocumentTypes</key> <key>CFBundleDocumentTypes</key>
<array> <array>
+26
View File
@@ -0,0 +1,26 @@
version = 1
source_language = "en"
[strings.app_name]
msgid = "Pineapple Pictures"
comment = "Display name of the application."
[strings.file_type_jpeg]
msgid = "JPEG Image"
comment = "Name of the JPEG document type (jpg, jpeg, jfif)."
[strings.file_type_png]
msgid = "PNG Image"
comment = "Name of the PNG document type."
[strings.file_type_webp]
msgid = "WebP Image"
comment = "Name of the WebP document type."
[strings.file_type_gif]
msgid = "GIF Image"
comment = "Name of the GIF document type."
[strings.file_type_svg]
msgid = "SVG Image"
comment = "Name of the SVG document type."
+8
View File
@@ -0,0 +1,8 @@
/* Application display name. The key is the Info.plist key name. */
"CFBundleName" = "{{ strings.app_name | plist_strings_escape }}";
/* File type names. The key is the source text, covering CFBundleTypeName. */
"{{ sources.file_type_jpeg | plist_strings_escape }}" = "{{ strings.file_type_jpeg | plist_strings_escape }}";
"{{ sources.file_type_png | plist_strings_escape }}" = "{{ strings.file_type_png | plist_strings_escape }}";
"{{ sources.file_type_webp | plist_strings_escape }}" = "{{ strings.file_type_webp | plist_strings_escape }}";
"{{ sources.file_type_gif | plist_strings_escape }}" = "{{ strings.file_type_gif | plist_strings_escape }}";
"{{ sources.file_type_svg | plist_strings_escape }}" = "{{ strings.file_type_svg | plist_strings_escape }}";
@@ -1,47 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2023-08-22 18:49中国标准时间\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#. (itstool) path: component/name
#: net.blumia.pineapple-pictures.metainfo.xml:7
msgid "Pineapple Pictures"
msgstr ""
#. (itstool) path: component/summary
#: net.blumia.pineapple-pictures.metainfo.xml:9
msgid "Image Viewer"
msgstr ""
#. (itstool) path: description/p
#: net.blumia.pineapple-pictures.metainfo.xml:12
msgid "Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support."
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:17
msgid "Main window when an image file is loaded"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:22
msgid "Zooming in a raster image"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:27
msgid "Zooming in a vector image"
msgstr ""
#. (itstool) path: component/developer_name
#: net.blumia.pineapple-pictures.metainfo.xml:34
msgid "Gary (BLumia) Wang et al."
msgstr ""
@@ -1,47 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2023-08-22 18:49中国标准时间\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#. (itstool) path: component/name
#: net.blumia.pineapple-pictures.metainfo.xml:7
msgid "Pineapple Pictures"
msgstr ""
#. (itstool) path: component/summary
#: net.blumia.pineapple-pictures.metainfo.xml:9
msgid "Image Viewer"
msgstr ""
#. (itstool) path: description/p
#: net.blumia.pineapple-pictures.metainfo.xml:12
msgid "Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support."
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:17
msgid "Main window when an image file is loaded"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:22
msgid "Zooming in a raster image"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:27
msgid "Zooming in a vector image"
msgstr ""
#. (itstool) path: component/developer_name
#: net.blumia.pineapple-pictures.metainfo.xml:34
msgid "Gary (BLumia) Wang et al."
msgstr ""
@@ -1,47 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2023-08-22 18:49中国标准时间\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
#. (itstool) path: component/name
#: net.blumia.pineapple-pictures.metainfo.xml:7
msgid "Pineapple Pictures"
msgstr ""
#. (itstool) path: component/summary
#: net.blumia.pineapple-pictures.metainfo.xml:9
msgid "Image Viewer"
msgstr ""
#. (itstool) path: description/p
#: net.blumia.pineapple-pictures.metainfo.xml:12
msgid "Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support."
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:17
msgid "Main window when an image file is loaded"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:22
msgid "Zooming in a raster image"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:27
msgid "Zooming in a vector image"
msgstr ""
#. (itstool) path: component/developer_name
#: net.blumia.pineapple-pictures.metainfo.xml:34
msgid "Gary (BLumia) Wang et al."
msgstr ""
@@ -1,47 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2023-08-22 18:49中国标准时间\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. (itstool) path: component/name
#: net.blumia.pineapple-pictures.metainfo.xml:7
msgid "Pineapple Pictures"
msgstr ""
#. (itstool) path: component/summary
#: net.blumia.pineapple-pictures.metainfo.xml:9
msgid "Image Viewer"
msgstr ""
#. (itstool) path: description/p
#: net.blumia.pineapple-pictures.metainfo.xml:12
msgid "Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support."
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:17
msgid "Main window when an image file is loaded"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:22
msgid "Zooming in a raster image"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:27
msgid "Zooming in a vector image"
msgstr ""
#. (itstool) path: component/developer_name
#: net.blumia.pineapple-pictures.metainfo.xml:34
msgid "Gary (BLumia) Wang et al."
msgstr ""
@@ -1,47 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2023-08-22 18:49中国标准时间\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#. (itstool) path: component/name
#: net.blumia.pineapple-pictures.metainfo.xml:7
msgid "Pineapple Pictures"
msgstr ""
#. (itstool) path: component/summary
#: net.blumia.pineapple-pictures.metainfo.xml:9
msgid "Image Viewer"
msgstr ""
#. (itstool) path: description/p
#: net.blumia.pineapple-pictures.metainfo.xml:12
msgid "Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support."
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:17
msgid "Main window when an image file is loaded"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:22
msgid "Zooming in a raster image"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:27
msgid "Zooming in a vector image"
msgstr ""
#. (itstool) path: component/developer_name
#: net.blumia.pineapple-pictures.metainfo.xml:34
msgid "Gary (BLumia) Wang et al."
msgstr ""
@@ -1,47 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2023-08-22 18:49中国标准时间\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: nb_NO\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#. (itstool) path: component/name
#: net.blumia.pineapple-pictures.metainfo.xml:7
msgid "Pineapple Pictures"
msgstr ""
#. (itstool) path: component/summary
#: net.blumia.pineapple-pictures.metainfo.xml:9
msgid "Image Viewer"
msgstr ""
#. (itstool) path: description/p
#: net.blumia.pineapple-pictures.metainfo.xml:12
msgid "Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support."
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:17
msgid "Main window when an image file is loaded"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:22
msgid "Zooming in a raster image"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:27
msgid "Zooming in a vector image"
msgstr ""
#. (itstool) path: component/developer_name
#: net.blumia.pineapple-pictures.metainfo.xml:34
msgid "Gary (BLumia) Wang et al."
msgstr ""
@@ -1,47 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2023-08-22 18:49中国标准时间\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: pa_PK\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
#. (itstool) path: component/name
#: net.blumia.pineapple-pictures.metainfo.xml:7
msgid "Pineapple Pictures"
msgstr ""
#. (itstool) path: component/summary
#: net.blumia.pineapple-pictures.metainfo.xml:9
msgid "Image Viewer"
msgstr ""
#. (itstool) path: description/p
#: net.blumia.pineapple-pictures.metainfo.xml:12
msgid "Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support."
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:17
msgid "Main window when an image file is loaded"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:22
msgid "Zooming in a raster image"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:27
msgid "Zooming in a vector image"
msgstr ""
#. (itstool) path: component/developer_name
#: net.blumia.pineapple-pictures.metainfo.xml:34
msgid "Gary (BLumia) Wang et al."
msgstr ""
@@ -1,46 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2023-08-22 18:49中国标准时间\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. (itstool) path: component/name
#: net.blumia.pineapple-pictures.metainfo.xml:7
msgid "Pineapple Pictures"
msgstr ""
#. (itstool) path: component/summary
#: net.blumia.pineapple-pictures.metainfo.xml:9
msgid "Image Viewer"
msgstr ""
#. (itstool) path: description/p
#: net.blumia.pineapple-pictures.metainfo.xml:12
msgid "Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support."
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:17
msgid "Main window when an image file is loaded"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:22
msgid "Zooming in a raster image"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:27
msgid "Zooming in a vector image"
msgstr ""
#. (itstool) path: component/developer_name
#: net.blumia.pineapple-pictures.metainfo.xml:34
msgid "Gary (BLumia) Wang et al."
msgstr ""
@@ -1,47 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2023-08-22 18:49中国标准时间\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: si\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
#. (itstool) path: component/name
#: net.blumia.pineapple-pictures.metainfo.xml:7
msgid "Pineapple Pictures"
msgstr ""
#. (itstool) path: component/summary
#: net.blumia.pineapple-pictures.metainfo.xml:9
msgid "Image Viewer"
msgstr ""
#. (itstool) path: description/p
#: net.blumia.pineapple-pictures.metainfo.xml:12
msgid "Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support."
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:17
msgid "Main window when an image file is loaded"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:22
msgid "Zooming in a raster image"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:27
msgid "Zooming in a vector image"
msgstr ""
#. (itstool) path: component/developer_name
#: net.blumia.pineapple-pictures.metainfo.xml:34
msgid "Gary (BLumia) Wang et al."
msgstr ""
@@ -1,49 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2023-08-22 18:49中国标准时间\n"
"PO-Revision-Date: 2025-12-20 20:00+0000\n"
"Last-Translator: Sabri Ünal <yakushabb@gmail.com>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/pineapple-"
"pictures/appstream-metadata/tr/>\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.15.1\n"
#. (itstool) path: component/name
#: net.blumia.pineapple-pictures.metainfo.xml:7
msgid "Pineapple Pictures"
msgstr "Pineapple Resimler"
#. (itstool) path: component/summary
#: net.blumia.pineapple-pictures.metainfo.xml:9
msgid "Image Viewer"
msgstr "Resim Görüntüleyici"
#. (itstool) path: description/p
#: net.blumia.pineapple-pictures.metainfo.xml:12
msgid "Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support."
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:17
msgid "Main window when an image file is loaded"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:22
msgid "Zooming in a raster image"
msgstr ""
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:27
msgid "Zooming in a vector image"
msgstr ""
#. (itstool) path: component/developer_name
#: net.blumia.pineapple-pictures.metainfo.xml:34
msgid "Gary (BLumia) Wang et al."
msgstr "Gary (BLumia) Wang et al."
Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 787 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 192 192" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"><rect id="generic-export-" serif:id="generic(export)" x="0" y="0" width="192" height="192" style="fill:none;"/><g id="文档背景"><path d="M29,143l0,-119.02c0,-3.301 2.68,-5.98 5.98,-5.98l85.058,0l41.962,41.923l0,83.077l-133,0Z" style="fill:#f8fafc;"/><path d="M120.038,18l42.038,42l-36.12,0c-3.269,-0 -5.919,-2.65 -5.919,-5.919l0,-36.081Z" style="fill:#3b82f6;fill-opacity:0.5;"/><g id="底部"><path d="M162,145.178l0,15.644c0,7.273 -5.905,13.178 -13.178,13.178l-106.644,0c-7.273,0 -13.178,-5.905 -13.178,-13.178l0,-15.644c0,-7.273 5.905,-13.178 13.178,-13.178l106.644,0c7.273,0 13.178,5.905 13.178,13.178Z" style="fill:#f8fafc;"/><rect x="29" y="132" width="133" height="22" style="fill:#f8fafc;"/></g></g><g id="文档符号"><path d="M53.75,117c-0,-0 17.005,-22.869 24.972,-33.582c0.969,-1.303 2.484,-2.087 4.107,-2.126c1.623,-0.039 3.174,0.672 4.204,1.927c8.72,10.627 27.718,33.781 27.718,33.781" style="fill:none;stroke:#3b82f6;stroke-width:6.25px;"/><path d="M103.22,102c-0,-0 3.94,-4.938 6.964,-8.727c0.845,-1.06 2.117,-1.69 3.472,-1.723c1.355,-0.033 2.655,0.536 3.551,1.553c6.849,7.778 21.043,23.897 21.043,23.897" style="fill:none;stroke:#3b82f6;stroke-opacity:0.65;stroke-width:6.25px;"/><use xlink:href="#_Image1" x="99.724" y="88.423" width="42px" height="32px"/><circle cx="106" cy="72" r="6" style="fill:#3b82f6;"/><use xlink:href="#_Image2" x="50.625" y="78.165" width="68px" height="42px"/></g><defs><image id="_Image1" width="42px" height="32px" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAgCAYAAABkWOo9AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACL0lEQVRYhcWYTW/TQBBAXxzaiIVABeWrQFRBERSKCv3iMP9tD/vb2BMoEgKBVCFoQRUHDlBRpiCqlIOt0BKvs7Hj5B03s6MnZ3dm7AaRiNMW0AHmgXa2/AP4Bux6aw5jc5WhERMkTjvACpAEQo6Bd96aD+MS+5+houL0IXAnMt8XoOutOa5klUPoCQEgTu8SLwlwA3hcyShAUFScXgGWS+TsiNN75ZXyyRUVpwZYq5D3vji9VWH/AAOi4rQJbAIzFXOvZv/KWMh7oqv8Kz9VaADr4vTCGHKdFs0uz8I4EmecAZ6J07NVE/VFxek88KBqwhxawJY4rXSUEuhfnnUiG0AJ2sCGOC0sh0Uk2eXZoPrlGcZl0vNfigRYAsZy4CO4KU5LHa+EdNCYJEvidHHUTaXPTEUeidNro2xIgL2aZIpoAGvidC52QwJsAwe1KYVpkpYtExOceGuOgBfAn1q18pklbQizwwITAG/NT6BLOgBPmnOkT7ZZFNS/TN6ar8Dbuq0CzAFPiwJO3XpvzUfgc51GBVwXpyuhH/PK02vSF7ZpsJgNRgMMiHpresBL4FfdVgGWxenABJdb8L01v0krQa9uqwBPxOmlkwvBzuSt2Qde1a6UTwJsitPzJxeCeGv2gPd1WwWYIa2xLYj/ALEFXK3TqoB94HnsUNJlOm0W4CJwO0p0ym0WoB095k25zR6ONI9mbfYNk5U9AD6VepnLatwCEDWilaQHfAd2vDVHfwFwVYfhCbkXoQAAAABJRU5ErkJggg=="/><image id="_Image2" width="68px" height="42px" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAAAqCAYAAAAK7f2YAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACq0lEQVRogeWZu27UUBCGvzhIQasERC4gSLgmpAgQEAUJGRoQCQUBERGyieBZtpgH4TFoqLfgDRA9DRIFEhqJS0Fhs0rCXmzv+BwnfKXXnjP6PfL51h4hEqK2CDwEzgCfgXftVuNrrH7+MhJjUVG7AWwfOvwDeNtuNb5EaKlDEnpBUTsPvOjy0xjwRtROBW7pAEEDEbVxYBc40eOUCdJQTobr6iDBAhG1UWAHGDQBM8CuqPUKrVJCTsgmcDHnuZeBLVEL/owLEoiorQB3Cl62BGxU0E5fKg9E1K4BT0pevipq9z37GUSlgYjaJPCK4bb3DVG76dTSQCoLRNTGgD3AY8fYErUrDnUGUkkg2cPwJTDtVDIh3XnOOtXru1AVPAKuO9cMIm7ugYjaLeCBd92MysXNNRBRuwA896zZhUrFzS2QHFruSWXi5hJIdreapCMdiiXK+01PvCbkKTDnVKsIK97iNnQgorZKcS33xFXchgpE1OaJ8H+jC1uidtWjUOlARG2K9K1XlLduh0iApqid8yhUGGct92IMeC1qp4cpUjiQbKvbBqaGWbgiJkhDKX2jykzIY2Ch7IIBmAH2yopboUBEbRlYK7NQYC5RUtxyByJqs1Sv5Z6UErdcgYjaBKmWjxZdIDKFxW1gIPu0fLxsV5EpJG55JuQZMFu+n1qQW9z6BiJqa8CyS0txyS1uPQMRtQXSLfa4kEvcugYiatPUR8s9GShu/wSSnbxLmuhxpK+4HQik5lruSU9xOzwh68B8kJbi01XcOoGI2m0g6GfDGrCS7aQdEgBRmyP1jf+R9f3ilmRa3uToabknnU+lCelXtqOq5V4kwKaoJQmwGLubmjAFTCbAz9id1IhfCfAhdhc14WO71fg2AiBq94C7HH8h68Z34BPwvt1q/P4DFjifX1SwAkkAAAAASUVORK5CYII="/></defs></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

+67
View File
@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 192 192" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1;">
<g transform="matrix(1,0,0,1,-233.5,0)">
<g id="GIF-export-" serif:id="GIF(export)" transform="matrix(1,0,0,1,233.5,-242)">
<rect x="0" y="242" width="192" height="192" style="fill:none;"/>
<g id="文档背景" transform="matrix(0.192771,0,0,0.21968,336.192771,253.203661)">
<g transform="matrix(5.226799,0,0,4.552083,-1750.366477,-51)">
<path d="M30,143L30,23.98C30,20.68 32.66,18 35.935,18L120.354,18L162,59.923L162,143L30,143Z" style="fill:rgb(248,250,252);"/>
</g>
<g transform="matrix(5.1875,0,0,4.552083,-1744,-51)">
<path d="M120.038,18L162.077,60L125.957,60C122.688,60 120.038,57.35 120.038,54.081L120.038,18Z" style="fill:rgb(16,185,129);fill-opacity:0.5;"/>
</g>
<g id="底部" transform="matrix(1.007576,0,0,1,6.443582,0)">
<g transform="matrix(5.1875,0,0,1.225561,-1743.600962,527.814904)">
<path d="M162,66.948L162,125.052C162,152.067 156.139,174 148.921,174L43.079,174C35.861,174 30,152.067 30,125.052L30,66.948C30,39.933 35.861,18 43.079,18L148.921,18C156.139,18 162,39.933 162,66.948Z" style="fill:rgb(16,185,129);"/>
</g>
<g transform="matrix(4.99537,0,0,4.552083,-1712.860221,-51)">
<rect x="25" y="132" width="137.077" height="22" style="fill:rgb(16,185,129);"/>
</g>
</g>
</g>
<g transform="matrix(1,0,0,1,-24.821092,255.962394)">
<g transform="matrix(31.25,0,0,31.25,92.328214,149.80372)">
<path d="M0.342,0.012C0.287,0.012 0.237,-0.001 0.192,-0.026C0.147,-0.051 0.111,-0.089 0.085,-0.139C0.058,-0.189 0.045,-0.25 0.045,-0.323C0.045,-0.395 0.059,-0.457 0.085,-0.508C0.112,-0.559 0.148,-0.598 0.193,-0.625C0.238,-0.651 0.289,-0.665 0.345,-0.665C0.389,-0.665 0.426,-0.656 0.457,-0.639C0.488,-0.622 0.514,-0.603 0.534,-0.582L0.459,-0.497C0.444,-0.512 0.429,-0.524 0.411,-0.533C0.394,-0.542 0.372,-0.546 0.345,-0.546C0.315,-0.546 0.288,-0.537 0.264,-0.52C0.24,-0.502 0.221,-0.477 0.207,-0.445C0.193,-0.412 0.186,-0.373 0.186,-0.328C0.186,-0.281 0.192,-0.241 0.205,-0.208C0.217,-0.175 0.236,-0.15 0.26,-0.133C0.284,-0.115 0.314,-0.106 0.35,-0.106C0.364,-0.106 0.377,-0.108 0.39,-0.112C0.404,-0.116 0.414,-0.122 0.422,-0.129L0.422,-0.251L0.321,-0.251L0.321,-0.363L0.544,-0.363L0.544,-0.066C0.523,-0.046 0.494,-0.028 0.458,-0.012C0.422,0.004 0.384,0.012 0.342,0.012Z" style="fill:rgb(248,250,252);fill-rule:nonzero;"/>
</g>
<g transform="matrix(31.25,0,0,31.25,111.077928,149.80372)">
<path d="M0.078,-0L0.078,-0.115L0.232,-0.115L0.232,-0.538L0.078,-0.538L0.078,-0.653L0.522,-0.653L0.522,-0.538L0.368,-0.538L0.368,-0.115L0.522,-0.115L0.522,-0L0.078,-0Z" style="fill:rgb(248,250,252);fill-rule:nonzero;"/>
</g>
<g transform="matrix(31.25,0,0,31.25,129.827642,149.80372)">
<path d="M0.11,-0L0.11,-0.653L0.538,-0.653L0.538,-0.538L0.246,-0.538L0.246,-0.375L0.495,-0.375L0.495,-0.26L0.246,-0.26L0.246,-0L0.11,-0Z" style="fill:rgb(248,250,252);fill-rule:nonzero;"/>
</g>
<g transform="matrix(31.25,0,0,31.25,148.577356,149.80372)">
</g>
</g>
<g transform="matrix(1.042067,0,0,1.470481,-504.094952,-475.205263)">
<path d="M577.789,536.699L597,569L549,569C549.416,555.658 543.242,548.94 539.404,546.9C558.596,542.819 558.208,538.037 577.789,536.699Z" style="fill:rgb(248,250,252);stroke:rgb(73,217,169);stroke-width:2.94px;"/>
</g>
<g transform="matrix(1.042067,0,0,1.470481,-500.094952,-475.205263)">
<path d="M587.385,535L597,569L549,569C549.416,555.658 547.081,547.58 541.323,540.099C558.785,539.334 573.16,536.425 587.385,535Z" style="fill:rgb(248,250,252);stroke:rgb(33,195,141);stroke-width:2.94px;"/>
</g>
<g transform="matrix(1.042067,0,0,1.470481,-496.094952,-475.205263)">
<rect x="549" y="535" width="48" height="34" style="fill:rgb(248,250,252);"/>
<clipPath id="_clip1">
<rect x="549" y="535" width="48" height="34"/>
</clipPath>
<g clip-path="url(#_clip1)">
<g transform="matrix(-1.020402,0,0,1,1158.200072,0)">
<g transform="matrix(1.219837,0.326128,-0.460205,0.864447,430.623441,-37.614509)">
<path d="M314.701,587.339C314.311,586.884 314.332,573.499 314.332,571.745C314.332,569.957 315.109,563.585 316.467,559.39C316.508,559.263 316.565,559.13 316.695,559.065C316.792,559 316.922,558.968 317.052,559.032C318.287,559.39 321.374,562.022 321.472,562.022C322.934,561.795 329.044,561.73 330.506,562.022C330.571,562.022 333.659,559.39 334.894,559.032C335.024,558.968 335.154,559 335.284,559.065C335.381,559.13 335.479,559.26 335.479,559.39C335.804,561.177 338.359,567.994 338.046,573.812C337.952,575.563 337.07,576.244 336.648,576.699C336.388,577.057 314.961,587.697 314.701,587.339Z" style="fill:none;stroke:rgb(16,185,129);stroke-width:2.14px;"/>
</g>
<g transform="matrix(-1.054409,0,0,1.202039,926.151367,432.040487)">
<ellipse cx="335.5" cy="107" rx="1.5" ry="1" style="fill:rgb(16,185,129);"/>
</g>
<g transform="matrix(-1.038849,0,0,1.142554,910.389594,435.158377)">
<ellipse cx="335.5" cy="107" rx="1.5" ry="1" style="fill:rgb(16,185,129);"/>
</g>
<g transform="matrix(-1.100452,-0.187672,0.358068,-1.05441,706.803105,1228.551028)">
<path d="M314.028,574.46C314.028,574.46 316.518,572.261 318.713,574.583C318.824,574.7 318.912,574.846 319,575" style="fill:none;stroke:rgb(16,185,129);stroke-width:2.07px;"/>
</g>
</g>
</g>
<rect x="549" y="535" width="48" height="34" style="fill:none;stroke:rgb(16,185,129);stroke-width:2.94px;"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.6 KiB

+132
View File
@@ -0,0 +1,132 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="100%"
height="100%"
viewBox="0 0 192 192"
version="1.1"
xml:space="preserve"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"
id="svg9"
sodipodi:docname="jpeg.svg"
inkscape:version="1.4.4 (dcaf3e7, 2026-05-05)"
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:serif="http://www.serif.com/"><sodipodi:namedview
id="namedview9"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="3.3645833"
inkscape:cx="95.851394"
inkscape:cy="96.000001"
inkscape:window-width="1536"
inkscape:window-height="890"
inkscape:window-x="-6"
inkscape:window-y="-6"
inkscape:window-maximized="1"
inkscape:current-layer="svg9" /><rect
id="JPG-export-"
serif:id="JPG(export)"
x="0"
y="0"
width="192"
height="192"
style="fill:none;" /><g
id="文档背景"><path
d="M29,143l0,-119.02c0,-3.301 2.68,-5.98 5.98,-5.98l85.058,0l41.962,41.923l0,83.077l-133,0Z"
style="fill:#f8fafc"
id="path1" /><path
d="M120.038,18l42.038,42l-36.12,0c-3.269,-0 -5.919,-2.65 -5.919,-5.919l0,-36.081Z"
style="fill:#3b82f6;fill-opacity:0.5"
id="path2" /><path
d="M29,160.822l-0,-28.822l133,0l0,28.822c0,7.273 -5.905,13.178 -13.178,13.178l-106.644,0c-7.273,0 -13.178,-5.905 -13.178,-13.178Z"
style="fill:#3b82f6"
id="path3" /></g><g
transform="matrix(31.25,0,0,31.25,67.761272,163.766113)"
id="g4"><path
d="M0.274,0.012c-0.036,0 -0.073,-0.008 -0.112,-0.024c-0.038,-0.016 -0.071,-0.044 -0.099,-0.083l0.079,-0.085c0.019,0.024 0.039,0.042 0.061,0.055c0.022,0.013 0.044,0.019 0.066,0.019c0.036,0 0.062,-0.009 0.08,-0.028c0.018,-0.019 0.027,-0.051 0.027,-0.097l0,-0.307l-0.258,0l0,-0.114l0.395,0l0,0.433c0,0.042 -0.008,0.081 -0.023,0.116c-0.015,0.035 -0.04,0.063 -0.075,0.084c-0.035,0.021 -0.082,0.031 -0.141,0.031Z"
style="fill:#f8fafc;fill-rule:nonzero;"
id="path4" /></g><g
transform="matrix(31.25,0,0,31.25,86.510986,163.766113)"
id="g5"><path
d="M0.079,-0l0,-0.653l0.226,0c0.047,0 0.09,0.006 0.128,0.019c0.038,0.013 0.068,0.034 0.091,0.064c0.022,0.03 0.034,0.071 0.034,0.123c0,0.05 -0.011,0.091 -0.034,0.123c-0.023,0.032 -0.053,0.056 -0.092,0.071c-0.038,0.015 -0.081,0.023 -0.127,0.023l-0.089,0l0,0.228l-0.137,-0Zm0.137,-0.336l0.08,0c0.043,0 0.076,-0.009 0.096,-0.028c0.021,-0.019 0.031,-0.046 0.031,-0.081c0,-0.037 -0.011,-0.062 -0.032,-0.077c-0.022,-0.014 -0.053,-0.022 -0.095,-0.022l-0.08,0l0,0.207Z"
style="fill:#f8fafc;fill-rule:nonzero;"
id="path5" /></g><g
transform="matrix(31.25,0,0,31.25,105.2607,163.766113)"
id="g6"><path
d="M0.342,0.012c-0.055,0 -0.105,-0.013 -0.15,-0.038c-0.045,-0.025 -0.081,-0.063 -0.107,-0.113c-0.026,-0.05 -0.04,-0.111 -0.04,-0.184c-0,-0.072 0.013,-0.134 0.04,-0.185c0.027,-0.051 0.063,-0.09 0.108,-0.117c0.045,-0.027 0.096,-0.04 0.152,-0.04c0.044,0 0.081,0.008 0.112,0.026c0.031,0.017 0.056,0.036 0.077,0.057l-0.075,0.085c-0.014,-0.015 -0.03,-0.027 -0.047,-0.036c-0.017,-0.009 -0.039,-0.013 -0.066,-0.013c-0.03,0 -0.058,0.009 -0.082,0.026c-0.024,0.018 -0.043,0.043 -0.057,0.075c-0.014,0.033 -0.021,0.072 -0.021,0.117c0,0.046 0.006,0.086 0.019,0.119c0.012,0.033 0.031,0.058 0.055,0.076c0.024,0.018 0.054,0.026 0.09,0.026c0.014,0 0.027,-0.002 0.041,-0.006c0.013,-0.004 0.024,-0.009 0.031,-0.017l0,-0.122l-0.101,0l0,-0.112l0.224,0l0,0.296c-0.022,0.02 -0.05,0.039 -0.086,0.055c-0.036,0.016 -0.075,0.024 -0.116,0.024Z"
style="fill:#f8fafc;fill-rule:nonzero;"
id="path6" /></g><g
transform="matrix(31.25,0,0,31.25,124.010414,163.766113)"
id="g7" /><g
id="文档符号"><path
d="M53.75,117c0,0 17.005,-22.869 24.972,-33.582c0.969,-1.303 2.484,-2.087 4.107,-2.126c1.623,-0.039 3.174,0.672 4.204,1.927c8.72,10.627 27.718,33.781 27.718,33.781"
style="fill:none;stroke:#3b82f6;stroke-width:6.25px;"
id="path7" /><path
d="M103.22,102c-0,-0 3.94,-4.938 6.964,-8.727c0.845,-1.06 2.117,-1.69 3.472,-1.723c1.355,-0.033 2.655,0.536 3.551,1.553c6.849,7.778 21.043,23.897 21.043,23.897"
style="fill:none;stroke:#3b82f6;stroke-opacity:0.65;stroke-width:6.25px;"
id="path8" /><use
xlink:href="#_Image1"
x="99.724"
y="88.423"
width="42px"
height="32px"
id="use8" /><circle
cx="106"
cy="72"
r="6"
style="fill:#3b82f6;"
id="circle8" /><use
xlink:href="#_Image2"
x="50.625"
y="78.165"
width="68px"
height="42px"
id="use9" /></g><defs
id="defs9"><image
id="_Image1"
width="42px"
height="32px"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAgCAYAAABkWOo9AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACL0lEQVRYhcWYTW/TQBBAXxzaiIVABeWrQFRBERSKCv3iMP9tD/vb2BMoEgKBVCFoQRUHDlBRpiCqlIOt0BKvs7Hj5B03s6MnZ3dm7AaRiNMW0AHmgXa2/AP4Bux6aw5jc5WhERMkTjvACpAEQo6Bd96aD+MS+5+houL0IXAnMt8XoOutOa5klUPoCQEgTu8SLwlwA3hcyShAUFScXgGWS+TsiNN75ZXyyRUVpwZYq5D3vji9VWH/AAOi4rQJbAIzFXOvZv/KWMh7oqv8Kz9VaADr4vTCGHKdFs0uz8I4EmecAZ6J07NVE/VFxek88KBqwhxawJY4rXSUEuhfnnUiG0AJ2sCGOC0sh0Uk2eXZoPrlGcZl0vNfigRYAsZy4CO4KU5LHa+EdNCYJEvidHHUTaXPTEUeidNro2xIgL2aZIpoAGvidC52QwJsAwe1KYVpkpYtExOceGuOgBfAn1q18pklbQizwwITAG/NT6BLOgBPmnOkT7ZZFNS/TN6ar8Dbuq0CzAFPiwJO3XpvzUfgc51GBVwXpyuhH/PK02vSF7ZpsJgNRgMMiHpresBL4FfdVgGWxenABJdb8L01v0krQa9uqwBPxOmlkwvBzuSt2Qde1a6UTwJsitPzJxeCeGv2gPd1WwWYIa2xLYj/ALEFXK3TqoB94HnsUNJlOm0W4CJwO0p0ym0WoB095k25zR6ONI9mbfYNk5U9AD6VepnLatwCEDWilaQHfAd2vDVHfwFwVYfhCbkXoQAAAABJRU5ErkJggg==" /><image
id="_Image2"
width="68px"
height="42px"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAAAqCAYAAAAK7f2YAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACq0lEQVRogeWZu27UUBCGvzhIQasERC4gSLgmpAgQEAUJGRoQCQUBERGyieBZtpgH4TFoqLfgDRA9DRIFEhqJS0Fhs0rCXmzv+BwnfKXXnjP6PfL51h4hEqK2CDwEzgCfgXftVuNrrH7+MhJjUVG7AWwfOvwDeNtuNb5EaKlDEnpBUTsPvOjy0xjwRtROBW7pAEEDEbVxYBc40eOUCdJQTobr6iDBAhG1UWAHGDQBM8CuqPUKrVJCTsgmcDHnuZeBLVEL/owLEoiorQB3Cl62BGxU0E5fKg9E1K4BT0pevipq9z37GUSlgYjaJPCK4bb3DVG76dTSQCoLRNTGgD3AY8fYErUrDnUGUkkg2cPwJTDtVDIh3XnOOtXru1AVPAKuO9cMIm7ugYjaLeCBd92MysXNNRBRuwA896zZhUrFzS2QHFruSWXi5hJIdreapCMdiiXK+01PvCbkKTDnVKsIK97iNnQgorZKcS33xFXchgpE1OaJ8H+jC1uidtWjUOlARG2K9K1XlLduh0iApqid8yhUGGct92IMeC1qp4cpUjiQbKvbBqaGWbgiJkhDKX2jykzIY2Ch7IIBmAH2yopboUBEbRlYK7NQYC5RUtxyByJqs1Sv5Z6UErdcgYjaBKmWjxZdIDKFxW1gIPu0fLxsV5EpJG55JuQZMFu+n1qQW9z6BiJqa8CyS0txyS1uPQMRtQXSLfa4kEvcugYiatPUR8s9GShu/wSSnbxLmuhxpK+4HQik5lruSU9xOzwh68B8kJbi01XcOoGI2m0g6GfDGrCS7aQdEgBRmyP1jf+R9f3ilmRa3uToabknnU+lCelXtqOq5V4kwKaoJQmwGLubmjAFTCbAz9id1IhfCfAhdhc14WO71fg2AiBq94C7HH8h68Z34BPwvt1q/P4DFjifX1SwAkkAAAAASUVORK5CYII=" /><filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter10"
x="-0.18034807"
y="-0.15384615"
width="1.4057832"
height="1.3461538"><feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.501961"
flood-color="rgb(0,0,0)"
id="feFlood9" /><feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="10.000000"
id="feGaussianBlur9" /><feOffset
result="offset"
in="blur"
dx="6.000000"
dy="6.000000"
id="feOffset9" /><feComposite
result="comp1"
operator="in"
in="flood"
in2="offset"
id="feComposite9" /><feComposite
result="comp2"
operator="over"
in="SourceGraphic"
in2="comp1"
id="feComposite10" /></filter></defs></svg>

After

Width:  |  Height:  |  Size: 7.9 KiB

+215
View File
@@ -0,0 +1,215 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="100%"
height="100%"
viewBox="0 0 192 192"
version="1.1"
xml:space="preserve"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"
id="svg15"
sodipodi:docname="png.svg"
inkscape:version="1.4.4 (dcaf3e7, 2026-05-05)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:serif="http://www.serif.com/"><defs
id="defs15"><filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter16"
x="-0.034765612"
y="-0.033796866"
width="1.0782226"
height="1.0760429"><feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.501961"
flood-color="rgb(0,0,0)"
id="feFlood15" /><feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="10.000000"
id="feGaussianBlur15" /><feOffset
result="offset"
in="blur"
dx="6.000000"
dy="6.000000"
id="feOffset15" /><feComposite
result="comp1"
operator="in"
in="flood"
in2="offset"
id="feComposite15" /><feComposite
result="comp2"
operator="over"
in="SourceGraphic"
in2="comp1"
id="feComposite16" /></filter></defs><sodipodi:namedview
id="namedview15"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="3.3645833"
inkscape:cx="95.851394"
inkscape:cy="96.000001"
inkscape:window-width="1536"
inkscape:window-height="890"
inkscape:window-x="-6"
inkscape:window-y="-6"
inkscape:window-maximized="1"
inkscape:current-layer="PNG-export-" />
<g
transform="matrix(1,0,0,1,-469.5,0)"
id="g15">
<g
id="PNG-export-"
serif:id="PNG(export)"
transform="matrix(0.192771,0,0,0.21968,805.692771,11.203661)">
<rect
x="-1744"
y="-51"
width="996"
height="874"
style="fill:none;"
id="rect1" />
<g
id="文档背景">
<g
transform="matrix(5.226799,0,0,4.552083,-1750.366477,-51)"
id="g1">
<path
d="M30,143L30,23.98C30,20.68 32.66,18 35.935,18L120.354,18L162,59.923L162,143L30,143Z"
style="fill:rgb(248, 250, 252)"
id="path1" />
</g>
<g
transform="matrix(5.1875,0,0,4.552083,-1744,-51)"
id="g2">
<path
d="M120.038,18L162.077,60L125.957,60C122.688,60 120.038,57.35 120.038,54.081L120.038,18Z"
style="fill:rgb(139, 92, 246);fill-opacity:0.5"
id="path2" />
</g>
<g
id="底部"
transform="matrix(1.007576,0,0,1,6.443582,0)">
<g
transform="matrix(5.1875,0,0,1.225561,-1743.600962,527.814904)"
id="g3">
<path
d="M162,66.948L162,125.052C162,152.067 156.139,174 148.921,174L43.079,174C35.861,174 30,152.067 30,125.052L30,66.948C30,39.933 35.861,18 43.079,18L148.921,18C156.139,18 162,39.933 162,66.948Z"
style="fill:rgb(139, 92, 246)"
id="path3" />
</g>
<g
transform="matrix(4.99537,0,0,4.552083,-1712.860221,-51)"
id="g4">
<rect
x="25"
y="132"
width="137.077"
height="22"
style="fill:rgb(139, 92, 246)"
id="rect3" />
</g>
</g>
</g>
<g
transform="matrix(5.1875,0,0,4.552083,-1872.759414,12.55798)"
id="g9">
<g
transform="matrix(31.25,0,0,31.25,92.328214,149.80372)"
id="g5">
<path
d="M0.079,-0L0.079,-0.653L0.305,-0.653C0.352,-0.653 0.395,-0.646 0.433,-0.633C0.471,-0.62 0.502,-0.599 0.524,-0.569C0.547,-0.539 0.558,-0.498 0.558,-0.446C0.558,-0.396 0.547,-0.355 0.524,-0.322C0.501,-0.29 0.47,-0.266 0.432,-0.251C0.394,-0.235 0.351,-0.228 0.305,-0.228L0.216,-0.228L0.216,-0L0.079,-0ZM0.216,-0.336L0.296,-0.336C0.339,-0.336 0.372,-0.346 0.392,-0.364C0.413,-0.383 0.424,-0.41 0.424,-0.446C0.424,-0.482 0.413,-0.508 0.391,-0.522C0.37,-0.537 0.338,-0.544 0.296,-0.544L0.216,-0.544L0.216,-0.336Z"
style="fill:rgb(248,250,252);fill-rule:nonzero;"
id="path4" />
</g>
<g
transform="matrix(31.25,0,0,31.25,111.077928,149.80372)"
id="g6">
<path
d="M0.069,-0L0.069,-0.652L0.21,-0.652L0.359,-0.314L0.416,-0.172L0.42,-0.172C0.417,-0.206 0.413,-0.244 0.408,-0.285C0.403,-0.326 0.401,-0.366 0.401,-0.404L0.401,-0.652L0.531,-0.652L0.531,-0L0.39,-0L0.241,-0.339L0.184,-0.481L0.18,-0.481C0.183,-0.445 0.187,-0.407 0.192,-0.367C0.197,-0.327 0.199,-0.287 0.199,-0.25L0.199,-0L0.069,-0Z"
style="fill:rgb(248,250,252);fill-rule:nonzero;"
id="path5" />
</g>
<g
transform="matrix(31.25,0,0,31.25,129.827642,149.80372)"
id="g7">
<path
d="M0.342,0.012C0.287,0.012 0.237,-0.001 0.192,-0.026C0.147,-0.051 0.111,-0.089 0.085,-0.139C0.058,-0.189 0.045,-0.25 0.045,-0.323C0.045,-0.395 0.059,-0.457 0.085,-0.508C0.112,-0.559 0.148,-0.598 0.193,-0.625C0.238,-0.651 0.289,-0.665 0.345,-0.665C0.389,-0.665 0.426,-0.656 0.457,-0.639C0.488,-0.622 0.514,-0.603 0.534,-0.582L0.459,-0.497C0.444,-0.512 0.429,-0.524 0.411,-0.533C0.394,-0.542 0.372,-0.546 0.345,-0.546C0.315,-0.546 0.288,-0.537 0.264,-0.52C0.24,-0.502 0.221,-0.477 0.207,-0.445C0.193,-0.412 0.186,-0.373 0.186,-0.328C0.186,-0.281 0.192,-0.241 0.205,-0.208C0.217,-0.175 0.236,-0.15 0.26,-0.133C0.284,-0.115 0.314,-0.106 0.35,-0.106C0.364,-0.106 0.377,-0.108 0.39,-0.112C0.404,-0.116 0.414,-0.122 0.422,-0.129L0.422,-0.251L0.321,-0.251L0.321,-0.363L0.544,-0.363L0.544,-0.066C0.523,-0.046 0.494,-0.028 0.458,-0.012C0.422,0.004 0.384,0.012 0.342,0.012Z"
style="fill:rgb(248,250,252);fill-rule:nonzero;"
id="path6" />
</g>
<g
transform="matrix(31.25,0,0,31.25,148.577356,149.80372)"
id="g8">
</g>
</g>
<g
id="文档符号">
<g
transform="matrix(10.375,0,0,4.552083,-1977.33774,117.427083)"
id="g10">
<path
d="M87,45L87,87L66,87L66,66L76.5,66L76.5,45L87,45Z"
style="fill:rgb(139,92,246);"
id="path9" />
</g>
<g
id="棋盘格"
transform="matrix(1,0,0,1,0,-4.552083)">
<g
transform="matrix(5.1875,0,0,4.552083,-1744.199519,-69.208333)"
id="g11">
<rect
x="66"
y="66"
width="21"
height="21"
style="fill:rgb(139,92,246);fill-opacity:0.2;"
id="rect10" />
</g>
<g
transform="matrix(5.1875,0,0,4.552083,-1635.0625,-69.208333)"
id="g12">
<rect
x="66"
y="66"
width="21"
height="21"
style="fill:rgb(139,92,246);fill-opacity:0.5;"
id="rect11" />
</g>
<g
transform="matrix(5.1875,0,0,4.552083,-1634.96274,26.385417)"
id="g13">
<rect
x="66"
y="66"
width="21"
height="21"
style="fill:rgb(139,92,246);fill-opacity:0.2;"
id="rect12" />
</g>
<g
transform="matrix(5.1875,0,0,4.552083,-1744.09976,26.385417)"
id="g14">
<rect
x="66"
y="66"
width="21"
height="21"
style="fill:rgb(139,92,246);fill-opacity:0.5;"
id="rect13" />
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.6 KiB

+50
View File
@@ -0,0 +1,50 @@
[package]
name = "ChestnutSoftware.PineapplePictures"
version = "1.6.0.0"
[display]
name = "Pineapple Pictures"
publisherName = "Chestnut Software"
[display.zh-CN]
name = "菠萝看图"
[application]
id = "PineapplePictures"
executable = "ppic.exe"
[icon]
source = "../../assets/icons/app-icon.svg"
[[fileAssociations]]
name = "jpgimages"
extensions = ["jpg", "jfif", "jpeg"]
logo = "jpeg.svg"
[[fileAssociations]]
name = "pngimages"
extensions = ["png"]
logo = "png.svg"
[[fileAssociations]]
name = "gifimages"
extensions = ["gif"]
logo = "gif.svg"
[[fileAssociations]]
name = "svgimages"
extensions = ["svg"]
logo = "svg.svg"
[[fileAssociations]]
name = "psdimages"
extensions = ["psd", "psb", "pdd"]
logo = "psd.svg"
[[fileAssociations]]
name = "genericimages"
extensions = ["tiff", "tif", "webp", "avif", "bmp", "qoi", "tga", "xcf", "kra", "icns", "ora", "ico"]
logo = "generic.svg"
[resources]
languages = ["zh-CN", "en-US"]
+51
View File
@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 192 192" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g transform="matrix(1,0,0,1,-234,-2)">
<g id="PSD-export-" serif:id="PSD(export)" transform="matrix(0.192771,0,0,0.21968,570.192771,13.203661)">
<rect x="-1744" y="-51" width="996" height="874" style="fill:none;"/>
<g id="文档背景">
<g transform="matrix(5.226799,0,0,4.552083,-1750.366477,-51)">
<path d="M30,143L30,23.98C30,20.68 32.66,18 35.935,18L120.354,18L162,59.923L162,143L30,143Z" style="fill:rgb(248,250,252);"/>
</g>
<g transform="matrix(5.1875,0,0,4.552083,-1744,-51)">
<path d="M120.038,18L162.077,60L125.957,60C122.688,60 120.038,57.35 120.038,54.081L120.038,18Z" style="fill:rgb(0,52,90);fill-opacity:0.5;"/>
</g>
<g id="底部" transform="matrix(1.007576,0,0,1,6.443582,0)">
<g transform="matrix(5.1875,0,0,1.225561,-1743.600962,527.814904)">
<path d="M162,66.948L162,125.052C162,152.067 156.139,174 148.921,174L43.079,174C35.861,174 30,152.067 30,125.052L30,66.948C30,39.933 35.861,18 43.079,18L148.921,18C156.139,18 162,39.933 162,66.948Z" style="fill:rgb(0,52,90);"/>
</g>
<g transform="matrix(4.99537,0,0,4.552083,-1712.860221,-51)">
<rect x="25" y="132" width="137.077" height="22" style="fill:rgb(0,52,90);"/>
</g>
</g>
</g>
<g transform="matrix(5.1875,0,0,4.552083,-1872.759414,12.55798)">
<g transform="matrix(31.25,0,0,31.25,92.328214,149.80372)">
<path d="M0.079,-0L0.079,-0.653L0.305,-0.653C0.352,-0.653 0.395,-0.646 0.433,-0.633C0.471,-0.62 0.502,-0.599 0.524,-0.569C0.547,-0.539 0.558,-0.498 0.558,-0.446C0.558,-0.396 0.547,-0.355 0.524,-0.322C0.501,-0.29 0.47,-0.266 0.432,-0.251C0.394,-0.235 0.351,-0.228 0.305,-0.228L0.216,-0.228L0.216,-0L0.079,-0ZM0.216,-0.336L0.296,-0.336C0.339,-0.336 0.372,-0.346 0.392,-0.364C0.413,-0.383 0.424,-0.41 0.424,-0.446C0.424,-0.482 0.413,-0.508 0.391,-0.522C0.37,-0.537 0.338,-0.544 0.296,-0.544L0.216,-0.544L0.216,-0.336Z" style="fill:rgb(248,250,252);fill-rule:nonzero;"/>
</g>
<g transform="matrix(31.25,0,0,31.25,111.077928,149.80372)">
<path d="M0.3,0.012C0.255,0.012 0.211,0.004 0.168,-0.012C0.125,-0.029 0.087,-0.052 0.053,-0.083L0.132,-0.177C0.157,-0.156 0.184,-0.139 0.214,-0.126C0.245,-0.113 0.276,-0.106 0.308,-0.106C0.342,-0.106 0.367,-0.112 0.384,-0.124C0.4,-0.137 0.409,-0.152 0.409,-0.17C0.409,-0.187 0.404,-0.201 0.396,-0.211C0.387,-0.221 0.375,-0.229 0.36,-0.237C0.344,-0.244 0.326,-0.252 0.305,-0.26L0.219,-0.297C0.195,-0.307 0.173,-0.319 0.152,-0.334C0.13,-0.35 0.113,-0.369 0.1,-0.392C0.087,-0.415 0.08,-0.442 0.08,-0.474C0.08,-0.509 0.09,-0.542 0.11,-0.57C0.129,-0.599 0.157,-0.622 0.192,-0.639C0.228,-0.656 0.269,-0.665 0.315,-0.665C0.354,-0.665 0.393,-0.657 0.43,-0.643C0.468,-0.628 0.5,-0.607 0.529,-0.58L0.46,-0.493C0.437,-0.51 0.414,-0.523 0.391,-0.533C0.368,-0.542 0.34,-0.546 0.308,-0.546C0.281,-0.546 0.26,-0.541 0.243,-0.53C0.227,-0.519 0.218,-0.503 0.218,-0.482C0.218,-0.467 0.223,-0.455 0.233,-0.446C0.242,-0.437 0.255,-0.429 0.271,-0.422C0.288,-0.414 0.306,-0.407 0.326,-0.399L0.408,-0.364C0.437,-0.354 0.461,-0.341 0.482,-0.325C0.503,-0.309 0.52,-0.29 0.531,-0.268C0.543,-0.245 0.548,-0.218 0.548,-0.187C0.548,-0.152 0.539,-0.119 0.519,-0.088C0.5,-0.058 0.471,-0.034 0.434,-0.015C0.397,0.003 0.352,0.012 0.3,0.012Z" style="fill:rgb(248,250,252);fill-rule:nonzero;"/>
</g>
<g transform="matrix(31.25,0,0,31.25,129.827642,149.80372)">
<path d="M0.073,-0L0.073,-0.653L0.25,-0.653C0.314,-0.653 0.369,-0.641 0.416,-0.618C0.462,-0.595 0.498,-0.559 0.524,-0.511C0.549,-0.464 0.562,-0.403 0.562,-0.329C0.562,-0.255 0.549,-0.194 0.524,-0.145C0.499,-0.096 0.463,-0.06 0.418,-0.036C0.372,-0.012 0.319,-0 0.258,-0L0.073,-0ZM0.21,-0.11L0.242,-0.11C0.279,-0.11 0.311,-0.118 0.338,-0.132C0.365,-0.147 0.385,-0.17 0.4,-0.202C0.414,-0.234 0.422,-0.276 0.422,-0.329C0.422,-0.382 0.414,-0.423 0.4,-0.454C0.385,-0.486 0.365,-0.508 0.338,-0.522C0.311,-0.535 0.279,-0.542 0.242,-0.542L0.21,-0.542L0.21,-0.11Z" style="fill:rgb(248,250,252);fill-rule:nonzero;"/>
</g>
<g transform="matrix(31.25,0,0,31.25,148.577356,149.80372)">
</g>
</g>
<g transform="matrix(5.1875,0,0,4.552083,-2947.5,-37.34375)">
<path d="M356,73.359L356,105.641C356,112.462 350.462,118 343.641,118L311.359,118C304.538,118 299,112.462 299,105.641L299,73.359C299,66.538 304.538,61 311.359,61L343.641,61C350.462,61 356,66.538 356,73.359Z" style="fill:rgb(0,30,54);"/>
</g>
<g transform="matrix(5.1875,0,0,4.552083,-1868.086637,-257.182297)">
<g transform="matrix(37.5,0,0,37.5,99.078128,149.80372)">
<path d="M0.079,-0L0.079,-0.653L0.305,-0.653C0.352,-0.653 0.395,-0.646 0.433,-0.633C0.471,-0.62 0.502,-0.599 0.524,-0.569C0.547,-0.539 0.558,-0.498 0.558,-0.446C0.558,-0.396 0.547,-0.355 0.524,-0.322C0.501,-0.29 0.47,-0.266 0.432,-0.251C0.394,-0.235 0.351,-0.228 0.305,-0.228L0.216,-0.228L0.216,-0L0.079,-0ZM0.216,-0.336L0.296,-0.336C0.339,-0.336 0.372,-0.346 0.392,-0.364C0.413,-0.383 0.424,-0.41 0.424,-0.446C0.424,-0.482 0.413,-0.508 0.391,-0.522C0.37,-0.537 0.338,-0.544 0.296,-0.544L0.216,-0.544L0.216,-0.336Z" style="fill:rgb(49,168,255);fill-rule:nonzero;"/>
</g>
<g transform="matrix(37.5,0,0,37.5,119.327785,149.80372)">
<path d="M0.298,0.012C0.254,0.012 0.21,0.004 0.167,-0.011C0.124,-0.026 0.087,-0.044 0.056,-0.064L0.114,-0.149C0.144,-0.13 0.176,-0.115 0.21,-0.105C0.244,-0.094 0.279,-0.089 0.317,-0.089C0.346,-0.089 0.368,-0.094 0.382,-0.103C0.396,-0.113 0.403,-0.124 0.403,-0.137C0.403,-0.145 0.401,-0.151 0.397,-0.157C0.394,-0.163 0.387,-0.168 0.378,-0.173C0.369,-0.177 0.356,-0.182 0.34,-0.186C0.323,-0.191 0.302,-0.196 0.276,-0.201C0.21,-0.216 0.161,-0.235 0.132,-0.26C0.102,-0.285 0.087,-0.316 0.087,-0.354C0.087,-0.399 0.107,-0.436 0.146,-0.464C0.186,-0.492 0.241,-0.506 0.311,-0.506C0.354,-0.506 0.394,-0.5 0.43,-0.486C0.466,-0.472 0.497,-0.456 0.522,-0.439L0.461,-0.357C0.436,-0.373 0.41,-0.385 0.382,-0.393C0.354,-0.401 0.326,-0.405 0.298,-0.405C0.281,-0.405 0.267,-0.403 0.255,-0.4C0.244,-0.396 0.236,-0.39 0.231,-0.384C0.225,-0.377 0.222,-0.369 0.222,-0.361C0.222,-0.346 0.231,-0.335 0.25,-0.328C0.268,-0.321 0.298,-0.312 0.341,-0.303C0.393,-0.291 0.433,-0.278 0.462,-0.264C0.49,-0.25 0.51,-0.233 0.521,-0.214C0.532,-0.195 0.538,-0.172 0.538,-0.145C0.538,-0.116 0.529,-0.09 0.511,-0.066C0.492,-0.042 0.465,-0.023 0.43,-0.009C0.394,0.005 0.35,0.012 0.298,0.012Z" style="fill:rgb(49,168,255);fill-rule:nonzero;"/>
</g>
<g transform="matrix(37.5,0,0,37.5,141.827441,149.80372)">
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.3 KiB

+53
View File
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 192 192" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
<g transform="matrix(1,0,0,1,-955,-3)">
<g id="SVG-export-" serif:id="SVG(export)" transform="matrix(1,0,0,1,713,-239)">
<rect x="242" y="242" width="192" height="192" style="fill:none;"/>
<g id="文档背景" transform="matrix(0.192771,0,0,0.21968,578.192771,253.203661)">
<g transform="matrix(5.226799,0,0,4.552083,-1750.366477,-51)">
<path d="M30,143L30,23.98C30,20.68 32.66,18 35.935,18L120.354,18L162,59.923L162,143L30,143Z" style="fill:rgb(248,250,252);"/>
</g>
<g transform="matrix(5.1875,0,0,4.552083,-1744,-51)">
<path d="M120.038,18L162.077,60L125.957,60C122.688,60 120.038,57.35 120.038,54.081L120.038,18Z" style="fill:rgb(245,158,11);fill-opacity:0.5;"/>
</g>
<g id="底部" transform="matrix(1.007576,0,0,1,6.443582,0)">
<g transform="matrix(5.1875,0,0,1.225561,-1743.600962,527.814904)">
<path d="M162,66.948L162,125.052C162,152.067 156.139,174 148.921,174L43.079,174C35.861,174 30,152.067 30,125.052L30,66.948C30,39.933 35.861,18 43.079,18L148.921,18C156.139,18 162,39.933 162,66.948Z" style="fill:rgb(245,158,11);"/>
</g>
<g transform="matrix(4.99537,0,0,4.552083,-1712.860221,-51)">
<rect x="25" y="132" width="137.077" height="22" style="fill:rgb(245,158,11);"/>
</g>
</g>
</g>
<g transform="matrix(1,0,0,1,217.407431,255.962394)">
<g transform="matrix(31.25,0,0,31.25,92.328214,149.80372)">
<path d="M0.3,0.012C0.255,0.012 0.211,0.004 0.168,-0.012C0.125,-0.029 0.087,-0.052 0.053,-0.083L0.132,-0.177C0.157,-0.156 0.184,-0.139 0.214,-0.126C0.245,-0.113 0.276,-0.106 0.308,-0.106C0.342,-0.106 0.367,-0.112 0.384,-0.124C0.4,-0.137 0.409,-0.152 0.409,-0.17C0.409,-0.187 0.404,-0.201 0.396,-0.211C0.387,-0.221 0.375,-0.229 0.36,-0.237C0.344,-0.244 0.326,-0.252 0.305,-0.26L0.219,-0.297C0.195,-0.307 0.173,-0.319 0.152,-0.334C0.13,-0.35 0.113,-0.369 0.1,-0.392C0.087,-0.415 0.08,-0.442 0.08,-0.474C0.08,-0.509 0.09,-0.542 0.11,-0.57C0.129,-0.599 0.157,-0.622 0.192,-0.639C0.228,-0.656 0.269,-0.665 0.315,-0.665C0.354,-0.665 0.393,-0.657 0.43,-0.643C0.468,-0.628 0.5,-0.607 0.529,-0.58L0.46,-0.493C0.437,-0.51 0.414,-0.523 0.391,-0.533C0.368,-0.542 0.34,-0.546 0.308,-0.546C0.281,-0.546 0.26,-0.541 0.243,-0.53C0.227,-0.519 0.218,-0.503 0.218,-0.482C0.218,-0.467 0.223,-0.455 0.233,-0.446C0.242,-0.437 0.255,-0.429 0.271,-0.422C0.288,-0.414 0.306,-0.407 0.326,-0.399L0.408,-0.364C0.437,-0.354 0.461,-0.341 0.482,-0.325C0.503,-0.309 0.52,-0.29 0.531,-0.268C0.543,-0.245 0.548,-0.218 0.548,-0.187C0.548,-0.152 0.539,-0.119 0.519,-0.088C0.5,-0.058 0.471,-0.034 0.434,-0.015C0.397,0.003 0.352,0.012 0.3,0.012Z" style="fill:rgb(248,250,252);fill-rule:nonzero;"/>
</g>
<g transform="matrix(31.25,0,0,31.25,111.077928,149.80372)">
<path d="M0.218,-0L0.019,-0.653L0.164,-0.653L0.247,-0.34C0.258,-0.304 0.267,-0.269 0.274,-0.236C0.282,-0.202 0.291,-0.167 0.301,-0.13L0.305,-0.13C0.316,-0.167 0.325,-0.202 0.333,-0.236C0.341,-0.269 0.35,-0.304 0.359,-0.34L0.441,-0.653L0.581,-0.653L0.382,-0L0.218,-0Z" style="fill:rgb(248,250,252);fill-rule:nonzero;"/>
</g>
<g transform="matrix(31.25,0,0,31.25,129.827642,149.80372)">
<path d="M0.342,0.012C0.287,0.012 0.237,-0.001 0.192,-0.026C0.147,-0.051 0.111,-0.089 0.085,-0.139C0.058,-0.189 0.045,-0.25 0.045,-0.323C0.045,-0.395 0.059,-0.457 0.085,-0.508C0.112,-0.559 0.148,-0.598 0.193,-0.625C0.238,-0.651 0.289,-0.665 0.345,-0.665C0.389,-0.665 0.426,-0.656 0.457,-0.639C0.488,-0.622 0.514,-0.603 0.534,-0.582L0.459,-0.497C0.444,-0.512 0.429,-0.524 0.411,-0.533C0.394,-0.542 0.372,-0.546 0.345,-0.546C0.315,-0.546 0.288,-0.537 0.264,-0.52C0.24,-0.502 0.221,-0.477 0.207,-0.445C0.193,-0.412 0.186,-0.373 0.186,-0.328C0.186,-0.281 0.192,-0.241 0.205,-0.208C0.217,-0.175 0.236,-0.15 0.26,-0.133C0.284,-0.115 0.314,-0.106 0.35,-0.106C0.364,-0.106 0.377,-0.108 0.39,-0.112C0.404,-0.116 0.414,-0.122 0.422,-0.129L0.422,-0.251L0.321,-0.251L0.321,-0.363L0.544,-0.363L0.544,-0.066C0.523,-0.046 0.494,-0.028 0.458,-0.012C0.422,0.004 0.384,0.012 0.342,0.012Z" style="fill:rgb(248,250,252);fill-rule:nonzero;"/>
</g>
<g transform="matrix(31.25,0,0,31.25,148.577356,149.80372)">
</g>
</g>
<g transform="matrix(1,0,0,1,0,1)">
<path d="M309,307L367,307" style="fill:none;stroke:rgb(59,130,246);stroke-opacity:0.7;stroke-width:2.08px;"/>
</g>
<g transform="matrix(1,0,0,1,3,54)">
<path d="M309,307L367,307" style="fill:none;stroke:rgb(59,130,246);stroke-opacity:0.7;stroke-width:2.08px;"/>
</g>
<g transform="matrix(1,0,0,1,0,1)">
<path d="M312,360C371,360 308,307 367,307" style="fill:none;stroke:rgb(245,158,11);stroke-width:5.21px;"/>
</g>
<g transform="matrix(1.6,0,0,1.6,-219.4,-180.8)">
<circle cx="366.5" cy="305.5" r="2.5" style="fill:rgb(59,130,246);"/>
</g>
<g transform="matrix(1.6,0,0,1.6,-274.4,-127.8)">
<circle cx="366.5" cy="305.5" r="2.5" style="fill:rgb(59,130,246);"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.8 KiB

-16
View File
@@ -1,16 +0,0 @@
[Desktop Entry]
Categories=Graphics;
Comment=Pineapple Pictures is a lightweight image viewer
Comment[zh_CN]=菠萝看图是一个轻量级的图像查看器
Exec=ppic %F
GenericName=Image Viewer
GenericName[zh_CN]=图像查看器
GenericName[ja]=画像ビューアー
Icon=net.blumia.pineapple-pictures
Keywords=Picture;Image;Viewer;Jpg;Jpeg;Png;
MimeType=image/bmp;image/bmp24;image/jpg;image/jpe;image/jpeg;image/jpeg24;image/jng;image/pcd;image/pcx;image/png;image/tif;image/tiff;image/tiff24;image/dds;image/gif;image/sgi;image/j2k;image/jp2;image/pct;image/wdp;image/arw;image/icb;image/dng;image/vda;image/vst;image/svg;image/ptif;image/mef;image/xbm;image/svg+xml;
Name=Pineapple Pictures
Name[zh_CN]=菠萝看图
StartupNotify=false
Type=Application
Terminal=false
+18
View File
@@ -0,0 +1,18 @@
[Desktop Entry]
Type=Application
Name={{ default.strings.name | desktop_escape }}
GenericName={{ default.strings.generic_name | desktop_escape }}
Comment={{ default.strings.comment | desktop_escape }}
Exec=ppic %F
Icon=net.blumia.pineapple-pictures
Terminal=false
StartupNotify=false
Categories=Graphics;
MimeType=image/bmp;image/bmp24;image/jpg;image/jpe;image/jpeg;image/jpeg24;image/jng;image/pcd;image/pcx;image/png;image/tif;image/tiff;image/tiff24;image/dds;image/gif;image/sgi;image/j2k;image/jp2;image/pct;image/wdp;image/arw;image/icb;image/dng;image/vda;image/vst;image/svg;image/ptif;image/mef;image/xbm;image/svg+xml;
Keywords={{ default.strings.keywords | desktop_escape }}
{% for lang in languages %}
Name[{{ lang.locale }}]={{ lang.strings.name | desktop_escape }}
GenericName[{{ lang.locale }}]={{ lang.strings.generic_name | desktop_escape }}
Comment[{{ lang.locale }}]={{ lang.strings.comment | desktop_escape }}
Keywords[{{ lang.locale }}]={{ lang.strings.keywords | desktop_escape }}
{% endfor %}
+18
View File
@@ -0,0 +1,18 @@
version = 1
source_language = "en"
[strings.name]
msgid = "Pineapple Pictures"
comment = "Display name of the application."
[strings.generic_name]
msgid = "Image Viewer"
comment = "Generic name describing the application category."
[strings.comment]
msgid = "Pineapple Pictures is a lightweight image viewer"
comment = "Tooltip-like description of the application."
[strings.keywords]
msgid = "Picture;Image;Viewer;Jpg;Jpeg;Png;"
comment = "Search keywords. Semicolon separated list; the trailing semicolon is required."
@@ -1,52 +1,27 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<component type="desktop-application"> <component type="desktop-application">
<id>net.blumia.pineapple-pictures</id> <id>net.blumia.pineapple-pictures</id>
<name>Pineapple Pictures</name> <name>{{ default.strings.name | xml_escape }}</name>
<name xml:lang="es">Pineapple Pictures</name> {% for lang in languages %}
<name xml:lang="ja">Pineapple Pictures</name> <name xml:lang="{{ lang.lang }}">{{ lang.strings.name | xml_escape }}</name>
<name xml:lang="ko">Pineapple Pictures</name> {% endfor %}
<name xml:lang="nl">Pineapple Afbeeldingen</name> <summary>{{ default.strings.summary | xml_escape }}</summary>
<name xml:lang="ru">Pineapple Pictures</name> {% for lang in languages %}
<name xml:lang="sl">Pineapple Slike</name> <summary xml:lang="{{ lang.lang }}">{{ lang.strings.summary | xml_escape }}</summary>
<name xml:lang="ta">அன்னாசி படங்கள்</name> {% endfor %}
<name xml:lang="tr">Pineapple Resimler</name>
<name xml:lang="uk">Pineapple Pictures</name>
<name xml:lang="vi">Pineapple Pictures</name>
<name xml:lang="zh-CN">菠萝看图</name>
<summary>Image Viewer</summary>
<summary xml:lang="es">Visor de imágenes</summary>
<summary xml:lang="ja">画像ビューアー</summary>
<summary xml:lang="ko">이미지 뷰어</summary>
<summary xml:lang="nl">Afbeeldingsweergave</summary>
<summary xml:lang="ru">Просмотр изображений</summary>
<summary xml:lang="sl">Pregledovalnik slik</summary>
<summary xml:lang="ta">பட பார்வையாளர்</summary>
<summary xml:lang="tr">Resim Görüntüleyici</summary>
<summary xml:lang="uk">Переглядач зображень</summary>
<summary xml:lang="vi">Trình xem ảnh</summary>
<summary xml:lang="zh-CN">图像查看器</summary>
<metadata_license>CC0-1.0</metadata_license> <metadata_license>CC0-1.0</metadata_license>
<project_license>MIT</project_license> <project_license>MIT</project_license>
<description> <description>
<p>Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support.</p> <p>{{ default.strings.description | xml_escape }}</p>
<p xml:lang="es">Pineapple Pictures es un visor de imágenes ligero y fácil de usar que viene con una práctica miniatura de navegación al hacer zoom, y no contiene ningún soporte de gestión de imágenes.</p> {% for lang in languages %}
<p xml:lang="ja">Pineapple Picturesは、ズームイン時に便利なナビゲーションサムネイルを備えた軽量で使いやすい画像ビューアです。画像管理のサポートは含まれていません。</p> <p xml:lang="{{ lang.lang }}">{{ lang.strings.description | xml_escape }}</p>
<p xml:lang="ko">Pineapple Pictures는 가볍고 사용하기 쉬운 이미지 뷰어로, 확대 시 편리한 내비게이션 썸네일과 함께 제공되며 이미지 관리 지원이 포함되어 있지 않습니다.</p> {% endfor %}
<p xml:lang="nl">Pineapple Afbeeldingen is een licht en eenvoudig te gebruiken afbeeldingsweergaveprogramma met miniatuurnavigatie na inzoomen. Het programma heeft echter geen fotobeheermogelijkheid.</p>
<p xml:lang="ru">Pineapple Pictures - это легкий и простой в использовании просмотрщик изображений, оснащенный удобной навигацией по миниатюрам при увеличении масштаба и не содержащий никакой поддержки управления изображениями.</p>
<p xml:lang="sl">Pineapple Pictures je lahek in enostaven pregledovalnik slik, ki ima pri povečavi priročno sličico za navigacijo in ne vsebuje nobene podpore za upravljanje slik.</p>
<p xml:lang="ta">அன்னாசி படங்கள் ஒரு இலகுரக மற்றும் பயன்படுத்த எளிதான பட பார்வையாளராகும், இது பெரிதாக்கும்போது ஒரு எளிமையான வழிசெலுத்தல் சிறுபடத்துடன் வருகிறது, மேலும் எந்த பட மேலாண்மை ஆதரவையும் கொண்டிருக்கவில்லை.</p>
<p xml:lang="uk">Pineapple Pictures – це легкий і простий у використанні переглядач зображень, який постачається зі зручною навігаційною мініатюрою при збільшенні масштабу і не містить жодної підтримки керування зображеннями.</p>
<p xml:lang="vi">Pineapple Pictures là trình xem hình ảnh nhẹ và dễ sử dụng, đi kèm với hình thu nhỏ điều hướng tiện dụng khi phóng to và không chứa bất kỳ hỗ trợ quản lý hình ảnh nào.</p>
<p xml:lang="zh-CN">菠萝看图是一个轻量级易用的图像查看器,在图片放大时提供了方便的鸟瞰导航功能,且不包含任何图片管理功能。</p>
</description> </description>
<developer id="net.blumia"> <developer id="net.blumia">
<name>Gary (BLumia) Wang et al.</name> <name>{{ default.strings.developer_name | xml_escape }}</name>
<name xml:lang="ja">Gary (BLumia) Wang など</name> {% for lang in languages %}
<name xml:lang="nl">Gary (BLumia) Wang e.a.</name> <name xml:lang="{{ lang.lang }}">{{ lang.strings.developer_name | xml_escape }}</name>
<name xml:lang="ru">Gary (BLumia) Wang et al.</name> {% endfor %}
<name xml:lang="uk">Gary (BLumia) Wang.</name>
<name xml:lang="zh-CN">Gary (BLumia) Wang 等人</name>
</developer> </developer>
<launchable type="desktop-id">net.blumia.pineapple-pictures.desktop</launchable> <launchable type="desktop-id">net.blumia.pineapple-pictures.desktop</launchable>
<url type="homepage">https://github.com/BLumia/pineapple-pictures</url> <url type="homepage">https://github.com/BLumia/pineapple-pictures</url>
@@ -59,45 +34,24 @@
</provides> </provides>
<screenshots> <screenshots>
<screenshot type="default"> <screenshot type="default">
<caption>Main window when an image file is loaded</caption> <caption>{{ default.strings.screenshot_caption_main | xml_escape }}</caption>
<caption xml:lang="es">Ventana principal cuando se carga un archivo de imagen</caption> {% for lang in languages %}
<caption xml:lang="ja">画像ファイル読み込み時のメインウィンドウ</caption> <caption xml:lang="{{ lang.lang }}">{{ lang.strings.screenshot_caption_main | xml_escape }}</caption>
<caption xml:lang="ko">이미지 파일이 로드될 때 기본 창</caption> {% endfor %}
<caption xml:lang="nl">Hoofdvenster na het laden van een afbeelding</caption>
<caption xml:lang="ru">Основное окно после загрузки файла изображения</caption>
<caption xml:lang="sl">Glavno okno ob nalaganju slikovne datoteke</caption>
<caption xml:lang="ta">ஒரு படக் கோப்பு ஏற்றப்படும் போது முதன்மையான சாளரம்</caption>
<caption xml:lang="uk">Головне вікно після завантаження файлу зображення</caption>
<caption xml:lang="vi">Cửa sổ chính khi tải tệp hình ảnh</caption>
<caption xml:lang="zh-CN">加载图片后的主窗口</caption>
<image type="source" width="1503" height="640">https://pineapple-pictures.sourceforge.io/ppic-gui-static.png</image> <image type="source" width="1503" height="640">https://pineapple-pictures.sourceforge.io/ppic-gui-static.png</image>
</screenshot> </screenshot>
<screenshot> <screenshot>
<caption>Zooming in a raster image</caption> <caption>{{ default.strings.screenshot_caption_raster | xml_escape }}</caption>
<caption xml:lang="es">Ampliar una imagen rasterizada</caption> {% for lang in languages %}
<caption xml:lang="ja">ラスター画像の拡大</caption> <caption xml:lang="{{ lang.lang }}">{{ lang.strings.screenshot_caption_raster | xml_escape }}</caption>
<caption xml:lang="ko">래스터 이미지 확대하기</caption> {% endfor %}
<caption xml:lang="nl">Inzoomen op een roosterafbeelding</caption>
<caption xml:lang="ru">Масштабирование растрового изображения</caption>
<caption xml:lang="sl">Povečevanje rastrske slike</caption>
<caption xml:lang="ta">ராச்டர் படத்தில் பெரிதாக்குதல்</caption>
<caption xml:lang="uk">Масштабування растрового зображення</caption>
<caption xml:lang="vi">Phóng to hình ảnh raster</caption>
<caption xml:lang="zh-CN">放大浏览位图</caption>
<image type="source" width="771" height="553">https://pineapple-pictures.sourceforge.io/ppic-zoom-raster.png</image> <image type="source" width="771" height="553">https://pineapple-pictures.sourceforge.io/ppic-zoom-raster.png</image>
</screenshot> </screenshot>
<screenshot> <screenshot>
<caption>Zooming in a vector image</caption> <caption>{{ default.strings.screenshot_caption_vector | xml_escape }}</caption>
<caption xml:lang="es">Ampliar una imagen vectorial</caption> {% for lang in languages %}
<caption xml:lang="ja">ベクター画像の拡大</caption> <caption xml:lang="{{ lang.lang }}">{{ lang.strings.screenshot_caption_vector | xml_escape }}</caption>
<caption xml:lang="ko">벡터 이미지 확대하기</caption> {% endfor %}
<caption xml:lang="nl">Inzoomen op een vectorafbeelding</caption>
<caption xml:lang="ru">Масштабирование векторного изображения</caption>
<caption xml:lang="sl">Povečevanje vektorske slike</caption>
<caption xml:lang="ta">ஒரு திசையன் படத்தில் பெரிதாக்குதல்</caption>
<caption xml:lang="uk">Масштабування векторного зображення</caption>
<caption xml:lang="vi">Phóng to hình ảnh vector</caption>
<caption xml:lang="zh-CN">放大浏览矢量图</caption>
<image type="source" width="771" height="553">https://pineapple-pictures.sourceforge.io/ppic-zoom-svg.png</image> <image type="source" width="771" height="553">https://pineapple-pictures.sourceforge.io/ppic-zoom-svg.png</image>
</screenshot> </screenshot>
</screenshots> </screenshots>
+30
View File
@@ -0,0 +1,30 @@
version = 1
source_language = "en"
[strings.name]
msgid = "Pineapple Pictures"
comment = "Display name of the application."
[strings.summary]
msgid = "Image Viewer"
comment = "One-line summary shown in software centers."
[strings.description]
msgid = "Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support."
comment = "Description paragraph shown in the details page."
[strings.developer_name]
msgid = "Gary (BLumia) Wang et al."
comment = "Name of the application developers."
[strings.screenshot_caption_main]
msgid = "Main window when an image file is loaded"
comment = "Caption of the primary screenshot."
[strings.screenshot_caption_raster]
msgid = "Zooming in a raster image"
comment = "Caption of the raster image zooming screenshot."
[strings.screenshot_caption_vector]
msgid = "Zooming in a vector image"
comment = "Caption of the vector image zooming screenshot."
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

+72
View File
@@ -0,0 +1,72 @@
// Generated by MetaGlot. DO NOT EDIT.
// Sources: dist/pineapple-pictures.rc.in.toml, locales/winrc/*.po (CMake placeholders are substituted later).
#pragma code_page(65001)
// ---------------------------------------------------------------------------
// Icon resources (referenced from the registry as "<exe path>,-<id>")
// ---------------------------------------------------------------------------
101 ICON "@CMAKE_CURRENT_SOURCE_DIR@/dist/winrc-icos/app.ico" // app
102 ICON "@CMAKE_CURRENT_SOURCE_DIR@/dist/winrc-icos/bmp.ico" // bmp
103 ICON "@CMAKE_CURRENT_SOURCE_DIR@/dist/winrc-icos/gif.ico" // gif
104 ICON "@CMAKE_CURRENT_SOURCE_DIR@/dist/winrc-icos/jpg.ico" // jpg
105 ICON "@CMAKE_CURRENT_SOURCE_DIR@/dist/winrc-icos/png.ico" // png
// ---------------------------------------------------------------------------
// String tables (file type descriptions, referenced as "@<exe path>,-<id>")
// ---------------------------------------------------------------------------
{% for lang in languages -%}
// {{ lang.name }}
LANGUAGE {{ lang.primary }}, {{ lang.sublanguage }}
STRINGTABLE
BEGIN
{%- for i in (1000..1028) -%}
{% assign key = i | to_string %}
{{ i }} "{{ lang.strings[key] | rc_escape }}"
{%- endfor %}
END
{% endfor -%}
// ---------------------------------------------------------------------------
// Version information (one VERSIONINFO resource per language; Windows picks by resource language)
// ---------------------------------------------------------------------------
{% for lang in languages -%}
LANGUAGE {{ lang.primary }}, {{ lang.sublanguage }}
1 VERSIONINFO
FILEVERSION @PROJECT_VERSION_MAJOR@, @PROJECT_VERSION_MINOR@, @PROJECT_VERSION_PATCH@, 0
PRODUCTVERSION @PROJECT_VERSION_MAJOR@, @PROJECT_VERSION_MINOR@, @PROJECT_VERSION_PATCH@, 0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L // VOS_NT_WINDOWS32
FILETYPE 0x1L // VFT_APP
FILESUBTYPE 0x0L // VFT2_UNKNOWN
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "{{ lang.block_key }}"
BEGIN
VALUE "Comments", "https://github.com/BLumia/pineapple-pictures"
VALUE "CompanyName", "Gary Wang"
VALUE "FileDescription", "{{ lang.strings.file_description | rc_escape }}"
VALUE "FileVersion", "@PROJECT_VERSION@"
VALUE "InternalName", "ppic"
VALUE "LegalCopyright", "MIT/Expat License - Copyright (C) 2026 Gary Wang"
VALUE "OriginalFilename", "ppic.exe"
VALUE "ProductName", "{{ lang.strings.product_name | rc_escape }}"
VALUE "ProductVersion", "@PROJECT_VERSION@"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", {{ lang.langid }}, {{ lang.code_page }}
END
END
{% endfor -%}
+127
View File
@@ -0,0 +1,127 @@
version = 1
source_language = "en"
[strings.1000]
msgid = "Pineapple Pictures"
context = "Explorer"
comment = "Application friendly name shown by Explorer, e.g. in the 'Open with' menu."
[strings.1001]
msgid = "JPEG Image"
comment = "File type name for: jpg, jpeg, jfif"
[strings.1002]
msgid = "GIF Animation Image"
comment = "File type name for: gif"
[strings.1003]
msgid = "PNG Image"
comment = "File type name for: png"
[strings.1004]
msgid = "Scalable Vector Graphics"
comment = "File type name for: svg"
[strings.1005]
msgid = "WebP Image"
comment = "File type name for: webp"
[strings.1006]
msgid = "AV1 Image File"
comment = "File type name for: avif"
[strings.1007]
msgid = "Windows Icon Image"
comment = "File type name for: ico"
[strings.1008]
msgid = "Apple Icon Image"
comment = "File type name for: icns"
[strings.1009]
msgid = "Photoshop Document"
comment = "File type name for: psd, psb, pdd, psdt"
[strings.1010]
msgid = "Krita Document"
comment = "File type name for: kra"
[strings.1011]
msgid = "GIMP Document"
comment = "File type name for: xcf"
[strings.1012]
msgid = "TARGA Image"
comment = "File type name for: tga"
[strings.1013]
msgid = "Tagged Image File Format"
comment = "File type name for: tif, tiff"
[strings.1014]
msgid = "Bitmap"
comment = "File type name for: bmp"
[strings.1015]
msgid = "Wireless Bitmap"
comment = "File type name for: wbmp"
[strings.1016]
msgid = "DirectDraw Surface"
comment = "File type name for: dds"
[strings.1017]
msgid = "High Dynamic Range Image"
comment = "File type name for: hdr"
[strings.1018]
msgid = "Interchange File Format"
comment = "File type name for: iff"
[strings.1019]
msgid = "Softimage Picture"
comment = "File type name for: pic"
[strings.1020]
msgid = "PiCture eXchange PC Paintbrush Image"
comment = "File type name for: pcx"
[strings.1021]
msgid = "Quite OK Image"
comment = "File type name for: qoi"
[strings.1022]
msgid = "Sun Raster Image"
comment = "File type name for: ras, sun"
[strings.1023]
msgid = "OpenRaster Image"
comment = "File type name for: ora"
[strings.1024]
msgid = "Animated Cursor"
comment = "File type name for: ani"
[strings.1025]
msgid = "Portable Float Map"
comment = "File type name for: pfm, phm"
[strings.1026]
msgid = "Silicon Graphics Image"
comment = "File type name for: rgb, rgba, bw, sgi"
[strings.1027]
msgid = "Pixar Raster Image"
comment = "File type name for: pxr"
[strings.1028]
msgid = "Scitex Continuous Tone"
comment = "File type name for: sct"
[strings.file_description]
msgid = "Pineapple Pictures - Image Viewer"
comment = "File description of the executable."
[strings.product_name]
msgid = "Pineapple Pictures"
comment = "Display name of the product."
+5
View File
@@ -0,0 +1,5 @@
[CustomMessages]
MyAppName={{ strings.MyAppName | inno_escape }}
MyOther={{ strings.MyOther | inno_escape }}
MyAssociateWithFiles={{ strings.MyAssociateWithFiles | inno_escape }}
MyInstallVcRedist={{ strings.MyInstallVcRedist | inno_escape }}
+362
View File
@@ -0,0 +1,362 @@
; Script for generating the Pineapple Pictures installer.
#define MyAppName "Pineapple Pictures"
#define MyAppVersion "@PROJECT_VERSION@"
#define MyAppPublisher "BLumia"
#define MyAppURL "https://github.com/BLumia/pineapple-pictures"
#define MyAppExeName "ppic.exe"
[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
{% comment %}
The escaped double opening brace in the AppId value below is wrapped in a Liquid raw block,
because it would otherwise open a Liquid output tag.
{% endcomment %}
AppId={% raw %}{{B5291320-FE7C-4069-BF87-A0AC327FCD20}{% endraw %}
AppName={cm:MyAppName}
AppVersion={#MyAppVersion} ;{#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
; Explicit literals (via preprocessor defines): the Setup.exe version info resource
; must not fall back to AppName, because AppName carries an Inno constant and the
; fallback yields an empty string in that case.
VersionInfoDescription={#MyAppName} Setup
VersionInfoProductName={#MyAppName}
DefaultDirName={autopf}\pineapple-pictures
UninstallDisplayIcon={app}\{#MyAppExeName}
; "ArchitecturesAllowed=x64compatible" specifies that Setup cannot run
; on anything but x64 and Windows 11 on Arm.
ArchitecturesAllowed=x64compatible
; "ArchitecturesInstallIn64BitMode=x64compatible" requests that the
; install be done in "64-bit mode" on x64 or Windows 11 on Arm,
; meaning it should use the native 64-bit Program Files directory and
; the 64-bit view of the registry.
ArchitecturesInstallIn64BitMode=x64compatible
ChangesAssociations=yes
DefaultGroupName={cm:MyAppName}
AllowNoIcons=yes
LicenseFile=LICENSE
; Uncomment the following line to run in non administrative install mode (install for current user only).
;PrivilegesRequired=lowest
PrivilegesRequiredOverridesAllowed=dialog
OutputDir=.
OutputBaseFilename=ppic-setup
SolidCompression=yes
WizardStyle=modern
[Languages]
{% for lang in langs -%}
{% case lang -%}
{% when 'zh_CN' -%}
{% assign base = 'compiler:Languages\ChineseSimplified.isl' -%}
{% else -%}
{% assign base = 'compiler:Default.isl' -%}
{% endcase -%}
Name: "{{ lang }}"; MessagesFile: "{{ base }},Strings\{{ lang }}.isl"
{% endfor -%}
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "associatewithfiles"; Description: "{cm:MyAssociateWithFiles,{#MyAppName}}"; GroupDescription: "{cm:MyOther}"
[Files]
; YYC MARK:
; This file MUST be placed with "ppic.exe" before compiling this script.
; Otherwise exception will be thrown.
Source: "{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "*"; Excludes: "vc_redist.x64.exe,ppic-setup.exe,ppic.iss,Strings"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "vc_redist.x64.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Registry]
; Registration scheme follows the app-registration model (App Paths + Applications
; keys plus per-family ProgIds), with all display names and icons referenced as
; indirect strings into ppic.exe itself (string table 1000-1028, icons 101-105),
; so the registry values stay language-neutral and Explorer resolves them per
; user UI language. Adding a new file family: copy a family block below, adjust
; the ProgId, string ID, icon ID and extension list, then add the extensions to
; SupportedTypes. String/icon IDs must exist in the Windows RC resources
; (dist/pineapple-pictures.rc.in.toml and dist/winrc-icos).
; --- Application registration (always installed) ---
; App Paths: lets the shell resolve "ppic.exe" by name and locates its DLL directory.
Root: HKA; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\ppic.exe"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\ppic.exe"; ValueType: string; ValueName: "Path"; ValueData: "{app}"
; Applications: makes ppic.exe itself appear in the "Open with" lists.
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe"; ValueType: string; ValueName: "FriendlyAppName"; ValueData: "@{app}\ppic.exe,-1000"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe"; ValueType: string; ValueName: "NoOpenWith"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-101"
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
; SupportedTypes: declares the supported types to filter the "Open with" dialog.
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".ani"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".apng"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".avif"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".bmp"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".bw"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".dds"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".exr"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".gif"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".hdr"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".icns"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".ico"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".iff"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".jfif"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".jpeg"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".jpg"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".kra"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".ora"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".pdd"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".pcx"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".pfm"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".phm"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".pic"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".png"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".psb"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".psd"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".psdt"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".pxr"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".qoi"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".ras"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".rgb"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".rgba"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".sct"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".sgi"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".sun"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".svg"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".tga"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".tif"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".tiff"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".wbmp"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".webp"; ValueData: ""
Root: HKA; Subkey: "Software\Classes\Applications\ppic.exe\SupportedTypes"; ValueType: string; ValueName: ".xcf"; ValueData: ""
; --- File type ProgId declarations (always installed) ---
; Per family: one ProgId shared by its extensions, always registered. Default
; value and FriendlyTypeName both carry the indirect string; DefaultIcon
; references the embedded icon by resource ID (101 app, 102 bmp, 103 gif,
; 104 jpg, 105 png). Only the OpenWithProgids line(s) at the end of each
; family block claim the actual association and are gated by the installer
; task "associatewithfiles".
; JPEG family (string 1001, icon 104)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Jpeg"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1001"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Jpeg"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1001"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Jpeg\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-104"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Jpeg\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.jpg\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Jpeg"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
Root: HKA; Subkey: "Software\Classes\.jpeg\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Jpeg"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
Root: HKA; Subkey: "Software\Classes\.jfif\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Jpeg"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; GIF family (string 1002, icon 103)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Gif"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1002"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Gif"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1002"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Gif\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-103"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Gif\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.gif\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Gif"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; PNG family (string 1003, icon 105)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Png"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1003"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Png"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1003"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Png\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-105"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Png\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.png\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Png"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
Root: HKA; Subkey: "Software\Classes\.apng\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Png"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; SVG (string 1004, icon 105 - transparency capable)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Svg"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1004"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Svg"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1004"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Svg\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-105"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Svg\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.svg\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Svg"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; WebP (string 1005, icon 105 - transparency capable)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Webp"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1005"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Webp"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1005"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Webp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-105"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Webp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.webp\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Webp"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; AVIF (string 1006, icon 105 - transparency capable)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Avif"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1006"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Avif"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1006"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Avif\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-105"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Avif\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.avif\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Avif"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; ICO (string 1007, icon 105 - transparency capable)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Ico"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1007"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Ico"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1007"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Ico\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-105"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Ico\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.ico\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Ico"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; ICNS (string 1008, icon 105 - transparency capable)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Icns"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1008"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Icns"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1008"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Icns\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-105"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Icns\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.icns\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Icns"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; Photoshop family (string 1009, icon 102 - artwork)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Psd"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1009"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Psd"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1009"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Psd\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-102"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Psd\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.psd\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Psd"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
Root: HKA; Subkey: "Software\Classes\.psb\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Psd"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
Root: HKA; Subkey: "Software\Classes\.pdd\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Psd"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
Root: HKA; Subkey: "Software\Classes\.psdt\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Psd"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; Krita (string 1010, icon 102 - artwork)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Kra"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1010"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Kra"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1010"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Kra\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-102"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Kra\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.kra\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Kra"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; GIMP XCF (string 1011, icon 102 - artwork)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Xcf"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1011"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Xcf"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1011"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Xcf\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-102"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Xcf\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.xcf\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Xcf"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; TARGA (string 1012, icon 102 - artwork)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Tga"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1012"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Tga"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1012"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Tga\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-102"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Tga\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.tga\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Tga"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; TIFF family (string 1013, icon 104 - photo)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Tif"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1013"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Tif"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1013"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Tif\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-104"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Tif\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.tif\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Tif"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
Root: HKA; Subkey: "Software\Classes\.tiff\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Tif"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; BMP (string 1014, icon 102)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Bmp"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1014"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Bmp"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1014"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Bmp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-102"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Bmp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.bmp\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Bmp"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; Wireless BMP (string 1015, icon 102)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Wbmp"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1015"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Wbmp"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1015"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Wbmp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-102"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Wbmp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.wbmp\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Wbmp"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; DirectDraw Surface (string 1016, icon 102 - artwork)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Dds"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1016"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Dds"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1016"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Dds\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-102"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Dds\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.dds\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Dds"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; HDR family incl. EXR (string 1017, icon 104 - photo)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Hdr"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1017"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Hdr"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1017"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Hdr\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-104"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Hdr\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.hdr\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Hdr"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
Root: HKA; Subkey: "Software\Classes\.exr\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Hdr"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; IFF (string 1018, icon 104 - fallback)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Iff"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1018"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Iff"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1018"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Iff\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-104"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Iff\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.iff\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Iff"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; Softimage PIC (string 1019, icon 104 - fallback)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Pic"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1019"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Pic"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1019"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Pic\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-104"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Pic\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.pic\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Pic"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; PCX (string 1020, icon 104 - fallback)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Pcx"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1020"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Pcx"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1020"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Pcx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-104"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Pcx\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.pcx\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Pcx"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; QOI (string 1021, icon 105 - transparency capable)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Qoi"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1021"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Qoi"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1021"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Qoi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-105"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Qoi\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.qoi\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Qoi"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; Sun Raster family (string 1022, icon 104 - fallback)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Ras"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1022"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Ras"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1022"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Ras\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-104"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Ras\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.ras\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Ras"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
Root: HKA; Subkey: "Software\Classes\.sun\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Ras"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; OpenRaster (string 1023, icon 102 - artwork)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Ora"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1023"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Ora"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1023"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Ora\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-102"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Ora\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.ora\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Ora"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; Animated Cursor (string 1024, icon 103 - animated)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Ani"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1024"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Ani"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1024"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Ani\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-103"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Ani\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.ani\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Ani"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; Portable Float Map family (string 1025, icon 104 - photo/HDR)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Pfm"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1025"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Pfm"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1025"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Pfm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-104"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Pfm\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.pfm\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Pfm"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
Root: HKA; Subkey: "Software\Classes\.phm\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Pfm"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; Silicon Graphics family (string 1026, icon 104 - fallback)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Rgb"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1026"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Rgb"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1026"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Rgb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-104"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Rgb\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.rgb\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Rgb"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
Root: HKA; Subkey: "Software\Classes\.rgba\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Rgb"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
Root: HKA; Subkey: "Software\Classes\.bw\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Rgb"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
Root: HKA; Subkey: "Software\Classes\.sgi\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Rgb"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; Pixar (string 1027, icon 104 - fallback)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Pxr"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1027"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Pxr"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1027"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Pxr\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-104"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Pxr\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.pxr\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Pxr"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
; Scitex CT (string 1028, icon 104 - fallback)
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Sct"; ValueType: string; ValueName: ""; ValueData: "@{app}\ppic.exe,-1028"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Sct"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "@{app}\ppic.exe,-1028"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Sct\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\ppic.exe,-104"
Root: HKA; Subkey: "Software\Classes\PineapplePictures.Sct\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\ppic.exe"" ""%1"""
Root: HKA; Subkey: "Software\Classes\.sct\OpenWithProgids"; ValueType: string; ValueName: "PineapplePictures.Sct"; ValueData: ""; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: associatewithfiles
[Icons]
Name: "{group}\{cm:MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "https://github.com/BLumia/pineapple-pictures"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{autodesktop}\{cm:MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall skipifsilent
Filename: "{tmp}\vc_redist.x64.exe"; Parameters: "/install /quiet /norestart"; StatusMsg: "{cm:MyInstallVcRedist}"; Flags: waituntilterminated
+18
View File
@@ -0,0 +1,18 @@
version = 1
source_language = "en"
[strings.MyAppName]
msgid = "Pineapple Pictures"
comment = "Display name of the application, used in the installer UI."
[strings.MyOther]
msgid = "Other:"
comment = "Group caption for the extra installer task options."
[strings.MyAssociateWithFiles]
msgid = "Associate %1 with its supported file types."
comment = "Installer task description. %1 is the application name."
[strings.MyInstallVcRedist]
msgid = "Installing Microsoft Visual C++ Redistributable..."
comment = "Status message shown while installing the VC++ runtime."
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Some files were not shown because too many files have changed in this diff Show More