Compare commits

..
14 Commits
Author SHA1 Message Date
yyc12345 f0bb945c7d doc: update README
- update README to notice the development of SarasaCW Picture.
- temporarily remove the most of old README by HTML comment syntax. these contents will be restored and fixed once I finish refactoring.
2026-07-02 14:44:01 +08:00
yyc12345 870e472f53 ci: remove appveyor config file
- all build work are passing by github. there is no need to keep appvoyer config file.
2026-07-02 14:43:42 +08:00
yyc12345 76677381de build: remove QMake project file
- remove QMake project file. it is already deprecated in original repository. all build should be run as CMake project.
2026-07-02 14:43:20 +08:00
blumiaandyyc12345 d2bd521ad0 fix: show empty url list doesn't reset window title 2026-07-02 14:41:56 +08:00
blumiaandyyc12345 265e894b3f fix(CI): Windows build FTBFS 2026-07-02 14:41:42 +08:00
blumiaandyyc12345 6339a93c6c feat(Windows): open window will be able to use system animation 2026-07-02 14:39:33 +08:00
6da53ced81 i18n: Translations update from Hosted Weblate
Co-authored-by: VenusGirl <VenusGirl@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/application/ko/
Translation: pineapple-pictures/Application
2026-06-29 19:18:11 +08:00
blumia 8f0d4da7ad chore: update release info to 1.4.1 2026-04-05 17:09:13 +08:00
blumia 9c8ffb6c1b chore(CI): bump Qt and action version 2026-04-04 16:52:18 +08:00
blumia 4c5c5e6fc6 fix(CI): zlib dll renamed 2026-03-27 17:55:23 +08:00
blumia b8cb10bb33 fix(CI): fixed kf6 version for appveyor build 2026-03-27 15:52:00 +08:00
blumia 6e2f40633e fix: correct version in CMakeLists, update CI for zlib 2026-03-27 15:06:11 +08:00
a0ba7c1d17 i18n: Translations update from Hosted Weblate
Co-authored-by: Heimen Stoffels <vistausss@fastmail.com>
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/application/nl/
Translation: pineapple-pictures/Application
2026-03-27 15:02:18 +08:00
b6d759d7c6 i18n: Translations update from Hosted Weblate
Co-authored-by: Loc Huynh <huynhloc.contact@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/application/vi/
Translation: pineapple-pictures/Application
2026-03-11 20:32:50 +08:00
17 changed files with 139 additions and 304 deletions
+2 -2
View File
@@ -14,7 +14,7 @@ jobs:
run: |
apt update
apt install -y git ca-certificates curl file
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Get build dept.
run: |
apt install -y cmake qt6-base-dev qt6-svg-dev qt6-tools-dev libexiv2-dev
@@ -29,7 +29,7 @@ jobs:
run: |
cd build
apt install -y ./*.deb
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v6
with:
name: deepin-25-deb-package
path: build/*.deb
+3 -3
View File
@@ -8,11 +8,11 @@ jobs:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
version: '6.10.2'
version: '6.10.3'
modules: 'qtimageformats'
cache: true
- name: Install Conan and Dependencies
@@ -33,7 +33,7 @@ jobs:
run: |
macdeployqt ./ppic.app -dmg
ls
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v6
with:
name: "macos-bundle"
path: "*.dmg"
+2 -2
View File
@@ -6,7 +6,7 @@ jobs:
ubuntu-24-04-build:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Get build dept.
run: |
sudo apt update
@@ -22,7 +22,7 @@ jobs:
run: |
cd build
sudo apt install ./*.deb
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v6
with:
name: ubuntu-24.04-deb-package
path: build/*.deb
+8 -8
View File
@@ -8,7 +8,7 @@ jobs:
strategy:
matrix:
include:
- qt_ver: '6.10.2'
- qt_ver: '6.10.3'
vs: '2022'
aqt_arch: 'win64_msvc2022_64'
msvc_arch: 'x64'
@@ -16,7 +16,7 @@ jobs:
runs-on: windows-2022
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
@@ -35,7 +35,7 @@ jobs:
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@v4
- uses: actions/upload-artifact@v6
with:
name: "windows-msvc${{ matrix.vs }}-qt${{ matrix.qt_ver }}-qmake-package"
path: release/*
@@ -45,7 +45,7 @@ jobs:
strategy:
matrix:
include:
- qt_ver: '6.10.2'
- qt_ver: '6.10.3'
vs: '2022'
aqt_arch: 'win64_msvc2022_64'
msvc_arch: 'x64'
@@ -53,7 +53,7 @@ jobs:
runs-on: windows-2022
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
@@ -79,9 +79,9 @@ jobs:
ren .\exiv2-0.28.7-2022msvc-AMD64 dependencies_bin
echo ::endgroup::
echo ::group::===== zlib =====
curl -fsSL -o zlib_src.zip https://zlib.net/zlib131.zip
curl -fsSL -o zlib_src.zip https://github.com/madler/zlib/releases/download/v1.3.2/zlib132.zip
7z x zlib_src.zip -y -o"dependencies_src"
ren .\dependencies_src\zlib-1.3.1 zlib || goto :error
ren .\dependencies_src\zlib-1.3.2 zlib || goto :error
cmake ./dependencies_src/zlib -Bbuild_dependencies/zlib -DCMAKE_INSTALL_PREFIX="dependencies_bin" || goto :error
cmake --build build_dependencies/zlib --config Release --target=install || goto :error
echo ::endgroup::
@@ -135,7 +135,7 @@ jobs:
if ErrorLevel 8 (exit /B 1)
copy LICENSE build\bin
exit /B 0
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v6
with:
name: "windows-msvc${{ matrix.vs }}-qt${{ matrix.qt_ver }}-cmake-package"
path: build/bin/*
+1 -1
View File
@@ -4,7 +4,7 @@
cmake_minimum_required(VERSION 3.16)
project(pineapple-pictures VERSION 1.3.0) # don't forget to update NEWS file and AppStream metadata.
project(pineapple-pictures VERSION 1.4.1) # don't forget to update NEWS file and AppStream metadata.
include(GNUInstallDirs)
include(FeatureSummary)
+11
View File
@@ -1,3 +1,14 @@
Version 1.4.1
~~~~~~~~~~~~~
Released: 2026-04-05
Miscellaneous:
* Update translations
* Update Qt version to 6.10.3 for Windows and macOS pre-built binaries
Contributors:
Heimen Stoffels (vistaus), Loc Huynh (hthienloc)
Version 1.4.0
~~~~~~~~~~~~~
Released: 2026-02-11
+16 -5
View File
@@ -1,4 +1,17 @@
Yet another image viewer.
# Sarasas Chip Workshop Picture
Yet another legacy Windows Photo Viewer with cross-platform support.
> [!IMPORTANT]
> SarasaCW Picture are still in refactoring. Please do not use it until this message removes.
## Summary
Sarasas Chip Workshop Picture (abbr. SarasaCW Picture) is a lightweight image viewer that has cross-platform support and similar user interface about legacy Windows Photo Viewer. It allows you view JPEG, PNG, GIF, SVG, PSD, KRA, XCF, TGA, HDR, AVIF and some other frequently used image formats files quickly and easily without changing your long-term Windows usage experience.
SarasaCW Picture is the **hard fork** of [Pineapple Pictures](https://github.com/BLumia/pineapple-pictures) since Pineapple Pictures 1.4.1 version.
<!--
|CI|Build Status|
|---|---|
@@ -8,10 +21,6 @@ Yet another image viewer.
![Pineapple Pictures - Main Window](https://repository-images.githubusercontent.com/211888654/e8697600-e370-11eb-9b2a-b71e05262954)
## Summary
Pineapple Pictures is a lightweight image viewer that allows you view JPEG, PNG, GIF, SVG, PSD, KRA, XCF, TGA, HDR, AVIF and some other frequently used image formats files quickly and easily, and also provide a Stay-on-Top window setting that allows you pin the window so you can use it to pin a reference image at the top and then you can work with other software.
## Get it!
### Maintained by the original author
@@ -71,3 +80,5 @@ It's possible to build it under Windows, Linux, macOS, and maybe other desktop p
## License
Pineapple Pictures as a whole is licensed under MIT license. Individual files may have a different, but compatible license.
-->
+17 -4
View File
@@ -1,3 +1,18 @@
# Sarasas Chip Workshop 照片查看器
简单轻量的、具有跨平台支持的、经典样式的 Windows 照片查看器。
> [!IMPORTANT]
> SarasaCW 照片查看器还在重构中。在这条信息被移除之前请不要使用它。
## 简介
Sarasas Chip Workshop 照片查看器(简称 SarasaCW 照片查看器)是一个轻量级的图片查看器。支持跨平台。界面风格类似于经典的 Windows 照片查看器。它可以让你快速轻松地浏览 JPEG、PNG、GIF、SVG、PSD、KRA、XCF、TGA、HDR、AVIF 以及其他一些常用的图片格式,且无需改变你长期的 Windows 使用习惯。
SarasaCW 照片查看器是[菠萝看图](https://github.com/BLumia/pineapple-pictures)的**硬分叉**,该分叉自菠萝看图 1.4.1 版本开始。
<!--
简单轻量的跨平台看图工具。
|CI|构建状态|
@@ -8,10 +23,6 @@
![Pineapple Pictures - Main Window](https://repository-images.githubusercontent.com/211888654/e8697600-e370-11eb-9b2a-b71e05262954)
## 简介
菠萝看图是一个轻量图像查看器,允许你简单快捷的查看 JPEG, PNG, GIF, SVG, PSD, KRA, XCF, TGA, HDR, AVIF 等常用格式的图像文件,并提供了置顶窗口的选项以便你在使用其它软件时也可以将参考图片固定在顶端。
## 立即获取!
### 由原作者维护
@@ -72,3 +83,5 @@ $ cmake --build . # 如果你使用 Makefile 作为 CMake 生成器,也可以
## 许可协议
菠萝看图整体使用 MIT 协议进行发布。项目所随的部分源文件可能具备不同但与之兼容的许可协议。
-->
+24
View File
@@ -11,6 +11,22 @@
#include <QVBoxLayout>
#include <QWindow>
#ifdef Q_OS_WIN
#include "windows.h"
void fixWindowStyle(QWidget * that)
{
HWND hwnd = (HWND)that->winId();
LONG style = GetWindowLong(hwnd, GWL_STYLE);
style |= WS_THICKFRAME | WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SYSMENU;
SetWindowLong(hwnd, GWL_STYLE, style);
SetWindowPos(hwnd, nullptr, 0, 0, 0, 0,
SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE |
SWP_NOZORDER | SWP_NOACTIVATE);
}
#endif
FramelessWindow::FramelessWindow(QWidget *parent)
: QWidget(parent)
, m_centralLayout(new QVBoxLayout(this))
@@ -41,6 +57,14 @@ void FramelessWindow::installResizeCapture(QObject* widget)
widget->installEventFilter(this);
}
void FramelessWindow::showEvent(QShowEvent *event)
{
#ifdef Q_OS_WIN
fixWindowStyle(this);
#endif // Q_OS_WIN
return QWidget::showEvent(event);
}
bool FramelessWindow::eventFilter(QObject* o, QEvent* e)
{
switch (e->type()) {
+3
View File
@@ -20,6 +20,9 @@ public:
void setCentralWidget(QWidget * widget);
void installResizeCapture(QObject* widget);
protected slots:
void showEvent(QShowEvent *event) override;
protected:
bool eventFilter(QObject *o, QEvent *e) override;
bool mouseHover(QHoverEvent* event, QWidget* wg);
+1
View File
@@ -291,6 +291,7 @@ void MainWindow::galleryCurrent(bool showLoadImageHintWhenEmpty, bool reloadImag
setWindowTitle(m_pm->urlByIndex(index).fileName());
} else if (showLoadImageHintWhenEmpty && m_pm->totalCount() <= 0) {
m_graphicsView->showText(QCoreApplication::translate("GraphicsScene", "Drag image here"));
setWindowTitle(QString());
}
updateGalleryButtonsVisibility();
+6 -6
View File
@@ -236,27 +236,27 @@
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation type="unfinished"></translation>
<translation> </translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation type="unfinished"></translation>
<translation> .</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation>
<translation>%1 (*.%2)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation type="unfinished"></translation>
<translation> .</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation type="unfinished"></translation>
<translation> : %1</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
@@ -320,7 +320,7 @@
<message>
<location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation type="unfinished"></translation>
<translation> (&amp;A)...</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
+8 -8
View File
@@ -240,27 +240,27 @@
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation type="unfinished"></translation>
<translation>Opslaan als</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation type="unfinished"></translation>
<translation>Er is geen afbeelding geopend.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation>
<translation>%1-afbeelding (*.%2)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation type="unfinished"></translation>
<translation>Er zijn geen ondersteunde formaten beschikbaar.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation type="unfinished"></translation>
<translation>De afbeelding kan niet worden opgeslagen: %1</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
@@ -324,7 +324,7 @@
<message>
<location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation type="unfinished"></translation>
<translation>Opslaan &amp;als</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
@@ -359,7 +359,7 @@
<message>
<location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source>
<translation type="unfinished"></translation>
<translation>Lange afbeelding inpassen</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="110"/>
@@ -891,7 +891,7 @@
<message>
<location filename="../settingsdialog.cpp" line="129"/>
<source>Limit SVG support to SVG Tiny 1.2</source>
<translation type="unfinished"></translation>
<translation>Svg-ondersteuning beperken tot SVG Tiny 1.2</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="130"/>
+6 -6
View File
@@ -225,27 +225,27 @@ Loc Huynh &lt;https://github.com/hthienloc&gt;</translation>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation type="unfinished"></translation>
<translation>Lưu dưới dạng</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation type="unfinished"></translation>
<translation>Hiện tại không hình nh nào đưc mở.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation>
<translation>Hình nh %1 (*.%2)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation type="unfinished"></translation>
<translation>Không đnh dạng hình nh đưc hỗ trợ.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation type="unfinished"></translation>
<translation>Không lưu đưc hình nh: %1</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
@@ -309,7 +309,7 @@ Loc Huynh &lt;https://github.com/hthienloc&gt;</translation>
<message>
<location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation type="unfinished"></translation>
<translation>Lưu &amp;dưới dạng...</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
-158
View File
@@ -1,158 +0,0 @@
image:
- Visual Studio 2022
environment:
CMAKE_INSTALL_PREFIX: C:\projects\cmake
LIBZ: C:\projects\zlib
LIBEXPAT: C:\projects\libexpat
LIBAVIF: C:\projects\libavif
LIBEXIV2: C:\projects\exiv2
PPKG: C:\projects\ppkg
matrix:
- job_name: mingw_64_qt6_8
QTDIR: C:\Qt\6.8\mingw_64
MINGW64: C:\Qt\mingw_64\Tools\mingw1310_64
KF_BRANCH: master
EXIV2_VERSION: "0.28.7"
EXIV2_CMAKE_OPTIONS: "-DEXIV2_ENABLE_BROTLI=OFF -DEXIV2_ENABLE_INIH=OFF -DEXIV2_BUILD_EXIV2_COMMAND=OFF"
PPIC_CMAKE_OPTIONS: "-DPREFER_QT_5=OFF"
WINDEPLOYQT_ARGS: "--verbose=2 --no-quick-import --no-translations --no-opengl-sw --no-system-d3d-compiler --skip-plugin-types tls,networkinformation"
install:
- mkdir %CMAKE_INSTALL_PREFIX%
- mkdir %LIBZ%
- mkdir %LIBEXPAT%
- mkdir %LIBAVIF%
- mkdir %LIBEXIV2%
- mkdir %PPKG%
- cd %APPVEYOR_BUILD_FOLDER%
- git submodule update --init --recursive
- set PATH=%PATH%;%CMAKE_INSTALL_PREFIX%;%QTDIR%\bin;%MINGW64%\bin;%PPKG%
- set CC=%MINGW64%\bin\gcc.exe
- set CXX=%MINGW64%\bin\g++.exe
build_script:
# prepare
- mkdir 3rdparty
- choco install ninja
- cd %PPKG%
- curl -fsSL -o ppkg.exe https://github.com/BLumia/pineapple-package-manager/releases/latest/download/ppkg.exe
- cd %APPVEYOR_BUILD_FOLDER%
# download and install zlib for KArchive
- cd %LIBZ%
- curl -fsSL -o zlib131.zip https://zlib.net/zlib131.zip
- 7z x zlib131.zip -y
- cd zlib-1.3.1
- mkdir build
- cd build
- cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX%
- cmake --build . --config Release
- cmake --build . --config Release --target install/strip
- cd %APPVEYOR_BUILD_FOLDER%
# install ECM so we can build KImageFormats
- cd 3rdparty
- git clone -b %KF_BRANCH% -q https://invent.kde.org/frameworks/extra-cmake-modules.git
- git rev-parse HEAD
- cd extra-cmake-modules
- cmake -G "Ninja" . -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX% -DBUILD_TESTING=OFF
- cmake --build .
- cmake --build . --target install
- cd %APPVEYOR_BUILD_FOLDER%
# install AOM for libavif AV1 decoding support...
- cd 3rdparty
#- git clone -b v3.9.1 --depth 1 https://aomedia.googlesource.com/aom
#- cd aom
#- mkdir build.aom
#- cd build.aom
#- cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX% -DENABLE_DOCS=OFF -DBUILD_SHARED_LIBS=ON -DAOM_TARGET_CPU=generic -DENABLE_TESTS=OFF -DENABLE_TESTDATA=OFF -DENABLE_TOOLS=OFF -DENABLE_EXAMPLES=0
#- cmake --build . --config Release
#- cmake --build . --config Release --target install/strip
- mkdir aom
- cd aom
- curl -fsSL -o ppkg-aom.zip https://sourceforge.net/projects/pineapple-package-manager/files/packages/mingw-w64-x86_64-windows/aom-3.9.1-2.zip
- ppkg ppkg-aom.zip
- 7z x ppkg-aom.zip LICENSE -y
- cd %APPVEYOR_BUILD_FOLDER%
# install libavif for avif format support of KImageFormats
- cd %LIBAVIF%
- 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
- cd libavif-1.3.0
- mkdir build
- cd build
- cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX% -DAVIF_CODEC_AOM=SYSTEM -DAVIF_CODEC_AOM_DECODE=ON -DAVIF_CODEC_AOM_ENCODE=ON -DAVIF_LIBYUV=LOCAL
- cmake --build . --config Release
- cmake --build . --config Release --target install/strip
- cd %APPVEYOR_BUILD_FOLDER%
# install KArchive for kra format support of KImageFormats
- cd 3rdparty
- git clone -b %KF_BRANCH% -q https://invent.kde.org/frameworks/karchive.git
- git rev-parse HEAD
- cd karchive
- mkdir build
- cd build
- cmake .. -G "Ninja" -DBUILD_TESTING=OFF -DWITH_LIBZSTD=OFF -DWITH_BZIP2=OFF -DWITH_LIBLZMA=OFF -DWITH_OPENSSL=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX%
- cmake --build . --config Release
- cmake --build . --config Release --target install/strip
- cd %APPVEYOR_BUILD_FOLDER%
# build libexpat for libexiv2
- cd %LIBEXPAT%
- curl -fsSL -o R_2_7_3.zip https://github.com/libexpat/libexpat/archive/R_2_7_3.zip
- 7z x R_2_7_3.zip -y
- cd libexpat-R_2_7_3/expat/
- cmake -G "Ninja" . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX% -DEXPAT_BUILD_EXAMPLES=OFF -DEXPAT_BUILD_TESTS=OFF -DEXPAT_BUILD_TOOLS=OFF
- cmake --build . --target install/strip
- cd %APPVEYOR_BUILD_FOLDER%
# build libexiv2
- cd %LIBEXIV2%
- curl -fsSL -o v%EXIV2_VERSION%.zip https://github.com/Exiv2/exiv2/archive/v%EXIV2_VERSION%.zip
- 7z x v%EXIV2_VERSION%.zip -y
- cd exiv2-%EXIV2_VERSION%
- cmake -G "Ninja" . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX% %EXIV2_CMAKE_OPTIONS%
- cmake --build . --target install/strip
- cd %APPVEYOR_BUILD_FOLDER%
# install KImageFormats
- cd 3rdparty
- git clone -b %KF_BRANCH% -q https://invent.kde.org/frameworks/kimageformats.git
- git rev-parse HEAD
- cd kimageformats
- mkdir build
- cd build
- cmake .. -G "Ninja" -DBUILD_TESTING=OFF -DCMAKE_BUILD_TYPE=Release -DKDE_INSTALL_QTPLUGINDIR=%QTDIR%\plugins
- cmake --build . --config Release
- cmake --build . --config Release --target install/strip
- cd %APPVEYOR_BUILD_FOLDER%
# finally...
- mkdir build
- cd build
- cmake .. -G "Ninja" %PPIC_CMAKE_OPTIONS% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=%CMAKE_INSTALL_PREFIX% -DCMAKE_INSTALL_PREFIX='%cd%'
- cmake --build . --config Release
- cmake --build . --config Release --target install/strip
# fixme: I don't know how to NOT make the binary installed to the ./bin/ folder...
- cd bin
- copy %APPVEYOR_BUILD_FOLDER%\LICENSE
- copy %CMAKE_INSTALL_PREFIX%\bin\libaom.dll
- copy %CMAKE_INSTALL_PREFIX%\bin\libexpat-1.dll
- copy %CMAKE_INSTALL_PREFIX%\bin\libexiv2.dll
- copy %CMAKE_INSTALL_PREFIX%\bin\libavif.dll
- copy %CMAKE_INSTALL_PREFIX%\bin\libzlib.dll
- copy %CMAKE_INSTALL_PREFIX%\bin\libKF?Archive.dll
- windeployqt %WINDEPLOYQT_ARGS% .\ppic.exe
# copy 3rdparty licenses for the libs we vendored for windows...
- mkdir licenses
- cd licenses
- copy %APPVEYOR_BUILD_FOLDER%\3rdparty\aom\LICENSE License.aom.txt
- copy %APPVEYOR_BUILD_FOLDER%\3rdparty\karchive\LICENSES\LGPL-2.0-or-later.txt License.KArchive.txt
- copy %APPVEYOR_BUILD_FOLDER%\3rdparty\kimageformats\LICENSES\LGPL-2.1-or-later.txt License.kimageformats.txt
- copy %LIBEXPAT%\libexpat-R_2_7_3\expat\COPYING License.expat.txt
- copy %LIBAVIF%\libavif-1.3.0\LICENSE License.libavif.txt
- copy %LIBEXIV2%\exiv2-%EXIV2_VERSION%\COPYING License.exiv2.txt
# TODO: Qt, zlib
- cd ..
# for debug..
- tree /f
- cd %APPVEYOR_BUILD_FOLDER%
- xcopy %CMAKE_INSTALL_PREFIX% .\cmake-prefix-copy /E /H /C /I
artifacts:
- path: build\bin
- path: cmake-prefix-copy
@@ -4,18 +4,26 @@
<name>Pineapple Pictures</name>
<name xml:lang="es">Pineapple Pictures</name>
<name xml:lang="ja">Pineapple Pictures</name>
<name xml:lang="ko">Pineapple Pictures</name>
<name xml:lang="nl">Pineapple Afbeeldingen</name>
<name xml:lang="ru">Pineapple Pictures</name>
<name xml:lang="sl">Pineapple Slike</name>
<name xml:lang="ta">அன்னாசி படங்கள்</name>
<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>
<project_license>MIT</project_license>
@@ -23,10 +31,13 @@
<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 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>
<p xml:lang="ja">Pineapple Picturesは、ズームイン時に便利なナビゲーションサムネイルを備えた軽量で使いやすい画像ビューアです。画像管理のサポートは含まれていません。</p>
<p xml:lang="ko">Pineapple Pictures는 가볍고 사용하기 쉬운 이미지 뷰어로, 확대 시 편리한 내비게이션 썸네일과 함께 제공되며 이미지 관리 지원이 포함되어 있지 않습니다.</p>
<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>
<developer id="net.blumia">
@@ -50,10 +61,13 @@
<caption>Main window when an image file is loaded</caption>
<caption xml:lang="es">Ventana principal cuando se carga un archivo de imagen</caption>
<caption xml:lang="ja">画像ファイル読み込み時のメインウィンドウ</caption>
<caption xml:lang="ko">이미지 파일이 로드될 때 기본 창</caption>
<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>
</screenshot>
@@ -61,10 +75,13 @@
<caption>Zooming in a raster image</caption>
<caption xml:lang="es">Ampliar una imagen rasterizada</caption>
<caption xml:lang="ja">ラスター画像の拡大</caption>
<caption xml:lang="ko">래스터 이미지 확대하기</caption>
<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>
</screenshot>
@@ -72,15 +89,29 @@
<caption>Zooming in a vector image</caption>
<caption xml:lang="es">Ampliar una imagen vectorial</caption>
<caption xml:lang="ja">ベクター画像の拡大</caption>
<caption xml:lang="ko">벡터 이미지 확대하기</caption>
<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>
</screenshot>
</screenshots>
<releases>
<release type="stable" version="1.4.1" date="2026-04-05T00:00:00Z">
<description>
<p>This release includes the following changes:</p>
<ul>
<li>Update translations</li>
<li>Update Qt version to 6.10.3 for Windows and macOS pre-built binaries</li>
</ul>
<p>With contributions from:</p>
<p>Heimen Stoffels (vistaus), Loc Huynh (hthienloc)</p>
</description>
</release>
<release type="stable" version="1.4.0" date="2026-02-11T00:00:00Z">
<description>
<p>This release adds the following features:</p>
-101
View File
@@ -1,101 +0,0 @@
# SPDX-FileCopyrightText: 2025 Gary Wang <git@blumia.net>
#
# SPDX-License-Identifier: MIT
QT += core widgets gui svg svgwidgets
TARGET = ppic
TEMPLATE = app
DEFINES += PPIC_VERSION_STRING=\\\"x.y.z\\\"
win32 {
DEFINES += FLAG_PORTABLE_MODE_SUPPORT=1
}
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
CONFIG += c++17 lrelease embed_translations
SOURCES += \
app/aboutdialog.cpp \
app/main.cpp \
app/framelesswindow.cpp \
app/mainwindow.cpp \
app/graphicsview.cpp \
app/bottombuttongroup.cpp \
app/graphicsscene.cpp \
app/navigatorview.cpp \
app/opacityhelper.cpp \
app/toolbutton.cpp \
app/settings.cpp \
app/settingsdialog.cpp \
app/metadatamodel.cpp \
app/metadatadialog.cpp \
app/exiv2wrapper.cpp \
app/actionmanager.cpp \
app/playlistmanager.cpp \
app/shortcutedit.cpp \
app/fileopeneventhandler.cpp
HEADERS += \
app/aboutdialog.h \
app/framelesswindow.h \
app/mainwindow.h \
app/graphicsview.h \
app/bottombuttongroup.h \
app/graphicsscene.h \
app/navigatorview.h \
app/opacityhelper.h \
app/toolbutton.h \
app/settings.h \
app/settingsdialog.h \
app/metadatamodel.h \
app/metadatadialog.h \
app/exiv2wrapper.h \
app/actionmanager.h \
app/playlistmanager.h \
app/shortcutedit.h \
app/fileopeneventhandler.h
TRANSLATIONS = \
app/translations/PineapplePictures_en.ts \
app/translations/PineapplePictures_zh_CN.ts \
app/translations/PineapplePictures_de.ts \
app/translations/PineapplePictures_es.ts \
app/translations/PineapplePictures_fr.ts \
app/translations/PineapplePictures_nb_NO.ts \
app/translations/PineapplePictures_nl.ts \
app/translations/PineapplePictures_ru.ts \
app/translations/PineapplePictures_si.ts \
app/translations/PineapplePictures_id.ts
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
RESOURCES += \
assets/resources.qrc
# Generate from svg:
# magick -density 512x512 -background none app-icon.svg -define icon:auto-resize app-icon.ico
RC_ICONS = assets/icons/app-icon.ico
# Windows only, for rc file (we're not going to use the .rc file in this repo)
QMAKE_TARGET_PRODUCT = Pineapple Pictures
QMAKE_TARGET_DESCRIPTION = Pineapple Pictures - Image Viewer
QMAKE_TARGET_COPYRIGHT = MIT/Expat License - Copyright (C) 2024 Gary Wang
# MSVC only, since QMake doesn't have a CMAKE_CXX_STANDARD_LIBRARIES or cpp_winlibs similar thing
win32-msvc* {
LIBS += -luser32
}