From d81301a91ff0cc901c0745521141a9481ff9bb2a Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Fri, 13 Jan 2023 23:06:16 -0500 Subject: [PATCH 001/111] Improve window sizing logic that deals with window going outside screen area --- src/mainwindow.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 6286ea39..97062c57 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -505,11 +505,13 @@ void MainWindow::setWindowSize() imageSize = minimumImageSize; #endif - // Adjust image size for fullsizecontentview on mac + int titlebarOverlap = 0; #ifdef COCOA_LOADED - int obscuredHeight = QVCocoaFunctions::getObscuredHeight(window()->windowHandle()); - imageSize.setHeight(imageSize.height() + obscuredHeight); + // To account for fullsizecontentview on mac + titlebarOverlap = QVCocoaFunctions::getObscuredHeight(window()->windowHandle()); #endif + if (titlebarOverlap != 0) + imageSize.setHeight(imageSize.height() + titlebarOverlap); if (menuBar()->isVisible()) imageSize.setHeight(imageSize.height() + menuBar()->height()); @@ -521,12 +523,15 @@ void MainWindow::setWindowSize() QRect newRect = geometry(); newRect.moveCenter(oldRect.center()); - // Ensure titlebar is not above the top of the screen - const int titlebarHeight = QApplication::style()->pixelMetric(QStyle::PM_TitleBarHeight); - const int topOfScreen = currentScreen->availableGeometry().y(); - - if (newRect.y() < (topOfScreen + titlebarHeight)) - newRect.setY(topOfScreen + titlebarHeight); + // Ensure titlebar is not above or below the available screen area + const QRect availableScreenRect = currentScreen->availableGeometry(); + const int topFrameHeight = geometry().top() - frameGeometry().top(); + const int windowMinY = availableScreenRect.top() + topFrameHeight; + const int windowMaxY = availableScreenRect.top() + availableScreenRect.height() - titlebarOverlap; + if (newRect.top() < windowMinY) + newRect.moveTop(windowMinY); + if (newRect.top() > windowMaxY) + newRect.moveTop(windowMaxY); setGeometry(newRect); } From 04ae39e740360dd68d19c7f6bbd04e59a789094e Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Fri, 13 Jan 2023 23:06:35 -0500 Subject: [PATCH 002/111] Fix screen detection when window's center is outside of the screen. --- src/mainwindow.cpp | 18 ++++++++++++------ src/mainwindow.h | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 97062c57..c535acfe 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -476,7 +476,7 @@ void MainWindow::setWindowSize() // Try to grab the current screen - QScreen *currentScreen = screenAt(geometry().center()); + QScreen *currentScreen = screenContaining(frameGeometry()); // makeshift validity check bool screenValid = QGuiApplication::screens().contains(currentScreen); @@ -536,9 +536,11 @@ void MainWindow::setWindowSize() setGeometry(newRect); } -// literally just copy pasted from Qt source code to maintain compatibility with 5.9 (although i've edited it now) -QScreen *MainWindow::screenAt(const QPoint &point) +// Initially copied from Qt source code (QGuiApplication::screenAt) and then customized +QScreen *MainWindow::screenContaining(const QRect &rect) { + QScreen *bestScreen = nullptr; + int bestScreenArea = 0; QVarLengthArray visitedScreens; const auto screens = QGuiApplication::screens(); for (const QScreen *screen : screens) { @@ -547,12 +549,16 @@ QScreen *MainWindow::screenAt(const QPoint &point) // The virtual siblings include the screen itself, so iterate directly const auto siblings = screen->virtualSiblings(); for (QScreen *sibling : siblings) { - if (sibling->geometry().contains(point)) - return sibling; + const QRect intersect = sibling->geometry().intersected(rect); + const int area = intersect.width() * intersect.height(); + if (area > bestScreenArea) { + bestScreen = sibling; + bestScreenArea = area; + } visitedScreens.append(sibling); } } - return nullptr; + return bestScreen; } bool MainWindow::getIsPixmapLoaded() const diff --git a/src/mainwindow.h b/src/mainwindow.h index 07861fb2..9effb9e9 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -43,7 +43,7 @@ class MainWindow : public QMainWindow void setJustLaunchedWithImage(bool value); - QScreen *screenAt(const QPoint &point); + QScreen *screenContaining(const QRect &rect); void openRecent(int i); From d9f41b8f8b00d4cc842aff6001dd3c0e888ead17 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sat, 14 Jan 2023 09:34:19 -0500 Subject: [PATCH 003/111] Fix window sizing with very large maximum size setting --- src/mainwindow.cpp | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index c535acfe..cf95619b 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -484,10 +484,24 @@ void MainWindow::setWindowSize() if (!screenValid) currentScreen = QGuiApplication::screens().at(0); - const QSize screenSize = currentScreen->size(); + QSize extraWidgetsSize { 0, 0 }; + + if (menuBar()->isVisible()) + extraWidgetsSize.rheight() += menuBar()->height(); + + int titlebarOverlap = 0; +#ifdef COCOA_LOADED + // To account for fullsizecontentview on mac + titlebarOverlap = QVCocoaFunctions::getObscuredHeight(window()->windowHandle()); +#endif + if (titlebarOverlap != 0) + extraWidgetsSize.rheight() += titlebarOverlap; - const QSize minWindowSize = screenSize * minWindowResizedPercentage; - const QSize maxWindowSize = screenSize * maxWindowResizedPercentage; + const QSize windowFrameSize = frameGeometry().size() - geometry().size(); + const QSize hardLimitSize = currentScreen->availableSize() - windowFrameSize - extraWidgetsSize; + const QSize screenSize = currentScreen->size(); + const QSize minWindowSize = (screenSize * minWindowResizedPercentage).boundedTo(hardLimitSize); + const QSize maxWindowSize = (screenSize * maxWindowResizedPercentage).boundedTo(hardLimitSize); if (imageSize.width() < minWindowSize.width() && imageSize.height() < minWindowSize.height()) { @@ -505,21 +519,10 @@ void MainWindow::setWindowSize() imageSize = minimumImageSize; #endif - int titlebarOverlap = 0; -#ifdef COCOA_LOADED - // To account for fullsizecontentview on mac - titlebarOverlap = QVCocoaFunctions::getObscuredHeight(window()->windowHandle()); -#endif - if (titlebarOverlap != 0) - imageSize.setHeight(imageSize.height() + titlebarOverlap); - - if (menuBar()->isVisible()) - imageSize.setHeight(imageSize.height() + menuBar()->height()); - // Match center after new geometry // This is smoother than a single geometry set for some reason QRect oldRect = geometry(); - resize(imageSize); + resize(imageSize + extraWidgetsSize); QRect newRect = geometry(); newRect.moveCenter(oldRect.center()); From fc892c0a7c03cb6dc2064956a95ca45aa29e161a Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sat, 14 Jan 2023 11:09:14 -0500 Subject: [PATCH 004/111] Fix file index misdetection due to Unicode normalization issues --- src/qvimagecore.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/qvimagecore.cpp b/src/qvimagecore.cpp index 449d4ef6..eb851975 100644 --- a/src/qvimagecore.cpp +++ b/src/qvimagecore.cpp @@ -590,12 +590,13 @@ void QVImageCore::settingsUpdated() void QVImageCore::FileDetails::updateLoadedIndexInFolder() { - const QString targetPath = fileInfo.absoluteFilePath(); + const QString targetPath = fileInfo.absoluteFilePath().normalized(QString::NormalizationForm_D); for (int i = 0; i < folderFileInfoList.length(); i++) { // Compare absoluteFilePath first because it's way faster, but double-check with // QFileInfo::operator== because it respects file system case sensitivity rules - if (folderFileInfoList[i].absoluteFilePath.compare(targetPath, Qt::CaseInsensitive) == 0 && + QString candidatePath = folderFileInfoList[i].absoluteFilePath.normalized(QString::NormalizationForm_D); + if (candidatePath.compare(targetPath, Qt::CaseInsensitive) == 0 && QFileInfo(folderFileInfoList[i].absoluteFilePath) == fileInfo) { loadedIndexInFolder = i; From e5a0b3e00d00850c55e217c589a86286f64443a2 Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Sun, 15 Jan 2023 00:28:46 +0000 Subject: [PATCH 005/111] Open with other application linux icon --- src/actionmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/actionmanager.cpp b/src/actionmanager.cpp index 45635403..bc62c753 100644 --- a/src/actionmanager.cpp +++ b/src/actionmanager.cpp @@ -814,7 +814,7 @@ void ActionManager::initializeActionLibrary() actionLibrary.insert("clearrecents", clearRecentsAction); //: Open with other program for unix non-mac - auto *openWithOtherAction = new QAction(tr("Other Application...")); + auto *openWithOtherAction = new QAction(QIcon::fromTheme("system-run"), tr("Other Application...")); #ifdef Q_OS_WIN //: Open with other program for windows openWithOtherAction->setText(tr("Choose another app")); From 7c12df2a081d57d12a357a38acafda997dff3a78 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Tue, 1 Nov 2022 19:50:26 -0400 Subject: [PATCH 006/111] Basic color space support --- src/qvimagecore.cpp | 43 ++++++++++++++++++++++++++++++++++----- src/qvimagecore.h | 4 ++++ src/qvoptionsdialog.cpp | 8 ++++++++ src/qvoptionsdialog.ui | 45 +++++++++++++++++++++++++++++++++++++++++ src/settingsmanager.cpp | 1 + 5 files changed, 96 insertions(+), 5 deletions(-) diff --git a/src/qvimagecore.cpp b/src/qvimagecore.cpp index eb851975..f9da32dc 100644 --- a/src/qvimagecore.cpp +++ b/src/qvimagecore.cpp @@ -26,6 +26,7 @@ QVImageCore::QVImageCore(QObject *parent) : QObject(parent) sortMode = 0; sortDescending = false; allowMimeContentDetection = false; + colorSpaceConversion = 0; randomSortSeed = 0; @@ -133,22 +134,37 @@ QVImageCore::ReadData QVImageCore::readFile(const QString &fileName, bool forCac imageReader.setFileName(fileName); - QPixmap readPixmap; + QImage readImage; if (imageReader.format() == "svg" || imageReader.format() == "svgz") { // Render vectors into a high resolution QIcon icon; icon.addFile(fileName); - readPixmap = icon.pixmap(largestDimension); + readImage = icon.pixmap(largestDimension).toImage(); // If this fails, try reading the normal way so that a proper error message is given - if (readPixmap.isNull()) - readPixmap = QPixmap::fromImageReader(&imageReader); + if (readImage.isNull()) + readImage = imageReader.read(); } else { - readPixmap = QPixmap::fromImageReader(&imageReader); + readImage = imageReader.read(); } +#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) + const QColorSpace defaultImageColorSpace = QColorSpace::SRgb; + if (!readImage.colorSpace().isValid()) + readImage.setColorSpace(defaultImageColorSpace); + + const QColorSpace targetColorSpace = + colorSpaceConversion == 1 ? QColorSpace::SRgb : + colorSpaceConversion == 2 ? QColorSpace::DisplayP3 : + QColorSpace(); + + if (targetColorSpace.isValid() && readImage.colorSpace() != targetColorSpace) + readImage.convertToColorSpace(targetColorSpace); +#endif + + QPixmap readPixmap = QPixmap::fromImage(readImage); ReadData readData = { readPixmap, @@ -586,6 +602,23 @@ void QVImageCore::settingsUpdated() //update folder info to reflect new settings (e.g. sort order) updateFolderInfo(); + + bool changedImagePreprocessing = false; + + //colorspaceconversion + if (colorSpaceConversion != settingsManager.getInteger("colorspaceconversion")) + { + colorSpaceConversion = settingsManager.getInteger("colorspaceconversion"); + changedImagePreprocessing = true; + } + + if (changedImagePreprocessing) + { + QVImageCore::pixmapCache.clear(); + + if (currentFileDetails.isPixmapLoaded) + loadFile(currentFileDetails.fileInfo.absoluteFilePath()); + } } void QVImageCore::FileDetails::updateLoadedIndexInFolder() diff --git a/src/qvimagecore.h b/src/qvimagecore.h index 2140beb6..ad8d7ead 100644 --- a/src/qvimagecore.h +++ b/src/qvimagecore.h @@ -5,6 +5,9 @@ #include #include #include +#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) +#include +#endif #include #include #include @@ -103,6 +106,7 @@ class QVImageCore : public QObject int sortMode; bool sortDescending; bool allowMimeContentDetection; + int colorSpaceConversion; static QCache pixmapCache; diff --git a/src/qvoptionsdialog.cpp b/src/qvoptionsdialog.cpp index 2c65e94e..ebb88e48 100644 --- a/src/qvoptionsdialog.cpp +++ b/src/qvoptionsdialog.cpp @@ -57,6 +57,12 @@ QVOptionsDialog::QVOptionsDialog(QWidget *parent) : ui->langComboLabel->hide(); #endif +// Hide color space conversion below 5.14, which is when color space support was introduced +#if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0)) + ui->colorSpaceConversionComboBox->hide(); + ui->colorSpaceConversionLabel->hide(); +#endif + syncSettings(false, true); connect(ui->langComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &QVOptionsDialog::languageComboBoxCurrentIndexChanged); syncShortcuts(); @@ -173,6 +179,8 @@ void QVOptionsDialog::syncSettings(bool defaults, bool makeConnections) syncComboBox(ui->cropModeComboBox, "cropmode", defaults, makeConnections); // pastactualsizeenabled syncCheckbox(ui->pastActualSizeCheckbox, "pastactualsizeenabled", defaults, makeConnections); + // colorspaceconversion + syncComboBox(ui->colorSpaceConversionComboBox, "colorspaceconversion", defaults, makeConnections); // language syncComboBoxData(ui->langComboBox, "language", defaults, makeConnections); // sortmode diff --git a/src/qvoptionsdialog.ui b/src/qvoptionsdialog.ui index 9b5f3ccf..0df882cf 100644 --- a/src/qvoptionsdialog.ui +++ b/src/qvoptionsdialog.ui @@ -430,6 +430,51 @@ + + + + Qt::Horizontal + + + + 40 + 5 + + + + + + + + Color space conversion: + + + + + + + + 0 + 0 + + + + + Disabled + + + + + sRGB + + + + + Display P3 + + + + diff --git a/src/settingsmanager.cpp b/src/settingsmanager.cpp index c235665a..274aff4c 100644 --- a/src/settingsmanager.cpp +++ b/src/settingsmanager.cpp @@ -166,6 +166,7 @@ void SettingsManager::initializeSettingsLibrary() settingsLibrary.insert("cursorzoom", {true, {}}); settingsLibrary.insert("cropmode", {0, {}}); settingsLibrary.insert("pastactualsizeenabled", {true, {}}); + settingsLibrary.insert("colorspaceconversion", {0, {}}); // Miscellaneous settingsLibrary.insert("language", {"system", {}}); settingsLibrary.insert("sortmode", {0, {}}); From 0f9e66a691126a9bd2c1c15f2ee93d098367bbbe Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sun, 15 Jan 2023 16:04:09 -0500 Subject: [PATCH 007/111] Implement ICC profile fetching for Windows. --- qView.pro | 2 +- src/qvwin32functions.cpp | 25 +++++++++++++++++++++++++ src/qvwin32functions.h | 1 + 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/qView.pro b/qView.pro index 1c9f4d05..02347890 100644 --- a/qView.pro +++ b/qView.pro @@ -42,7 +42,7 @@ win32 { # To build without win32: qmake CONFIG+=NO_WIN32 !CONFIG(NO_WIN32) { - LIBS += -lshell32 -luser32 -lole32 -lshlwapi + LIBS += -lshell32 -luser32 -lole32 -lshlwapi -lgdi32 DEFINES += WIN32_LOADED message("Linked to win32 api") } diff --git a/src/qvwin32functions.cpp b/src/qvwin32functions.cpp index 72b8f157..33c2b1a5 100644 --- a/src/qvwin32functions.cpp +++ b/src/qvwin32functions.cpp @@ -2,6 +2,7 @@ #include "ShlObj_core.h" #include "winuser.h" +#include "wingdi.h" #include "Objbase.h" #include "appmodel.h" #include "Shlwapi.h" @@ -143,3 +144,27 @@ void QVWin32Functions::showOpenWithDialog(const QString &filePath, const QWindow if (!SUCCEEDED(SHOpenWithDialog(winId, &info))) qDebug() << "Failed launching open with dialog"; } + +QByteArray QVWin32Functions::getIccProfileForWindow(const QWindow *window) +{ + QByteArray result; + const HWND hWnd = reinterpret_cast(window->winId()); + const HDC hDC = GetDC(hWnd); + if (hDC) + { + WCHAR profilePathBuff[MAX_PATH]; + DWORD profilePathSize = MAX_PATH; + if (GetICMProfileW(hDC, &profilePathSize, profilePathBuff)) + { + QString profilePath = QString::fromWCharArray(profilePathBuff); + QFile file(profilePath); + if (file.open(QIODevice::ReadOnly)) + { + result = file.readAll(); + file.close(); + } + } + ReleaseDC(hWnd, hDC); + } + return result; +} diff --git a/src/qvwin32functions.h b/src/qvwin32functions.h index 3ce75ee2..86faf78a 100644 --- a/src/qvwin32functions.h +++ b/src/qvwin32functions.h @@ -14,6 +14,7 @@ class QVWin32Functions static void showOpenWithDialog(const QString &filePath, const QWindow *parent); + static QByteArray getIccProfileForWindow(const QWindow *window); }; #endif // QVWIN32FUNCTIONS_H From bfc0df4132e2083b40fb3e16c56f8565a93aa8b3 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sun, 15 Jan 2023 16:07:19 -0500 Subject: [PATCH 008/111] Implement ICC profile fetching for macOS. --- src/qvcocoafunctions.h | 2 ++ src/qvcocoafunctions.mm | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/qvcocoafunctions.h b/src/qvcocoafunctions.h index 0583bedf..9b27c79f 100644 --- a/src/qvcocoafunctions.h +++ b/src/qvcocoafunctions.h @@ -30,6 +30,8 @@ class QVCocoaFunctions static QList getOpenWithItems(const QString &filePath); static QString deleteFile(const QString &filePath); + + static QByteArray getIccProfileForWindow(const QWindow *window); }; #endif // QVCOCOAFUNCTIONS_H diff --git a/src/qvcocoafunctions.mm b/src/qvcocoafunctions.mm index 81150477..7807c63b 100644 --- a/src/qvcocoafunctions.mm +++ b/src/qvcocoafunctions.mm @@ -219,3 +219,18 @@ static void fixNativeMenuEccentricities(QMenu *menu, NSMenu *nativeMenu) return QString::fromNSString(resultUrl.absoluteString); } + +QByteArray QVCocoaFunctions::getIccProfileForWindow(const QWindow *window) +{ + NSView *view = reinterpret_cast(window->winId()); + NSColorSpace *nsColorSpace = view.window.colorSpace; + if (nsColorSpace) + { + NSData *iccProfileData = nsColorSpace.ICCProfileData; + if (iccProfileData) + { + return QByteArray::fromNSData(iccProfileData); + } + } + return {}; +} From 7a9998bfe8ba63038f13a4c3df6c9b84ee053898 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sun, 15 Jan 2023 16:47:20 -0500 Subject: [PATCH 009/111] Implement color space auto-detect option. --- src/qvgraphicsview.h | 2 +- src/qvimagecore.cpp | 27 +++++++++++++++++++++++++-- src/qvimagecore.h | 3 +++ src/qvoptionsdialog.ui | 5 +++++ 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/qvgraphicsview.h b/src/qvgraphicsview.h index 9e4cc6e2..8299dbf1 100644 --- a/src/qvgraphicsview.h +++ b/src/qvgraphicsview.h @@ -142,7 +142,7 @@ private slots: QTransform zoomBasis; qreal zoomBasisScaleFactor; - QVImageCore imageCore; + QVImageCore imageCore { this }; QTimer *expensiveScaleTimerNew; QPointF centerPoint; diff --git a/src/qvimagecore.cpp b/src/qvimagecore.cpp index f9da32dc..55babe2b 100644 --- a/src/qvimagecore.cpp +++ b/src/qvimagecore.cpp @@ -1,5 +1,7 @@ #include "qvimagecore.h" #include "qvapplication.h" +#include "qvwin32functions.h" +#include "qvcocoafunctions.h" #include #include #include @@ -156,8 +158,9 @@ QVImageCore::ReadData QVImageCore::readFile(const QString &fileName, bool forCac readImage.setColorSpace(defaultImageColorSpace); const QColorSpace targetColorSpace = - colorSpaceConversion == 1 ? QColorSpace::SRgb : - colorSpaceConversion == 2 ? QColorSpace::DisplayP3 : + colorSpaceConversion == 1 ? detectDisplayColorSpace() : + colorSpaceConversion == 2 ? QColorSpace::SRgb : + colorSpaceConversion == 3 ? QColorSpace::DisplayP3 : QColorSpace(); if (targetColorSpace.isValid() && readImage.colorSpace() != targetColorSpace) @@ -465,6 +468,26 @@ void QVImageCore::addToCache(const ReadData &readData) qvApp->setPreviouslyRecordedImageSize(readData.fileInfo.absoluteFilePath(), new QSize(readData.size)); } +#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) +QColorSpace QVImageCore::detectDisplayColorSpace() const +{ + QWindow *window = static_cast(parent())->window()->windowHandle(); + + QByteArray profileData; +#ifdef WIN32_LOADED + profileData = QVWin32Functions::getIccProfileForWindow(window); +#endif +#ifdef COCOA_LOADED + profileData = QVCocoaFunctions::getIccProfileForWindow(window); +#endif + + if (!profileData.isEmpty()) + return QColorSpace::fromIccProfile(profileData); + + return {}; +} +#endif + void QVImageCore::jumpToNextFrame() { if (currentFileDetails.isMovieLoaded) diff --git a/src/qvimagecore.h b/src/qvimagecore.h index ad8d7ead..0cc3c017 100644 --- a/src/qvimagecore.h +++ b/src/qvimagecore.h @@ -63,6 +63,9 @@ class QVImageCore : public QObject void requestCaching(); void requestCachingFile(const QString &filePath); void addToCache(const ReadData &readImageAndFileInfo); +#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) + QColorSpace detectDisplayColorSpace() const; +#endif void settingsUpdated(); diff --git a/src/qvoptionsdialog.ui b/src/qvoptionsdialog.ui index 0df882cf..56b9eb05 100644 --- a/src/qvoptionsdialog.ui +++ b/src/qvoptionsdialog.ui @@ -463,6 +463,11 @@ Disabled + + + Auto-detect + + sRGB From 66306a562ff7972d456cc262d4391af391a22809 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Wed, 18 Jan 2023 18:45:47 -0500 Subject: [PATCH 010/111] CI: Update OpenSSL download link --- ci/scripts/windeployqt.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/scripts/windeployqt.ps1 b/ci/scripts/windeployqt.ps1 index 91343c4d..9ec811b4 100644 --- a/ci/scripts/windeployqt.ps1 +++ b/ci/scripts/windeployqt.ps1 @@ -5,7 +5,7 @@ param # Download and extract openssl $ProgressPreference = 'SilentlyContinue' -Invoke-WebRequest https://mirror.firedaemon.com/OpenSSL/openssl-1.1.1q.zip -O openssl.zip +Invoke-WebRequest https://www.firedaemon.com/download-firedaemon-openssl-1-zip -O openssl.zip 7z x -y .\openssl.zip # Check if "arch" environment variable is win32 From 185feaf150bb63eee65171fd3816f17eb2333bdc Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sat, 21 Jan 2023 11:40:19 -0500 Subject: [PATCH 011/111] Add dummy QColorSpace type for old Qt versions --- src/qvimagecore.cpp | 4 ++-- src/qvimagecore.h | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/qvimagecore.cpp b/src/qvimagecore.cpp index 55babe2b..6b2b6595 100644 --- a/src/qvimagecore.cpp +++ b/src/qvimagecore.cpp @@ -468,9 +468,9 @@ void QVImageCore::addToCache(const ReadData &readData) qvApp->setPreviouslyRecordedImageSize(readData.fileInfo.absoluteFilePath(), new QSize(readData.size)); } -#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) QColorSpace QVImageCore::detectDisplayColorSpace() const { +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) QWindow *window = static_cast(parent())->window()->windowHandle(); QByteArray profileData; @@ -483,10 +483,10 @@ QColorSpace QVImageCore::detectDisplayColorSpace() const if (!profileData.isEmpty()) return QColorSpace::fromIccProfile(profileData); +#endif return {}; } -#endif void QVImageCore::jumpToNextFrame() { diff --git a/src/qvimagecore.h b/src/qvimagecore.h index 0cc3c017..e5f6af9a 100644 --- a/src/qvimagecore.h +++ b/src/qvimagecore.h @@ -5,15 +5,18 @@ #include #include #include -#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) -#include -#endif #include #include #include #include #include +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) +#include +#else +typedef QString QColorSpace; +#endif + class QVImageCore : public QObject { Q_OBJECT @@ -63,9 +66,7 @@ class QVImageCore : public QObject void requestCaching(); void requestCachingFile(const QString &filePath); void addToCache(const ReadData &readImageAndFileInfo); -#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) QColorSpace detectDisplayColorSpace() const; -#endif void settingsUpdated(); From a70cde5208f385eabe58d32dd8349e112d65255a Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sat, 21 Jan 2023 11:58:46 -0500 Subject: [PATCH 012/111] Detect target color space changes when switching images and clear cache --- src/qvimagecore.cpp | 62 +++++++++++++++++++++++++++------------------ src/qvimagecore.h | 5 +++- 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/src/qvimagecore.cpp b/src/qvimagecore.cpp index 6b2b6595..0edcfc13 100644 --- a/src/qvimagecore.cpp +++ b/src/qvimagecore.cpp @@ -14,7 +14,7 @@ #include QCache QVImageCore::pixmapCache; - +QColorSpace QVImageCore::currentTargetColorSpace; QVImageCore::QVImageCore(QObject *parent) : QObject(parent) { @@ -101,6 +101,8 @@ void QVImageCore::loadFile(const QString &fileName) currentFileDetails.isLoadRequested = true; waitingOnLoad = true; + // Figure out target color space (and if it changed this clears cached pixmaps) + updateCurrentTargetColorSpace(); //check if cached already before loading the long way auto previouslyRecordedFileSize = qvApp->getPreviouslyRecordedFileSize(sanitaryFileName); @@ -113,22 +115,23 @@ void QVImageCore::loadFile(const QString &fileName) ReadData readData = { *cachedPixmap, fileInfo, - previouslyRecordedImageSize + previouslyRecordedImageSize, + currentTargetColorSpace }; loadPixmap(readData); } else { #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - loadFutureWatcher.setFuture(QtConcurrent::run(this, &QVImageCore::readFile, sanitaryFileName, false)); + loadFutureWatcher.setFuture(QtConcurrent::run(this, &QVImageCore::readFile, sanitaryFileName, currentTargetColorSpace, false)); #else - loadFutureWatcher.setFuture(QtConcurrent::run(&QVImageCore::readFile, this, sanitaryFileName, false)); + loadFutureWatcher.setFuture(QtConcurrent::run(&QVImageCore::readFile, this, sanitaryFileName, currentTargetColorSpace, false)); #endif } delete cachedPixmap; } -QVImageCore::ReadData QVImageCore::readFile(const QString &fileName, bool forCache) +QVImageCore::ReadData QVImageCore::readFile(const QString &fileName, const QColorSpace targetColorSpace, bool forCache) { QImageReader imageReader; imageReader.setDecideFormatFromContent(true); @@ -152,17 +155,12 @@ QVImageCore::ReadData QVImageCore::readFile(const QString &fileName, bool forCac readImage = imageReader.read(); } -#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) - const QColorSpace defaultImageColorSpace = QColorSpace::SRgb; +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + // Assume image is sRGB if it doesn't specify if (!readImage.colorSpace().isValid()) - readImage.setColorSpace(defaultImageColorSpace); - - const QColorSpace targetColorSpace = - colorSpaceConversion == 1 ? detectDisplayColorSpace() : - colorSpaceConversion == 2 ? QColorSpace::SRgb : - colorSpaceConversion == 3 ? QColorSpace::DisplayP3 : - QColorSpace(); + readImage.setColorSpace(QColorSpace::SRgb); + // Convert image color space if we have a target that's different if (targetColorSpace.isValid() && readImage.colorSpace() != targetColorSpace) readImage.convertToColorSpace(targetColorSpace); #endif @@ -173,6 +171,7 @@ QVImageCore::ReadData QVImageCore::readFile(const QString &fileName, bool forCac readPixmap, QFileInfo(fileName), imageReader.size(), + targetColorSpace }; // Only error out when not loading for cache if (readPixmap.isNull() && !forCache) @@ -395,6 +394,9 @@ void QVImageCore::requestCaching() return; } + // Figure out target color space (and if it changed this clears cached pixmaps) + updateCurrentTargetColorSpace(); + int preloadingDistance = 1; if (preloadingMode > 1) @@ -449,15 +451,15 @@ void QVImageCore::requestCachingFile(const QString &filePath) }); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - cacheFutureWatcher->setFuture(QtConcurrent::run(this, &QVImageCore::readFile, filePath, true)); + cacheFutureWatcher->setFuture(QtConcurrent::run(this, &QVImageCore::readFile, filePath, currentTargetColorSpace, true)); #else - cacheFutureWatcher->setFuture(QtConcurrent::run(&QVImageCore::readFile, this, filePath, true)); + cacheFutureWatcher->setFuture(QtConcurrent::run(&QVImageCore::readFile, this, filePath, currentTargetColorSpace, true)); #endif } void QVImageCore::addToCache(const ReadData &readData) { - if (readData.pixmap.isNull()) + if (readData.pixmap.isNull() || readData.targetColorSpace != currentTargetColorSpace) return; @@ -468,6 +470,23 @@ void QVImageCore::addToCache(const ReadData &readData) qvApp->setPreviouslyRecordedImageSize(readData.fileInfo.absoluteFilePath(), new QSize(readData.size)); } +void QVImageCore::updateCurrentTargetColorSpace() +{ +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + const QColorSpace newTargetColorSpace = + colorSpaceConversion == 1 ? detectDisplayColorSpace() : + colorSpaceConversion == 2 ? QColorSpace::SRgb : + colorSpaceConversion == 3 ? QColorSpace::DisplayP3 : + QColorSpace(); + + if (newTargetColorSpace != currentTargetColorSpace) + { + QVImageCore::pixmapCache.clear(); + currentTargetColorSpace = newTargetColorSpace; + } +#endif +} + QColorSpace QVImageCore::detectDisplayColorSpace() const { #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) @@ -635,13 +654,8 @@ void QVImageCore::settingsUpdated() changedImagePreprocessing = true; } - if (changedImagePreprocessing) - { - QVImageCore::pixmapCache.clear(); - - if (currentFileDetails.isPixmapLoaded) - loadFile(currentFileDetails.fileInfo.absoluteFilePath()); - } + if (changedImagePreprocessing && currentFileDetails.isPixmapLoaded) + loadFile(currentFileDetails.fileInfo.absoluteFilePath()); } void QVImageCore::FileDetails::updateLoadedIndexInFolder() diff --git a/src/qvimagecore.h b/src/qvimagecore.h index e5f6af9a..d5e42b1d 100644 --- a/src/qvimagecore.h +++ b/src/qvimagecore.h @@ -53,12 +53,13 @@ class QVImageCore : public QObject QPixmap pixmap; QFileInfo fileInfo; QSize size; + QColorSpace targetColorSpace; }; explicit QVImageCore(QObject *parent = nullptr); void loadFile(const QString &fileName); - ReadData readFile(const QString &fileName, bool forCache); + ReadData readFile(const QString &fileName, const QColorSpace targetColorSpace, bool forCache); void loadPixmap(const ReadData &readData); void closeImage(); QList getCompatibleFiles(const QString &dirPath) const; @@ -66,6 +67,7 @@ class QVImageCore : public QObject void requestCaching(); void requestCachingFile(const QString &filePath); void addToCache(const ReadData &readImageAndFileInfo); + void updateCurrentTargetColorSpace(); QColorSpace detectDisplayColorSpace() const; void settingsUpdated(); @@ -113,6 +115,7 @@ class QVImageCore : public QObject int colorSpaceConversion; static QCache pixmapCache; + static QColorSpace currentTargetColorSpace; QPair lastDirInfo; unsigned randomSortSeed; From 64426d027bd6179d93e52dcac701de6275107ba4 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sat, 21 Jan 2023 11:59:26 -0500 Subject: [PATCH 013/111] Enable color space conversion by default. --- src/qvimagecore.cpp | 2 +- src/settingsmanager.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qvimagecore.cpp b/src/qvimagecore.cpp index 0edcfc13..63d3ca70 100644 --- a/src/qvimagecore.cpp +++ b/src/qvimagecore.cpp @@ -28,7 +28,7 @@ QVImageCore::QVImageCore(QObject *parent) : QObject(parent) sortMode = 0; sortDescending = false; allowMimeContentDetection = false; - colorSpaceConversion = 0; + colorSpaceConversion = 1; randomSortSeed = 0; diff --git a/src/settingsmanager.cpp b/src/settingsmanager.cpp index 274aff4c..910fde7f 100644 --- a/src/settingsmanager.cpp +++ b/src/settingsmanager.cpp @@ -166,7 +166,7 @@ void SettingsManager::initializeSettingsLibrary() settingsLibrary.insert("cursorzoom", {true, {}}); settingsLibrary.insert("cropmode", {0, {}}); settingsLibrary.insert("pastactualsizeenabled", {true, {}}); - settingsLibrary.insert("colorspaceconversion", {0, {}}); + settingsLibrary.insert("colorspaceconversion", {1, {}}); // Miscellaneous settingsLibrary.insert("language", {"system", {}}); settingsLibrary.insert("sortmode", {0, {}}); From d95509bf794ecd1349bb8380f3632e3da47290d0 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sun, 22 Jan 2023 17:07:37 -0500 Subject: [PATCH 014/111] Implement ICC profile fetching for Linux. --- qView.pro | 12 ++++++++ src/qvimagecore.cpp | 4 +++ src/qvlinuxx11functions.cpp | 59 +++++++++++++++++++++++++++++++++++++ src/qvlinuxx11functions.h | 13 ++++++++ src/src.pri | 2 ++ 5 files changed, 90 insertions(+) create mode 100644 src/qvlinuxx11functions.cpp create mode 100644 src/qvlinuxx11functions.h diff --git a/qView.pro b/qView.pro index 02347890..d5df34e4 100644 --- a/qView.pro +++ b/qView.pro @@ -74,6 +74,18 @@ macx { } } +# Linux specific stuff +linux { + !CONFIG(NO_X11) { + LIBS += -lX11 + DEFINES += X11_LOADED + + equals(QT_MAJOR_VERSION, 5) { + QT += x11extras + } + } +} + # Stuff for make install # To use a custom prefix: qmake PREFIX=/usr # An environment variable will also work: PREFIX=/usr qmake diff --git a/src/qvimagecore.cpp b/src/qvimagecore.cpp index 63d3ca70..158d7848 100644 --- a/src/qvimagecore.cpp +++ b/src/qvimagecore.cpp @@ -2,6 +2,7 @@ #include "qvapplication.h" #include "qvwin32functions.h" #include "qvcocoafunctions.h" +#include "qvlinuxx11functions.h" #include #include #include @@ -499,6 +500,9 @@ QColorSpace QVImageCore::detectDisplayColorSpace() const #ifdef COCOA_LOADED profileData = QVCocoaFunctions::getIccProfileForWindow(window); #endif +#ifdef X11_LOADED + profileData = QVLinuxX11Functions::getIccProfileForWindow(window); +#endif if (!profileData.isEmpty()) return QColorSpace::fromIccProfile(profileData); diff --git a/src/qvlinuxx11functions.cpp b/src/qvlinuxx11functions.cpp new file mode 100644 index 00000000..46ccffb0 --- /dev/null +++ b/src/qvlinuxx11functions.cpp @@ -0,0 +1,59 @@ +#include "qvlinuxx11functions.h" +#include +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +#include +#endif +#include +#include + +namespace X11Helper +{ + Display* getDisplay() + { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + return QX11Info::display(); +#else + if (const auto x11App = qGuiApp->nativeInterface()) + return x11App->display(); + return nullptr; +#endif + } +} + +QByteArray QVLinuxX11Functions::getIccProfileForWindow(const QWindow *window) +{ + Q_UNUSED(window); // Unused for now; not sure how to handle multiple monitors + QByteArray result; + Display *display = X11Helper::getDisplay(); + if (display) + { + Atom iccProfileAtom = XInternAtom(display, "_ICC_PROFILE", True); + if (iccProfileAtom != None) + { + Atom type; + int format; + unsigned long size; + unsigned long size_left; + unsigned char *data; + int status = XGetWindowProperty( + display, + DefaultRootWindow(display), + iccProfileAtom, + 0, + INT_MAX, + False, + XA_CARDINAL, + &type, + &format, + &size, + &size_left, + &data); + if (status == Success && data) + { + result = QByteArray(reinterpret_cast(data), size); + XFree(data); + } + } + } + return result; +} diff --git a/src/qvlinuxx11functions.h b/src/qvlinuxx11functions.h new file mode 100644 index 00000000..efe35579 --- /dev/null +++ b/src/qvlinuxx11functions.h @@ -0,0 +1,13 @@ +#ifndef QVLINUXX11FUNCTIONS_H +#define QVLINUXX11FUNCTIONS_H + +#include + +class QVLinuxX11Functions +{ +public: + static QByteArray getIccProfileForWindow(const QWindow *window); +}; + +#endif // QVLINUXX11FUNCTIONS_H + diff --git a/src/src.pri b/src/src.pri index 267cf294..18b2e798 100644 --- a/src/src.pri +++ b/src/src.pri @@ -18,6 +18,7 @@ SOURCES += \ macx:!CONFIG(NO_COCOA):SOURCES += $$PWD/qvcocoafunctions.mm win32:!CONFIG(NO_WIN32):SOURCES += $$PWD/qvwin32functions.cpp +linux:!CONFIG(NO_X11):SOURCES += $$PWD/qvlinuxx11functions.cpp HEADERS += \ $$PWD/mainwindow.h \ @@ -38,6 +39,7 @@ HEADERS += \ macx:!CONFIG(NO_COCOA):HEADERS += $$PWD/qvcocoafunctions.h win32:!CONFIG(NO_WIN32):HEADERS += $$PWD/qvwin32functions.h +linux:!CONFIG(NO_X11):HEADERS += $$PWD/qvlinuxx11functions.h FORMS += \ $$PWD/mainwindow.ui \ From bc4a90d2eb7ab8318fdcbede9ffc4b1b95cbd7f9 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Mon, 23 Jan 2023 19:34:48 -0500 Subject: [PATCH 015/111] Cleanup image caching code. --- src/qvapplication.cpp | 32 ---------------- src/qvapplication.h | 11 ------ src/qvimagecore.cpp | 86 +++++++++++++++++++++---------------------- src/qvimagecore.h | 15 ++++---- 4 files changed, 49 insertions(+), 95 deletions(-) diff --git a/src/qvapplication.cpp b/src/qvapplication.cpp index f4f589c4..ced5c263 100644 --- a/src/qvapplication.cpp +++ b/src/qvapplication.cpp @@ -222,38 +222,6 @@ void QVApplication::recentsMenuUpdated() #endif } -qint64 QVApplication::getPreviouslyRecordedFileSize(const QString &fileName) -{ - auto previouslyRecordedFileSizePtr = previouslyRecordedFileSizes.object(fileName); - qint64 previouslyRecordedFileSize = 0; - - if (previouslyRecordedFileSizePtr) - previouslyRecordedFileSize = *previouslyRecordedFileSizePtr; - - return previouslyRecordedFileSize; -} - -void QVApplication::setPreviouslyRecordedFileSize(const QString &fileName, long long *fileSize) -{ - previouslyRecordedFileSizes.insert(fileName, fileSize); -} - -QSize QVApplication::getPreviouslyRecordedImageSize(const QString &fileName) -{ - auto previouslyRecordedImageSizePtr = previouslyRecordedImageSizes.object(fileName); - QSize previouslyRecordedImageSize = QSize(); - - if (previouslyRecordedImageSizePtr) - previouslyRecordedImageSize = *previouslyRecordedImageSizePtr; - - return previouslyRecordedImageSize; -} - -void QVApplication::setPreviouslyRecordedImageSize(const QString &fileName, QSize *imageSize) -{ - previouslyRecordedImageSizes.insert(fileName, imageSize); -} - void QVApplication::addToLastActiveWindows(MainWindow *window) { if (!window) diff --git a/src/qvapplication.h b/src/qvapplication.h index 499938ca..0ec37d5b 100644 --- a/src/qvapplication.h +++ b/src/qvapplication.h @@ -47,14 +47,6 @@ class QVApplication : public QApplication void recentsMenuUpdated(); - qint64 getPreviouslyRecordedFileSize(const QString &fileName); - - void setPreviouslyRecordedFileSize(const QString &fileName, long long *fileSize); - - QSize getPreviouslyRecordedImageSize(const QString &fileName); - - void setPreviouslyRecordedImageSize(const QString &fileName, QSize *imageSize); - void addToLastActiveWindows(MainWindow *window); void deleteFromLastActiveWindows(MainWindow *window); @@ -93,9 +85,6 @@ class QVApplication : public QApplication QMenuBar *menuBar; - QCache previouslyRecordedFileSizes; - QCache previouslyRecordedImageSizes; - QStringList filterList; QStringList nameFilterList; QStringList fileExtensionList; diff --git a/src/qvimagecore.cpp b/src/qvimagecore.cpp index 158d7848..4caa6293 100644 --- a/src/qvimagecore.cpp +++ b/src/qvimagecore.cpp @@ -14,8 +14,7 @@ #include #include -QCache QVImageCore::pixmapCache; -QColorSpace QVImageCore::currentTargetColorSpace; +QCache QVImageCore::pixmapCache; QVImageCore::QVImageCore(QObject *parent) : QObject(parent) { @@ -102,37 +101,28 @@ void QVImageCore::loadFile(const QString &fileName) currentFileDetails.isLoadRequested = true; waitingOnLoad = true; - // Figure out target color space (and if it changed this clears cached pixmaps) - updateCurrentTargetColorSpace(); + QColorSpace targetColorSpace = getTargetColorSpace(); + QString cacheKey = getPixmapCacheKey(sanitaryFileName, fileInfo.size(), targetColorSpace); //check if cached already before loading the long way - auto previouslyRecordedFileSize = qvApp->getPreviouslyRecordedFileSize(sanitaryFileName); - auto *cachedPixmap = QVImageCore::pixmapCache.take(sanitaryFileName); - if (cachedPixmap != nullptr && - !cachedPixmap->isNull() && - previouslyRecordedFileSize == fileInfo.size()) + auto *cachedData = QVImageCore::pixmapCache.take(cacheKey); + if (cachedData != nullptr) { - QSize previouslyRecordedImageSize = qvApp->getPreviouslyRecordedImageSize(sanitaryFileName); - ReadData readData = { - *cachedPixmap, - fileInfo, - previouslyRecordedImageSize, - currentTargetColorSpace - }; + ReadData readData = *cachedData; + delete cachedData; loadPixmap(readData); } else { #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - loadFutureWatcher.setFuture(QtConcurrent::run(this, &QVImageCore::readFile, sanitaryFileName, currentTargetColorSpace, false)); + loadFutureWatcher.setFuture(QtConcurrent::run(this, &QVImageCore::readFile, sanitaryFileName, targetColorSpace, false)); #else - loadFutureWatcher.setFuture(QtConcurrent::run(&QVImageCore::readFile, this, sanitaryFileName, currentTargetColorSpace, false)); + loadFutureWatcher.setFuture(QtConcurrent::run(&QVImageCore::readFile, this, sanitaryFileName, targetColorSpace, false)); #endif } - delete cachedPixmap; } -QVImageCore::ReadData QVImageCore::readFile(const QString &fileName, const QColorSpace targetColorSpace, bool forCache) +QVImageCore::ReadData QVImageCore::readFile(const QString &fileName, const QColorSpace &targetColorSpace, bool forCache) { QImageReader imageReader; imageReader.setDecideFormatFromContent(true); @@ -167,17 +157,19 @@ QVImageCore::ReadData QVImageCore::readFile(const QString &fileName, const QColo #endif QPixmap readPixmap = QPixmap::fromImage(readImage); + QFileInfo fileInfo(fileName); ReadData readData = { readPixmap, - QFileInfo(fileName), + fileInfo.absoluteFilePath(), + fileInfo.size(), imageReader.size(), targetColorSpace }; // Only error out when not loading for cache if (readPixmap.isNull() && !forCache) { - emit readError(imageReader.error(), imageReader.errorString(), readData.fileInfo.fileName()); + emit readError(imageReader.error(), imageReader.errorString(), fileInfo.fileName()); } return readData; @@ -186,7 +178,7 @@ QVImageCore::ReadData QVImageCore::readFile(const QString &fileName, const QColo void QVImageCore::loadPixmap(const ReadData &readData) { // Do this first so we can keep folder info even when loading errored files - currentFileDetails.fileInfo = readData.fileInfo; + currentFileDetails.fileInfo = QFileInfo(readData.absoluteFilePath); currentFileDetails.updateLoadedIndexInFolder(); if (currentFileDetails.loadedIndexInFolder == -1) updateFolderInfo(); @@ -201,7 +193,7 @@ void QVImageCore::loadPixmap(const ReadData &readData) // Set file details currentFileDetails.isPixmapLoaded = true; - currentFileDetails.baseImageSize = readData.size; + currentFileDetails.baseImageSize = readData.imageSize; currentFileDetails.loadedPixmapSize = loadedPixmap.size(); if (currentFileDetails.baseImageSize == QSize(-1, -1)) { @@ -395,8 +387,7 @@ void QVImageCore::requestCaching() return; } - // Figure out target color space (and if it changed this clears cached pixmaps) - updateCurrentTargetColorSpace(); + QColorSpace targetColorSpace = getTargetColorSpace(); int preloadingDistance = 1; @@ -429,19 +420,21 @@ void QVImageCore::requestCaching() QString filePath = currentFileDetails.folderFileInfoList[index].absoluteFilePath; filesToPreload.append(filePath); - requestCachingFile(filePath); + requestCachingFile(filePath, targetColorSpace); } lastFilesPreloaded = filesToPreload; } -void QVImageCore::requestCachingFile(const QString &filePath) +void QVImageCore::requestCachingFile(const QString &filePath, const QColorSpace &targetColorSpace) { + QFile imgFile(filePath); + QString cacheKey = getPixmapCacheKey(filePath, imgFile.size(), targetColorSpace); + //check if image is already loaded or requested - if (QVImageCore::pixmapCache.contains(filePath) || lastFilesPreloaded.contains(filePath)) + if (QVImageCore::pixmapCache.contains(cacheKey) || lastFilesPreloaded.contains(filePath)) return; - QFile imgFile(filePath); if (imgFile.size()/1024 > QVImageCore::pixmapCache.maxCost()/2) return; @@ -452,39 +445,42 @@ void QVImageCore::requestCachingFile(const QString &filePath) }); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - cacheFutureWatcher->setFuture(QtConcurrent::run(this, &QVImageCore::readFile, filePath, currentTargetColorSpace, true)); + cacheFutureWatcher->setFuture(QtConcurrent::run(this, &QVImageCore::readFile, filePath, targetColorSpace, true)); #else - cacheFutureWatcher->setFuture(QtConcurrent::run(&QVImageCore::readFile, this, filePath, currentTargetColorSpace, true)); + cacheFutureWatcher->setFuture(QtConcurrent::run(&QVImageCore::readFile, this, filePath, targetColorSpace, true)); #endif } void QVImageCore::addToCache(const ReadData &readData) { - if (readData.pixmap.isNull() || readData.targetColorSpace != currentTargetColorSpace) + if (readData.pixmap.isNull()) return; + QString cacheKey = getPixmapCacheKey(readData.absoluteFilePath, readData.fileSize, readData.targetColorSpace); - auto fileSize = readData.fileInfo.size(); - QVImageCore::pixmapCache.insert(readData.fileInfo.absoluteFilePath(), new QPixmap(readData.pixmap), fileSize/1024); + QVImageCore::pixmapCache.insert(cacheKey, new ReadData(readData), readData.fileSize/1024); +} - qvApp->setPreviouslyRecordedFileSize(readData.fileInfo.absoluteFilePath(), new qint64(fileSize)); - qvApp->setPreviouslyRecordedImageSize(readData.fileInfo.absoluteFilePath(), new QSize(readData.size)); +QString QVImageCore::getPixmapCacheKey(const QString &absoluteFilePath, const qint64 &fileSize, const QColorSpace &targetColorSpace) +{ +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + QString targetColorSpaceHash = QCryptographicHash::hash(targetColorSpace.iccProfile(), QCryptographicHash::Md5).toHex(); +#else + QString targetColorSpaceHash = ""; +#endif + return absoluteFilePath + "\n" + QString::number(fileSize) + "\n" + targetColorSpaceHash; } -void QVImageCore::updateCurrentTargetColorSpace() +QColorSpace QVImageCore::getTargetColorSpace() const { #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - const QColorSpace newTargetColorSpace = + return colorSpaceConversion == 1 ? detectDisplayColorSpace() : colorSpaceConversion == 2 ? QColorSpace::SRgb : colorSpaceConversion == 3 ? QColorSpace::DisplayP3 : QColorSpace(); - - if (newTargetColorSpace != currentTargetColorSpace) - { - QVImageCore::pixmapCache.clear(); - currentTargetColorSpace = newTargetColorSpace; - } +#else + return {}; #endif } diff --git a/src/qvimagecore.h b/src/qvimagecore.h index d5e42b1d..dcbcd2fa 100644 --- a/src/qvimagecore.h +++ b/src/qvimagecore.h @@ -51,23 +51,25 @@ class QVImageCore : public QObject struct ReadData { QPixmap pixmap; - QFileInfo fileInfo; - QSize size; + QString absoluteFilePath; + qint64 fileSize; + QSize imageSize; QColorSpace targetColorSpace; }; explicit QVImageCore(QObject *parent = nullptr); void loadFile(const QString &fileName); - ReadData readFile(const QString &fileName, const QColorSpace targetColorSpace, bool forCache); + ReadData readFile(const QString &fileName, const QColorSpace &targetColorSpace, bool forCache); void loadPixmap(const ReadData &readData); void closeImage(); QList getCompatibleFiles(const QString &dirPath) const; void updateFolderInfo(QString dirPath = QString()); void requestCaching(); - void requestCachingFile(const QString &filePath); + void requestCachingFile(const QString &filePath, const QColorSpace &targetColorSpace); void addToCache(const ReadData &readImageAndFileInfo); - void updateCurrentTargetColorSpace(); + static QString getPixmapCacheKey(const QString &absoluteFilePath, const qint64 &fileSize, const QColorSpace &targetColorSpace); + QColorSpace getTargetColorSpace() const; QColorSpace detectDisplayColorSpace() const; void settingsUpdated(); @@ -114,8 +116,7 @@ class QVImageCore : public QObject bool allowMimeContentDetection; int colorSpaceConversion; - static QCache pixmapCache; - static QColorSpace currentTargetColorSpace; + static QCache pixmapCache; QPair lastDirInfo; unsigned randomSortSeed; From 5db717b1c47b1a3a9fde1d7e3d09f8c8203f3ca3 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Tue, 24 Jan 2023 22:41:44 -0500 Subject: [PATCH 016/111] Fix cache using more memory than intended. --- src/qvimagecore.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/qvimagecore.cpp b/src/qvimagecore.cpp index eb851975..f6d00f3b 100644 --- a/src/qvimagecore.cpp +++ b/src/qvimagecore.cpp @@ -441,11 +441,10 @@ void QVImageCore::addToCache(const ReadData &readData) if (readData.pixmap.isNull()) return; + auto pixmapMemoryBytes = static_cast(readData.pixmap.width()) * readData.pixmap.height() * readData.pixmap.depth() / 8; + QVImageCore::pixmapCache.insert(readData.fileInfo.absoluteFilePath(), new QPixmap(readData.pixmap), qMax(pixmapMemoryBytes / 1024, 1LL)); - auto fileSize = readData.fileInfo.size(); - QVImageCore::pixmapCache.insert(readData.fileInfo.absoluteFilePath(), new QPixmap(readData.pixmap), fileSize/1024); - - qvApp->setPreviouslyRecordedFileSize(readData.fileInfo.absoluteFilePath(), new qint64(fileSize)); + qvApp->setPreviouslyRecordedFileSize(readData.fileInfo.absoluteFilePath(), new qint64(readData.fileInfo.size())); qvApp->setPreviouslyRecordedImageSize(readData.fileInfo.absoluteFilePath(), new QSize(readData.size)); } From ff6e962578f5c8708d5f06c1c18482eb3cb15dca Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sun, 29 Jan 2023 16:25:10 -0500 Subject: [PATCH 017/111] Make Qt6 builds include qtimageformats module --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3a0474fb..336a2d5f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,6 +18,7 @@ jobs: qtVersion: '5.15.2' - runner: 'macOS-11' qtVersion: '6.2.2' + qtModules: 'qtimageformats' - runner: 'macOS-10.15' qtVersion: '5.12.12' osSuffix: '_legacy' @@ -26,6 +27,7 @@ jobs: qtVersion: '6.2.2' qtArch: 'win64_msvc2019_64' osSuffix: '_64' + qtModules: 'qtimageformats' - runner: 'windows-2019' qtVersion: '5.15.2' qtArch: 'win32_msvc2019' @@ -51,6 +53,7 @@ jobs: version: ${{ matrix.qtVersion }} arch: ${{ matrix.qtArch }} cache: true + modules: ${{ matrix.qtModules }} - name: Build qView shell: pwsh From c8d7d78f4eeca5f00ed1be6dfac99469d42b0783 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Allan=20Nordh=C3=B8y?= Date: Thu, 29 Dec 2022 15:18:17 +0000 Subject: [PATCH 018/111] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 81.2% (217 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/nb_NO/ --- i18n/qview_nb_NO.ts | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/i18n/qview_nb_NO.ts b/i18n/qview_nb_NO.ts index 1c60c76f..45964fa7 100644 --- a/i18n/qview_nb_NO.ts +++ b/i18n/qview_nb_NO.ts @@ -74,12 +74,12 @@ &Open... - &Åpne… + &Åpne … Open &URL... - Åpne &nettadresse… + Åpne &nettadresse … @@ -147,7 +147,7 @@ R&ename... - &Gi nytt navn… + &Gi nytt navn … @@ -217,7 +217,7 @@ Save Frame &As... - Lagre ramme &som… + Lagre ramme &som … @@ -265,7 +265,7 @@ Preference&s... This is for the options dialog on mac - &Innstillinge&r… + &Innstillinge&r … @@ -344,7 +344,7 @@ Downloading image... - Laster ned bilde… + Laster ned bilde … @@ -355,7 +355,7 @@ Open URL... - Åpne nettadresse… + Åpne nettadresse … @@ -447,7 +447,7 @@ Ingen skrivetilgang, eller så er filen skrivebeskyttet. Save Frame As... - Lagre ramme som… + Lagre ramme som … @@ -526,7 +526,7 @@ Ingen skrivetilgang, eller så er filen skrivebeskyttet. Checking for updates... - Se etter nye versjoner… + Se etter nye versjoner … @@ -564,7 +564,7 @@ Ingen skrivetilgang, eller så er filen skrivebeskyttet. Open... - Åpne… + Åpne … @@ -1149,7 +1149,7 @@ Ingen skrivetilgang, eller så er filen skrivebeskyttet. Rename... - Gi nytt navn… + Gi nytt navn … From ab9d2bb375705498c2727983e49619631d2c5d38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toni=20Est=C3=A9vez?= Date: Wed, 4 Jan 2023 19:08:38 +0000 Subject: [PATCH 019/111] Translated using Weblate (Spanish) Currently translated at 100.0% (267 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/es/ --- i18n/qview_es.ts | 224 ++++++++++++++++++++++++----------------------- 1 file changed, 113 insertions(+), 111 deletions(-) diff --git a/i18n/qview_es.ts b/i18n/qview_es.ts index fcf68ef6..4463c31c 100644 --- a/i18n/qview_es.ts +++ b/i18n/qview_es.ts @@ -41,7 +41,7 @@ Open &Recent - &Recientes + Abrir &recientes @@ -79,7 +79,7 @@ Open &URL... - Abrir &ubicación... + Abrir una &ubicación... @@ -107,12 +107,12 @@ Show in &Finder Open containing folder on macOS - Mostrar en &finder + Mostrar en el &Finder Show File &Info - &Propiedades del archivo + &Información del archivo @@ -122,7 +122,7 @@ &Delete - &Borrar + &Eliminar @@ -132,7 +132,7 @@ &Undo Delete - &Deshacer borrado + &Deshacer la eliminación @@ -162,17 +162,17 @@ Reset &Zoom - Restablecer el &zoom + Restablecer el &zum Ori&ginal Size - Tamaño ori&ginal + &Tamaño original Rotate &Right - Girar a la de&recha + Girar a la &derecha @@ -182,7 +182,7 @@ &Mirror - &Reflejar + Re&flejar @@ -197,12 +197,12 @@ &First File - P&rimer archivo + &Primer archivo Previous Fi&le - &Archivo anterior + Archivo a&nterior @@ -212,32 +212,32 @@ Las&t File - &Último archivo + Úl&timo archivo Save Frame &As... - Gu&ardar cuadro como... + &Guardar el fotograma como... Pa&use - Pa&usar + &Pausar &Next Frame - Fotograma &siguiente + &Fotograma siguiente &Decrease Speed - &Reducir velocidad + &Reducir la velocidad &Reset Speed - &Restablecer Velocidad + Restablecer la &velocidad @@ -247,13 +247,13 @@ Start S&lideshow - Iniciar &presentación + Iniciar la &presentación Option&s This is for the options dialog on windows - Opcione&s + &Opciones @@ -270,7 +270,7 @@ &About - &Acerca + &Acerca de @@ -281,13 +281,13 @@ &Welcome - &Bienvenido + &Bienvenida Clear &Menu This is for clearing the recents menu - Limpiar &Menu + &Borrar la lista @@ -299,13 +299,13 @@ Choose another app Open with other program for windows - Escoger otra aplicación + Elegir otra aplicación Other... Open with other program for macos - Otro... + Otra... @@ -313,12 +313,12 @@ Exit F&ull Screen - Salir P&antalla Completa + Salir del &modo a pantalla completa Enter F&ull Screen - Entrar P&antalla Completa + &Modo a pantalla completa @@ -339,12 +339,12 @@ Error: URL is invalid - Error: URL no válida + Error: ubicación no válida Downloading image... - Descargando imagen... + Descargando la imagen... @@ -355,7 +355,7 @@ Open URL... - Abrir URL... + Abrir una ubicación... @@ -365,12 +365,12 @@ Error: Invalid image - Error: Imagen invalida + Error: Imagen no válida URL of a supported image file: - URL de archivo de imagen compatible: + URL de un archivo de imagen compatible: @@ -387,7 +387,7 @@ No se tiene permiso de escritura o el archivo es de solo lectura. Are you sure you want to move %1 to the Recycle Bin? - ¿Seguro que quiere mover %1 a la Papelera de Reciclaje? + ¿Seguro que quiere mover %1 a la papelera de reciclaje? @@ -408,27 +408,27 @@ No se tiene permiso de escritura o el archivo es de solo lectura. Not Supported - No Compatible + No compatible This program was compiled with an old version of Qt and this feature is not available. If you see this message, please report a bug! - Este programa fue compilado con una versión antigua de Qt y esta característica no esta disponible. -Si usted ve este mensaje, por favor reporte el error! + Este programa se ha compilado con una versión obsoleta de Qt y esta función no está disponible. +Si ve este mensaje, ¡informe de un error! Can't undo deletion of %1: No write permission or file is read-only. - No se puede restablecer la eliminación de %1: -No se tienen permisos de escritura o el archivo es de solo lectura. + No se puede deshacer el borrado de %1: +No tiene permiso de escritura o el archivo es de solo lectura. Failed undoing deletion of %1. - Fallo al restablecer eliminación de %1. + Error al deshacer el borrado de %1. Rename... @@ -441,12 +441,12 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Save Frame As... - Guardar Fotograma Como... + Guardar el fotograma como... Res&ume - Rean&udar + Contin&uar @@ -456,12 +456,12 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Start S&lideshow - &Iniciar presentación + &Iniciar una presentación Stop S&lideshow - &Detener presentación + &Detener la presentación @@ -492,7 +492,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. The file to open. - Archivo a abrir. + El archivo que se abrirá. @@ -500,7 +500,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. About qView - Sobre qView + Acerca de qView @@ -510,12 +510,12 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Nightly %1 - Nightly%1 + Nocturna %1 Built with Qt %1 (%2)<br>Source code available under GPLv3 on <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurplel/qView">GitHub</a><br>Icon glyph created by Guilhem from the Noun Project<br>Copyright © %3 jurplel and qView contributors - Creado con Qt %1 (%2)<br>Código fuente disponible bajo GPLv3 en <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurplel/qView">GitHub</a><br>Icono creado por Guilhem del proyecto Noun Project<br>Copyright © %3 contribuidores jurplel y qView + Creado con Qt %1 (%2)<br>Código fuente disponible con la GPLv3 en <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurplel/qView">GitHub</a><br>Icono creado por Guilhem del Noun Project<br>Copyright © %3 jurplel y colaboradores de qView @@ -526,17 +526,17 @@ No se tienen permisos de escritura o el archivo es de solo lectura. %1 update available %1 is a version number e.g. "4.0 update available" - %1 actualización disponible + Disponible la actualización %1 No updates available - No hay nuevas actualizaciones + No hay actualizaciones disponibles Error checking for updates - Error buscando actualizaciones + Error al comprobar las actualizaciones @@ -548,7 +548,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Supported Images - Imágenes Compatibles + Imágenes compatibles @@ -566,7 +566,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. (default) - (predeterminado) + (por defecto) @@ -580,8 +580,8 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Error occurred opening "%3": %2 (Error %1) - Error abriendo "%3": -%2 (Error %1) + Error al abrir «%3»: +%2 (error %1) @@ -636,7 +636,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Aspect Ratio: - Escala: + Relación de aspecto: @@ -664,7 +664,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Choose Application - Escoger aplicación + Elija una aplicación @@ -674,7 +674,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Education - Educativos + Educación @@ -709,7 +709,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Settings - Ajustes + Configuración @@ -742,12 +742,12 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Back&ground color: - &Color de fondo: + &Color del fondo: Changes the amount of information displayed in the titlebar - Cambia la información mostrada en la barra del titulo + Cambia la información que se muestra en la barra de título @@ -757,28 +757,28 @@ No se tienen permisos de escritura o el archivo es de solo lectura. &Basic - &Basico + &Básico &Minimal - &Minimalista + &Mínimo &Practical - &Practico + &Práctico &Verbose - &Informativo + &Detallado Control when the window should resize to fit the image's actual size - Controla cuando la ventana cambia de tamaño para acomodarse a la de la imagen + Controla cuándo la ventana debe ajustarse al tamaño de la imagen @@ -793,7 +793,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. When launching - Al ejecutarse + Al inicio @@ -808,7 +808,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Control the minimum size that the window should reach when matching the image's actual size - Controla el tamaño mínimo que la ventana debe alcanzar cuando se alcanza el tamaño de imagen real + Controla el tamaño mínimo de la ventana al ajustarse al tamaño de la imagen @@ -820,7 +820,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Control the maximum size that the window should reach when matching the image's actual size - Controla el tamaño máximo que la ventana debe alcanzar cuando se alcanza el tamaño de imagen real + Controla el tamaño máximo de la ventana al ajustarse al tamaño de la imagen @@ -830,27 +830,27 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Choose whether or not the titlebar should always be dark regardless of your chosen macOS appearance - Elige si la barra de titulo deberá o no ser siempre obscura sin importar la apariencia elegida en los ajustes de macOS + Elige si la barra de título debe ser siempre oscura, independientemente de la apariencia de macOS &Titlebar always dark - &Barra de título siempre obscura + Barra de &título siempre obscura Show menubar - Mostrar barra de menú + Mostrar la barra de menú Choose whether or not to display the titlebar text while in fullscreen - Elegir si la barra de título se despliegue o no en pantalla completa + Elige si se muestra o no el texto de la barra de título a pantalla completa Show titlebar text in fullscreen - Mostrar texto de la barra de título en pantalla completa + Mostrar el texto de la barra de título a pantalla completa @@ -865,89 +865,89 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Scaling: - Escala: + Escalado: Turn this off to see individual pixels - Apaga esto para ver pixeles individuales + Desmarque para ver píxeles individuales &Bilinear filtering - Filtrado &bilineal + &Filtrado bilineal Images appear aliased (having jagged edges) without this, but it is faster - Las imágenes aparecen pixeladas (bordes escalonados) sin esto, pero es mas rápido + Sin esta opción las imágenes aparecen con bordes dentados, pero es más rápido &Image scaling - &Escala de imagen + Escalado de la &imagen Choose whether or not the image continues to be scaled when zooming above the window size (can be laggier with large images) - Controla si la imagen continua escalándose o no cuando el acercamiento sobrepasa el tamaño de la ventana (puede actuar lento con imágenes grandes) + Elige si la imagen se sigue escalando al ampliarla por encima del tamaño de la ventana (puede ser más lento con imágenes grandes) &Scaling above window size - &Escalar sobre el tamaño de ventana + &Escalar por encima del tamaño de la ventana The amount to zoom every scroll wheel click - La cantidad de acercamiento que da cada paso de desplazamiento + La variación de la ampliación con cada clic de la rueda de desplazamiento Zoom amount: - Cantidad de acercamiento: + Variación de la ampliación: Choose whether scrolling zooms or moves the image (alternative can be accessed at any time by holding ctrl/cmd) - + Elija si el desplazamiento amplía o mueve la imagen (se puede acceder a la alternativa pulsando Ctrl/Cmd) Scrolling &zooms - + &Ampliar con el desplazamiento Stop the image from going past its actual size when resizing the window - you can still zoom past it though - + Evita que la imagen sobrepase su tamaño real al redimensionar la ventana, aunque aún se pueda ampliar Image resizes &past actual size - + &Redimensionar la imagen por encima de su tamaño real Ignores select sides of an image when fitting to window (some sides will extend beyond the window boundaries) - + Ignora los lados seleccionados de una imagen al ajustarla a la ventana (algún lado se extenderá más allá del borde de la ventana) Fit whole image - + Ajustar la imagen completa Fit height - Ajustar a la altura + Ajustar la altura Fit width - Ajustar a la anchura + Ajustar la anchura @@ -957,17 +957,17 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Choose whether or not zooming in and out above 100% zoom will zoom towards the cursor - + Elija si se se ampliará o reducirá la imagen hacia el cursor al superar el 100% de ampliación Zoom &towards cursor - + Ampliación &hacia el cursor Miscellaneous - + Miscelánea @@ -1033,17 +1033,17 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Extended - + Extendida Controls whether or not qView should go back to the first item after reaching the end of a folder - + Controla si qView debe o no volver al primer elemento después de llegar al final de una carpeta &Loop through folders - + &Recorrer carpetas en &bucle @@ -1079,7 +1079,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. &Update notifications on startup The notifications are for new qView releases - + &Notificaciones de actualización al inicio @@ -1089,22 +1089,22 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Move Back - + Retroceder Do Nothing - + No hacer nada Move Forward - + Avanzar After deletion: - + Después de eliminar: @@ -1115,7 +1115,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Shortcuts - + Accesos directos @@ -1160,13 +1160,15 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Could not rename %1: No write permission or file is read-only. - + No se ha podido cambiar el nombre de %1: +No tiene permiso de escritura o el archivo es de solo lectura. Could not rename %1: (Check that all characters are valid) - + No se ha podido cambiar el nombre de %1: +(Compruebe que todos los caracteres sean válidos) @@ -1174,12 +1176,12 @@ No write permission or file is read-only. Modify Shortcuts - + Modificar accesos directos Shortcut Already Used - + Acceso rápido en uso @@ -1198,17 +1200,17 @@ No write permission or file is read-only. &Enable update notifications on startup - + &Activar las notificaciones de actualización al inicio Thank you for downloading qView.<br>Here's a few tips to get you started: - + Gracias por descargar qView.<br>Aquí tiene algunos consejos para empezar: <ul><li>Right click to access the main menu</li><li>Drag the image to reposition it</li><li>Scroll to zoom in and out</li><li>Use arrow keys to switch files</li></ul> - + <ul><li>Haga clic derecho para acceder al menú principal</li><li>Arrastre la imagen para recolocarla</li><li>Use el desplazamiento para ampliar o reducir la imagen</li><li>Use las teclas de flecha para cambiar de archivo</li></ul> @@ -1226,12 +1228,12 @@ No write permission or file is read-only. Open Containing Folder - + Abrir la carpeta contenedora Show in Explorer - + Mostrar en el explorador From 25b66a253b403331f2b3cbd4aabf7e4db7360e2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toni=20Est=C3=A9vez?= Date: Fri, 6 Jan 2023 20:17:30 +0000 Subject: [PATCH 020/111] Translated using Weblate (Spanish) Currently translated at 100.0% (267 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/es/ --- i18n/qview_es.ts | 82 ++++++++++++++++++++++++------------------------ 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/i18n/qview_es.ts b/i18n/qview_es.ts index 4463c31c..054de3bd 100644 --- a/i18n/qview_es.ts +++ b/i18n/qview_es.ts @@ -58,7 +58,7 @@ &Quit - &Cerrar + &Salir @@ -79,7 +79,7 @@ Open &URL... - Abrir una &ubicación... + Abrir un &URL... @@ -122,7 +122,7 @@ &Delete - &Eliminar + &Borrar @@ -132,7 +132,7 @@ &Undo Delete - &Deshacer la eliminación + &Deshacer el borrado @@ -162,7 +162,7 @@ Reset &Zoom - Restablecer el &zum + Res&tablecer la vista @@ -237,17 +237,17 @@ &Reset Speed - Restablecer la &velocidad + Res&tablecer la velocidad &Increase Speed - &Aumentar velocidad + &Aumentar la velocidad Start S&lideshow - Iniciar la &presentación + &Iniciar la presentación @@ -339,7 +339,7 @@ Error: URL is invalid - Error: ubicación no válida + Error: URL no válido @@ -355,7 +355,7 @@ Open URL... - Abrir una ubicación... + Abrir un URL... @@ -376,7 +376,7 @@ Can't delete %1: No write permission or file is read-only. - No se puede eliminar %1: + No se puede borrar %1: No se tiene permiso de escritura o el archivo es de solo lectura. @@ -664,7 +664,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Choose Application - Elija una aplicación + Elegir una aplicación @@ -830,7 +830,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Choose whether or not the titlebar should always be dark regardless of your chosen macOS appearance - Elige si la barra de título debe ser siempre oscura, independientemente de la apariencia de macOS + Elija si la barra de título debe ser siempre oscura, independientemente de la apariencia de macOS @@ -845,7 +845,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Choose whether or not to display the titlebar text while in fullscreen - Elige si se muestra o no el texto de la barra de título a pantalla completa + Elija si se muestra el texto de la barra de título a pantalla completa @@ -890,7 +890,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Choose whether or not the image continues to be scaled when zooming above the window size (can be laggier with large images) - Elige si la imagen se sigue escalando al ampliarla por encima del tamaño de la ventana (puede ser más lento con imágenes grandes) + Elija si se sigue escalando la imagen al ampliarla por encima del tamaño de la ventana (puede ser más lento con imágenes grandes) @@ -962,7 +962,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Zoom &towards cursor - Ampliación &hacia el cursor + Ampliar &hacia el cursor @@ -997,7 +997,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Random - Aleatoriamente + Al azar @@ -1038,12 +1038,12 @@ No tiene permiso de escritura o el archivo es de solo lectura. Controls whether or not qView should go back to the first item after reaching the end of a folder - Controla si qView debe o no volver al primer elemento después de llegar al final de una carpeta + Controla si qView debe retornar al primer elemento después de llegar al final de una carpeta &Loop through folders - &Recorrer carpetas en &bucle + &Recorrer las carpetas en bucle @@ -1073,7 +1073,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Save &recent files - Guardar archivos &recientes + &Guardar los archivos recientes @@ -1104,7 +1104,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. After deletion: - Después de eliminar: + Después de borrar: @@ -1115,7 +1115,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Shortcuts - Accesos directos + Accesos rápidos @@ -1148,7 +1148,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. File name: - Nombre de archivo: + Nombre del archivo: @@ -1176,7 +1176,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Modify Shortcuts - Modificar accesos directos + Modificar accesos rápidos @@ -1186,7 +1186,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. "%1" is already bound to "%2" - «%1» ya está asociado con «%2» + «%1» ya está asociado a «%2» @@ -1195,7 +1195,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Welcome - Bienvenido + Bienvenida @@ -1210,7 +1210,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. <ul><li>Right click to access the main menu</li><li>Drag the image to reposition it</li><li>Scroll to zoom in and out</li><li>Use arrow keys to switch files</li></ul> - <ul><li>Haga clic derecho para acceder al menú principal</li><li>Arrastre la imagen para recolocarla</li><li>Use el desplazamiento para ampliar o reducir la imagen</li><li>Use las teclas de flecha para cambiar de archivo</li></ul> + <ul><li>Haga clic derecho para acceder al menú principal</li><li>Arrastre la imagen para recolocarla</li><li>Use el desplazamiento para ampliarla o reducirla</li><li>Use las teclas de flecha para cambiar de archivo</li></ul> @@ -1223,7 +1223,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Open URL - Abrir URL + Abrir un URL @@ -1253,7 +1253,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Undo Delete - Deshacer borrado + Deshacer el borrado @@ -1313,7 +1313,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Reset Zoom - Reiniciar la ampliación + Restablecer la vista @@ -1323,12 +1323,12 @@ No tiene permiso de escritura o el archivo es de solo lectura. Rotate Right - Rotar hacia la derecha + Girar a la derecha Rotate Left - Rotar hacia la izquierda + Girar a la izquierda @@ -1338,7 +1338,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Flip - Invertir + Voltear @@ -1348,7 +1348,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Save Frame As - Guardar Fotograma Como + Guardar un fotograma como @@ -1358,17 +1358,17 @@ No tiene permiso de escritura o el archivo es de solo lectura. Next Frame - Siguiente fotograma + Fotograma siguiente Decrease Speed - Disminuir la velocidad + Reducir la velocidad Reset Speed - Reiniciar la velocidad + Restablecer la velocidad @@ -1378,7 +1378,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Toggle Slideshow - Activar/Desactivar Presentacion + Activar/desactivar una presentación @@ -1388,12 +1388,12 @@ No tiene permiso de escritura o el archivo es de solo lectura. Preferences - Preferencias + Configuración New Window - Nueva ventana + Ventana nueva @@ -1447,7 +1447,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Update notifications on startup have been disabled. You can reenable them in the options dialog. - Notificaciones de actualizaciones al inicio han sido desactivadas. + Se han desactivado las notificaciones de actualización al inicio. Es posible reactivarlas en el dialogo de opciones. From c2f1019f811a4c3d9d63c4c1e2fe5f8f81c583ab Mon Sep 17 00:00:00 2001 From: Dan Date: Sun, 15 Jan 2023 11:39:56 +0000 Subject: [PATCH 021/111] Translated using Weblate (Ukrainian) Currently translated at 100.0% (267 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/uk/ --- i18n/qview_uk.ts | 541 ++++++++++++++++++++++++----------------------- 1 file changed, 274 insertions(+), 267 deletions(-) diff --git a/i18n/qview_uk.ts b/i18n/qview_uk.ts index 2e15777a..1cd03ee5 100644 --- a/i18n/qview_uk.ts +++ b/i18n/qview_uk.ts @@ -6,306 +6,306 @@ Window - + Вікно &File - + Файл &Edit - + Редагувати &Go - + Вперед &View - + Переглянути &Tools - + Інструменти &Help - + Допомога Open &Recent - + Відкрити останні Empty - + Порожньо Open With - + Відкрити за допомогою &Quit - + Вийти Exit The quit action is called "Exit" on windows - + Вийти New Window - + Нове вікно &Open... - + Відкрити... Open &URL... - + Відкрити URL... Close Window - + Закрити вікно Close All Close all windows, that is - + Закрити всі Open Containing &Folder - + Відкрити цільову папку Show in E&xplorer Open containing folder on windows - + Показати в Провіднику Show in &Finder Open containing folder on macOS - + Показати в Пошуку Show File &Info - + Показати інформацію про файл &Move to Trash - + Перемістити в кошик &Delete - + Видалити &Restore from Trash - + Відновити з кошика &Undo Delete - + Скасувати видалення &Copy - + Копіювати &Paste - + Вставити R&ename... - + Перейменувати... Zoom &In - + Збільшити Zoom &Out - + Зменшити Reset &Zoom - + Скидання та масштабування Ori&ginal Size - + Орієнтовний розмір Rotate &Right - + Повернути праворуч Rotate &Left - + Повернути ліворуч &Mirror - + Віддзеркалити &Flip - + Перевернути Enter F&ull Screen - + Перейти у повноекранний режим &First File - + Перший файл Previous Fi&le - + Попередній файл &Next File - + Наступний файл Las&t File - + Останній файл Save Frame &As... - + Зберегти кадр як... Pa&use - + Призупинити &Next Frame - + Наступний кадр &Decrease Speed - + Зменшити швидкість &Reset Speed - + Скинути швидкість &Increase Speed - + Збільшити швидкість Start S&lideshow - + Почати слайд-шоу Option&s This is for the options dialog on windows - + Параметри Preference&s This is for the options dialog on non-mac unix platforms - + Налаштування Preference&s... This is for the options dialog on mac - + Налаштування та... &About - + Про застосунок &About qView This is for the about dialog on mac - + Про qView &Welcome - + Ласкаво просимо Clear &Menu This is for clearing the recents menu - + Очистити меню Other Application... Open with other program for unix non-mac - + Інший застосунок... Choose another app Open with other program for windows - + Оберіть інший застосунок Other... Open with other program for macos - + Інше... @@ -313,17 +313,17 @@ Exit F&ull Screen - + Вийти з повноекранного режиму Enter F&ull Screen - + Перейти у повноекранний режим Empty - + Порожньо @@ -334,123 +334,126 @@ Error - + Помилка Error: URL is invalid - + Помилка: URL-адреса невірна Downloading image... - + Завантажити зображення... Cancel - + Скасувати Open URL... - + Відкрити URL... Error - + Помилка Error: Invalid image - + Помилка: недійсне зображення URL of a supported image file: - + URL-адреса підтримуваного файлу зображення: Can't delete %1: No write permission or file is read-only. - + Не вдається видалити %1: +Немає дозволу на запис або файл доступний тільки для читання. Are you sure you want to move %1 to the Trash? - + Ви дійсно хочете перемістити %1 до Корзини? Are you sure you want to move %1 to the Recycle Bin? - + Ви впевнені, що хочете перемістити %1 до Кошика? Delete - + Видалити Do not ask again - + Більше не питайте Can't delete %1. - + Неможливо видалити %1. Not Supported - + Не підтримується This program was compiled with an old version of Qt and this feature is not available. If you see this message, please report a bug! - + Ця програма була скомпільована зі старою версією Qt, і ця функція недоступна. +Якщо ви бачите це повідомлення, повідомте про помилку! Can't undo deletion of %1: No write permission or file is read-only. - + Неможливо скасувати видалення %1: +Немає дозволу на запис або файл доступний тільки для читання. Failed undoing deletion of %1. - + Не вдалося скасувати видалення %1. Save Frame As... - + Зберегти кадр як... Res&ume - + Відновити Pause - + Пауза Start S&lideshow - + Почати слайд-шоу Stop S&lideshow - + Зупинити слайд-шоу @@ -458,17 +461,17 @@ No write permission or file is read-only. All Applications (*.app) - + Всі застосунки (*.app) Programs (*.exe *.pif *.com *.bat *.cmd) - + Програми (*.exe *.pif *.com *.bat *.cmd) All Files (*) - + Всі файли (*) @@ -476,12 +479,12 @@ No write permission or file is read-only. file - + файл The file to open. - + Файл для відкриття. @@ -489,43 +492,43 @@ No write permission or file is read-only. About qView - + Про qView version %1 - + версія %1 Nightly %1 - + Нічний %1 Built with Qt %1 (%2)<br>Source code available under GPLv3 on <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurplel/qView">GitHub</a><br>Icon glyph created by Guilhem from the Noun Project<br>Copyright © %3 jurplel and qView contributors - + Створено за допомогою Qt %1 (%2)<br>Вихідний код доступний під GPLv3 на <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurplel/qView">GitHub</a><br> Значок гліф , створений Гільхемом із проєкту Noun<br>Авторське право © %3 співавтори jurplel і qView Checking for updates... - + Перевірка наявності оновлень... %1 update available %1 is a version number e.g. "4.0 update available" - + %1 оновлення доступне No updates available - + Немає оновлень Error checking for updates - + Помилка перевірки оновлень @@ -533,17 +536,17 @@ No write permission or file is read-only. Supported Images - + Підтримувані зображення All Files - + Всі файли Open... - + Відкрити... @@ -551,7 +554,7 @@ No write permission or file is read-only. (default) - + (за замовчуванням) @@ -559,13 +562,14 @@ No write permission or file is read-only. Error - + Помилка Error occurred opening "%3": %2 (Error %1) - + Виникла помилка при відкритті "%3": +%2 (Помилка %1) @@ -573,12 +577,12 @@ No write permission or file is read-only. File Info - + Інформація про файл Name: - + Ім'я: @@ -590,57 +594,57 @@ No write permission or file is read-only. error - + помилка Type: - + Тип: Location: - + Місцезнаходження: Size: - + Розмір: Modified: - + Змінено: Dimensions: - + Розміри: Aspect Ratio: - + Співвідношення сторін: Frames: - + Кадри: Refresh - + Оновити %1 (%2 bytes) - + %1 (%2 байт) %1 x %2 (%3 MP) - + %1 x %2 (%3 МР) @@ -648,67 +652,67 @@ No write permission or file is read-only. Choose Application - + Оберіть застосунок Development - + Розробка Education - + Освіта Games - + Ігри Graphics - + Графіка Internet - + Інтернет Multimedia - + Мультимедіа Office - + Офіс Science - + Наука Settings - + Налаштування System - + Система Utilities - + Утиліти Other - + Інше @@ -716,410 +720,410 @@ No write permission or file is read-only. Options - + Опції Window - + Вікно Back&ground color: - + Колір фону: Changes the amount of information displayed in the titlebar - + Зміна обсягу інформації, що відображається в рядку заголовка Titlebar text: - + Текст заголовка: &Basic - + Основний &Minimal - + Мінімальний &Practical - + Практичний &Verbose - + Багатослівний Control when the window should resize to fit the image's actual size - + Керування тим, коли вікно повинно змінювати розмір відповідно до реального розміру зображення Window matches image size: - + Вікно відповідає розміру зображення: Never - + Ніколи When launching - + При запуску When opening images - + При відкритті зображень Minimum size: - + Мінімальний розмір: Control the minimum size that the window should reach when matching the image's actual size - + Керування мінімальним розміром, якого повинно досягати вікно при відповідності фактичного розміру зображення % of screen size - + % від розміру екрану Control the maximum size that the window should reach when matching the image's actual size - + Керування максимальним розміром, якого повинно досягати вікно при відповідності реальному розміру зображення Maximum size: - + Максимальний розмір: Choose whether or not the titlebar should always be dark regardless of your chosen macOS appearance - + Виберіть, чи повинен рядок заголовка завжди бути темним, незалежно від обраного вами зовнішнього вигляду macOS &Titlebar always dark - + &Титульний рядок завжди темний Show menubar - + Показати меню Choose whether or not to display the titlebar text while in fullscreen - + Виберіть, чи відображати текст заголовка в повноекранному режимі Show titlebar text in fullscreen - + Показати текст заголовка на весь екран &Quit on last window closed - + Вихід при закритті останнього вікна Image - + Зображення Scaling: - + Масштабування: Turn this off to see individual pixels - + Вимкніть, щоб побачити окремі пікселі &Bilinear filtering - + Білінійна фільтрація Images appear aliased (having jagged edges) without this, but it is faster - + Зображення виглядають аліасними (з нерівними краями) і без цього, але так швидше &Image scaling - + Масштабування зображення Choose whether or not the image continues to be scaled when zooming above the window size (can be laggier with large images) - + Виберіть, чи продовжувати масштабування зображення при збільшенні понад розмір вікна (може бути повільніше з великими зображеннями) &Scaling above window size - + &Масштабування за розміром вікна The amount to zoom every scroll wheel click - + Величина масштабування при кожному натисканні колеса прокрутки Zoom amount: - + Збільшити масштаб: Choose whether scrolling zooms or moves the image (alternative can be accessed at any time by holding ctrl/cmd) - + Виберіть, чи буде прокрутка масштабувати або переміщати зображення (альтернативний варіант доступний в будь-який час, утримуючи ctrl/cmd) Scrolling &zooms - + Прокрутка та масштабування Stop the image from going past its actual size when resizing the window - you can still zoom past it though - + Зупиніть вихід зображення за межі його фактичного розміру при зміні розміру вікна - ви все ще можете збільшити його розмір Image resizes &past actual size - + Зображення змінює розміри та вставляє фактичний розмір Ignores select sides of an image when fitting to window (some sides will extend beyond the window boundaries) - + Ігнорує вибрані сторони зображення при підгонці до вікна (деякі сторони будуть виходити за межі вікна) Fit whole image - + Підійде для всього зображення Fit height - + За висотою Fit width - + За шириною On window resize: - + При зміні розміру вікна: Choose whether or not zooming in and out above 100% zoom will zoom towards the cursor - + Виберіть, чи буде збільшення та зменшення масштабу понад 100% збільшуватись у напрямку до курсору Zoom &towards cursor - + Масштабування у напрямку курсору Miscellaneous - + Різне Sort files by: - + Сортування файлів по: Name - + Ім'я Last Modified - + Остання зміна Size - + Розмір Type - + Тип Random - + Випадково A&scending - + За зростанням D&escending - + За спаданням Controls the amount of images preloaded - + Контролює кількість попередньо завантажених зображень Preloading: - + Попереднє завантаження: Disabled - + Вимкнено Adjacent - + Прилеглі Extended - + Розширені Controls whether or not qView should go back to the first item after reaching the end of a folder - + Контролює, чи повинен qView повертатися до першого елемента після досягнення кінця папки &Loop through folders - + Циклічне переключення між папками Slideshow direction: - + Напрямок слайд-шоу: Forward - + Вперед Backward - + Назад Slideshow timer: - + Таймер слайд-шоу: sec - + сек Save &recent files - + Зберегти та відновити файли &Update notifications on startup The notifications are for new qView releases - + Оновлення повідомлень при запуску Language: - + Мова: Move Back - + Повернутися назад Do Nothing - + Нічого не робити Move Forward - + Рухатися вперед After deletion: - + Після видалення: &Ask before deleting files - + Запитайте перед видаленням файлів Shortcuts - + Комбінація клавіш Action - + Дія System Language - + Мова системи Restart Required - + Потрібен перезапуск You must restart qView to change the language. - + Щоб змінити мову, необхідно перезапустити qView. @@ -1127,30 +1131,32 @@ No write permission or file is read-only. Rename... - + Перейменувати... File name: - + Ім'я файлу: Error - + Помилка Could not rename %1: No write permission or file is read-only. - + Не вдалося перейменувати %1: +Немає дозволу на запис або файл доступний тільки для читання. Could not rename %1: (Check that all characters are valid) - + Не вдалося перейменувати %1: +(Перевірте, чи всі символи правильні) @@ -1158,17 +1164,17 @@ No write permission or file is read-only. Modify Shortcuts - + Зміна комбінацій клавіш Shortcut Already Used - + Комбінація клавіш, які вже використовуються "%1" is already bound to "%2" - + "%1" вже прив'язаний до "%2" @@ -1177,22 +1183,22 @@ No write permission or file is read-only. Welcome - + Ласкаво Просимо &Enable update notifications on startup - + Увімкнути сповіщення про оновлення при запуску Thank you for downloading qView.<br>Here's a few tips to get you started: - + Дякуємо, що завантажили qView. <br> Ось декілька порад, які допоможуть вам розпочати роботу: <ul><li>Right click to access the main menu</li><li>Drag the image to reposition it</li><li>Scroll to zoom in and out</li><li>Use arrow keys to switch files</li></ul> - + <ul><li>Клацніть правою кнопкою миші для доступу до головного меню</li><li>Перетягніть зображення, щоб змінити його положення</li><li>Прокрутіть, щоб збільшити або зменшити масштаб</li><li>Використовуйте клавіші зі стрілками для перемикання файлів</li></ul> @@ -1200,202 +1206,202 @@ No write permission or file is read-only. Open - + Відкрити Open URL - + Відкрийте URL-адресу Open Containing Folder - + Відкрити вміст папки Show in Explorer - + Показати в провіднику Show in Finder - + Показати в Пошуку Show File Info - + Показати інформацію про файл Restore from Trash - + Відновити з Корзини Undo Delete - + Скасувати видалення Copy - + Копіювати Paste - + Вставити Rename - + Перейменувати Move to Trash - + Перемістити в Корзину Delete - + Видалити First File - + Перший файл Previous File - + Попередній файл Next File - + Наступний файл Last File - + Останній файл Zoom In - + Збільшити Zoom Out - + Зменшити Reset Zoom - + Скидання масштабу Original Size - + Орієнтовний розмір Rotate Right - + Повернути праворуч Rotate Left - + Повернути ліворуч Mirror - + Віддзеркалити Flip - + Перевернути Full Screen - + На весь екран Save Frame As - + Зберегти кадр як Pause - + Пауза Next Frame - + Наступний кадр Decrease Speed - + Зменшити швидкість Reset Speed - + Скинути швидкість Increase Speed - + Збільшити швидкість Toggle Slideshow - + Перемкнути слайд-шоу Options - + Опції Preferences - + Налаштування New Window - + Нове вікно Close Window - + Закрити вікно Close All - + Закрити все Quit - + Вийти Exit - + Вийти @@ -1403,33 +1409,34 @@ No write permission or file is read-only. Download - + Зааантаження qView Update Available - + Доступне оновлення qView qView %1 is available to download. - + qView %1 доступний для завантаження. &Disable Update Checking - + Вимкнути перевірку оновлень qView Update Checking Disabled - + Перевірку оновлень qView вимкнено Update notifications on startup have been disabled. You can reenable them in the options dialog. - + Сповіщення про оновлення при запуску вимкнено. +Ви можете ввімкнути їх у діалоговому вікні параметрів. From 672f1f131ddd5e8fec6d806250ecb090b0b482e1 Mon Sep 17 00:00:00 2001 From: Lee Yunseok Date: Thu, 2 Feb 2023 02:09:24 +0000 Subject: [PATCH 022/111] Translated using Weblate (Korean) Currently translated at 83.1% (222 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/ko/ --- i18n/qview_ko.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/i18n/qview_ko.ts b/i18n/qview_ko.ts index e1a1ce49..dceda542 100644 --- a/i18n/qview_ko.ts +++ b/i18n/qview_ko.ts @@ -53,7 +53,7 @@ Open With - + 다음으로 열기 @@ -117,22 +117,22 @@ &Move to Trash - + 휴지통으로 이동(&M) &Delete - + 삭제(&D) &Restore from Trash - + 휴지통에서 복구하기(&R) &Undo Delete - + 삭제 되돌리기(&U) @@ -293,13 +293,13 @@ Other Application... Open with other program for unix non-mac - + 다른 응용프로그램... Choose another app Open with other program for windows - + 다른 앱 선택 From 83426de27f3359a8c122c04be40aed182ad60e67 Mon Sep 17 00:00:00 2001 From: Yi Yunseok Date: Thu, 2 Feb 2023 02:21:04 +0000 Subject: [PATCH 023/111] Translated using Weblate (Korean) Currently translated at 100.0% (267 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/ko/ --- i18n/qview_ko.ts | 97 +++++++++++++++++++++++++----------------------- 1 file changed, 51 insertions(+), 46 deletions(-) diff --git a/i18n/qview_ko.ts b/i18n/qview_ko.ts index dceda542..f5bbe332 100644 --- a/i18n/qview_ko.ts +++ b/i18n/qview_ko.ts @@ -305,7 +305,7 @@ Other... Open with other program for macos - + 그 외... @@ -323,7 +323,7 @@ Empty - 없음 + 비어 있음 @@ -376,56 +376,59 @@ Can't delete %1: No write permission or file is read-only. - + %1 삭제 불가: +권한이 없거나 읽기 전용 파일입니다. Are you sure you want to move %1 to the Trash? - + %1 파일을 휴지통으로 이동하시겠습니까? Are you sure you want to move %1 to the Recycle Bin? - + %1 파일을 휴지통으로 이동하시겠습니까? Delete - + 삭제 Do not ask again - + 더이상 묻지 않기 Can't delete %1. - + %1 삭제 불가. Not Supported - + 지원되지 않음 This program was compiled with an old version of Qt and this feature is not available. If you see this message, please report a bug! - + 오래된 Qt 버전으로 프로그램이 컴파일돼 기능을 사용할 수 없습니다. +이 메시지를 본다면 버그로 제보해주세요! Can't undo deletion of %1: No write permission or file is read-only. - + %1 파일 삭제를 되돌릴 수 없음: +권한이 없거나 읽기 전용 파일입니다. Failed undoing deletion of %1. - + %1 파일의 복구에 실패했습니다. Rename... @@ -472,17 +475,17 @@ No write permission or file is read-only. All Applications (*.app) - + 모든 애플리케이션(*.app) Programs (*.exe *.pif *.com *.bat *.cmd) - + 프로그램 (*.exe *.pif *.com *.bat *.cmd) All Files (*) - + 모든 파일(*) @@ -551,7 +554,7 @@ No write permission or file is read-only. Supported Images - + 지원되는 이미지 @@ -569,7 +572,7 @@ No write permission or file is read-only. (default) - + (기본) @@ -667,67 +670,67 @@ No write permission or file is read-only. Choose Application - + 애플리케이션 선택 Development - + 개발 Education - + 교육 Games - + 게임 Graphics - + 그래픽 Internet - + 인터넷 Multimedia - + 멀티미디어 Office - + 오피스 Science - + 과학 Settings - + 환경설정 System - + 시스템 Utilities - + 유틸리티 Other - + 그 외 @@ -735,7 +738,7 @@ No write permission or file is read-only. Options - 환경설정 + 옵션 @@ -858,7 +861,7 @@ No write permission or file is read-only. &Quit on last window closed - + 마지막 창을 닫을 때 종료(&Q) @@ -1092,27 +1095,27 @@ No write permission or file is read-only. Move Back - + 이전으로 Do Nothing - + 아무것도 하지 않음 Move Forward - + 다음으로 After deletion: - + 삭제 후: &Ask before deleting files - + 파일을 삭제하기 전에 묻기(&A) @@ -1146,30 +1149,32 @@ No write permission or file is read-only. Rename... - 이름변경... + 이름 변경... File name: - 파일 이름: + 파일 이름: Error - 오류 + 오류 Could not rename %1: No write permission or file is read-only. - + %1 파일 이름을 변경할 수 없음: +권한이 없거나 읽기 전용 파일입니다. Could not rename %1: (Check that all characters are valid) - + %1 파일 이름을 변경할 수 없음: +(문자열이 올바른지 확인) @@ -1249,12 +1254,12 @@ No write permission or file is read-only. Restore from Trash - + 휴지통에서 복구하기 Undo Delete - + 삭제 되돌리기 @@ -1274,12 +1279,12 @@ No write permission or file is read-only. Move to Trash - + 휴지통으로 이동 Delete - + 삭제 From f2ef00ba2f163806de1ff205118e5f1ecb41fae0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Allan=20Nordh=C3=B8y?= Date: Thu, 29 Dec 2022 15:18:17 +0000 Subject: [PATCH 024/111] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 81.2% (217 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/nb_NO/ --- i18n/qview_nb_NO.ts | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/i18n/qview_nb_NO.ts b/i18n/qview_nb_NO.ts index 1c60c76f..45964fa7 100644 --- a/i18n/qview_nb_NO.ts +++ b/i18n/qview_nb_NO.ts @@ -74,12 +74,12 @@ &Open... - &Åpne… + &Åpne … Open &URL... - Åpne &nettadresse… + Åpne &nettadresse … @@ -147,7 +147,7 @@ R&ename... - &Gi nytt navn… + &Gi nytt navn … @@ -217,7 +217,7 @@ Save Frame &As... - Lagre ramme &som… + Lagre ramme &som … @@ -265,7 +265,7 @@ Preference&s... This is for the options dialog on mac - &Innstillinge&r… + &Innstillinge&r … @@ -344,7 +344,7 @@ Downloading image... - Laster ned bilde… + Laster ned bilde … @@ -355,7 +355,7 @@ Open URL... - Åpne nettadresse… + Åpne nettadresse … @@ -447,7 +447,7 @@ Ingen skrivetilgang, eller så er filen skrivebeskyttet. Save Frame As... - Lagre ramme som… + Lagre ramme som … @@ -526,7 +526,7 @@ Ingen skrivetilgang, eller så er filen skrivebeskyttet. Checking for updates... - Se etter nye versjoner… + Se etter nye versjoner … @@ -564,7 +564,7 @@ Ingen skrivetilgang, eller så er filen skrivebeskyttet. Open... - Åpne… + Åpne … @@ -1149,7 +1149,7 @@ Ingen skrivetilgang, eller så er filen skrivebeskyttet. Rename... - Gi nytt navn… + Gi nytt navn … From 64527688cd602115518b1dc1a7251e1c7cf1dcac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toni=20Est=C3=A9vez?= Date: Wed, 4 Jan 2023 19:08:38 +0000 Subject: [PATCH 025/111] Translated using Weblate (Spanish) Currently translated at 100.0% (267 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/es/ --- i18n/qview_es.ts | 224 ++++++++++++++++++++++++----------------------- 1 file changed, 113 insertions(+), 111 deletions(-) diff --git a/i18n/qview_es.ts b/i18n/qview_es.ts index fcf68ef6..4463c31c 100644 --- a/i18n/qview_es.ts +++ b/i18n/qview_es.ts @@ -41,7 +41,7 @@ Open &Recent - &Recientes + Abrir &recientes @@ -79,7 +79,7 @@ Open &URL... - Abrir &ubicación... + Abrir una &ubicación... @@ -107,12 +107,12 @@ Show in &Finder Open containing folder on macOS - Mostrar en &finder + Mostrar en el &Finder Show File &Info - &Propiedades del archivo + &Información del archivo @@ -122,7 +122,7 @@ &Delete - &Borrar + &Eliminar @@ -132,7 +132,7 @@ &Undo Delete - &Deshacer borrado + &Deshacer la eliminación @@ -162,17 +162,17 @@ Reset &Zoom - Restablecer el &zoom + Restablecer el &zum Ori&ginal Size - Tamaño ori&ginal + &Tamaño original Rotate &Right - Girar a la de&recha + Girar a la &derecha @@ -182,7 +182,7 @@ &Mirror - &Reflejar + Re&flejar @@ -197,12 +197,12 @@ &First File - P&rimer archivo + &Primer archivo Previous Fi&le - &Archivo anterior + Archivo a&nterior @@ -212,32 +212,32 @@ Las&t File - &Último archivo + Úl&timo archivo Save Frame &As... - Gu&ardar cuadro como... + &Guardar el fotograma como... Pa&use - Pa&usar + &Pausar &Next Frame - Fotograma &siguiente + &Fotograma siguiente &Decrease Speed - &Reducir velocidad + &Reducir la velocidad &Reset Speed - &Restablecer Velocidad + Restablecer la &velocidad @@ -247,13 +247,13 @@ Start S&lideshow - Iniciar &presentación + Iniciar la &presentación Option&s This is for the options dialog on windows - Opcione&s + &Opciones @@ -270,7 +270,7 @@ &About - &Acerca + &Acerca de @@ -281,13 +281,13 @@ &Welcome - &Bienvenido + &Bienvenida Clear &Menu This is for clearing the recents menu - Limpiar &Menu + &Borrar la lista @@ -299,13 +299,13 @@ Choose another app Open with other program for windows - Escoger otra aplicación + Elegir otra aplicación Other... Open with other program for macos - Otro... + Otra... @@ -313,12 +313,12 @@ Exit F&ull Screen - Salir P&antalla Completa + Salir del &modo a pantalla completa Enter F&ull Screen - Entrar P&antalla Completa + &Modo a pantalla completa @@ -339,12 +339,12 @@ Error: URL is invalid - Error: URL no válida + Error: ubicación no válida Downloading image... - Descargando imagen... + Descargando la imagen... @@ -355,7 +355,7 @@ Open URL... - Abrir URL... + Abrir una ubicación... @@ -365,12 +365,12 @@ Error: Invalid image - Error: Imagen invalida + Error: Imagen no válida URL of a supported image file: - URL de archivo de imagen compatible: + URL de un archivo de imagen compatible: @@ -387,7 +387,7 @@ No se tiene permiso de escritura o el archivo es de solo lectura. Are you sure you want to move %1 to the Recycle Bin? - ¿Seguro que quiere mover %1 a la Papelera de Reciclaje? + ¿Seguro que quiere mover %1 a la papelera de reciclaje? @@ -408,27 +408,27 @@ No se tiene permiso de escritura o el archivo es de solo lectura. Not Supported - No Compatible + No compatible This program was compiled with an old version of Qt and this feature is not available. If you see this message, please report a bug! - Este programa fue compilado con una versión antigua de Qt y esta característica no esta disponible. -Si usted ve este mensaje, por favor reporte el error! + Este programa se ha compilado con una versión obsoleta de Qt y esta función no está disponible. +Si ve este mensaje, ¡informe de un error! Can't undo deletion of %1: No write permission or file is read-only. - No se puede restablecer la eliminación de %1: -No se tienen permisos de escritura o el archivo es de solo lectura. + No se puede deshacer el borrado de %1: +No tiene permiso de escritura o el archivo es de solo lectura. Failed undoing deletion of %1. - Fallo al restablecer eliminación de %1. + Error al deshacer el borrado de %1. Rename... @@ -441,12 +441,12 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Save Frame As... - Guardar Fotograma Como... + Guardar el fotograma como... Res&ume - Rean&udar + Contin&uar @@ -456,12 +456,12 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Start S&lideshow - &Iniciar presentación + &Iniciar una presentación Stop S&lideshow - &Detener presentación + &Detener la presentación @@ -492,7 +492,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. The file to open. - Archivo a abrir. + El archivo que se abrirá. @@ -500,7 +500,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. About qView - Sobre qView + Acerca de qView @@ -510,12 +510,12 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Nightly %1 - Nightly%1 + Nocturna %1 Built with Qt %1 (%2)<br>Source code available under GPLv3 on <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurplel/qView">GitHub</a><br>Icon glyph created by Guilhem from the Noun Project<br>Copyright © %3 jurplel and qView contributors - Creado con Qt %1 (%2)<br>Código fuente disponible bajo GPLv3 en <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurplel/qView">GitHub</a><br>Icono creado por Guilhem del proyecto Noun Project<br>Copyright © %3 contribuidores jurplel y qView + Creado con Qt %1 (%2)<br>Código fuente disponible con la GPLv3 en <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurplel/qView">GitHub</a><br>Icono creado por Guilhem del Noun Project<br>Copyright © %3 jurplel y colaboradores de qView @@ -526,17 +526,17 @@ No se tienen permisos de escritura o el archivo es de solo lectura. %1 update available %1 is a version number e.g. "4.0 update available" - %1 actualización disponible + Disponible la actualización %1 No updates available - No hay nuevas actualizaciones + No hay actualizaciones disponibles Error checking for updates - Error buscando actualizaciones + Error al comprobar las actualizaciones @@ -548,7 +548,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Supported Images - Imágenes Compatibles + Imágenes compatibles @@ -566,7 +566,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. (default) - (predeterminado) + (por defecto) @@ -580,8 +580,8 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Error occurred opening "%3": %2 (Error %1) - Error abriendo "%3": -%2 (Error %1) + Error al abrir «%3»: +%2 (error %1) @@ -636,7 +636,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Aspect Ratio: - Escala: + Relación de aspecto: @@ -664,7 +664,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Choose Application - Escoger aplicación + Elija una aplicación @@ -674,7 +674,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Education - Educativos + Educación @@ -709,7 +709,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Settings - Ajustes + Configuración @@ -742,12 +742,12 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Back&ground color: - &Color de fondo: + &Color del fondo: Changes the amount of information displayed in the titlebar - Cambia la información mostrada en la barra del titulo + Cambia la información que se muestra en la barra de título @@ -757,28 +757,28 @@ No se tienen permisos de escritura o el archivo es de solo lectura. &Basic - &Basico + &Básico &Minimal - &Minimalista + &Mínimo &Practical - &Practico + &Práctico &Verbose - &Informativo + &Detallado Control when the window should resize to fit the image's actual size - Controla cuando la ventana cambia de tamaño para acomodarse a la de la imagen + Controla cuándo la ventana debe ajustarse al tamaño de la imagen @@ -793,7 +793,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. When launching - Al ejecutarse + Al inicio @@ -808,7 +808,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Control the minimum size that the window should reach when matching the image's actual size - Controla el tamaño mínimo que la ventana debe alcanzar cuando se alcanza el tamaño de imagen real + Controla el tamaño mínimo de la ventana al ajustarse al tamaño de la imagen @@ -820,7 +820,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Control the maximum size that the window should reach when matching the image's actual size - Controla el tamaño máximo que la ventana debe alcanzar cuando se alcanza el tamaño de imagen real + Controla el tamaño máximo de la ventana al ajustarse al tamaño de la imagen @@ -830,27 +830,27 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Choose whether or not the titlebar should always be dark regardless of your chosen macOS appearance - Elige si la barra de titulo deberá o no ser siempre obscura sin importar la apariencia elegida en los ajustes de macOS + Elige si la barra de título debe ser siempre oscura, independientemente de la apariencia de macOS &Titlebar always dark - &Barra de título siempre obscura + Barra de &título siempre obscura Show menubar - Mostrar barra de menú + Mostrar la barra de menú Choose whether or not to display the titlebar text while in fullscreen - Elegir si la barra de título se despliegue o no en pantalla completa + Elige si se muestra o no el texto de la barra de título a pantalla completa Show titlebar text in fullscreen - Mostrar texto de la barra de título en pantalla completa + Mostrar el texto de la barra de título a pantalla completa @@ -865,89 +865,89 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Scaling: - Escala: + Escalado: Turn this off to see individual pixels - Apaga esto para ver pixeles individuales + Desmarque para ver píxeles individuales &Bilinear filtering - Filtrado &bilineal + &Filtrado bilineal Images appear aliased (having jagged edges) without this, but it is faster - Las imágenes aparecen pixeladas (bordes escalonados) sin esto, pero es mas rápido + Sin esta opción las imágenes aparecen con bordes dentados, pero es más rápido &Image scaling - &Escala de imagen + Escalado de la &imagen Choose whether or not the image continues to be scaled when zooming above the window size (can be laggier with large images) - Controla si la imagen continua escalándose o no cuando el acercamiento sobrepasa el tamaño de la ventana (puede actuar lento con imágenes grandes) + Elige si la imagen se sigue escalando al ampliarla por encima del tamaño de la ventana (puede ser más lento con imágenes grandes) &Scaling above window size - &Escalar sobre el tamaño de ventana + &Escalar por encima del tamaño de la ventana The amount to zoom every scroll wheel click - La cantidad de acercamiento que da cada paso de desplazamiento + La variación de la ampliación con cada clic de la rueda de desplazamiento Zoom amount: - Cantidad de acercamiento: + Variación de la ampliación: Choose whether scrolling zooms or moves the image (alternative can be accessed at any time by holding ctrl/cmd) - + Elija si el desplazamiento amplía o mueve la imagen (se puede acceder a la alternativa pulsando Ctrl/Cmd) Scrolling &zooms - + &Ampliar con el desplazamiento Stop the image from going past its actual size when resizing the window - you can still zoom past it though - + Evita que la imagen sobrepase su tamaño real al redimensionar la ventana, aunque aún se pueda ampliar Image resizes &past actual size - + &Redimensionar la imagen por encima de su tamaño real Ignores select sides of an image when fitting to window (some sides will extend beyond the window boundaries) - + Ignora los lados seleccionados de una imagen al ajustarla a la ventana (algún lado se extenderá más allá del borde de la ventana) Fit whole image - + Ajustar la imagen completa Fit height - Ajustar a la altura + Ajustar la altura Fit width - Ajustar a la anchura + Ajustar la anchura @@ -957,17 +957,17 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Choose whether or not zooming in and out above 100% zoom will zoom towards the cursor - + Elija si se se ampliará o reducirá la imagen hacia el cursor al superar el 100% de ampliación Zoom &towards cursor - + Ampliación &hacia el cursor Miscellaneous - + Miscelánea @@ -1033,17 +1033,17 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Extended - + Extendida Controls whether or not qView should go back to the first item after reaching the end of a folder - + Controla si qView debe o no volver al primer elemento después de llegar al final de una carpeta &Loop through folders - + &Recorrer carpetas en &bucle @@ -1079,7 +1079,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. &Update notifications on startup The notifications are for new qView releases - + &Notificaciones de actualización al inicio @@ -1089,22 +1089,22 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Move Back - + Retroceder Do Nothing - + No hacer nada Move Forward - + Avanzar After deletion: - + Después de eliminar: @@ -1115,7 +1115,7 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Shortcuts - + Accesos directos @@ -1160,13 +1160,15 @@ No se tienen permisos de escritura o el archivo es de solo lectura. Could not rename %1: No write permission or file is read-only. - + No se ha podido cambiar el nombre de %1: +No tiene permiso de escritura o el archivo es de solo lectura. Could not rename %1: (Check that all characters are valid) - + No se ha podido cambiar el nombre de %1: +(Compruebe que todos los caracteres sean válidos) @@ -1174,12 +1176,12 @@ No write permission or file is read-only. Modify Shortcuts - + Modificar accesos directos Shortcut Already Used - + Acceso rápido en uso @@ -1198,17 +1200,17 @@ No write permission or file is read-only. &Enable update notifications on startup - + &Activar las notificaciones de actualización al inicio Thank you for downloading qView.<br>Here's a few tips to get you started: - + Gracias por descargar qView.<br>Aquí tiene algunos consejos para empezar: <ul><li>Right click to access the main menu</li><li>Drag the image to reposition it</li><li>Scroll to zoom in and out</li><li>Use arrow keys to switch files</li></ul> - + <ul><li>Haga clic derecho para acceder al menú principal</li><li>Arrastre la imagen para recolocarla</li><li>Use el desplazamiento para ampliar o reducir la imagen</li><li>Use las teclas de flecha para cambiar de archivo</li></ul> @@ -1226,12 +1228,12 @@ No write permission or file is read-only. Open Containing Folder - + Abrir la carpeta contenedora Show in Explorer - + Mostrar en el explorador From ea615338a9495f453be845d2b348e14ec6f0aaef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toni=20Est=C3=A9vez?= Date: Fri, 6 Jan 2023 20:17:30 +0000 Subject: [PATCH 026/111] Translated using Weblate (Spanish) Currently translated at 100.0% (267 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/es/ --- i18n/qview_es.ts | 82 ++++++++++++++++++++++++------------------------ 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/i18n/qview_es.ts b/i18n/qview_es.ts index 4463c31c..054de3bd 100644 --- a/i18n/qview_es.ts +++ b/i18n/qview_es.ts @@ -58,7 +58,7 @@ &Quit - &Cerrar + &Salir @@ -79,7 +79,7 @@ Open &URL... - Abrir una &ubicación... + Abrir un &URL... @@ -122,7 +122,7 @@ &Delete - &Eliminar + &Borrar @@ -132,7 +132,7 @@ &Undo Delete - &Deshacer la eliminación + &Deshacer el borrado @@ -162,7 +162,7 @@ Reset &Zoom - Restablecer el &zum + Res&tablecer la vista @@ -237,17 +237,17 @@ &Reset Speed - Restablecer la &velocidad + Res&tablecer la velocidad &Increase Speed - &Aumentar velocidad + &Aumentar la velocidad Start S&lideshow - Iniciar la &presentación + &Iniciar la presentación @@ -339,7 +339,7 @@ Error: URL is invalid - Error: ubicación no válida + Error: URL no válido @@ -355,7 +355,7 @@ Open URL... - Abrir una ubicación... + Abrir un URL... @@ -376,7 +376,7 @@ Can't delete %1: No write permission or file is read-only. - No se puede eliminar %1: + No se puede borrar %1: No se tiene permiso de escritura o el archivo es de solo lectura. @@ -664,7 +664,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Choose Application - Elija una aplicación + Elegir una aplicación @@ -830,7 +830,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Choose whether or not the titlebar should always be dark regardless of your chosen macOS appearance - Elige si la barra de título debe ser siempre oscura, independientemente de la apariencia de macOS + Elija si la barra de título debe ser siempre oscura, independientemente de la apariencia de macOS @@ -845,7 +845,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Choose whether or not to display the titlebar text while in fullscreen - Elige si se muestra o no el texto de la barra de título a pantalla completa + Elija si se muestra el texto de la barra de título a pantalla completa @@ -890,7 +890,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Choose whether or not the image continues to be scaled when zooming above the window size (can be laggier with large images) - Elige si la imagen se sigue escalando al ampliarla por encima del tamaño de la ventana (puede ser más lento con imágenes grandes) + Elija si se sigue escalando la imagen al ampliarla por encima del tamaño de la ventana (puede ser más lento con imágenes grandes) @@ -962,7 +962,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Zoom &towards cursor - Ampliación &hacia el cursor + Ampliar &hacia el cursor @@ -997,7 +997,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Random - Aleatoriamente + Al azar @@ -1038,12 +1038,12 @@ No tiene permiso de escritura o el archivo es de solo lectura. Controls whether or not qView should go back to the first item after reaching the end of a folder - Controla si qView debe o no volver al primer elemento después de llegar al final de una carpeta + Controla si qView debe retornar al primer elemento después de llegar al final de una carpeta &Loop through folders - &Recorrer carpetas en &bucle + &Recorrer las carpetas en bucle @@ -1073,7 +1073,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Save &recent files - Guardar archivos &recientes + &Guardar los archivos recientes @@ -1104,7 +1104,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. After deletion: - Después de eliminar: + Después de borrar: @@ -1115,7 +1115,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Shortcuts - Accesos directos + Accesos rápidos @@ -1148,7 +1148,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. File name: - Nombre de archivo: + Nombre del archivo: @@ -1176,7 +1176,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Modify Shortcuts - Modificar accesos directos + Modificar accesos rápidos @@ -1186,7 +1186,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. "%1" is already bound to "%2" - «%1» ya está asociado con «%2» + «%1» ya está asociado a «%2» @@ -1195,7 +1195,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Welcome - Bienvenido + Bienvenida @@ -1210,7 +1210,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. <ul><li>Right click to access the main menu</li><li>Drag the image to reposition it</li><li>Scroll to zoom in and out</li><li>Use arrow keys to switch files</li></ul> - <ul><li>Haga clic derecho para acceder al menú principal</li><li>Arrastre la imagen para recolocarla</li><li>Use el desplazamiento para ampliar o reducir la imagen</li><li>Use las teclas de flecha para cambiar de archivo</li></ul> + <ul><li>Haga clic derecho para acceder al menú principal</li><li>Arrastre la imagen para recolocarla</li><li>Use el desplazamiento para ampliarla o reducirla</li><li>Use las teclas de flecha para cambiar de archivo</li></ul> @@ -1223,7 +1223,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Open URL - Abrir URL + Abrir un URL @@ -1253,7 +1253,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Undo Delete - Deshacer borrado + Deshacer el borrado @@ -1313,7 +1313,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Reset Zoom - Reiniciar la ampliación + Restablecer la vista @@ -1323,12 +1323,12 @@ No tiene permiso de escritura o el archivo es de solo lectura. Rotate Right - Rotar hacia la derecha + Girar a la derecha Rotate Left - Rotar hacia la izquierda + Girar a la izquierda @@ -1338,7 +1338,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Flip - Invertir + Voltear @@ -1348,7 +1348,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Save Frame As - Guardar Fotograma Como + Guardar un fotograma como @@ -1358,17 +1358,17 @@ No tiene permiso de escritura o el archivo es de solo lectura. Next Frame - Siguiente fotograma + Fotograma siguiente Decrease Speed - Disminuir la velocidad + Reducir la velocidad Reset Speed - Reiniciar la velocidad + Restablecer la velocidad @@ -1378,7 +1378,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Toggle Slideshow - Activar/Desactivar Presentacion + Activar/desactivar una presentación @@ -1388,12 +1388,12 @@ No tiene permiso de escritura o el archivo es de solo lectura. Preferences - Preferencias + Configuración New Window - Nueva ventana + Ventana nueva @@ -1447,7 +1447,7 @@ No tiene permiso de escritura o el archivo es de solo lectura. Update notifications on startup have been disabled. You can reenable them in the options dialog. - Notificaciones de actualizaciones al inicio han sido desactivadas. + Se han desactivado las notificaciones de actualización al inicio. Es posible reactivarlas en el dialogo de opciones. From 5b4d8f47136b72081ce2909ed78350e21d2ca6af Mon Sep 17 00:00:00 2001 From: Dan Date: Sun, 15 Jan 2023 11:39:56 +0000 Subject: [PATCH 027/111] Translated using Weblate (Ukrainian) Currently translated at 100.0% (267 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/uk/ --- i18n/qview_uk.ts | 541 ++++++++++++++++++++++++----------------------- 1 file changed, 274 insertions(+), 267 deletions(-) diff --git a/i18n/qview_uk.ts b/i18n/qview_uk.ts index 2e15777a..1cd03ee5 100644 --- a/i18n/qview_uk.ts +++ b/i18n/qview_uk.ts @@ -6,306 +6,306 @@ Window - + Вікно &File - + Файл &Edit - + Редагувати &Go - + Вперед &View - + Переглянути &Tools - + Інструменти &Help - + Допомога Open &Recent - + Відкрити останні Empty - + Порожньо Open With - + Відкрити за допомогою &Quit - + Вийти Exit The quit action is called "Exit" on windows - + Вийти New Window - + Нове вікно &Open... - + Відкрити... Open &URL... - + Відкрити URL... Close Window - + Закрити вікно Close All Close all windows, that is - + Закрити всі Open Containing &Folder - + Відкрити цільову папку Show in E&xplorer Open containing folder on windows - + Показати в Провіднику Show in &Finder Open containing folder on macOS - + Показати в Пошуку Show File &Info - + Показати інформацію про файл &Move to Trash - + Перемістити в кошик &Delete - + Видалити &Restore from Trash - + Відновити з кошика &Undo Delete - + Скасувати видалення &Copy - + Копіювати &Paste - + Вставити R&ename... - + Перейменувати... Zoom &In - + Збільшити Zoom &Out - + Зменшити Reset &Zoom - + Скидання та масштабування Ori&ginal Size - + Орієнтовний розмір Rotate &Right - + Повернути праворуч Rotate &Left - + Повернути ліворуч &Mirror - + Віддзеркалити &Flip - + Перевернути Enter F&ull Screen - + Перейти у повноекранний режим &First File - + Перший файл Previous Fi&le - + Попередній файл &Next File - + Наступний файл Las&t File - + Останній файл Save Frame &As... - + Зберегти кадр як... Pa&use - + Призупинити &Next Frame - + Наступний кадр &Decrease Speed - + Зменшити швидкість &Reset Speed - + Скинути швидкість &Increase Speed - + Збільшити швидкість Start S&lideshow - + Почати слайд-шоу Option&s This is for the options dialog on windows - + Параметри Preference&s This is for the options dialog on non-mac unix platforms - + Налаштування Preference&s... This is for the options dialog on mac - + Налаштування та... &About - + Про застосунок &About qView This is for the about dialog on mac - + Про qView &Welcome - + Ласкаво просимо Clear &Menu This is for clearing the recents menu - + Очистити меню Other Application... Open with other program for unix non-mac - + Інший застосунок... Choose another app Open with other program for windows - + Оберіть інший застосунок Other... Open with other program for macos - + Інше... @@ -313,17 +313,17 @@ Exit F&ull Screen - + Вийти з повноекранного режиму Enter F&ull Screen - + Перейти у повноекранний режим Empty - + Порожньо @@ -334,123 +334,126 @@ Error - + Помилка Error: URL is invalid - + Помилка: URL-адреса невірна Downloading image... - + Завантажити зображення... Cancel - + Скасувати Open URL... - + Відкрити URL... Error - + Помилка Error: Invalid image - + Помилка: недійсне зображення URL of a supported image file: - + URL-адреса підтримуваного файлу зображення: Can't delete %1: No write permission or file is read-only. - + Не вдається видалити %1: +Немає дозволу на запис або файл доступний тільки для читання. Are you sure you want to move %1 to the Trash? - + Ви дійсно хочете перемістити %1 до Корзини? Are you sure you want to move %1 to the Recycle Bin? - + Ви впевнені, що хочете перемістити %1 до Кошика? Delete - + Видалити Do not ask again - + Більше не питайте Can't delete %1. - + Неможливо видалити %1. Not Supported - + Не підтримується This program was compiled with an old version of Qt and this feature is not available. If you see this message, please report a bug! - + Ця програма була скомпільована зі старою версією Qt, і ця функція недоступна. +Якщо ви бачите це повідомлення, повідомте про помилку! Can't undo deletion of %1: No write permission or file is read-only. - + Неможливо скасувати видалення %1: +Немає дозволу на запис або файл доступний тільки для читання. Failed undoing deletion of %1. - + Не вдалося скасувати видалення %1. Save Frame As... - + Зберегти кадр як... Res&ume - + Відновити Pause - + Пауза Start S&lideshow - + Почати слайд-шоу Stop S&lideshow - + Зупинити слайд-шоу @@ -458,17 +461,17 @@ No write permission or file is read-only. All Applications (*.app) - + Всі застосунки (*.app) Programs (*.exe *.pif *.com *.bat *.cmd) - + Програми (*.exe *.pif *.com *.bat *.cmd) All Files (*) - + Всі файли (*) @@ -476,12 +479,12 @@ No write permission or file is read-only. file - + файл The file to open. - + Файл для відкриття. @@ -489,43 +492,43 @@ No write permission or file is read-only. About qView - + Про qView version %1 - + версія %1 Nightly %1 - + Нічний %1 Built with Qt %1 (%2)<br>Source code available under GPLv3 on <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurplel/qView">GitHub</a><br>Icon glyph created by Guilhem from the Noun Project<br>Copyright © %3 jurplel and qView contributors - + Створено за допомогою Qt %1 (%2)<br>Вихідний код доступний під GPLv3 на <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurplel/qView">GitHub</a><br> Значок гліф , створений Гільхемом із проєкту Noun<br>Авторське право © %3 співавтори jurplel і qView Checking for updates... - + Перевірка наявності оновлень... %1 update available %1 is a version number e.g. "4.0 update available" - + %1 оновлення доступне No updates available - + Немає оновлень Error checking for updates - + Помилка перевірки оновлень @@ -533,17 +536,17 @@ No write permission or file is read-only. Supported Images - + Підтримувані зображення All Files - + Всі файли Open... - + Відкрити... @@ -551,7 +554,7 @@ No write permission or file is read-only. (default) - + (за замовчуванням) @@ -559,13 +562,14 @@ No write permission or file is read-only. Error - + Помилка Error occurred opening "%3": %2 (Error %1) - + Виникла помилка при відкритті "%3": +%2 (Помилка %1) @@ -573,12 +577,12 @@ No write permission or file is read-only. File Info - + Інформація про файл Name: - + Ім'я: @@ -590,57 +594,57 @@ No write permission or file is read-only. error - + помилка Type: - + Тип: Location: - + Місцезнаходження: Size: - + Розмір: Modified: - + Змінено: Dimensions: - + Розміри: Aspect Ratio: - + Співвідношення сторін: Frames: - + Кадри: Refresh - + Оновити %1 (%2 bytes) - + %1 (%2 байт) %1 x %2 (%3 MP) - + %1 x %2 (%3 МР) @@ -648,67 +652,67 @@ No write permission or file is read-only. Choose Application - + Оберіть застосунок Development - + Розробка Education - + Освіта Games - + Ігри Graphics - + Графіка Internet - + Інтернет Multimedia - + Мультимедіа Office - + Офіс Science - + Наука Settings - + Налаштування System - + Система Utilities - + Утиліти Other - + Інше @@ -716,410 +720,410 @@ No write permission or file is read-only. Options - + Опції Window - + Вікно Back&ground color: - + Колір фону: Changes the amount of information displayed in the titlebar - + Зміна обсягу інформації, що відображається в рядку заголовка Titlebar text: - + Текст заголовка: &Basic - + Основний &Minimal - + Мінімальний &Practical - + Практичний &Verbose - + Багатослівний Control when the window should resize to fit the image's actual size - + Керування тим, коли вікно повинно змінювати розмір відповідно до реального розміру зображення Window matches image size: - + Вікно відповідає розміру зображення: Never - + Ніколи When launching - + При запуску When opening images - + При відкритті зображень Minimum size: - + Мінімальний розмір: Control the minimum size that the window should reach when matching the image's actual size - + Керування мінімальним розміром, якого повинно досягати вікно при відповідності фактичного розміру зображення % of screen size - + % від розміру екрану Control the maximum size that the window should reach when matching the image's actual size - + Керування максимальним розміром, якого повинно досягати вікно при відповідності реальному розміру зображення Maximum size: - + Максимальний розмір: Choose whether or not the titlebar should always be dark regardless of your chosen macOS appearance - + Виберіть, чи повинен рядок заголовка завжди бути темним, незалежно від обраного вами зовнішнього вигляду macOS &Titlebar always dark - + &Титульний рядок завжди темний Show menubar - + Показати меню Choose whether or not to display the titlebar text while in fullscreen - + Виберіть, чи відображати текст заголовка в повноекранному режимі Show titlebar text in fullscreen - + Показати текст заголовка на весь екран &Quit on last window closed - + Вихід при закритті останнього вікна Image - + Зображення Scaling: - + Масштабування: Turn this off to see individual pixels - + Вимкніть, щоб побачити окремі пікселі &Bilinear filtering - + Білінійна фільтрація Images appear aliased (having jagged edges) without this, but it is faster - + Зображення виглядають аліасними (з нерівними краями) і без цього, але так швидше &Image scaling - + Масштабування зображення Choose whether or not the image continues to be scaled when zooming above the window size (can be laggier with large images) - + Виберіть, чи продовжувати масштабування зображення при збільшенні понад розмір вікна (може бути повільніше з великими зображеннями) &Scaling above window size - + &Масштабування за розміром вікна The amount to zoom every scroll wheel click - + Величина масштабування при кожному натисканні колеса прокрутки Zoom amount: - + Збільшити масштаб: Choose whether scrolling zooms or moves the image (alternative can be accessed at any time by holding ctrl/cmd) - + Виберіть, чи буде прокрутка масштабувати або переміщати зображення (альтернативний варіант доступний в будь-який час, утримуючи ctrl/cmd) Scrolling &zooms - + Прокрутка та масштабування Stop the image from going past its actual size when resizing the window - you can still zoom past it though - + Зупиніть вихід зображення за межі його фактичного розміру при зміні розміру вікна - ви все ще можете збільшити його розмір Image resizes &past actual size - + Зображення змінює розміри та вставляє фактичний розмір Ignores select sides of an image when fitting to window (some sides will extend beyond the window boundaries) - + Ігнорує вибрані сторони зображення при підгонці до вікна (деякі сторони будуть виходити за межі вікна) Fit whole image - + Підійде для всього зображення Fit height - + За висотою Fit width - + За шириною On window resize: - + При зміні розміру вікна: Choose whether or not zooming in and out above 100% zoom will zoom towards the cursor - + Виберіть, чи буде збільшення та зменшення масштабу понад 100% збільшуватись у напрямку до курсору Zoom &towards cursor - + Масштабування у напрямку курсору Miscellaneous - + Різне Sort files by: - + Сортування файлів по: Name - + Ім'я Last Modified - + Остання зміна Size - + Розмір Type - + Тип Random - + Випадково A&scending - + За зростанням D&escending - + За спаданням Controls the amount of images preloaded - + Контролює кількість попередньо завантажених зображень Preloading: - + Попереднє завантаження: Disabled - + Вимкнено Adjacent - + Прилеглі Extended - + Розширені Controls whether or not qView should go back to the first item after reaching the end of a folder - + Контролює, чи повинен qView повертатися до першого елемента після досягнення кінця папки &Loop through folders - + Циклічне переключення між папками Slideshow direction: - + Напрямок слайд-шоу: Forward - + Вперед Backward - + Назад Slideshow timer: - + Таймер слайд-шоу: sec - + сек Save &recent files - + Зберегти та відновити файли &Update notifications on startup The notifications are for new qView releases - + Оновлення повідомлень при запуску Language: - + Мова: Move Back - + Повернутися назад Do Nothing - + Нічого не робити Move Forward - + Рухатися вперед After deletion: - + Після видалення: &Ask before deleting files - + Запитайте перед видаленням файлів Shortcuts - + Комбінація клавіш Action - + Дія System Language - + Мова системи Restart Required - + Потрібен перезапуск You must restart qView to change the language. - + Щоб змінити мову, необхідно перезапустити qView. @@ -1127,30 +1131,32 @@ No write permission or file is read-only. Rename... - + Перейменувати... File name: - + Ім'я файлу: Error - + Помилка Could not rename %1: No write permission or file is read-only. - + Не вдалося перейменувати %1: +Немає дозволу на запис або файл доступний тільки для читання. Could not rename %1: (Check that all characters are valid) - + Не вдалося перейменувати %1: +(Перевірте, чи всі символи правильні) @@ -1158,17 +1164,17 @@ No write permission or file is read-only. Modify Shortcuts - + Зміна комбінацій клавіш Shortcut Already Used - + Комбінація клавіш, які вже використовуються "%1" is already bound to "%2" - + "%1" вже прив'язаний до "%2" @@ -1177,22 +1183,22 @@ No write permission or file is read-only. Welcome - + Ласкаво Просимо &Enable update notifications on startup - + Увімкнути сповіщення про оновлення при запуску Thank you for downloading qView.<br>Here's a few tips to get you started: - + Дякуємо, що завантажили qView. <br> Ось декілька порад, які допоможуть вам розпочати роботу: <ul><li>Right click to access the main menu</li><li>Drag the image to reposition it</li><li>Scroll to zoom in and out</li><li>Use arrow keys to switch files</li></ul> - + <ul><li>Клацніть правою кнопкою миші для доступу до головного меню</li><li>Перетягніть зображення, щоб змінити його положення</li><li>Прокрутіть, щоб збільшити або зменшити масштаб</li><li>Використовуйте клавіші зі стрілками для перемикання файлів</li></ul> @@ -1200,202 +1206,202 @@ No write permission or file is read-only. Open - + Відкрити Open URL - + Відкрийте URL-адресу Open Containing Folder - + Відкрити вміст папки Show in Explorer - + Показати в провіднику Show in Finder - + Показати в Пошуку Show File Info - + Показати інформацію про файл Restore from Trash - + Відновити з Корзини Undo Delete - + Скасувати видалення Copy - + Копіювати Paste - + Вставити Rename - + Перейменувати Move to Trash - + Перемістити в Корзину Delete - + Видалити First File - + Перший файл Previous File - + Попередній файл Next File - + Наступний файл Last File - + Останній файл Zoom In - + Збільшити Zoom Out - + Зменшити Reset Zoom - + Скидання масштабу Original Size - + Орієнтовний розмір Rotate Right - + Повернути праворуч Rotate Left - + Повернути ліворуч Mirror - + Віддзеркалити Flip - + Перевернути Full Screen - + На весь екран Save Frame As - + Зберегти кадр як Pause - + Пауза Next Frame - + Наступний кадр Decrease Speed - + Зменшити швидкість Reset Speed - + Скинути швидкість Increase Speed - + Збільшити швидкість Toggle Slideshow - + Перемкнути слайд-шоу Options - + Опції Preferences - + Налаштування New Window - + Нове вікно Close Window - + Закрити вікно Close All - + Закрити все Quit - + Вийти Exit - + Вийти @@ -1403,33 +1409,34 @@ No write permission or file is read-only. Download - + Зааантаження qView Update Available - + Доступне оновлення qView qView %1 is available to download. - + qView %1 доступний для завантаження. &Disable Update Checking - + Вимкнути перевірку оновлень qView Update Checking Disabled - + Перевірку оновлень qView вимкнено Update notifications on startup have been disabled. You can reenable them in the options dialog. - + Сповіщення про оновлення при запуску вимкнено. +Ви можете ввімкнути їх у діалоговому вікні параметрів. From 34f1b8e4c4803850b4aa347ba0f51a84fd1aa07d Mon Sep 17 00:00:00 2001 From: Lee Yunseok Date: Thu, 2 Feb 2023 02:09:24 +0000 Subject: [PATCH 028/111] Translated using Weblate (Korean) Currently translated at 83.1% (222 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/ko/ --- i18n/qview_ko.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/i18n/qview_ko.ts b/i18n/qview_ko.ts index e1a1ce49..dceda542 100644 --- a/i18n/qview_ko.ts +++ b/i18n/qview_ko.ts @@ -53,7 +53,7 @@ Open With - + 다음으로 열기 @@ -117,22 +117,22 @@ &Move to Trash - + 휴지통으로 이동(&M) &Delete - + 삭제(&D) &Restore from Trash - + 휴지통에서 복구하기(&R) &Undo Delete - + 삭제 되돌리기(&U) @@ -293,13 +293,13 @@ Other Application... Open with other program for unix non-mac - + 다른 응용프로그램... Choose another app Open with other program for windows - + 다른 앱 선택 From 9318c0cbf77053ef43506e1a3dabdcf330ac2685 Mon Sep 17 00:00:00 2001 From: Yi Yunseok Date: Thu, 2 Feb 2023 02:21:04 +0000 Subject: [PATCH 029/111] Translated using Weblate (Korean) Currently translated at 100.0% (267 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/ko/ --- i18n/qview_ko.ts | 97 +++++++++++++++++++++++++----------------------- 1 file changed, 51 insertions(+), 46 deletions(-) diff --git a/i18n/qview_ko.ts b/i18n/qview_ko.ts index dceda542..f5bbe332 100644 --- a/i18n/qview_ko.ts +++ b/i18n/qview_ko.ts @@ -305,7 +305,7 @@ Other... Open with other program for macos - + 그 외... @@ -323,7 +323,7 @@ Empty - 없음 + 비어 있음 @@ -376,56 +376,59 @@ Can't delete %1: No write permission or file is read-only. - + %1 삭제 불가: +권한이 없거나 읽기 전용 파일입니다. Are you sure you want to move %1 to the Trash? - + %1 파일을 휴지통으로 이동하시겠습니까? Are you sure you want to move %1 to the Recycle Bin? - + %1 파일을 휴지통으로 이동하시겠습니까? Delete - + 삭제 Do not ask again - + 더이상 묻지 않기 Can't delete %1. - + %1 삭제 불가. Not Supported - + 지원되지 않음 This program was compiled with an old version of Qt and this feature is not available. If you see this message, please report a bug! - + 오래된 Qt 버전으로 프로그램이 컴파일돼 기능을 사용할 수 없습니다. +이 메시지를 본다면 버그로 제보해주세요! Can't undo deletion of %1: No write permission or file is read-only. - + %1 파일 삭제를 되돌릴 수 없음: +권한이 없거나 읽기 전용 파일입니다. Failed undoing deletion of %1. - + %1 파일의 복구에 실패했습니다. Rename... @@ -472,17 +475,17 @@ No write permission or file is read-only. All Applications (*.app) - + 모든 애플리케이션(*.app) Programs (*.exe *.pif *.com *.bat *.cmd) - + 프로그램 (*.exe *.pif *.com *.bat *.cmd) All Files (*) - + 모든 파일(*) @@ -551,7 +554,7 @@ No write permission or file is read-only. Supported Images - + 지원되는 이미지 @@ -569,7 +572,7 @@ No write permission or file is read-only. (default) - + (기본) @@ -667,67 +670,67 @@ No write permission or file is read-only. Choose Application - + 애플리케이션 선택 Development - + 개발 Education - + 교육 Games - + 게임 Graphics - + 그래픽 Internet - + 인터넷 Multimedia - + 멀티미디어 Office - + 오피스 Science - + 과학 Settings - + 환경설정 System - + 시스템 Utilities - + 유틸리티 Other - + 그 외 @@ -735,7 +738,7 @@ No write permission or file is read-only. Options - 환경설정 + 옵션 @@ -858,7 +861,7 @@ No write permission or file is read-only. &Quit on last window closed - + 마지막 창을 닫을 때 종료(&Q) @@ -1092,27 +1095,27 @@ No write permission or file is read-only. Move Back - + 이전으로 Do Nothing - + 아무것도 하지 않음 Move Forward - + 다음으로 After deletion: - + 삭제 후: &Ask before deleting files - + 파일을 삭제하기 전에 묻기(&A) @@ -1146,30 +1149,32 @@ No write permission or file is read-only. Rename... - 이름변경... + 이름 변경... File name: - 파일 이름: + 파일 이름: Error - 오류 + 오류 Could not rename %1: No write permission or file is read-only. - + %1 파일 이름을 변경할 수 없음: +권한이 없거나 읽기 전용 파일입니다. Could not rename %1: (Check that all characters are valid) - + %1 파일 이름을 변경할 수 없음: +(문자열이 올바른지 확인) @@ -1249,12 +1254,12 @@ No write permission or file is read-only. Restore from Trash - + 휴지통에서 복구하기 Undo Delete - + 삭제 되돌리기 @@ -1274,12 +1279,12 @@ No write permission or file is read-only. Move to Trash - + 휴지통으로 이동 Delete - + 삭제 From 805149e5980a754294181f8c81666d8491346516 Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Sat, 18 Feb 2023 16:52:18 -0500 Subject: [PATCH 030/111] Fix .ico From https://github.com/jdpurcell/qView/commit/6304310d84091c15beb513c1ed3088f54ec1803f Fixes #572 Thanks @jdpurcell --- src/qvimagecore.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/qvimagecore.cpp b/src/qvimagecore.cpp index f6d00f3b..3c0ebbac 100644 --- a/src/qvimagecore.cpp +++ b/src/qvimagecore.cpp @@ -204,13 +204,15 @@ void QVImageCore::loadPixmap(const ReadData &readData) loadedMovie.setFileName(currentFileDetails.fileInfo.absoluteFilePath()); } - currentFileDetails.isMovieLoaded = loadedMovie.isValid() && loadedMovie.frameCount() != 1; - - if (currentFileDetails.isMovieLoaded) + if (loadedMovie.isValid() && loadedMovie.frameCount() != 1) loadedMovie.start(); - else if (auto device = loadedMovie.device()) - device->close(); + currentFileDetails.isMovieLoaded = loadedMovie.state() == QMovie::Running; + + if (!currentFileDetails.isMovieLoaded) + if (auto device = loadedMovie.device()) + device->close(); + currentFileDetails.timeSinceLoaded.start(); emit fileChanged(); From 47712a27f2c9df7200d22b2ca411a177155b8e02 Mon Sep 17 00:00:00 2001 From: Christian Elbrianno Date: Thu, 23 Feb 2023 19:15:46 +0100 Subject: [PATCH 031/111] Added translation using Weblate (Indonesian) --- i18n/qview_id.ts | 1435 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1435 insertions(+) create mode 100644 i18n/qview_id.ts diff --git a/i18n/qview_id.ts b/i18n/qview_id.ts new file mode 100644 index 00000000..a7166526 --- /dev/null +++ b/i18n/qview_id.ts @@ -0,0 +1,1435 @@ + + + + + ActionManager + + + Window + + + + + &File + + + + + &Edit + + + + + &Go + + + + + &View + + + + + &Tools + + + + + &Help + + + + + Open &Recent + + + + + + + Empty + + + + + Open With + + + + + &Quit + + + + + Exit + The quit action is called "Exit" on windows + + + + + New Window + + + + + &Open... + + + + + Open &URL... + + + + + Close Window + + + + + Close All + Close all windows, that is + + + + + Open Containing &Folder + + + + + Show in E&xplorer + Open containing folder on windows + + + + + Show in &Finder + Open containing folder on macOS + + + + + Show File &Info + + + + + &Move to Trash + + + + + &Delete + + + + + &Restore from Trash + + + + + &Undo Delete + + + + + &Copy + + + + + &Paste + + + + + R&ename... + + + + + Zoom &In + + + + + Zoom &Out + + + + + Reset &Zoom + + + + + Ori&ginal Size + + + + + Rotate &Right + + + + + Rotate &Left + + + + + &Mirror + + + + + &Flip + + + + + Enter F&ull Screen + + + + + &First File + + + + + Previous Fi&le + + + + + &Next File + + + + + Las&t File + + + + + Save Frame &As... + + + + + Pa&use + + + + + &Next Frame + + + + + &Decrease Speed + + + + + &Reset Speed + + + + + &Increase Speed + + + + + Start S&lideshow + + + + + Option&s + This is for the options dialog on windows + + + + + Preference&s + This is for the options dialog on non-mac unix platforms + + + + + Preference&s... + This is for the options dialog on mac + + + + + &About + + + + + &About qView + This is for the about dialog on mac + + + + + &Welcome + + + + + Clear &Menu + This is for clearing the recents menu + + + + + Other Application... + Open with other program for unix non-mac + + + + + Choose another app + Open with other program for windows + + + + + Other... + Open with other program for macos + + + + + MainWindow + + + Exit F&ull Screen + + + + + Enter F&ull Screen + + + + + Empty + + + + + + + + + + + Error + + + + + Error: URL is invalid + + + + + Downloading image... + + + + + Cancel + + + + + + Open URL... + + + + + Error + + + + + Error: Invalid image + + + + + URL of a supported image file: + + + + + Can't delete %1: +No write permission or file is read-only. + + + + + Are you sure you want to move %1 to the Trash? + + + + + Are you sure you want to move %1 to the Recycle Bin? + + + + + Delete + + + + + Do not ask again + + + + + Can't delete %1. + + + + + + Not Supported + + + + + + This program was compiled with an old version of Qt and this feature is not available. +If you see this message, please report a bug! + + + + + Can't undo deletion of %1: +No write permission or file is read-only. + + + + + Failed undoing deletion of %1. + + + + + Save Frame As... + + + + + Res&ume + + + + + Pause + + + + + Start S&lideshow + + + + + Stop S&lideshow + + + + + OpenWith + + + All Applications (*.app) + + + + + Programs (*.exe *.pif *.com *.bat *.cmd) + + + + + All Files (*) + + + + + QObject + + + file + + + + + The file to open. + + + + + QVAboutDialog + + + About qView + + + + + version %1 + + + + + Nightly %1 + + + + + Built with Qt %1 (%2)<br>Source code available under GPLv3 on <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurplel/qView">GitHub</a><br>Icon glyph created by Guilhem from the Noun Project<br>Copyright © %3 jurplel and qView contributors + + + + + Checking for updates... + + + + + %1 update available + %1 is a version number e.g. "4.0 update available" + + + + + No updates available + + + + + Error checking for updates + + + + + QVApplication + + + Supported Images + + + + + All Files + + + + + Open... + + + + + QVCocoaFunctions + + + (default) + + + + + QVGraphicsView + + + Error + + + + + Error occurred opening "%3": +%2 (Error %1) + + + + + QVInfoDialog + + + File Info + + + + + Name: + + + + + + + + + + + + error + + + + + Type: + + + + + Location: + + + + + Size: + + + + + Modified: + + + + + Dimensions: + + + + + Aspect Ratio: + + + + + Frames: + + + + + Refresh + + + + + %1 (%2 bytes) + + + + + %1 x %2 (%3 MP) + + + + + QVOpenWithDialog + + + Choose Application + + + + + Development + + + + + Education + + + + + Games + + + + + Graphics + + + + + Internet + + + + + Multimedia + + + + + Office + + + + + Science + + + + + Settings + + + + + System + + + + + Utilities + + + + + Other + + + + + QVOptionsDialog + + + Options + + + + + Window + + + + + Back&ground color: + + + + + Changes the amount of information displayed in the titlebar + + + + + Titlebar text: + + + + + &Basic + + + + + &Minimal + + + + + &Practical + + + + + &Verbose + + + + + + Control when the window should resize to fit the image's actual size + + + + + Window matches image size: + + + + + Never + + + + + When launching + + + + + When opening images + + + + + Minimum size: + + + + + Control the minimum size that the window should reach when matching the image's actual size + + + + + + % of screen size + + + + + + Control the maximum size that the window should reach when matching the image's actual size + + + + + Maximum size: + + + + + Choose whether or not the titlebar should always be dark regardless of your chosen macOS appearance + + + + + &Titlebar always dark + + + + + Show menubar + + + + + Choose whether or not to display the titlebar text while in fullscreen + + + + + Show titlebar text in fullscreen + + + + + &Quit on last window closed + + + + + Image + + + + + Scaling: + + + + + Turn this off to see individual pixels + + + + + &Bilinear filtering + + + + + Images appear aliased (having jagged edges) without this, but it is faster + + + + + &Image scaling + + + + + Choose whether or not the image continues to be scaled when zooming above the window size (can be laggier with large images) + + + + + &Scaling above window size + + + + + + The amount to zoom every scroll wheel click + + + + + Zoom amount: + + + + + Choose whether scrolling zooms or moves the image (alternative can be accessed at any time by holding ctrl/cmd) + + + + + Scrolling &zooms + + + + + Stop the image from going past its actual size when resizing the window - you can still zoom past it though + + + + + Image resizes &past actual size + + + + + + Ignores select sides of an image when fitting to window (some sides will extend beyond the window boundaries) + + + + + Fit whole image + + + + + Fit height + + + + + Fit width + + + + + On window resize: + + + + + Choose whether or not zooming in and out above 100% zoom will zoom towards the cursor + + + + + Zoom &towards cursor + + + + + Miscellaneous + + + + + Sort files by: + + + + + Name + + + + + Last Modified + + + + + Size + + + + + Type + + + + + Random + + + + + A&scending + + + + + D&escending + + + + + + Controls the amount of images preloaded + + + + + Preloading: + + + + + Disabled + + + + + Adjacent + + + + + Extended + + + + + Controls whether or not qView should go back to the first item after reaching the end of a folder + + + + + &Loop through folders + + + + + Slideshow direction: + + + + + Forward + + + + + Backward + + + + + Slideshow timer: + + + + + sec + + + + + Save &recent files + + + + + &Update notifications on startup + The notifications are for new qView releases + + + + + Language: + + + + + Move Back + + + + + Do Nothing + + + + + Move Forward + + + + + After deletion: + + + + + &Ask before deleting files + + + + + + Shortcuts + + + + + Action + + + + + System Language + + + + + Restart Required + + + + + You must restart qView to change the language. + + + + + QVRenameDialog + + + Rename... + + + + + File name: + + + + + + Error + + + + + Could not rename %1: +No write permission or file is read-only. + + + + + Could not rename %1: +(Check that all characters are valid) + + + + + QVShortcutDialog + + + Modify Shortcuts + + + + + Shortcut Already Used + + + + + "%1" is already bound to "%2" + + + + + QVWelcomeDialog + + + + Welcome + + + + + &Enable update notifications on startup + + + + + Thank you for downloading qView.<br>Here's a few tips to get you started: + + + + + <ul><li>Right click to access the main menu</li><li>Drag the image to reposition it</li><li>Scroll to zoom in and out</li><li>Use arrow keys to switch files</li></ul> + + + + + ShortcutManager + + + Open + + + + + Open URL + + + + + Open Containing Folder + + + + + Show in Explorer + + + + + Show in Finder + + + + + Show File Info + + + + + Restore from Trash + + + + + Undo Delete + + + + + Copy + + + + + Paste + + + + + Rename + + + + + Move to Trash + + + + + Delete + + + + + First File + + + + + Previous File + + + + + Next File + + + + + Last File + + + + + Zoom In + + + + + Zoom Out + + + + + Reset Zoom + + + + + Original Size + + + + + Rotate Right + + + + + Rotate Left + + + + + Mirror + + + + + Flip + + + + + Full Screen + + + + + Save Frame As + + + + + Pause + + + + + Next Frame + + + + + Decrease Speed + + + + + Reset Speed + + + + + Increase Speed + + + + + Toggle Slideshow + + + + + Options + + + + + Preferences + + + + + New Window + + + + + Close Window + + + + + Close All + + + + + Quit + + + + + Exit + + + + + UpdateChecker + + + Download + + + + + qView Update Available + + + + + qView %1 is available to download. + + + + + &Disable Update Checking + + + + + qView Update Checking Disabled + + + + + Update notifications on startup have been disabled. +You can reenable them in the options dialog. + + + + From d401b6c449803eb9accf8b4e898cc983ca86c0e1 Mon Sep 17 00:00:00 2001 From: Christian Elbrianno Date: Thu, 23 Feb 2023 18:17:58 +0000 Subject: [PATCH 032/111] Translated using Weblate (Indonesian) Currently translated at 6.7% (18 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/id/ --- i18n/qview_id.ts | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/i18n/qview_id.ts b/i18n/qview_id.ts index a7166526..150430cf 100644 --- a/i18n/qview_id.ts +++ b/i18n/qview_id.ts @@ -6,17 +6,17 @@ Window - + Jendela &File - + &Berkas &Edit - + &Sunting @@ -26,71 +26,71 @@ &View - + &Tampilkan &Tools - + &Peralatan &Help - + &Bantuan Open &Recent - + Buka &Terakhir Empty - + Kosong Open With - + Buka Dengan &Quit - + &Keluar Exit The quit action is called "Exit" on windows - + Keluar New Window - + Jendela Baru &Open... - + &Buka... Open &URL... - + Buka &URL... Close Window - + Tutup Jendela Close All Close all windows, that is - + Tutup Semua @@ -1408,12 +1408,12 @@ No write permission or file is read-only. qView Update Available - + Pembaharuan qView Tersedia qView %1 is available to download. - + qView %1 tersedia untuk diunduh. From 91266fecf139dcdb7adbe201dd2bec97c16ac634 Mon Sep 17 00:00:00 2001 From: Reza Almanda Date: Sun, 19 Mar 2023 01:08:09 +0000 Subject: [PATCH 033/111] Translated using Weblate (Indonesian) Currently translated at 14.2% (38 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/id/ --- i18n/qview_id.ts | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/i18n/qview_id.ts b/i18n/qview_id.ts index 150430cf..f08dfe3e 100644 --- a/i18n/qview_id.ts +++ b/i18n/qview_id.ts @@ -21,7 +21,7 @@ &Go - + &Go @@ -95,99 +95,99 @@ Open Containing &Folder - + Buka isi &Folder Show in E&xplorer Open containing folder on windows - + Tampilkan di E&xplorer Show in &Finder Open containing folder on macOS - + Tampilkan di &Finder Show File &Info - + Tampilkan File &Info &Move to Trash - + &Pindah ke Tempat Sampah &Delete - + &Hapus &Restore from Trash - + &Pulihkan dari Sampah &Undo Delete - + &Batalkan penghapusan &Copy - + &Salin &Paste - + &Tempel R&ename... - + U&bah nama... Zoom &In - + Perbe &sar Zoom &Out - + Perke &cil Reset &Zoom - + Setel Ulang &Zoom Ori&ginal Size - + Ori&ginal Ukuran Rotate &Right - + Putar &Kanan Rotate &Left - + Putar &Kiri &Mirror - + &Cermin &Flip - + &Balik From ab1fe370cdcb325c2a2251bf2322baa1385eedcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szab=C3=B3=20Istv=C3=A1n?= Date: Sat, 25 Mar 2023 10:17:50 +0100 Subject: [PATCH 034/111] Added translation using Weblate (Hungarian) --- i18n/qview_hu.ts | 1435 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1435 insertions(+) create mode 100644 i18n/qview_hu.ts diff --git a/i18n/qview_hu.ts b/i18n/qview_hu.ts new file mode 100644 index 00000000..32018dc3 --- /dev/null +++ b/i18n/qview_hu.ts @@ -0,0 +1,1435 @@ + + + + + ActionManager + + + Window + + + + + &File + + + + + &Edit + + + + + &Go + + + + + &View + + + + + &Tools + + + + + &Help + + + + + Open &Recent + + + + + + + Empty + + + + + Open With + + + + + &Quit + + + + + Exit + The quit action is called "Exit" on windows + + + + + New Window + + + + + &Open... + + + + + Open &URL... + + + + + Close Window + + + + + Close All + Close all windows, that is + + + + + Open Containing &Folder + + + + + Show in E&xplorer + Open containing folder on windows + + + + + Show in &Finder + Open containing folder on macOS + + + + + Show File &Info + + + + + &Move to Trash + + + + + &Delete + + + + + &Restore from Trash + + + + + &Undo Delete + + + + + &Copy + + + + + &Paste + + + + + R&ename... + + + + + Zoom &In + + + + + Zoom &Out + + + + + Reset &Zoom + + + + + Ori&ginal Size + + + + + Rotate &Right + + + + + Rotate &Left + + + + + &Mirror + + + + + &Flip + + + + + Enter F&ull Screen + + + + + &First File + + + + + Previous Fi&le + + + + + &Next File + + + + + Las&t File + + + + + Save Frame &As... + + + + + Pa&use + + + + + &Next Frame + + + + + &Decrease Speed + + + + + &Reset Speed + + + + + &Increase Speed + + + + + Start S&lideshow + + + + + Option&s + This is for the options dialog on windows + + + + + Preference&s + This is for the options dialog on non-mac unix platforms + + + + + Preference&s... + This is for the options dialog on mac + + + + + &About + + + + + &About qView + This is for the about dialog on mac + + + + + &Welcome + + + + + Clear &Menu + This is for clearing the recents menu + + + + + Other Application... + Open with other program for unix non-mac + + + + + Choose another app + Open with other program for windows + + + + + Other... + Open with other program for macos + + + + + MainWindow + + + Exit F&ull Screen + + + + + Enter F&ull Screen + + + + + Empty + + + + + + + + + + + Error + + + + + Error: URL is invalid + + + + + Downloading image... + + + + + Cancel + + + + + + Open URL... + + + + + Error + + + + + Error: Invalid image + + + + + URL of a supported image file: + + + + + Can't delete %1: +No write permission or file is read-only. + + + + + Are you sure you want to move %1 to the Trash? + + + + + Are you sure you want to move %1 to the Recycle Bin? + + + + + Delete + + + + + Do not ask again + + + + + Can't delete %1. + + + + + + Not Supported + + + + + + This program was compiled with an old version of Qt and this feature is not available. +If you see this message, please report a bug! + + + + + Can't undo deletion of %1: +No write permission or file is read-only. + + + + + Failed undoing deletion of %1. + + + + + Save Frame As... + + + + + Res&ume + + + + + Pause + + + + + Start S&lideshow + + + + + Stop S&lideshow + + + + + OpenWith + + + All Applications (*.app) + + + + + Programs (*.exe *.pif *.com *.bat *.cmd) + + + + + All Files (*) + + + + + QObject + + + file + + + + + The file to open. + + + + + QVAboutDialog + + + About qView + + + + + version %1 + + + + + Nightly %1 + + + + + Built with Qt %1 (%2)<br>Source code available under GPLv3 on <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurplel/qView">GitHub</a><br>Icon glyph created by Guilhem from the Noun Project<br>Copyright © %3 jurplel and qView contributors + + + + + Checking for updates... + + + + + %1 update available + %1 is a version number e.g. "4.0 update available" + + + + + No updates available + + + + + Error checking for updates + + + + + QVApplication + + + Supported Images + + + + + All Files + + + + + Open... + + + + + QVCocoaFunctions + + + (default) + + + + + QVGraphicsView + + + Error + + + + + Error occurred opening "%3": +%2 (Error %1) + + + + + QVInfoDialog + + + File Info + + + + + Name: + + + + + + + + + + + + error + + + + + Type: + + + + + Location: + + + + + Size: + + + + + Modified: + + + + + Dimensions: + + + + + Aspect Ratio: + + + + + Frames: + + + + + Refresh + + + + + %1 (%2 bytes) + + + + + %1 x %2 (%3 MP) + + + + + QVOpenWithDialog + + + Choose Application + + + + + Development + + + + + Education + + + + + Games + + + + + Graphics + + + + + Internet + + + + + Multimedia + + + + + Office + + + + + Science + + + + + Settings + + + + + System + + + + + Utilities + + + + + Other + + + + + QVOptionsDialog + + + Options + + + + + Window + + + + + Back&ground color: + + + + + Changes the amount of information displayed in the titlebar + + + + + Titlebar text: + + + + + &Basic + + + + + &Minimal + + + + + &Practical + + + + + &Verbose + + + + + + Control when the window should resize to fit the image's actual size + + + + + Window matches image size: + + + + + Never + + + + + When launching + + + + + When opening images + + + + + Minimum size: + + + + + Control the minimum size that the window should reach when matching the image's actual size + + + + + + % of screen size + + + + + + Control the maximum size that the window should reach when matching the image's actual size + + + + + Maximum size: + + + + + Choose whether or not the titlebar should always be dark regardless of your chosen macOS appearance + + + + + &Titlebar always dark + + + + + Show menubar + + + + + Choose whether or not to display the titlebar text while in fullscreen + + + + + Show titlebar text in fullscreen + + + + + &Quit on last window closed + + + + + Image + + + + + Scaling: + + + + + Turn this off to see individual pixels + + + + + &Bilinear filtering + + + + + Images appear aliased (having jagged edges) without this, but it is faster + + + + + &Image scaling + + + + + Choose whether or not the image continues to be scaled when zooming above the window size (can be laggier with large images) + + + + + &Scaling above window size + + + + + + The amount to zoom every scroll wheel click + + + + + Zoom amount: + + + + + Choose whether scrolling zooms or moves the image (alternative can be accessed at any time by holding ctrl/cmd) + + + + + Scrolling &zooms + + + + + Stop the image from going past its actual size when resizing the window - you can still zoom past it though + + + + + Image resizes &past actual size + + + + + + Ignores select sides of an image when fitting to window (some sides will extend beyond the window boundaries) + + + + + Fit whole image + + + + + Fit height + + + + + Fit width + + + + + On window resize: + + + + + Choose whether or not zooming in and out above 100% zoom will zoom towards the cursor + + + + + Zoom &towards cursor + + + + + Miscellaneous + + + + + Sort files by: + + + + + Name + + + + + Last Modified + + + + + Size + + + + + Type + + + + + Random + + + + + A&scending + + + + + D&escending + + + + + + Controls the amount of images preloaded + + + + + Preloading: + + + + + Disabled + + + + + Adjacent + + + + + Extended + + + + + Controls whether or not qView should go back to the first item after reaching the end of a folder + + + + + &Loop through folders + + + + + Slideshow direction: + + + + + Forward + + + + + Backward + + + + + Slideshow timer: + + + + + sec + + + + + Save &recent files + + + + + &Update notifications on startup + The notifications are for new qView releases + + + + + Language: + + + + + Move Back + + + + + Do Nothing + + + + + Move Forward + + + + + After deletion: + + + + + &Ask before deleting files + + + + + + Shortcuts + + + + + Action + + + + + System Language + + + + + Restart Required + + + + + You must restart qView to change the language. + + + + + QVRenameDialog + + + Rename... + + + + + File name: + + + + + + Error + + + + + Could not rename %1: +No write permission or file is read-only. + + + + + Could not rename %1: +(Check that all characters are valid) + + + + + QVShortcutDialog + + + Modify Shortcuts + + + + + Shortcut Already Used + + + + + "%1" is already bound to "%2" + + + + + QVWelcomeDialog + + + + Welcome + + + + + &Enable update notifications on startup + + + + + Thank you for downloading qView.<br>Here's a few tips to get you started: + + + + + <ul><li>Right click to access the main menu</li><li>Drag the image to reposition it</li><li>Scroll to zoom in and out</li><li>Use arrow keys to switch files</li></ul> + + + + + ShortcutManager + + + Open + + + + + Open URL + + + + + Open Containing Folder + + + + + Show in Explorer + + + + + Show in Finder + + + + + Show File Info + + + + + Restore from Trash + + + + + Undo Delete + + + + + Copy + + + + + Paste + + + + + Rename + + + + + Move to Trash + + + + + Delete + + + + + First File + + + + + Previous File + + + + + Next File + + + + + Last File + + + + + Zoom In + + + + + Zoom Out + + + + + Reset Zoom + + + + + Original Size + + + + + Rotate Right + + + + + Rotate Left + + + + + Mirror + + + + + Flip + + + + + Full Screen + + + + + Save Frame As + + + + + Pause + + + + + Next Frame + + + + + Decrease Speed + + + + + Reset Speed + + + + + Increase Speed + + + + + Toggle Slideshow + + + + + Options + + + + + Preferences + + + + + New Window + + + + + Close Window + + + + + Close All + + + + + Quit + + + + + Exit + + + + + UpdateChecker + + + Download + + + + + qView Update Available + + + + + qView %1 is available to download. + + + + + &Disable Update Checking + + + + + qView Update Checking Disabled + + + + + Update notifications on startup have been disabled. +You can reenable them in the options dialog. + + + + From c1caa17f082da30abd5e579499ee42bd3093706e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szab=C3=B3=20Istv=C3=A1n?= Date: Sat, 25 Mar 2023 09:19:21 +0000 Subject: [PATCH 035/111] Translated using Weblate (Hungarian) Currently translated at 100.0% (267 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/hu/ --- i18n/qview_hu.ts | 541 ++++++++++++++++++++++++----------------------- 1 file changed, 274 insertions(+), 267 deletions(-) diff --git a/i18n/qview_hu.ts b/i18n/qview_hu.ts index 32018dc3..788a0e0b 100644 --- a/i18n/qview_hu.ts +++ b/i18n/qview_hu.ts @@ -6,306 +6,306 @@ Window - + Ablak &File - + &Fájl &Edit - + &Szerkesztés &Go - + &Odalépés &View - + &Nézet &Tools - + &Eszközök &Help - + Sú&gó Open &Recent - + Nem&rég megnyitottak Empty - + Üres Open With - + Megnyitás programban &Quit - + &Kilépés Exit The quit action is called "Exit" on windows - + Kilépés New Window - + Új ablak &Open... - + &Megnyitás... Open &URL... - + &URL megnyitása... Close Window - + Ablak bezárása Close All Close all windows, that is - + Összes bezárása Open Containing &Folder - + Fájlt tartalmazó ma&ppa megnyitása Show in E&xplorer Open containing folder on windows - + Mutatás az &Intézőben Show in &Finder Open containing folder on macOS - + Mutatás a &Keresőben Show File &Info - + Fájlin&fók mutatása &Move to Trash - + Áthelyezés a &lomtárba &Delete - + &Törlés &Restore from Trash - + &Helyreállítás a lomtárból &Undo Delete - + Törlés &visszavonása &Copy - + Más&olás &Paste - + &Beillesztés R&ename... - + Átn&evezés... Zoom &In - + Nag&yítás Zoom &Out - + Ki&csinyítés Reset &Zoom - + &Zoom helyreállítása Ori&ginal Size - + Ere&deti méret Rotate &Right - + Elforgatás &jobbra Rotate &Left - + Elforgatás &balra &Mirror - + Tü&krözött nézet &Flip - + Fe&jjel lefelé nézet Enter F&ull Screen - + Belé&pés a teljes-képernyős módba &First File - + Első f&ájl Previous Fi&le - + El&őző fájl &Next File - + K&övetkező fájl Las&t File - + Utols&ó fájl Save Frame &As... - + K&épkocka mentése másként... Pa&use - + Megáll&ítás &Next Frame - + &Következő képkocka &Decrease Speed - + &Sebesség csökkentése &Reset Speed - + Sebesség &alapértékre állítása &Increase Speed - + Sebesség &növelése Start S&lideshow - + &Diavetítés indítása Option&s This is for the options dialog on windows - + Beállítá&sok Preference&s This is for the options dialog on non-mac unix platforms - + Tulajdon&ságok Preference&s... This is for the options dialog on mac - + Tulajdon&ságok... &About - + Név&jegy &About qView This is for the about dialog on mac - + &A qView névjegye &Welcome - + &Üdvözlő ablak Clear &Menu This is for clearing the recents menu - + &Lista törlése Other Application... Open with other program for unix non-mac - + Megnyitás másik programmal... Choose another app Open with other program for windows - + Másik program választása Other... Open with other program for macos - + Másik program... @@ -313,17 +313,17 @@ Exit F&ull Screen - + Kilépés a teljes-képe&rnyős módból Enter F&ull Screen - + Belé&pés a teljes-képernyős módba Empty - + Üres @@ -334,123 +334,126 @@ Error - + Hiba Error: URL is invalid - + Hiba: Érvénytelen URL Downloading image... - + Képek letöltése... Cancel - + Mégse Open URL... - + URL megnyitása... Error - + Hiba Error: Invalid image - + Hiba: Érvénytelen képfájl URL of a supported image file: - + Egy támogatott képfájl URL-címe: Can't delete %1: No write permission or file is read-only. - + Nem lehet törölni a(z) %1 fájlt! +Nincs írási jogosultságod vagy a fájl írásvédett. Are you sure you want to move %1 to the Trash? - + Biztosan a lomtárba akarod helyezni a(z) %1 fájlt? Are you sure you want to move %1 to the Recycle Bin? - + Biztosan a lomtárba akarod helyezni a(z) %1 fájlt? Delete - + Törlés Do not ask again - + Ne kérdezze többször Can't delete %1. - + Nem lehet törölni a(z) %1 fájlt. Not Supported - + Nem támogatott formátum This program was compiled with an old version of Qt and this feature is not available. If you see this message, please report a bug! - + Ez a program a Qt egy korábbi verzióját használja, ezért ez a szolgáltatás nem elérhető. +Ha a fenti üzenet fogadna bármikor, kérlek küldj hibajelentést! Can't undo deletion of %1: No write permission or file is read-only. - + Nem lehet visszavonni a(z) %1: fájl törlését! +Nincs írási jogosultságod vagy a fájl csak olvasható. Failed undoing deletion of %1. - + Sikertelen a(z) %1 fájl törlésének visszavonása. Save Frame As... - + Képkocka mentése mint... Res&ume - + Diavetítés &folytatása Pause - + Megállítás Start S&lideshow - + Dia&vetítés indítása Stop S&lideshow - + Diavetítés megs&zakítása @@ -458,17 +461,17 @@ No write permission or file is read-only. All Applications (*.app) - + Minden program (*.app) Programs (*.exe *.pif *.com *.bat *.cmd) - + Programok (*.exe *.pif *.com *.bat *.cmd) All Files (*) - + Minden fájl (*) @@ -476,12 +479,12 @@ No write permission or file is read-only. file - + fájl The file to open. - + A megnyitandó fájl. @@ -489,43 +492,43 @@ No write permission or file is read-only. About qView - + A qView névjegye version %1 - + %1 verzió Nightly %1 - + Nightly %1 Built with Qt %1 (%2)<br>Source code available under GPLv3 on <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurplel/qView">GitHub</a><br>Icon glyph created by Guilhem from the Noun Project<br>Copyright © %3 jurplel and qView contributors - + A program a Qt %1 verziójával készült (%2)<br>A forráskód GPLv3 licenc alatt elérhető <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurplel/qView">GitHub</a>-on<br>Az ikonokat/jelképeket Guilhem készítette a Noun Project keretében<br>Minden jog fenntartva %3 jurplel és a qView hozzájáruló felé Checking for updates... - + Frissítések ellenőrzése... %1 update available %1 is a version number e.g. "4.0 update available" - + A(z) %1 verziójú frissítés elérhetővé vált No updates available - + Jelenleg nincsenek frissítések Error checking for updates - + Hiba a frissítések ellenőrzése során @@ -533,17 +536,17 @@ No write permission or file is read-only. Supported Images - + Támogatott fájlformátumok All Files - + Minden fájl Open... - + Megnyitás... @@ -551,7 +554,7 @@ No write permission or file is read-only. (default) - + (default) @@ -559,13 +562,14 @@ No write permission or file is read-only. Error - + Hiba Error occurred opening "%3": %2 (Error %1) - + Hiba lépett fel a "%3" fájl megnyitása közben: +%2 (hiba %1) @@ -573,12 +577,12 @@ No write permission or file is read-only. File Info - + Fájlinfó Name: - + Név: @@ -590,57 +594,57 @@ No write permission or file is read-only. error - + hiba Type: - + Típus: Location: - + Hely: Size: - + Méret: Modified: - + Módosítva: Dimensions: - + Méretek: Aspect Ratio: - + Képarány: Frames: - + Képkockák száma: Refresh - + Frissítés %1 (%2 bytes) - + %1 (%2 bájt) %1 x %2 (%3 MP) - + %1 x %2 (%3 megapixel) @@ -648,67 +652,67 @@ No write permission or file is read-only. Choose Application - + Alkalmazás kiválasztása Development - + Fejlesztés Education - + Oktatás Games - + Játékok Graphics - + Grafika Internet - + Internet Multimedia - + Multimédia Office - + Iroda Science - + Tudomány Settings - + Beállítások System - + Rendszer Utilities - + Felhasználói programok Other - + Egyéb @@ -716,410 +720,410 @@ No write permission or file is read-only. Options - + Beállítások Window - + Ablak Back&ground color: - + &Háttér színe: Changes the amount of information displayed in the titlebar - + A címsorban megjelenítendő információk mennyisége Titlebar text: - + Címsorban lévő szöveg: &Basic - + &Alapvető &Minimal - + &Minimális &Practical - + &Praktikus &Verbose - + &Beszédes Control when the window should resize to fit the image's actual size - + Szabályozható, hogy az programablak mérete mikor változzon meg a kép tényleges méretéhez képest Window matches image size: - + Az ablak kövesse a kép méretét: Never - + Soha When launching - + A program indításakor When opening images - + Képfájlok megnyitásakor Minimum size: - + Minimális ablakméret: Control the minimum size that the window should reach when matching the image's actual size - + Az ablak minimális mérete, melyet az ablaknak el kell érnie a kép tényleges méretéhez igazodva % of screen size - + % a képernyő méretéhez viszonyítva Control the maximum size that the window should reach when matching the image's actual size - + Az ablak maximális mérete, melyet az ablaknak el kell érnie a kép tényleges méretéhez igazodva Maximum size: - + Maximális ablakméret: Choose whether or not the titlebar should always be dark regardless of your chosen macOS appearance - + Válaszd ki, hogy a címsor mindig sötét legyen-e, függetlenül a macOS-ben beállított megjelenéstől &Titlebar always dark - + A &címsor mindig legyen sötét megjelenítésű Show menubar - + Menüsor megjelenítése Choose whether or not to display the titlebar text while in fullscreen - + Válaszd ki, hogy teljes-képernyős megjelenítés esetén a címsor szövege megjelenjen, vagy mégsem Show titlebar text in fullscreen - + Címsor szövegének mutatása teljes-képernyős módban &Quit on last window closed - + Kilépés az &utolsó ablak bezárásakor Image - + Képfájl Scaling: - + Méretezés: Turn this off to see individual pixels - + A különálló pixelek megjelenítéséhez kapcsold be ezt &Bilinear filtering - + &Bilineáris szűrő Images appear aliased (having jagged edges) without this, but it is faster - + A képek megjelenítésénél lépcsőzetesség (szaggatott élek) alakul ki, azonban felgyorsul a kirajzolás &Image scaling - + &Kép felskálázása Choose whether or not the image continues to be scaled when zooming above the window size (can be laggier with large images) - + Válaszd ki, hogy a kép továbbra is méretezve maradjon-e, ha az ablakméret fölé nagyítottál (nagy képeknél magasabb lehet a késleltetés) &Scaling above window size - + &Skálázás megtartása az ablak mérettől függetlenül The amount to zoom every scroll wheel click - + A zoomolás százalékos mértéke minden egyes görgetésnél Zoom amount: - + Zoomolás mértéke: Choose whether scrolling zooms or moves the image (alternative can be accessed at any time by holding ctrl/cmd) - + Válaszd ki, hogy az egérgörgővel zoomolj vagy elmozdítsd az adott képet (alternatívaként elérhető a ctrl/cmd nyomva tartásával) Scrolling &zooms - + Egérgörgővel történő &zoomolás Stop the image from going past its actual size when resizing the window - you can still zoom past it though - + Megakadályozza, hogy a kép az ablak átméretezésekor túllépje a tényleges méretét - a zoomolás továbbra is lehetséges Image resizes &past actual size - + A kép átméretezése a tényle&ges méretre Ignores select sides of an image when fitting to window (some sides will extend beyond the window boundaries) - + Figyelmen kívül hagyja a kép kiválasztott oldalait az ablakhoz történő illesztéskor (egyes oldalak túlnyúlnak az ablak határain) Fit whole image - + A teljes kép igazodjon Fit height - + A kép magassága igazodjon Fit width - + A kép szélessége igazodjon On window resize: - + Az ablak átméretezésekkor: Choose whether or not zooming in and out above 100% zoom will zoom towards the cursor - + Válaszd ki, hogy 100%-os nagyítás feletti zoomolás esetén az egérkurzor körül történjen a zoomolás Zoom &towards cursor - + Zoomolás az &egérkurzor körül Miscellaneous - + További beállítások Sort files by: - + Fájlok rendezése: Name - + Név Last Modified - + Utolsó módosítás Size - + Méret Type - + Típus Random - + Véletlenszerű A&scending - + &Növekvő D&escending - + &Csökkenő Controls the amount of images preloaded - + Az előretöltött képek mennyiségét lehet szabályozni Preloading: - + Képek előtöltése: Disabled - + Kikapcsolva Adjacent - + Szomszédos fájlok Extended - + Kivőbített Controls whether or not qView should go back to the first item after reaching the end of a folder - + Megadható, hogy a qView menjen-e vissza az első elemhez, miután elérte a mappa utolsó elemét &Loop through folders - + &Könyvtárak körbejárása Slideshow direction: - + Diavetítés iránya: Forward - + Előremenő Backward - + Hátramenő Slideshow timer: - + Diavetítés időzítése: sec - + másodperc Save &recent files - + Nem&rég megnyitott fájlok mentése &Update notifications on startup The notifications are for new qView releases - + Elérhető &frissítések megjelenítése a program indulásakor Language: - + Nyelv: Move Back - + Lépés eggyel hátra Do Nothing - + Semmit se csináljon Move Forward - + Lépés eggyel előre After deletion: - + Egy képfájl törlése után: &Ask before deleting files - + Kérjen &a program megerősítést a törlés előtt Shortcuts - + Billentyűkombinációk Action - + Végrehajtandó cselekvés System Language - + Rendszer nyelve Restart Required - + A program újraindítása szükséges You must restart qView to change the language. - + A qView nyelvezetének átváltásához újra kell indítanod a programot. @@ -1127,30 +1131,32 @@ No write permission or file is read-only. Rename... - + Átnevezés... File name: - + Fájl neve: Error - + Hiba Could not rename %1: No write permission or file is read-only. - + Nem lehet átnevezni a(z) %1: fájlt +Nincs írási jogosultságod vagy a fájl csak olvasható. Could not rename %1: (Check that all characters are valid) - + Nem lehet átnevezni a(z) %1: +(Ellenőrizd, hogy érvényes karaktereket adtál-e meg) @@ -1158,17 +1164,17 @@ No write permission or file is read-only. Modify Shortcuts - + Billentyűkombinációk módosítása Shortcut Already Used - + A billentyűkombináció már használatban van "%1" is already bound to "%2" - + "%1"már hozzá van rendelve a(z) "%2"-hoz @@ -1177,22 +1183,22 @@ No write permission or file is read-only. Welcome - + Üdvözlőablak &Enable update notifications on startup - + &Frissítési értesítések engedélyezése indításkor Thank you for downloading qView.<br>Here's a few tips to get you started: - + Köszönjük, hogy letöltötted a qView-ot!<br>Itt van pár tipp a kezdéshez: <ul><li>Right click to access the main menu</li><li>Drag the image to reposition it</li><li>Scroll to zoom in and out</li><li>Use arrow keys to switch files</li></ul> - + <ul><li>Jobb kattintással hozzáférhetsz a főmenühöz</li><li>Húzd be a képet, hogy újraigazítsd</li><li>Az egérgörgővel nagyíthatsz és kicsinyíthetsz</li><li>Használd a kurzort a fájlok közti tallózáshoz</li></ul> @@ -1200,202 +1206,202 @@ No write permission or file is read-only. Open - + Megnyitás Open URL - + URL megnyitása Open Containing Folder - + Fájlt tartalmazó mappa megnyitása Show in Explorer - + Mutatás a böngészőben Show in Finder - + Mutatás a keresőben Show File Info - + Fájlinfók mutatása Restore from Trash - + Helyreállítás a Lomtárból Undo Delete - + Törlés visszavonása Copy - + Másolás Paste - + Beillesztés Rename - + Átnevezés Move to Trash - + Áthelyezés a Lomtárba Delete - + Törlés First File - + Ugrás az első fájlra Previous File - + Ugrás az előző fájlra Next File - + Ugrás a következő fájlra Last File - + Ugrás az utolsó fájlra Zoom In - + Nagyítás Zoom Out - + Kicsinyítés Reset Zoom - + Zoomolás alaphelyzetbe állítása Original Size - + Helyreállítás az eredeti méretre Rotate Right - + Forgatás jobbra Rotate Left - + Forgatás balra Mirror - + Tükrözés Flip - + Beforgatás fejjel lefelé Full Screen - + Teljes-képernyő Save Frame As - + Képkocka mentése másként Pause - + Megállít Next Frame - + Következő képkocka Decrease Speed - + Sebesség csökkentése Reset Speed - + Sebesség alaphelyzetbe állítása Increase Speed - + Sebesség növelése Toggle Slideshow - + Diavetítés bekapcsolása Options - + Beállítások Preferences - + Tulajdonságok New Window - + Új ablak Close Window - + Ablak bezárása Close All - + Mind bezárása Quit - + Kilépés Exit - + Kilépés @@ -1403,33 +1409,34 @@ No write permission or file is read-only. Download - + Letöltés qView Update Available - + Elérhető egy qView frissítés qView %1 is available to download. - + A qView %1 letöltése elérhetővé vált. &Disable Update Checking - + &Frissítés-ellenőrzés kikapcsolása qView Update Checking Disabled - + A qView frissítés-ellenőrzése ki van kapcsolva Update notifications on startup have been disabled. You can reenable them in the options dialog. - + Az indításkor érkező frissítési értesítések letiltásra kerültek. +A beállításoknál újra engedélyezheted őket. From d16999854dba9e72d744441e587be02bad0a5f8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szab=C3=B3=20Istv=C3=A1n?= Date: Sat, 25 Mar 2023 14:19:32 +0000 Subject: [PATCH 036/111] Translated using Weblate (Hungarian) Currently translated at 100.0% (267 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/hu/ --- i18n/qview_hu.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/i18n/qview_hu.ts b/i18n/qview_hu.ts index 788a0e0b..c96fa5f4 100644 --- a/i18n/qview_hu.ts +++ b/i18n/qview_hu.ts @@ -21,7 +21,7 @@ &Go - &Odalépés + &Ugrás @@ -197,22 +197,22 @@ &First File - Első f&ájl + Első f&ájlra Previous Fi&le - El&őző fájl + El&őző fájlra &Next File - K&övetkező fájl + K&övetkező fájlra Las&t File - Utols&ó fájl + Utols&ó fájlra From 20ed61a8b58e5ba54bc6016d6b24d6c2fc4018f2 Mon Sep 17 00:00:00 2001 From: Ettore Atalan Date: Sun, 26 Mar 2023 13:25:51 +0000 Subject: [PATCH 037/111] Translated using Weblate (German) Currently translated at 95.5% (255 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/de/ --- i18n/qview_de.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n/qview_de.ts b/i18n/qview_de.ts index 2d923366..876d569f 100644 --- a/i18n/qview_de.ts +++ b/i18n/qview_de.ts @@ -386,7 +386,7 @@ No write permission or file is read-only. Are you sure you want to move %1 to the Recycle Bin? - + Sind Sie sicher, dass Sie %1 in den Papierkorb verschieben möchten? From 8c10d0abe7b1c2cfd34cc556afcc15cef898f6ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szab=C3=B3=20Istv=C3=A1n?= Date: Sun, 26 Mar 2023 07:16:23 +0000 Subject: [PATCH 038/111] Translated using Weblate (Hungarian) Currently translated at 100.0% (267 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/hu/ --- i18n/qview_hu.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/i18n/qview_hu.ts b/i18n/qview_hu.ts index c96fa5f4..d1fd77b7 100644 --- a/i18n/qview_hu.ts +++ b/i18n/qview_hu.ts @@ -376,7 +376,7 @@ Can't delete %1: No write permission or file is read-only. - Nem lehet törölni a(z) %1 fájlt! + Nem lehet törölni a(z) %1: fájlt! Nincs írási jogosultságod vagy a fájl írásvédett. @@ -554,7 +554,7 @@ Nincs írási jogosultságod vagy a fájl csak olvasható. (default) - (default) + (alapértelmezett) @@ -878,7 +878,7 @@ Nincs írási jogosultságod vagy a fájl csak olvasható. Choose whether or not the image continues to be scaled when zooming above the window size (can be laggier with large images) - Válaszd ki, hogy a kép továbbra is méretezve maradjon-e, ha az ablakméret fölé nagyítottál (nagy képeknél magasabb lehet a késleltetés) + Válaszd ki, hogy a kép továbbra is skálázva maradjon-e, ha az ablakméreten túl nagyítottál (nagy képeknél magasabb lehet a késleltetés) @@ -899,7 +899,7 @@ Nincs írási jogosultságod vagy a fájl csak olvasható. Choose whether scrolling zooms or moves the image (alternative can be accessed at any time by holding ctrl/cmd) - Válaszd ki, hogy az egérgörgővel zoomolj vagy elmozdítsd az adott képet (alternatívaként elérhető a ctrl/cmd nyomva tartásával) + Válaszd ki, hogy az egérgörgővel zoomoljon vagy elmozdítsa az adott képet (alternatívaként elérhető a ctrl/cmd nyomva tartásával) @@ -909,12 +909,12 @@ Nincs írási jogosultságod vagy a fájl csak olvasható. Stop the image from going past its actual size when resizing the window - you can still zoom past it though - Megakadályozza, hogy a kép az ablak átméretezésekor túllépje a tényleges méretét - a zoomolás továbbra is lehetséges + A beállítás kikapcsolásával, a megjelenített képfájl igazodik a megjelenítőablak méretéhez - a zoomolás továbbra is lehetséges Image resizes &past actual size - A kép átméretezése a tényle&ges méretre + A kép aktuális mérete &kövesse az ablak méretét @@ -1036,7 +1036,7 @@ Nincs írási jogosultságod vagy a fájl csak olvasható. Slideshow direction: - Diavetítés iránya: + Diavetítés feldolgozási sorrendje: @@ -1148,14 +1148,14 @@ Nincs írási jogosultságod vagy a fájl csak olvasható. Could not rename %1: No write permission or file is read-only. - Nem lehet átnevezni a(z) %1: fájlt + Nem lehet átnevezni a(z) %1 fájlt: Nincs írási jogosultságod vagy a fájl csak olvasható. Could not rename %1: (Check that all characters are valid) - Nem lehet átnevezni a(z) %1: + Nem lehet átnevezni a(z) %1 fájlt: (Ellenőrizd, hogy érvényes karaktereket adtál-e meg) @@ -1174,7 +1174,7 @@ Nincs írási jogosultságod vagy a fájl csak olvasható. "%1" is already bound to "%2" - "%1"már hozzá van rendelve a(z) "%2"-hoz + "%1" már hozzá van rendelve a(z) "%2"-hoz From ab31ae8555544bad15da330c30cd94a12f1255a4 Mon Sep 17 00:00:00 2001 From: Reza Almanda Date: Thu, 6 Apr 2023 20:36:51 +0000 Subject: [PATCH 039/111] Translated using Weblate (Indonesian) Currently translated at 18.7% (50 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/id/ --- i18n/qview_id.ts | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/i18n/qview_id.ts b/i18n/qview_id.ts index f08dfe3e..d5d0fce0 100644 --- a/i18n/qview_id.ts +++ b/i18n/qview_id.ts @@ -192,62 +192,62 @@ Enter F&ull Screen - + Ganti ke L&ayar Penuh &First File - + &File Pertama Previous Fi&le - + Fi&le Sebelumnya &Next File - + &File Berikutnya Las&t File - + File Ter&akhir Save Frame &As... - + Simpan Bingkai &Sebagai... Pa&use - + Je&da &Next Frame - + &Bingkai Berikutnya &Decrease Speed - + &Kurangi Kecepatan &Reset Speed - + &Reset Kecepatan &Increase Speed - + &Tingkatkan Kecepatan Start S&lideshow - + Mulai S&lideshow From 21d5f1db7cb1aeac3c105f1e885e1dd6538071b0 Mon Sep 17 00:00:00 2001 From: Christian Elbrianno Date: Tue, 11 Apr 2023 14:54:28 +0000 Subject: [PATCH 040/111] Translated using Weblate (Indonesian) Currently translated at 20.5% (55 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/id/ --- i18n/qview_id.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/i18n/qview_id.ts b/i18n/qview_id.ts index d5d0fce0..de2b22d7 100644 --- a/i18n/qview_id.ts +++ b/i18n/qview_id.ts @@ -253,30 +253,30 @@ Option&s This is for the options dialog on windows - + Opsi Preference&s This is for the options dialog on non-mac unix platforms - + Preferensi Preference&s... This is for the options dialog on mac - + Preferensi... &About - + Tentang &About qView This is for the about dialog on mac - + Tentang qView From 2b8c8cb7112358a6f05867e70654d269d7b91b29 Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Sat, 13 May 2023 16:42:16 -0400 Subject: [PATCH 041/111] attempt at updating image names --- .github/workflows/build.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 336a2d5f..fd177fc0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,21 +14,21 @@ jobs: strategy: matrix: include: - - runner: 'ubuntu-18.04' + - runner: 'ubuntu-20.04' qtVersion: '5.15.2' - - runner: 'macOS-11' + - runner: 'macos-latest' qtVersion: '6.2.2' qtModules: 'qtimageformats' - - runner: 'macOS-10.15' + - runner: 'macos-latest' qtVersion: '5.12.12' osSuffix: '_legacy' skipHardPlugins: 'true' - - runner: 'windows-2019' + - runner: 'windows-latest' qtVersion: '6.2.2' qtArch: 'win64_msvc2019_64' osSuffix: '_64' qtModules: 'qtimageformats' - - runner: 'windows-2019' + - runner: 'windows-latest' qtVersion: '5.15.2' qtArch: 'win32_msvc2019' osSuffix: '_32' From 076c1cfbccc70f1b1794abf55036079e3ecfb80c Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Sat, 13 May 2023 16:50:35 -0400 Subject: [PATCH 042/111] Old windows is fine, whatever --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fd177fc0..cecf7e0c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,12 +23,12 @@ jobs: qtVersion: '5.12.12' osSuffix: '_legacy' skipHardPlugins: 'true' - - runner: 'windows-latest' + - runner: 'windows-2019' qtVersion: '6.2.2' qtArch: 'win64_msvc2019_64' osSuffix: '_64' qtModules: 'qtimageformats' - - runner: 'windows-latest' + - runner: 'windows-2019' qtVersion: '5.15.2' qtArch: 'win32_msvc2019' osSuffix: '_32' From 542a9b7a513deb07191d6cd63a02858e177c276e Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Sat, 29 Jul 2023 23:56:44 -0400 Subject: [PATCH 043/111] Add support for date created --- src/mainwindow.cpp | 2 +- src/qvimagecore.cpp | 28 +++++++++++++++++++++------- src/qvimagecore.h | 1 + src/qvoptionsdialog.ui | 17 +++++++++++++++-- 4 files changed, 38 insertions(+), 10 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 5daa9b5c..e431516f 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -44,7 +44,7 @@ MainWindow::MainWindow(QWidget *parent) : justLaunchedWithImage = false; storedWindowState = Qt::WindowNoState; - // Initialize graphicsview + // Initialize graphicsviewkDefaultBufferAlignment graphicsView = new QVGraphicsView(this); centralWidget()->layout()->addWidget(graphicsView); diff --git a/src/qvimagecore.cpp b/src/qvimagecore.cpp index 1e784219..97b6535a 100644 --- a/src/qvimagecore.cpp +++ b/src/qvimagecore.cpp @@ -277,7 +277,7 @@ QList QVImageCore::getCompatibleFiles(const QString } } QString mimeType; - if (!matched || sortMode == 3) + if (!matched || sortMode == 4) { mimeType = mimeDb.mimeTypeForFile(absoluteFilePath, mimeMatchMode).name(); matched |= mimeTypes.contains(mimeType); @@ -288,8 +288,9 @@ QList QVImageCore::getCompatibleFiles(const QString absoluteFilePath, fileName, sortMode == 1 ? fileInfo.lastModified().toMSecsSinceEpoch() : 0, - sortMode == 2 ? fileInfo.size() : 0, - sortMode == 3 ? mimeType : QString() + sortMode == 2 ? fileInfo.birthTime().toMSecsSinceEpoch() : 0, + sortMode == 3 ? fileInfo.size() : 0, + sortMode == 4 ? mimeType : QString() }); } } @@ -335,7 +336,7 @@ void QVImageCore::updateFolderInfo(QString dirPath) return collator.compare(file1.fileName, file2.fileName) < 0; }); } - else if (sortMode == 1) // last modified + else if (sortMode == 1) // date modified { std::sort(currentFileDetails.folderFileInfoList.begin(), currentFileDetails.folderFileInfoList.end(), @@ -347,7 +348,20 @@ void QVImageCore::updateFolderInfo(QString dirPath) return file1.lastModified > file2.lastModified; }); } - else if (sortMode == 2) // size + else if (sortMode == 2) // date created + { + std::sort(currentFileDetails.folderFileInfoList.begin(), + currentFileDetails.folderFileInfoList.end(), + [this](const CompatibleFile &file1, const CompatibleFile &file2) + { + if (sortDescending) + return file1.lastCreated < file2.lastCreated; + else + return file1.lastCreated > file2.lastCreated; + }); + + } + else if (sortMode == 3) // size { std::sort(currentFileDetails.folderFileInfoList.begin(), currentFileDetails.folderFileInfoList.end(), @@ -359,7 +373,7 @@ void QVImageCore::updateFolderInfo(QString dirPath) return file1.size > file2.size; }); } - else if (sortMode == 3) // type + else if (sortMode == 4) // type { QCollator collator; std::sort(currentFileDetails.folderFileInfoList.begin(), @@ -372,7 +386,7 @@ void QVImageCore::updateFolderInfo(QString dirPath) return collator.compare(file1.mimeType, file2.mimeType) < 0; }); } - else if (sortMode == 4) // Random + else if (sortMode == 5) // Random { std::shuffle(currentFileDetails.folderFileInfoList.begin(), currentFileDetails.folderFileInfoList.end(), std::default_random_engine(randomSortSeed)); } diff --git a/src/qvimagecore.h b/src/qvimagecore.h index dcbcd2fa..9c591fd3 100644 --- a/src/qvimagecore.h +++ b/src/qvimagecore.h @@ -29,6 +29,7 @@ class QVImageCore : public QObject // Only populated if needed for sorting qint64 lastModified; + qint64 lastCreated; qint64 size; QString mimeType; }; diff --git a/src/qvoptionsdialog.ui b/src/qvoptionsdialog.ui index 56b9eb05..a53c2c78 100644 --- a/src/qvoptionsdialog.ui +++ b/src/qvoptionsdialog.ui @@ -5,6 +5,14 @@ Qt::NonModal + + + 0 + 0 + 497 + 558 + + Settings @@ -15,7 +23,7 @@ Qt::NoFocus - 0 + 2 @@ -513,7 +521,12 @@ - Last Modified + Date Modified + + + + + Date Created From ade2288d3d08d07a15139151478750ba29046204 Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Sun, 30 Jul 2023 01:04:26 -0400 Subject: [PATCH 044/111] Bump version number --- qView.pro | 4 +--- src/qvaboutdialog.cpp | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/qView.pro b/qView.pro index d5df34e4..b6f6e36f 100644 --- a/qView.pro +++ b/qView.pro @@ -1,7 +1,5 @@ -# this file is windows-1251 encoded! - TARGET = qView -VERSION = 5.0 +VERSION = 6.0 QT += core gui network widgets diff --git a/src/qvaboutdialog.cpp b/src/qvaboutdialog.cpp index f8ebbb9a..cca75682 100644 --- a/src/qvaboutdialog.cpp +++ b/src/qvaboutdialog.cpp @@ -63,7 +63,7 @@ QVAboutDialog::QVAboutDialog(double givenLatestVersionNum, QWidget *parent) : R"(Source code available under GPLv3 on GitHub
)" "Icon glyph created by Guilhem from the Noun Project
" "Copyright © %3 jurplel and qView contributors") - .arg(QT_VERSION_STR, QSysInfo::buildCpuArchitecture(), "2018-2022"); + .arg(QT_VERSION_STR, QSysInfo::buildCpuArchitecture(), "2018-2023"); ui->infoLabel2->setFont(font4); ui->infoLabel2->setText(labelText2); From c47c9011a5219b71771fcf615a6ac1fdcb4ef872 Mon Sep 17 00:00:00 2001 From: Benjamin Owad Date: Tue, 1 Aug 2023 11:48:13 -0400 Subject: [PATCH 045/111] update pwsh shebang --- ci/scripts/build.ps1 | 4 ++-- ci/scripts/innomake.ps1 | 0 ci/scripts/linuxdeployqt.sh | 0 ci/scripts/macdeploy.sh | 0 ci/scripts/vcvars.ps1 | 0 ci/scripts/windeployqt.ps1 | 0 6 files changed, 2 insertions(+), 2 deletions(-) mode change 100644 => 100755 ci/scripts/build.ps1 mode change 100644 => 100755 ci/scripts/innomake.ps1 mode change 100644 => 100755 ci/scripts/linuxdeployqt.sh mode change 100644 => 100755 ci/scripts/macdeploy.sh mode change 100644 => 100755 ci/scripts/vcvars.ps1 mode change 100644 => 100755 ci/scripts/windeployqt.ps1 diff --git a/ci/scripts/build.ps1 b/ci/scripts/build.ps1 old mode 100644 new mode 100755 index a5ea25ba..092ca8ae --- a/ci/scripts/build.ps1 +++ b/ci/scripts/build.ps1 @@ -1,4 +1,4 @@ -#!/usr/bin/pwsh +#!/usr/bin/env pwsh param ( @@ -20,4 +20,4 @@ if ($IsWindows) { nmake } else { make -} \ No newline at end of file +} diff --git a/ci/scripts/innomake.ps1 b/ci/scripts/innomake.ps1 old mode 100644 new mode 100755 diff --git a/ci/scripts/linuxdeployqt.sh b/ci/scripts/linuxdeployqt.sh old mode 100644 new mode 100755 diff --git a/ci/scripts/macdeploy.sh b/ci/scripts/macdeploy.sh old mode 100644 new mode 100755 diff --git a/ci/scripts/vcvars.ps1 b/ci/scripts/vcvars.ps1 old mode 100644 new mode 100755 diff --git a/ci/scripts/windeployqt.ps1 b/ci/scripts/windeployqt.ps1 old mode 100644 new mode 100755 From e78b6fbc4beac167b8f1fadab977751a2d89a77b Mon Sep 17 00:00:00 2001 From: Benjamin Owad Date: Tue, 1 Aug 2023 13:06:09 -0400 Subject: [PATCH 046/111] move scripts --- .github/workflows/build.yml | 8 ++++---- {ci => dist}/scripts/build.ps1 | 2 +- {ci => dist}/scripts/innomake.ps1 | 0 {ci => dist}/scripts/linuxdeployqt.sh | 0 {ci => dist}/scripts/macdeploy.sh | 0 {ci => dist}/scripts/vcvars.ps1 | 0 {ci => dist}/scripts/windeployqt.ps1 | 4 ++-- 7 files changed, 7 insertions(+), 7 deletions(-) rename {ci => dist}/scripts/build.ps1 (92%) rename {ci => dist}/scripts/innomake.ps1 (100%) rename {ci => dist}/scripts/linuxdeployqt.sh (100%) rename {ci => dist}/scripts/macdeploy.sh (100%) rename {ci => dist}/scripts/vcvars.ps1 (100%) rename {ci => dist}/scripts/windeployqt.ps1 (96%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cecf7e0c..33768ca8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -57,17 +57,17 @@ jobs: - name: Build qView shell: pwsh - run: ci/scripts/build.ps1 + run: dist/scripts/build.ps1 - name: Deploy qView shell: pwsh run: | if ($IsWindows) { - Invoke-Expression "& 'ci/scripts/windeployqt.ps1' ${{ env.buildNumString }}" + Invoke-Expression "& 'dist/scripts/windeployqt.ps1' ${{ env.buildNumString }}" } elseif ($IsMacOS) { - bash ci/scripts/macdeploy.sh ${{ env.buildNumString }} + bash dist/scripts/macdeploy.sh ${{ env.buildNumString }} } else { - bash ci/scripts/linuxdeployqt.sh ${{ env.buildNumString }} + bash dist/scripts/linuxdeployqt.sh ${{ env.buildNumString }} } - name: 'Upload Artifact' diff --git a/ci/scripts/build.ps1 b/dist/scripts/build.ps1 similarity index 92% rename from ci/scripts/build.ps1 rename to dist/scripts/build.ps1 index 092ca8ae..1b06dbf6 100755 --- a/ci/scripts/build.ps1 +++ b/dist/scripts/build.ps1 @@ -6,7 +6,7 @@ param ) if ($IsWindows) { - ci/scripts/vcvars.ps1 + dist/scripts/vcvars.ps1 } if ((qmake --version -split '\n')[1][17] -eq '6') { diff --git a/ci/scripts/innomake.ps1 b/dist/scripts/innomake.ps1 similarity index 100% rename from ci/scripts/innomake.ps1 rename to dist/scripts/innomake.ps1 diff --git a/ci/scripts/linuxdeployqt.sh b/dist/scripts/linuxdeployqt.sh similarity index 100% rename from ci/scripts/linuxdeployqt.sh rename to dist/scripts/linuxdeployqt.sh diff --git a/ci/scripts/macdeploy.sh b/dist/scripts/macdeploy.sh similarity index 100% rename from ci/scripts/macdeploy.sh rename to dist/scripts/macdeploy.sh diff --git a/ci/scripts/vcvars.ps1 b/dist/scripts/vcvars.ps1 similarity index 100% rename from ci/scripts/vcvars.ps1 rename to dist/scripts/vcvars.ps1 diff --git a/ci/scripts/windeployqt.ps1 b/dist/scripts/windeployqt.ps1 similarity index 96% rename from ci/scripts/windeployqt.ps1 rename to dist/scripts/windeployqt.ps1 index 9ec811b4..4f8c6684 100755 --- a/ci/scripts/windeployqt.ps1 +++ b/dist/scripts/windeployqt.ps1 @@ -26,5 +26,5 @@ mv bin\qView.exe "bin\qView-nightly-$NightlyVersion.exe" # Call innomake if we are not building a nightly version (no version passed) if ($NightlyVersion -ne '') { - & "ci/scripts/innomake.ps1" -} \ No newline at end of file + & "dist/scripts/innomake.ps1" +} From 82eb5e29c2fb36a4e89d87f3d9a0056036f6dd04 Mon Sep 17 00:00:00 2001 From: Benjamin Owad Date: Sun, 6 Aug 2023 00:35:25 -0400 Subject: [PATCH 047/111] Partially completed plugins script --- dist/scripts/download-plugins.ps1 | 71 +++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100755 dist/scripts/download-plugins.ps1 diff --git a/dist/scripts/download-plugins.ps1 b/dist/scripts/download-plugins.ps1 new file mode 100755 index 00000000..1d87e74b --- /dev/null +++ b/dist/scripts/download-plugins.ps1 @@ -0,0 +1,71 @@ +#!/usr/bin/env pwsh + +# This script will download binary plugins from the kimageformats-binaries repository using Github's API. + +$pluginNames = "qtapng", "kimageformats" + +$qtVersion = ((qmake --version -split '\n')[1] -split ' ')[3] +Write-Host "Detected Qt Version $qtVersion" + + +# TODO: Remove THIS, only for testing +$qtVersion = "6.2.2" + +# Update these to change which artifacts to download! +$avifBuildNum = 51 +$apngBuildNum = 66 +$kimageformatsBuildNum = 107 + +# Qt version availability and runner names are assumed. +if ($IsWindows) { + # TODO +} elseif ($IsMacOS) { + $imageName = "macos-latest" +} else { + # TODO +} + +$binaryBaseUrl = "https://github.com/jurplel/kimageformats-binaries/releases/download/cont" + +if ($pluginNames.count -eq 0) { + Write-Host "the pluginNames array is empty." +} + +foreach ($pluginName in $pluginNames) { + $artifactName = "$pluginName-$imageName-$qtVersion.zip" + $downloadUrl = "$binaryBaseUrl/$artifactName" + + Write-Host "Downloading $downloadUrl" + Invoke-WebRequest -URI $downloadUrl -OutFile $artifactName + Expand-Archive $artifactName -DestinationPath $pluginName + Remove-Item $artifactName +} + + +if ($IsWindows) { +} elseif ($IsMacOS) { + $out_frm = "bin/qView.app/Contents/Frameworks" + $out_imf = "bin/qView.app/Contents/PlugIns/imageformats" +} else { +} + +mkdir -p "$out_frm" +mkdir -p "$out_imf" + +# Copy QtApng +if ($pluginNames -contains 'qtapng') { + if ($IsMacOS) { + cp qtapng/QtApng/plugins/imageformats/* "$out/" + } +} + +if ($pluginNames -contains 'kimageformats') { + if ($IsWindows) { + # cp kimageformats/kimageformats/output/*.dll "$out/" + } elseif ($IsMacOS) { + cp kimageformats/kimageformats/output/*.so "$out_imf/" + cp kimageformats/kimageformats/output/libKF5Archive.5.dylib "$out_frm/" + } else { + # cp kimageformats/kimageformats/output/*.so "$out/" + } +} From e357d244c1f59c2dd6311ef3506ddfecb40ccfca Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Mon, 7 Aug 2023 00:08:40 -0400 Subject: [PATCH 048/111] finish script --- dist/scripts/download-plugins.ps1 | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/dist/scripts/download-plugins.ps1 b/dist/scripts/download-plugins.ps1 index 1d87e74b..99d28bdf 100755 --- a/dist/scripts/download-plugins.ps1 +++ b/dist/scripts/download-plugins.ps1 @@ -43,10 +43,14 @@ foreach ($pluginName in $pluginNames) { if ($IsWindows) { + $out_frm = "bin/" + $out_imf = "bin/imageformats" } elseif ($IsMacOS) { $out_frm = "bin/qView.app/Contents/Frameworks" $out_imf = "bin/qView.app/Contents/PlugIns/imageformats" } else { + $out_frm = "bin/appdir/usr/lib" + $out_imf = "bin/appdir/usr/plugins/imageformats" } mkdir -p "$out_frm" @@ -54,18 +58,25 @@ mkdir -p "$out_imf" # Copy QtApng if ($pluginNames -contains 'qtapng') { - if ($IsMacOS) { - cp qtapng/QtApng/plugins/imageformats/* "$out/" + if ($IsWindows) { + cp qtapng/QtApng/plugins/imageformats/qapng.dll "$out_imf/" + } elseif ($IsMacOS) { + cp qtapng/QtApng/plugins/imageformats/libqapng.dylib "$out_imf/" + } else { + cp qtapng/QtApng/plugins/imageformats/libqapng.so "$out_imf/" } } if ($pluginNames -contains 'kimageformats') { if ($IsWindows) { - # cp kimageformats/kimageformats/output/*.dll "$out/" + cp kimageformats/kimageformats/output/kimg_*.dll "$out_imf/" + cp kimageformats/kimageformats/output/zlib1.dll "$out_frm/" + cp kimageformats/kimageformats/output/KF5Archive.dll "$out_frm/" } elseif ($IsMacOS) { cp kimageformats/kimageformats/output/*.so "$out_imf/" cp kimageformats/kimageformats/output/libKF5Archive.5.dylib "$out_frm/" } else { - # cp kimageformats/kimageformats/output/*.so "$out/" + cp kimageformats/kimageformats/output/kimg_*.so "$out_imf/" + cp kimageformats/kimageformats/output/libKF5Archive.so.5 "$out_frm/" } } From 9d6ce90bcde138a682aca6d9611a09ef9ae47947 Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Mon, 7 Aug 2023 00:10:19 -0400 Subject: [PATCH 049/111] Actually call the script --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 33768ca8..2486e967 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -62,6 +62,7 @@ jobs: - name: Deploy qView shell: pwsh run: | + Invoke-Expression "& 'dist/scripts/download-plugins.ps1'" if ($IsWindows) { Invoke-Expression "& 'dist/scripts/windeployqt.ps1' ${{ env.buildNumString }}" } elseif ($IsMacOS) { From 179c0d8e763852507f9fc54212416bb0206c6d22 Mon Sep 17 00:00:00 2001 From: Benjamin Owad Date: Mon, 7 Aug 2023 00:14:15 -0400 Subject: [PATCH 050/111] add other image names.. --- dist/scripts/download-plugins.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/scripts/download-plugins.ps1 b/dist/scripts/download-plugins.ps1 index 99d28bdf..945ef64d 100755 --- a/dist/scripts/download-plugins.ps1 +++ b/dist/scripts/download-plugins.ps1 @@ -18,11 +18,11 @@ $kimageformatsBuildNum = 107 # Qt version availability and runner names are assumed. if ($IsWindows) { - # TODO + $imageName = "windows-2019" } elseif ($IsMacOS) { $imageName = "macos-latest" } else { - # TODO + $imageName = "ubuntu-20.04" } $binaryBaseUrl = "https://github.com/jurplel/kimageformats-binaries/releases/download/cont" From 5eaa751b29c5435f2b1f97910811c3d595d18bff Mon Sep 17 00:00:00 2001 From: Benjamin Owad Date: Mon, 7 Aug 2023 00:24:30 -0400 Subject: [PATCH 051/111] try again --- dist/scripts/download-plugins.ps1 | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/dist/scripts/download-plugins.ps1 b/dist/scripts/download-plugins.ps1 index 945ef64d..0e99af38 100755 --- a/dist/scripts/download-plugins.ps1 +++ b/dist/scripts/download-plugins.ps1 @@ -7,10 +7,6 @@ $pluginNames = "qtapng", "kimageformats" $qtVersion = ((qmake --version -split '\n')[1] -split ' ')[3] Write-Host "Detected Qt Version $qtVersion" - -# TODO: Remove THIS, only for testing -$qtVersion = "6.2.2" - # Update these to change which artifacts to download! $avifBuildNum = 51 $apngBuildNum = 66 @@ -32,7 +28,8 @@ if ($pluginNames.count -eq 0) { } foreach ($pluginName in $pluginNames) { - $artifactName = "$pluginName-$imageName-$qtVersion.zip" + $arch = If (-not $env:arch -or $env:arch -eq '') { "" } Else { "-$env:arch" } + $artifactName = "$pluginName-$imageName-$qtVersion$arch.zip" $downloadUrl = "$binaryBaseUrl/$artifactName" Write-Host "Downloading $downloadUrl" From ace122ffbd64f1e908d17374fc69965d9dbf1389 Mon Sep 17 00:00:00 2001 From: Benjamin Owad Date: Mon, 7 Aug 2023 00:28:16 -0400 Subject: [PATCH 052/111] silently continue mkdir --- dist/scripts/download-plugins.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/scripts/download-plugins.ps1 b/dist/scripts/download-plugins.ps1 index 0e99af38..ee2c02c2 100755 --- a/dist/scripts/download-plugins.ps1 +++ b/dist/scripts/download-plugins.ps1 @@ -50,8 +50,8 @@ if ($IsWindows) { $out_imf = "bin/appdir/usr/plugins/imageformats" } -mkdir -p "$out_frm" -mkdir -p "$out_imf" +mkdir -p "$out_frm" -ErrorAction SilentlyContinue +mkdir -p "$out_imf" -ErrorAction SilentlyContinue # Copy QtApng if ($pluginNames -contains 'qtapng') { From eaf3021cb35b669447d67cffe0754e9caa17f21a Mon Sep 17 00:00:00 2001 From: Benjamin Owad Date: Mon, 7 Aug 2023 00:34:28 -0400 Subject: [PATCH 053/111] use new-item in stead --- dist/scripts/download-plugins.ps1 | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dist/scripts/download-plugins.ps1 b/dist/scripts/download-plugins.ps1 index ee2c02c2..a9ed87cd 100755 --- a/dist/scripts/download-plugins.ps1 +++ b/dist/scripts/download-plugins.ps1 @@ -50,8 +50,8 @@ if ($IsWindows) { $out_imf = "bin/appdir/usr/plugins/imageformats" } -mkdir -p "$out_frm" -ErrorAction SilentlyContinue -mkdir -p "$out_imf" -ErrorAction SilentlyContinue +New-Item -Type Directory -Path "$out_frm" -ErrorAction SilentlyContinue +New-Item -Type Directory -Path "$out_imf" -ErrorAction SilentlyContinue # Copy QtApng if ($pluginNames -contains 'qtapng') { @@ -67,8 +67,10 @@ if ($pluginNames -contains 'qtapng') { if ($pluginNames -contains 'kimageformats') { if ($IsWindows) { cp kimageformats/kimageformats/output/kimg_*.dll "$out_imf/" - cp kimageformats/kimageformats/output/zlib1.dll "$out_frm/" - cp kimageformats/kimageformats/output/KF5Archive.dll "$out_frm/" + if (Test-Path -Path kimageformats/kimageformats/output/zlib1.dll -PathType Leaf) { + cp kimageformats/kimageformats/output/zlib1.dll "$out_frm/" + cp kimageformats/kimageformats/output/KF5Archive.dll "$out_frm/" + } } elseif ($IsMacOS) { cp kimageformats/kimageformats/output/*.so "$out_imf/" cp kimageformats/kimageformats/output/libKF5Archive.5.dylib "$out_frm/" From 5b9d295b8139ad27c4485614c498c4b0d1b5102f Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Mon, 7 Aug 2023 00:38:27 -0400 Subject: [PATCH 054/111] typo in build.yml --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2486e967..0831c998 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,7 +20,7 @@ jobs: qtVersion: '6.2.2' qtModules: 'qtimageformats' - runner: 'macos-latest' - qtVersion: '5.12.12' + qtVersion: '5.12.2' osSuffix: '_legacy' skipHardPlugins: 'true' - runner: 'windows-2019' From 890b966ec27eeb8acadb9a8dc02421c6bd01ad97 Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Mon, 7 Aug 2023 12:56:41 -0400 Subject: [PATCH 055/111] oops, what i was actually doing was going from 5.12 -> 5.15 on macos-legacy which is fine --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0831c998..81ca7e99 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,7 +20,7 @@ jobs: qtVersion: '6.2.2' qtModules: 'qtimageformats' - runner: 'macos-latest' - qtVersion: '5.12.2' + qtVersion: '5.15.2' osSuffix: '_legacy' skipHardPlugins: 'true' - runner: 'windows-2019' From 7b28dd958e83ec57698535745f673b4ee2149ca8 Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Mon, 7 Aug 2023 13:05:33 -0400 Subject: [PATCH 056/111] always get qtimageformats --- .github/workflows/build.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 81ca7e99..1e23d07f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,7 +18,6 @@ jobs: qtVersion: '5.15.2' - runner: 'macos-latest' qtVersion: '6.2.2' - qtModules: 'qtimageformats' - runner: 'macos-latest' qtVersion: '5.15.2' osSuffix: '_legacy' @@ -27,7 +26,6 @@ jobs: qtVersion: '6.2.2' qtArch: 'win64_msvc2019_64' osSuffix: '_64' - qtModules: 'qtimageformats' - runner: 'windows-2019' qtVersion: '5.15.2' qtArch: 'win32_msvc2019' @@ -53,7 +51,7 @@ jobs: version: ${{ matrix.qtVersion }} arch: ${{ matrix.qtArch }} cache: true - modules: ${{ matrix.qtModules }} + modules: "qtimageformats" - name: Build qView shell: pwsh From 3683bde9a8278b70c257d3d3f529504fcc5bbd53 Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Mon, 7 Aug 2023 13:35:11 -0400 Subject: [PATCH 057/111] blah --- .github/workflows/build.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1e23d07f..81ca7e99 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,6 +18,7 @@ jobs: qtVersion: '5.15.2' - runner: 'macos-latest' qtVersion: '6.2.2' + qtModules: 'qtimageformats' - runner: 'macos-latest' qtVersion: '5.15.2' osSuffix: '_legacy' @@ -26,6 +27,7 @@ jobs: qtVersion: '6.2.2' qtArch: 'win64_msvc2019_64' osSuffix: '_64' + qtModules: 'qtimageformats' - runner: 'windows-2019' qtVersion: '5.15.2' qtArch: 'win32_msvc2019' @@ -51,7 +53,7 @@ jobs: version: ${{ matrix.qtVersion }} arch: ${{ matrix.qtArch }} cache: true - modules: "qtimageformats" + modules: ${{ matrix.qtModules }} - name: Build qView shell: pwsh From 78ffa6313126d6c8398d9faf1f2bf45e9ad2fb83 Mon Sep 17 00:00:00 2001 From: Benjamin Owad Date: Mon, 7 Aug 2023 22:49:30 -0400 Subject: [PATCH 058/111] Update dist files --- dist/linux/debian/changelog | 6 +++--- dist/linux/debian/control | 2 +- dist/linux/rpm/qview.spec | 5 +++-- dist/win/qView32.iss | 4 ++-- dist/win/qView64.iss | 4 ++-- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/dist/linux/debian/changelog b/dist/linux/debian/changelog index 75fd2bea..cc9c4926 100644 --- a/dist/linux/debian/changelog +++ b/dist/linux/debian/changelog @@ -1,5 +1,5 @@ -qview (5.0-5) bionic; urgency=low +qview (6.0-1) bionic; urgency=low - * Fix not requiring qtbase5-dev-tools + * Initial release - -- jurplel Fri, 14 Jan 2022 20:44:22 -0500 \ No newline at end of file + -- jurplel Mon, 7 Aug 2023 14:54:07 -0400 diff --git a/dist/linux/debian/control b/dist/linux/debian/control index 002a9688..fe4b0919 100644 --- a/dist/linux/debian/control +++ b/dist/linux/debian/control @@ -8,7 +8,7 @@ Homepage: https://interversehq.com/qview Package: qview Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, libqt5widgets5 (>= 5.9), libqt5network5 (>= 5.9), libqt5concurrent5 (>= 5.9) +Depends: ${shlibs:Depends}, ${misc:Depends}, libqt5widgets5 (>= 5.9), libqt5network5 (>= 5.9), libqt5concurrent5 (>= 5.9), libqt5x11extras5 (>= 5.9) Recommends: qt5-image-formats-plugins (>= 5.9), libqt5svg5 (>= 5.9) Suggests: qt-heif-image-plugin (>= 0.3.3), kimageformats (>= 5.38.0) Description: Practical and minimal image viewer diff --git a/dist/linux/rpm/qview.spec b/dist/linux/rpm/qview.spec index 79570476..7a09ca13 100644 --- a/dist/linux/rpm/qview.spec +++ b/dist/linux/rpm/qview.spec @@ -1,5 +1,5 @@ Name: qview -Version: 5.0 +Version: 6.0 Release: 1 Summary: Practical and minimal image viewer @@ -12,6 +12,7 @@ BuildRequires: pkgconfig BuildRequires: pkgconfig(Qt5Concurrent) >= 5.9 BuildRequires: pkgconfig(Qt5Widgets) >= 5.9 BuildRequires: pkgconfig(Qt5Network) >= 5.9 +BuildRequires: pkgconfig(Qt5X11Extras) >= 5.9 %description @@ -42,4 +43,4 @@ cp dist/linux/com.interversehq.qView.appdata.xml %{buildroot}/usr/share/metainfo %license LICENSE %doc README.md -%changelog \ No newline at end of file +%changelog diff --git a/dist/win/qView32.iss b/dist/win/qView32.iss index a57b8dd6..44ba34cc 100755 --- a/dist/win/qView32.iss +++ b/dist/win/qView32.iss @@ -4,8 +4,8 @@ #define MyAppExeName "qView.exe" ; Update these when building -#define MyAppVersion "5.0" -#define MyAppYear "2022" +#define MyAppVersion "6.0" +#define MyAppYear "2023" [Setup] AppId={{A6A9BAAB-C59E-4EAB-ACE1-3EEDE3031880} diff --git a/dist/win/qView64.iss b/dist/win/qView64.iss index eca72e11..805fe3f7 100755 --- a/dist/win/qView64.iss +++ b/dist/win/qView64.iss @@ -4,8 +4,8 @@ #define MyAppExeName "qView.exe" ; Update these when building -#define MyAppVersion "5.0" -#define MyAppYear "2022" +#define MyAppVersion "6.0" +#define MyAppYear "2023" [Setup] AppId={{A6A9BAAB-C59E-4EAB-ACE1-3EEDE3031880} From 25102254a56fe5e825848e7258be50b688b5111e Mon Sep 17 00:00:00 2001 From: Michael Wiesinger Date: Wed, 3 May 2023 15:22:45 +0000 Subject: [PATCH 059/111] Translated using Weblate (German) Currently translated at 100.0% (267 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/de/ --- i18n/qview_de.ts | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/i18n/qview_de.ts b/i18n/qview_de.ts index 876d569f..6a3a87d2 100644 --- a/i18n/qview_de.ts +++ b/i18n/qview_de.ts @@ -376,12 +376,13 @@ Can't delete %1: No write permission or file is read-only. - + %1 kann nicht gelöscht werden: +Keine Schreibberechtigung oder Datei ist schreibgeschützt. Are you sure you want to move %1 to the Trash? - + Sind Sie sicher, dass Sie %1 in den Papierkorb verschieben wollen? @@ -414,18 +415,20 @@ No write permission or file is read-only. This program was compiled with an old version of Qt and this feature is not available. If you see this message, please report a bug! - + Dieses Programm wurde mit einer alten Version von Qt kompiliert und diese Funktion ist nicht verfügbar. +Wenn Sie diese Meldung sehen, melden Sie diesen Fehler bitte! Can't undo deletion of %1: No write permission or file is read-only. - + Löschung von %1 kann nicht rückgängig gemacht werden: +Keine Schreibberechtigung oder Datei ist schreibgeschützt. Failed undoing deletion of %1. - + Das Wiederherstellen von %1 ist fehlgeschlagen. Rename... @@ -858,7 +861,7 @@ No write permission or file is read-only. &Quit on last window closed - + Schließen, wenn letztes Fenster geschlossen wurde @@ -1092,17 +1095,17 @@ No write permission or file is read-only. Move Back - + Zurück Do Nothing - + Nichts tun Move Forward - + Weiter @@ -1112,7 +1115,7 @@ No write permission or file is read-only. &Ask before deleting files - + Vor dem Löschen von Dateien fragen @@ -1163,13 +1166,15 @@ No write permission or file is read-only. Could not rename %1: No write permission or file is read-only. - + Konnte %1 nicht umbenennen: +Keine Schreibberechtigung oder Datei ist schreibgeschützt. Could not rename %1: (Check that all characters are valid) - + Konnte %1 nicht umbenennen: +(Prüfen Sie, ob alle Zeichen gültig sind) From 786f9778f40dcf08d1fee7b19c4a95c89882604f Mon Sep 17 00:00:00 2001 From: Christian Elbrianno Date: Wed, 24 May 2023 19:21:40 +0000 Subject: [PATCH 060/111] Translated using Weblate (Indonesian) Currently translated at 20.9% (56 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/id/ --- i18n/qview_id.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n/qview_id.ts b/i18n/qview_id.ts index de2b22d7..686114b7 100644 --- a/i18n/qview_id.ts +++ b/i18n/qview_id.ts @@ -281,7 +281,7 @@ &Welcome - + &Selamat Datang From a141abefa9f8675d1e2938961ab76a2e13155756 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9?= Date: Tue, 27 Jun 2023 10:35:50 +0000 Subject: [PATCH 061/111] Translated using Weblate (Russian) Currently translated at 100.0% (267 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/ru/ --- i18n/qview_ru.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n/qview_ru.ts b/i18n/qview_ru.ts index 1d7baa86..d64490c5 100644 --- a/i18n/qview_ru.ts +++ b/i18n/qview_ru.ts @@ -387,7 +387,7 @@ No write permission or file is read-only. Are you sure you want to move %1 to the Recycle Bin? - Вы уверены, что хотите переместить %1 в корзину? + Вы уверены, что хотите переместить %1 в Recycle Bin? From 0586c00d585eda5ebd068469cfa7f2a2f53403f5 Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Wed, 9 Aug 2023 00:47:28 -0400 Subject: [PATCH 062/111] Update windeployqt.ps1 --- dist/scripts/windeployqt.ps1 | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/dist/scripts/windeployqt.ps1 b/dist/scripts/windeployqt.ps1 index 4f8c6684..69b75b43 100755 --- a/dist/scripts/windeployqt.ps1 +++ b/dist/scripts/windeployqt.ps1 @@ -21,10 +21,11 @@ if ($env:arch.substring(3, 2) -eq '32') { # Run windeployqt which should be in path windeployqt bin/qView.exe --no-compiler-runtime -# Do renaming-y stuff -mv bin\qView.exe "bin\qView-nightly-$NightlyVersion.exe" -# Call innomake if we are not building a nightly version (no version passed) -if ($NightlyVersion -ne '') { +if ($NightlyVersion -eq '') { + # Do renaming-y stuff + mv bin\qView.exe "bin\qView-nightly-$NightlyVersion.exe" + + # Call innomake if we are not building a nightly version (no version passed) & "dist/scripts/innomake.ps1" } From 6ba45719fcc370193bb576aecb0b72a68481bf17 Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Wed, 9 Aug 2023 01:01:47 -0400 Subject: [PATCH 063/111] add missing x11extras dependency to control_bionic --- dist/linux/debian/control_bionic | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/linux/debian/control_bionic b/dist/linux/debian/control_bionic index edf2af17..72852830 100644 --- a/dist/linux/debian/control_bionic +++ b/dist/linux/debian/control_bionic @@ -8,7 +8,7 @@ Homepage: https://interversehq.com/qview Package: qview Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, libqt5widgets5 (>= 5.9), libqt5network5 (>= 5.9), libqt5concurrent5 (>= 5.9) +Depends: ${shlibs:Depends}, ${misc:Depends}, libqt5widgets5 (>= 5.9), libqt5network5 (>= 5.9), libqt5concurrent5 (>= 5.9), libqt5x11extras5 (>= 5.9) Recommends: qt5-image-formats-plugins (>= 5.9), libqt5svg5 (>= 5.9) Suggests: qt-heif-image-plugin (>= 0.3.3), kimageformats (>= 5.38.0) Description: Practical and minimal image viewer From c08a484f9de476fe076a28aecf3ea4c1b63f901e Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Wed, 9 Aug 2023 01:03:07 -0400 Subject: [PATCH 064/111] Fix windeployqt script renaming in the wrong case --- dist/scripts/windeployqt.ps1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/scripts/windeployqt.ps1 b/dist/scripts/windeployqt.ps1 index 69b75b43..474e9fb6 100755 --- a/dist/scripts/windeployqt.ps1 +++ b/dist/scripts/windeployqt.ps1 @@ -23,9 +23,9 @@ windeployqt bin/qView.exe --no-compiler-runtime if ($NightlyVersion -eq '') { - # Do renaming-y stuff - mv bin\qView.exe "bin\qView-nightly-$NightlyVersion.exe" - # Call innomake if we are not building a nightly version (no version passed) & "dist/scripts/innomake.ps1" +} else { + # Do renaming-y stuff otherwise + mv bin\qView.exe "bin\qView-nightly-$NightlyVersion.exe" } From 87a9e54149bba9dd0b7b422c8669fc2cb914c998 Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Wed, 9 Aug 2023 01:09:31 -0400 Subject: [PATCH 065/111] fix name???? --- dist/linux/debian/control_bionic | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/linux/debian/control_bionic b/dist/linux/debian/control_bionic index 72852830..93806185 100644 --- a/dist/linux/debian/control_bionic +++ b/dist/linux/debian/control_bionic @@ -8,7 +8,7 @@ Homepage: https://interversehq.com/qview Package: qview Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, libqt5widgets5 (>= 5.9), libqt5network5 (>= 5.9), libqt5concurrent5 (>= 5.9), libqt5x11extras5 (>= 5.9) +Depends: ${shlibs:Depends}, ${misc:Depends}, libqt5widgets5 (>= 5.9), libqt5network5 (>= 5.9), libqt5concurrent5 (>= 5.9), libqt5x11extras5-dev (>= 5.9) Recommends: qt5-image-formats-plugins (>= 5.9), libqt5svg5 (>= 5.9) Suggests: qt-heif-image-plugin (>= 0.3.3), kimageformats (>= 5.38.0) Description: Practical and minimal image viewer From 1ef88ed44e8f68af00afed03284442d3aad5be57 Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Wed, 9 Aug 2023 01:18:37 -0400 Subject: [PATCH 066/111] think i figured it out -- update control_bionic --- dist/linux/debian/control_bionic | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/linux/debian/control_bionic b/dist/linux/debian/control_bionic index 93806185..da3aedb1 100644 --- a/dist/linux/debian/control_bionic +++ b/dist/linux/debian/control_bionic @@ -2,13 +2,13 @@ Source: qview Section: graphics Priority: optional Maintainer: jurplel -Build-Depends: debhelper (>= 11), qt5-default (>= 5.9), qttools5-dev-tools (>= 5.9) +Build-Depends: debhelper (>= 11), qt5-default (>= 5.9), qttools5-dev-tools (>= 5.9), libqt5x11extras5-dev (>= 5.9) Standards-Version: 4.1.3 Homepage: https://interversehq.com/qview Package: qview Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, libqt5widgets5 (>= 5.9), libqt5network5 (>= 5.9), libqt5concurrent5 (>= 5.9), libqt5x11extras5-dev (>= 5.9) +Depends: ${shlibs:Depends}, ${misc:Depends}, libqt5widgets5 (>= 5.9), libqt5network5 (>= 5.9), libqt5concurrent5 (>= 5.9), libqt5x11extras5 (>= 5.9) Recommends: qt5-image-formats-plugins (>= 5.9), libqt5svg5 (>= 5.9) Suggests: qt-heif-image-plugin (>= 0.3.3), kimageformats (>= 5.38.0) Description: Practical and minimal image viewer From 44beb0e1e3774c7957e40b1940961846ef4d2746 Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Wed, 9 Aug 2023 01:18:55 -0400 Subject: [PATCH 067/111] think i figured it out-- update control --- dist/linux/debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/linux/debian/control b/dist/linux/debian/control index fe4b0919..b8cf3793 100644 --- a/dist/linux/debian/control +++ b/dist/linux/debian/control @@ -2,7 +2,7 @@ Source: qview Section: graphics Priority: optional Maintainer: jurplel -Build-Depends: debhelper (>= 11), qtbase5-dev (>= 5.9), qtbase5-dev-tools (>= 5.9), qt5-qmake (>= 5.9), qttools5-dev-tools (>= 5.9) +Build-Depends: debhelper (>= 11), qtbase5-dev (>= 5.9), qtbase5-dev-tools (>= 5.9), qt5-qmake (>= 5.9), qttools5-dev-tools (>= 5.9), libqt5x11extras5-dev (>= 5.9) Standards-Version: 4.1.3 Homepage: https://interversehq.com/qview From f491ac7e224bc55bfe14245c8b510de24cc16e4a Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Wed, 9 Aug 2023 10:42:08 -0400 Subject: [PATCH 068/111] qt 5.9 smoke test --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 81ca7e99..2f7c0772 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,6 +16,8 @@ jobs: include: - runner: 'ubuntu-20.04' qtVersion: '5.15.2' + - runner: 'ubuntu-20.04' + qtVersion: '5.9' - runner: 'macos-latest' qtVersion: '6.2.2' qtModules: 'qtimageformats' From 09d44c65d9ef0262dc8de212104aad18122cdb89 Mon Sep 17 00:00:00 2001 From: Benjamin Owad Date: Wed, 9 Aug 2023 10:47:18 -0400 Subject: [PATCH 069/111] qsizetype -> int for qt5.9 compatability --- src/qvimagecore.cpp | 2 +- src/qvimagecore.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qvimagecore.cpp b/src/qvimagecore.cpp index 97b6535a..b812b5e5 100644 --- a/src/qvimagecore.cpp +++ b/src/qvimagecore.cpp @@ -311,7 +311,7 @@ void QVImageCore::updateFolderInfo(QString dirPath) currentFileDetails.folderFileInfoList = getCompatibleFiles(dirPath); - QPair dirInfo = {dirPath, + QPair dirInfo = {dirPath, currentFileDetails.folderFileInfoList.count()}; // If the current folder changed since the last image, assign a new seed for random sorting if (lastDirInfo != dirInfo) diff --git a/src/qvimagecore.h b/src/qvimagecore.h index 9c591fd3..2cf443e4 100644 --- a/src/qvimagecore.h +++ b/src/qvimagecore.h @@ -119,7 +119,7 @@ class QVImageCore : public QObject static QCache pixmapCache; - QPair lastDirInfo; + QPair lastDirInfo; unsigned randomSortSeed; QStringList lastFilesPreloaded; From c43cd629ea6435d6d1ce85aeec808c9d14dd35fa Mon Sep 17 00:00:00 2001 From: Benjamin Owad Date: Wed, 9 Aug 2023 10:53:47 -0400 Subject: [PATCH 070/111] Try ifdef-ing birthTime --- src/qvimagecore.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/qvimagecore.cpp b/src/qvimagecore.cpp index b812b5e5..c46462e3 100644 --- a/src/qvimagecore.cpp +++ b/src/qvimagecore.cpp @@ -288,7 +288,11 @@ QList QVImageCore::getCompatibleFiles(const QString absoluteFilePath, fileName, sortMode == 1 ? fileInfo.lastModified().toMSecsSinceEpoch() : 0, +#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) sortMode == 2 ? fileInfo.birthTime().toMSecsSinceEpoch() : 0, +#else + sortMode == 2 ? fileInfo.created().toMSecsSinceEpoch() : 0, +#endif sortMode == 3 ? fileInfo.size() : 0, sortMode == 4 ? mimeType : QString() }); From 103fe4e341073be2b3331ea1570688427598c0b7 Mon Sep 17 00:00:00 2001 From: Benjamin Owad Date: Wed, 9 Aug 2023 11:02:00 -0400 Subject: [PATCH 071/111] try only conditionally downloading plugins --- .github/workflows/build.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2f7c0772..deef81ec 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,13 +18,13 @@ jobs: qtVersion: '5.15.2' - runner: 'ubuntu-20.04' qtVersion: '5.9' + skipPlugins: 'true' - runner: 'macos-latest' qtVersion: '6.2.2' qtModules: 'qtimageformats' - runner: 'macos-latest' qtVersion: '5.15.2' osSuffix: '_legacy' - skipHardPlugins: 'true' - runner: 'windows-2019' qtVersion: '6.2.2' qtArch: 'win64_msvc2019_64' @@ -64,7 +64,9 @@ jobs: - name: Deploy qView shell: pwsh run: | - Invoke-Expression "& 'dist/scripts/download-plugins.ps1'" + if (-Not ${{ matrix.skipPlugins }}) { + Invoke-Expression "& 'dist/scripts/download-plugins.ps1'" + } if ($IsWindows) { Invoke-Expression "& 'dist/scripts/windeployqt.ps1' ${{ env.buildNumString }}" } elseif ($IsMacOS) { From 353bd4b87091fc9c11499f28b758c58b6ac8a4b4 Mon Sep 17 00:00:00 2001 From: Benjamin Owad Date: Wed, 9 Aug 2023 11:09:54 -0400 Subject: [PATCH 072/111] try other if stmt format --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index deef81ec..a4f01c57 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -64,7 +64,7 @@ jobs: - name: Deploy qView shell: pwsh run: | - if (-Not ${{ matrix.skipPlugins }}) { + if ("${{ matrix.skipPlugins }}" == "true") { Invoke-Expression "& 'dist/scripts/download-plugins.ps1'" } if ($IsWindows) { From a2a295f282baa8eb1b5cfcb509b439f417bd601f Mon Sep 17 00:00:00 2001 From: Benjamin Owad Date: Wed, 9 Aug 2023 11:12:50 -0400 Subject: [PATCH 073/111] i meant eq --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a4f01c57..4f19c47b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -64,7 +64,7 @@ jobs: - name: Deploy qView shell: pwsh run: | - if ("${{ matrix.skipPlugins }}" == "true") { + if ("${{ matrix.skipPlugins }}" -eq "true") { Invoke-Expression "& 'dist/scripts/download-plugins.ps1'" } if ($IsWindows) { From e47299852d577ad978aed52e5c7279d087c8a037 Mon Sep 17 00:00:00 2001 From: Benjamin Owad Date: Wed, 9 Aug 2023 11:17:53 -0400 Subject: [PATCH 074/111] reverse polarity --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4f19c47b..25c7dc8d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -64,7 +64,7 @@ jobs: - name: Deploy qView shell: pwsh run: | - if ("${{ matrix.skipPlugins }}" -eq "true") { + if ("${{ matrix.skipPlugins }}" -ne "true") { Invoke-Expression "& 'dist/scripts/download-plugins.ps1'" } if ($IsWindows) { From 011d5eccf7da5f13beeccd8725633d7471994b8a Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Wed, 9 Aug 2023 22:45:58 -0400 Subject: [PATCH 075/111] try to copy all the new dlls --- dist/scripts/download-plugins.ps1 | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/dist/scripts/download-plugins.ps1 b/dist/scripts/download-plugins.ps1 index a9ed87cd..0d75eba9 100755 --- a/dist/scripts/download-plugins.ps1 +++ b/dist/scripts/download-plugins.ps1 @@ -66,11 +66,8 @@ if ($pluginNames -contains 'qtapng') { if ($pluginNames -contains 'kimageformats') { if ($IsWindows) { - cp kimageformats/kimageformats/output/kimg_*.dll "$out_imf/" - if (Test-Path -Path kimageformats/kimageformats/output/zlib1.dll -PathType Leaf) { - cp kimageformats/kimageformats/output/zlib1.dll "$out_frm/" - cp kimageformats/kimageformats/output/KF5Archive.dll "$out_frm/" - } + mv kimageformats/kimageformats/output/kimg_*.dll "$out_imf/" + mv kimageformats/kimageformats/output/*.dll "$out_frm/" } elseif ($IsMacOS) { cp kimageformats/kimageformats/output/*.so "$out_imf/" cp kimageformats/kimageformats/output/libKF5Archive.5.dylib "$out_frm/" From ef73f0a21af73ae2fd863f30ee17b7b17fc9ca2c Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Thu, 10 Aug 2023 19:53:56 -0400 Subject: [PATCH 076/111] Copy only the plugins we need --- dist/scripts/download-plugins.ps1 | 45 ++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/dist/scripts/download-plugins.ps1 b/dist/scripts/download-plugins.ps1 index 0d75eba9..3db10226 100755 --- a/dist/scripts/download-plugins.ps1 +++ b/dist/scripts/download-plugins.ps1 @@ -7,11 +7,6 @@ $pluginNames = "qtapng", "kimageformats" $qtVersion = ((qmake --version -split '\n')[1] -split ' ')[3] Write-Host "Detected Qt Version $qtVersion" -# Update these to change which artifacts to download! -$avifBuildNum = 51 -$apngBuildNum = 66 -$kimageformatsBuildNum = 107 - # Qt version availability and runner names are assumed. if ($IsWindows) { $imageName = "windows-2019" @@ -67,7 +62,45 @@ if ($pluginNames -contains 'qtapng') { if ($pluginNames -contains 'kimageformats') { if ($IsWindows) { mv kimageformats/kimageformats/output/kimg_*.dll "$out_imf/" - mv kimageformats/kimageformats/output/*.dll "$out_frm/" + # Copy karchive + if (Test-Path -Path kimageformats/kimageformats/output/KF5Archive.dll -PathType Leaf) { + cp kimageformats/kimageformats/output/zlib1.dll "$out_frm/" + cp kimageformats/kimageformats/output/KF5Archive.dll "$out_frm/" + } + # copy avif stuff + if (Test-Path -Path kimageformats/kimageformats/output/avif.dll -PathType Leaf) { + cp kimageformats/kimageformats/output/avif.dll "$out_frm/" + cp kimageformats/kimageformats/output/aom.dll "$out_frm/" + } + # copy heif stuff + if (Test-Path -Path kimageformats/kimageformats/output/heif.dll -PathType Leaf) { + cp kimageformats/kimageformats/output/heif.dll "$out_frm/" + cp kimageformats/kimageformats/output/de265.dll "$out_frm/" + cp kimageformats/kimageformats/output/libx265.dll "$out_frm/" + } + # copy raw stuff + if (Test-Path -Path kimageformats/kimageformats/output/raw.dll -PathType Leaf) { + cp kimageformats/kimageformats/output/zlib1.dll "$out_frm/" + cp kimageformats/kimageformats/output/raw.dll "$out_frm/" + cp kimageformats/kimageformats/output/lcms2.dll "$out_frm/" + } + # copy jxl stuff + if (Test-Path -Path kimageformats/kimageformats/output/jxl.dll -PathType Leaf) { + cp kimageformats/kimageformats/output/jxl.dll "$out_frm/" + cp kimageformats/kimageformats/output/jxl_threads.dll "$out_frm/" + cp kimageformats/kimageformats/output/hwy.dll "$out_frm/" + cp kimageformats/kimageformats/output/brotlicommon.dll "$out_frm/" + cp kimageformats/kimageformats/output/brotlidec.dll "$out_frm/" + cp kimageformats/kimageformats/output/brotlienc.dll "$out_frm/" + } + # copy jxl stuff + if (Test-Path -Path kimageformats/kimageformats/output/OpenEXR-3_1.dll -PathType Leaf) { + cp kimageformats/kimageformats/output/zlib1.dll "$out_frm/" + cp kimageformats/kimageformats/output/OpenEXR-3_1.dll "$out_frm/" + cp kimageformats/kimageformats/output/Imath-3_1.dll "$out_frm/" + cp kimageformats/kimageformats/output/IlmThread-3_1.dll "$out_frm/" + cp kimageformats/kimageformats/output/Iex-3_1.dll "$out_frm/" + } } elseif ($IsMacOS) { cp kimageformats/kimageformats/output/*.so "$out_imf/" cp kimageformats/kimageformats/output/libKF5Archive.5.dylib "$out_frm/" From 48693f727e5abf1fed0e6284296a57668a7b0b93 Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Thu, 10 Aug 2023 20:17:03 -0400 Subject: [PATCH 077/111] Update qView.pro to 2023 --- qView.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qView.pro b/qView.pro index b6f6e36f..cb62359e 100644 --- a/qView.pro +++ b/qView.pro @@ -46,7 +46,7 @@ win32 { } RC_ICONS = "dist/win/qView.ico" - QMAKE_TARGET_COPYRIGHT = "Copyright \\251 2022 jurplel and qView contributors" + QMAKE_TARGET_COPYRIGHT = "Copyright \\251 2023 jurplel and qView contributors" QMAKE_TARGET_DESCRIPTION = "qView" } From 2a6bdfa1c076975aab7f80f7d76497af9ea1af86 Mon Sep 17 00:00:00 2001 From: Benjamin Owad Date: Fri, 11 Aug 2023 13:50:40 -0400 Subject: [PATCH 078/111] Attempt to resolve wayland color profile crash issue --- src/qvlinuxx11functions.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/qvlinuxx11functions.cpp b/src/qvlinuxx11functions.cpp index 46ccffb0..5c257418 100644 --- a/src/qvlinuxx11functions.cpp +++ b/src/qvlinuxx11functions.cpp @@ -11,7 +11,9 @@ namespace X11Helper Display* getDisplay() { #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - return QX11Info::display(); + if (QX11Info::isPlatformX11()) + return QX11Info::display(); + return nullptr; #else if (const auto x11App = qGuiApp->nativeInterface()) return x11App->display(); From 18d49b89e37b2b13181943b90eb643b33064de80 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sat, 12 Aug 2023 12:19:41 -0400 Subject: [PATCH 079/111] Cache memory usage fix (regression due to merge error). --- src/qvimagecore.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/qvimagecore.cpp b/src/qvimagecore.cpp index c46462e3..0a933997 100644 --- a/src/qvimagecore.cpp +++ b/src/qvimagecore.cpp @@ -477,8 +477,9 @@ void QVImageCore::addToCache(const ReadData &readData) return; QString cacheKey = getPixmapCacheKey(readData.absoluteFilePath, readData.fileSize, readData.targetColorSpace); + qint64 pixmapMemoryBytes = static_cast(readData.pixmap.width()) * readData.pixmap.height() * readData.pixmap.depth() / 8; - QVImageCore::pixmapCache.insert(cacheKey, new ReadData(readData), readData.fileSize/1024); + QVImageCore::pixmapCache.insert(cacheKey, new ReadData(readData), qMax(pixmapMemoryBytes / 1024, 1LL)); } QString QVImageCore::getPixmapCacheKey(const QString &absoluteFilePath, const qint64 &fileSize, const QColorSpace &targetColorSpace) From aaff929e21dafc2305164840c62a90dab1769fca Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Tue, 15 Aug 2023 18:27:29 -0400 Subject: [PATCH 080/111] add missing space at the end of filterString --- src/qvapplication.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qvapplication.cpp b/src/qvapplication.cpp index ced5c263..57b3acd8 100644 --- a/src/qvapplication.cpp +++ b/src/qvapplication.cpp @@ -354,7 +354,7 @@ void QVApplication::defineFilterLists() if (fileExtension == ".jpg") { filterList << "*.jpe" << "*.jfi" << "*.jfif"; - filterString += "*.jpe *.jfi *.jfif"; + filterString += "*.jpe *.jfi *.jfif "; fileExtensionList << ".jpe" << ".jfi" << ".jfif"; } } From 3c5228c54e0ad3bffd7daca61fcdd76736540670 Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Tue, 15 Aug 2023 20:33:41 -0400 Subject: [PATCH 081/111] Update version numbers --- dist/linux/com.interversehq.qView.appdata.xml | 2 + dist/linux/debian/changelog | 4 +- dist/linux/rpm/qview.spec | 2 +- dist/mac/Info_legacy.plist | 62 ------------------- dist/win/qView32.iss | 2 +- dist/win/qView64.iss | 2 +- qView.pro | 9 ++- src/qvapplication.cpp | 2 +- 8 files changed, 12 insertions(+), 73 deletions(-) delete mode 100644 dist/mac/Info_legacy.plist diff --git a/dist/linux/com.interversehq.qView.appdata.xml b/dist/linux/com.interversehq.qView.appdata.xml index e02b310d..8d18f359 100644 --- a/dist/linux/com.interversehq.qView.appdata.xml +++ b/dist/linux/com.interversehq.qView.appdata.xml @@ -28,6 +28,8 @@ + + diff --git a/dist/linux/debian/changelog b/dist/linux/debian/changelog index cc9c4926..7f4e0954 100644 --- a/dist/linux/debian/changelog +++ b/dist/linux/debian/changelog @@ -1,5 +1,5 @@ -qview (6.0-1) bionic; urgency=low +qview (6.1-1) bionic; urgency=low * Initial release - -- jurplel Mon, 7 Aug 2023 14:54:07 -0400 + -- jurplel Tue, 15 Aug 2023 20:26:07 -0400 diff --git a/dist/linux/rpm/qview.spec b/dist/linux/rpm/qview.spec index 7a09ca13..8d21eb05 100644 --- a/dist/linux/rpm/qview.spec +++ b/dist/linux/rpm/qview.spec @@ -1,5 +1,5 @@ Name: qview -Version: 6.0 +Version: 6.1 Release: 1 Summary: Practical and minimal image viewer diff --git a/dist/mac/Info_legacy.plist b/dist/mac/Info_legacy.plist deleted file mode 100644 index 13c8c885..00000000 --- a/dist/mac/Info_legacy.plist +++ /dev/null @@ -1,62 +0,0 @@ - - - - - CFBundleExecutable - @EXECUTABLE@ - CFBundleName - qView - CFBundleGetInfoString - @SHORT_VERSION@ - CFBundleIconFile - @ICON@ - CFBundleIdentifier - @BUNDLEIDENTIFIER@ - CFBundlePackageType - APPL - CFBundleSignature - @TYPEINFO@ - LSMinimumSystemVersion - 10.10 - NSPrincipalClass - NSApplication - CFBundleShortVersionString - @SHORT_VERSION@ - CFBundleDocumentTypes - - - CFBundleTypeExtensions - - bmp - cur - gif - icns - ico - jpeg - jpg - jpe - jfi - jfif - pbm - pgm - png - ppm - svg - svgz - tif - tiff - wbmp - webp - xbm - xpm - - CFBundleTypeRole - Viewer - - - NSSupportsAutomaticGraphicsSwitching - - NSHighResolutionCapable - - - diff --git a/dist/win/qView32.iss b/dist/win/qView32.iss index 44ba34cc..5de11d42 100755 --- a/dist/win/qView32.iss +++ b/dist/win/qView32.iss @@ -4,7 +4,7 @@ #define MyAppExeName "qView.exe" ; Update these when building -#define MyAppVersion "6.0" +#define MyAppVersion "6.1" #define MyAppYear "2023" [Setup] diff --git a/dist/win/qView64.iss b/dist/win/qView64.iss index 805fe3f7..00eb766d 100755 --- a/dist/win/qView64.iss +++ b/dist/win/qView64.iss @@ -4,7 +4,7 @@ #define MyAppExeName "qView.exe" ; Update these when building -#define MyAppVersion "6.0" +#define MyAppVersion "6.1" #define MyAppYear "2023" [Setup] diff --git a/qView.pro b/qView.pro index cb62359e..1baa40dd 100644 --- a/qView.pro +++ b/qView.pro @@ -1,5 +1,5 @@ TARGET = qView -VERSION = 6.0 +VERSION = 6.1 QT += core gui network widgets @@ -62,12 +62,11 @@ macx { } QMAKE_TARGET_BUNDLE_PREFIX = "com.interversehq" - # Special info.plist for qt 5.9 on mac - equals(QT_MAJOR_VERSION, 5):lessThan(QT_MINOR_VERSION, 10) { - QMAKE_INFO_PLIST = "dist/mac/Info_legacy.plist" + QMAKE_INFO_PLIST = "dist/mac/Info_legacy.plist" + # Older icon for qt 5 on mac + lessThan(QT_MAJOR_VERSION, 6) { ICON = "dist/mac/qView_legacy.icns" } else { - QMAKE_INFO_PLIST = "dist/mac/Info.plist" ICON = "dist/mac/qView.icns" } } diff --git a/src/qvapplication.cpp b/src/qvapplication.cpp index 57b3acd8..4c119780 100644 --- a/src/qvapplication.cpp +++ b/src/qvapplication.cpp @@ -360,7 +360,7 @@ void QVApplication::defineFilterLists() } filterString.chop(1); filterString += ")"; - + qDebug() << filterList << filterString << fileExtensionList; // Build mime type list const auto &byteArrayMimeTypes = QImageReader::supportedMimeTypes(); From df57d3f58b9675861dbaf5f811d43428583fde89 Mon Sep 17 00:00:00 2001 From: Christian Elbrianno Date: Tue, 8 Aug 2023 17:54:04 +0000 Subject: [PATCH 082/111] Translated using Weblate (Indonesian) Currently translated at 29.5% (79 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/id/ --- i18n/qview_id.ts | 48 +++++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/i18n/qview_id.ts b/i18n/qview_id.ts index 686114b7..57ebb482 100644 --- a/i18n/qview_id.ts +++ b/i18n/qview_id.ts @@ -287,25 +287,25 @@ Clear &Menu This is for clearing the recents menu - + Hapus &Menu Other Application... Open with other program for unix non-mac - + Aplikasi Lain... Choose another app Open with other program for windows - + Pilih aplikasi lain Other... Open with other program for macos - + Lainnya... @@ -313,17 +313,17 @@ Exit F&ull Screen - + Keluar dari Tampilan Penuh Enter F&ull Screen - + Masuk ke Tampilan Penuh Empty - + Kosong @@ -334,87 +334,89 @@ Error - + Kesalahan Error: URL is invalid - + Kesalahan: URL tidak valid Downloading image... - + Mengunduh gambar... Cancel - + Batal Open URL... - + Buka URL... Error - + Kesalahan Error: Invalid image - + Kesalahan: Gambar tidak valid URL of a supported image file: - + URL untuk gambar yang didukung: Can't delete %1: No write permission or file is read-only. - + Tidak dapat menghapus %1: +Tidak ada izin atau gambar hanya bisa dibaca (read-only). Are you sure you want to move %1 to the Trash? - + Apakah Anda yakin untuk memindahkan %1 ke Tempat Sampah? Are you sure you want to move %1 to the Recycle Bin? - + Apakah Anda yakin untuk memindahkan %1 ke Tempat Sampah? Delete - + Hapus Do not ask again - + Jangan tanya lagi Can't delete %1. - + Tidak dapat menghapus %1. Not Supported - + Tidak Didukung This program was compiled with an old version of Qt and this feature is not available. If you see this message, please report a bug! - + Program ini dikompilasi dengan versi lama Qt dan fitur ini tidak tersedia. +Kalau kamu melihat pesan ini, tolong laporkan bug! From 70ae300ffd8fe8a35086e60113ee086ca87771ad Mon Sep 17 00:00:00 2001 From: Christian Elbrianno Date: Thu, 10 Aug 2023 08:09:40 +0000 Subject: [PATCH 083/111] Translated using Weblate (Indonesian) Currently translated at 29.9% (80 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/id/ --- i18n/qview_id.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/i18n/qview_id.ts b/i18n/qview_id.ts index 57ebb482..60469489 100644 --- a/i18n/qview_id.ts +++ b/i18n/qview_id.ts @@ -422,7 +422,8 @@ Kalau kamu melihat pesan ini, tolong laporkan bug! Can't undo deletion of %1: No write permission or file is read-only. - + Tidak dapat mengembalikan penghapusan %1: +Tidak ada izin tulis atau berkas hanya dapat dibaca (read-only). From 8b8fdc64c4493544283108ba6e14ce590b16fef0 Mon Sep 17 00:00:00 2001 From: albanobattistella Date: Sat, 12 Aug 2023 11:09:51 +0000 Subject: [PATCH 084/111] Translated using Weblate (Italian) Currently translated at 89.5% (239 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/it/ --- i18n/qview_it.ts | 342 ++++++++++++++++++++++++----------------------- 1 file changed, 174 insertions(+), 168 deletions(-) diff --git a/i18n/qview_it.ts b/i18n/qview_it.ts index 1f7e9d6d..27253503 100644 --- a/i18n/qview_it.ts +++ b/i18n/qview_it.ts @@ -382,51 +382,53 @@ Mancanza di permessi di scrittura oppure file a sola lettura. Are you sure you want to move %1 to the Trash? - + Sei sicuro di voler spostare %1 nel cestino? Are you sure you want to move %1 to the Recycle Bin? - + Sei sicuro di voler spostare %1 nel Cestino? Delete - + Elimina Do not ask again - + Non chiedere di nuovo Can't delete %1. - + Impossibile eliminare %1. Not Supported - + Non supportato This program was compiled with an old version of Qt and this feature is not available. If you see this message, please report a bug! - + Questo programma è stato compilato con una vecchia versione di Qt e questa funzione non è disponibile. +Se vedi questo messaggio, per favore segnala un bug! Can't undo deletion of %1: No write permission or file is read-only. - + Impossibile annullare l'eliminazione di %1: +Nessun permesso di scrittura o il file è di sola lettura. Failed undoing deletion of %1. - + Impossibile annullare l'eliminazione di %1. @@ -441,7 +443,7 @@ No write permission or file is read-only. Pause - + Pausa @@ -459,17 +461,17 @@ No write permission or file is read-only. All Applications (*.app) - + Tutte le applicazioni (*.app) Programs (*.exe *.pif *.com *.bat *.cmd) - + Programmi (*.exe *.pif *.com *.bat *.cmd) All Files (*) - + Tutti i file (*) @@ -477,12 +479,12 @@ No write permission or file is read-only. file - + file The file to open. - + Il file da aprire. @@ -490,12 +492,12 @@ No write permission or file is read-only. About qView - + Informazioni su qView version %1 - + versione %1 @@ -505,28 +507,28 @@ No write permission or file is read-only. Built with Qt %1 (%2)<br>Source code available under GPLv3 on <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurplel/qView">GitHub</a><br>Icon glyph created by Guilhem from the Noun Project<br>Copyright © %3 jurplel and qView contributors - + Costruito con Qt %1 (%2)<br>Codice sorgente disponibile sotto GPLv3 su <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurpplel/qView">GitHub</a><br>Icona glifo creata da Guilhem dal progetto Noun<br>Copyright © %3 contributori di jurpel e qView Checking for updates... - + Verifica aggiornamenti... %1 update available %1 is a version number e.g. "4.0 update available" - + %1 aggiornamento disponibile No updates available - + Nessun aggiornamento disponibile Error checking for updates - + Errori durante il controllo degli aggiornamenti @@ -534,12 +536,12 @@ No write permission or file is read-only. Supported Images - + Immagini supportate All Files - + Tutti i file @@ -552,7 +554,7 @@ No write permission or file is read-only. (default) - + (predefinito) @@ -566,7 +568,8 @@ No write permission or file is read-only. Error occurred opening "%3": %2 (Error %1) - + Errore durante l'apertura di "%3": +%2 (errore %1) @@ -574,12 +577,12 @@ No write permission or file is read-only. File Info - + Informazione sul file Name: - + Nome: @@ -591,32 +594,32 @@ No write permission or file is read-only. error - + errore Type: - + Tipo: Location: - + Posizione: Size: - + Dimensione: Modified: - + Modificato: Dimensions: - + Dimensioni: @@ -626,22 +629,22 @@ No write permission or file is read-only. Frames: - + Fotogrammi: Refresh - + Aggiorna %1 (%2 bytes) - + %1 (%2 byte) %1 x %2 (%3 MP) - + %1 x %2 (%3 MP) @@ -649,67 +652,67 @@ No write permission or file is read-only. Choose Application - + Scegli applicazione Development - + Sviluppo Education - + Istruzione Games - + Giochi Graphics - + Grafica Internet - + Internet Multimedia - + Multimedia Office - + Ufficio Science - + Scienze Settings - + Impostazioni System - + Sistema Utilities - + Utilità Other - + Altro @@ -717,12 +720,12 @@ No write permission or file is read-only. Options - + Opzioni Window - + Finestra @@ -732,7 +735,7 @@ No write permission or file is read-only. Changes the amount of information displayed in the titlebar - + Modifica la quantità di informazioni visualizzate nella barra del titolo @@ -742,17 +745,17 @@ No write permission or file is read-only. &Basic - + &Basico &Minimal - + &Minimale &Practical - + &Pratico @@ -763,69 +766,69 @@ No write permission or file is read-only. Control when the window should resize to fit the image's actual size - + Controlla quando la finestra deve essere ridimensionata per adattarsi alle dimensioni effettive dell'immagine Window matches image size: - + La finestra corrisponde alla dimensione dell'immagine: Never - + Mai When launching - + Quando si avvia When opening images - + All'apertura delle immagini Minimum size: - + Dimensione minima: Control the minimum size that the window should reach when matching the image's actual size - + Controlla la dimensione minima che la finestra deve raggiungere quando corrisponde alla dimensione effettiva dell'immagine % of screen size - + % delle dimensioni dello schermo Control the maximum size that the window should reach when matching the image's actual size - + Controlla la dimensione massima che la finestra dovrebbe raggiungere quando corrisponde alla dimensione effettiva dell'immagine Maximum size: - + Dimensione massima: Choose whether or not the titlebar should always be dark regardless of your chosen macOS appearance - + Scegli se la barra del titolo deve essere sempre scura, indipendentemente dall'aspetto macOS scelto &Titlebar always dark - + &Barra del titolo sempre scura Show menubar - + Mostra la barra del menu @@ -845,17 +848,17 @@ No write permission or file is read-only. Image - + Immagine Scaling: - + Ridimensionamento: Turn this off to see individual pixels - + Disattiva questa opzione per vedere i singoli pixel @@ -875,7 +878,7 @@ No write permission or file is read-only. Choose whether or not the image continues to be scaled when zooming above the window size (can be laggier with large images) - + Scegli se l'immagine continua a essere ridimensionata o meno quando si esegue lo zoom sopra la dimensione della finestra (può essere più lento con immagini di grandi dimensioni) @@ -886,22 +889,22 @@ No write permission or file is read-only. The amount to zoom every scroll wheel click - + La quantità di zoom per ogni clic della rotella di scorrimento Zoom amount: - + Quantità di ingrandimento: Choose whether scrolling zooms or moves the image (alternative can be accessed at any time by holding ctrl/cmd) - + Scegli se lo scorrimento ingrandisce o sposta l'immagine (è possibile accedere in alternativa in qualsiasi momento tenendo premuto ctrl/cmd) Scrolling &zooms - + Scorrimento &zoom @@ -917,22 +920,22 @@ No write permission or file is read-only. Ignores select sides of an image when fitting to window (some sides will extend beyond the window boundaries) - + Ignora i lati selezionati di un'immagine durante l'adattamento alla finestra (alcuni lati si estenderanno oltre i limiti della finestra) Fit whole image - + Adatta l'intera immagine Fit height - + Adatta altezza Fit width - + Adatta larghezza @@ -952,53 +955,53 @@ No write permission or file is read-only. Miscellaneous - + Varie Sort files by: - + Ordina i file per: Name - + Nome Last Modified - + Ultima modifica Size - + Dimensione Type - + Tipo Random - + A caso A&scending - + A&scendente D&escending - + D&iscendente Controls the amount of images preloaded - + Controlla la quantità di immagini precaricate @@ -1008,22 +1011,22 @@ No write permission or file is read-only. Disabled - + Disabilitato Adjacent - + Adiacente Extended - + Esteso Controls whether or not qView should go back to the first item after reaching the end of a folder - + Controlla se qView deve tornare al primo elemento dopo aver raggiunto la fine di una cartella @@ -1038,12 +1041,12 @@ No write permission or file is read-only. Forward - + Avanti Backward - + Indietro @@ -1053,23 +1056,23 @@ No write permission or file is read-only. sec - + sec Save &recent files - + Salva &file recenti &Update notifications on startup The notifications are for new qView releases - + &Aggiorna le notifiche all'avvio Language: - + Lingua: @@ -1079,7 +1082,7 @@ No write permission or file is read-only. Do Nothing - + Non fare nulla @@ -1089,38 +1092,38 @@ No write permission or file is read-only. After deletion: - + Dopo la cancellazione: &Ask before deleting files - + &Chiedi prima di eliminare i file Shortcuts - + Scorciatoie Action - + Azione System Language - + Lingua di sistema Restart Required - + Riavvio richiesto You must restart qView to change the language. - + È necessario riavviare qView per cambiare la lingua. @@ -1128,30 +1131,32 @@ No write permission or file is read-only. Rename... - + Rinomina... File name: - + Nome file: Error - + Errore Could not rename %1: No write permission or file is read-only. - + Impossibile rinominare %1: +Nessun permesso di scrittura o il file è di sola lettura. Could not rename %1: (Check that all characters are valid) - + Impossibile rinominare %1: +(Controlla che tutti i caratteri siano validi) @@ -1159,17 +1164,17 @@ No write permission or file is read-only. Modify Shortcuts - + Modifica scorciatoie Shortcut Already Used - + Scorciatoia già utilizzata "%1" is already bound to "%2" - + "%1" è già associato a "%2" @@ -1178,22 +1183,22 @@ No write permission or file is read-only. Welcome - + Benvenuti &Enable update notifications on startup - + &Abilita le notifiche di aggiornamento all'avvio Thank you for downloading qView.<br>Here's a few tips to get you started: - + Grazie per aver scaricato qView.<br>Ecco alcuni suggerimenti per iniziare: <ul><li>Right click to access the main menu</li><li>Drag the image to reposition it</li><li>Scroll to zoom in and out</li><li>Use arrow keys to switch files</li></ul> - + <ul><li>Fai clic con il pulsante destro del mouse per accedere al menu principale</li><li>Trascina l'immagine per riposizionarla</li><li>Scorri per ingrandire e ridurre</li><li>Utilizza i tasti freccia per cambia file</li></ul> @@ -1201,202 +1206,202 @@ No write permission or file is read-only. Open - + Apri Open URL - + Apri URL Open Containing Folder - + Apri contenuto della cartella Show in Explorer - + Mostra in Explorer Show in Finder - + Mostra in Finder Show File Info - + Mostra informazioni sul file Restore from Trash - + Ripristina dal Cestino Undo Delete - + Annulla eliminazione Copy - + Copia Paste - + Incolla Rename - + Rinomina Move to Trash - + Sposta nel Cestino Delete - + Elimina First File - + Primo file Previous File - + File precedente Next File - + File successivo Last File - + Ultimo file Zoom In - + Zoom avanti Zoom Out - + Zoom indietro Reset Zoom - + Ripristina zoom Original Size - + Dimensione originale Rotate Right - + Ruota a destra Rotate Left - + Ruota a sinistra Mirror - + Specchia Flip - + Capovolgi Full Screen - + Schermo intero Save Frame As - + Salva fotogramma come Pause - + Pausa Next Frame - + Prossimo fotogramma Decrease Speed - + Diminuisci velocità Reset Speed - + Reimposta la velocità Increase Speed - + Aumenta la velocità Toggle Slideshow - + Attiva/disattiva presentazione Options - + Opzioni Preferences - + Preferenze New Window - + Nuova finestra Close Window - + Chiudi finestra Close All - + Chiudi tutto Quit - + Esci Exit - + Esci @@ -1404,33 +1409,34 @@ No write permission or file is read-only. Download - + Download qView Update Available - + qView aggiornamento disponibile qView %1 is available to download. - + qView %1 è disponibile per il download. &Disable Update Checking - + &Disattiva controllo aggiornamenti qView Update Checking Disabled - + qView Controllo aggiornamenti disabilitato Update notifications on startup have been disabled. You can reenable them in the options dialog. - + Le notifiche di aggiornamento all'avvio sono state disabilitate. +Puoi riattivarle nella finestra di dialogo delle opzioni. From 797f6fc4040a0c060dc28f4115797f394127bfd0 Mon Sep 17 00:00:00 2001 From: p4ssen <244045932@qq.com> Date: Sat, 12 Aug 2023 14:58:58 +0000 Subject: [PATCH 085/111] Translated using Weblate (Chinese (Traditional)) Currently translated at 83.8% (224 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/zh_Hant/ --- i18n/qview_zh_Hant.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n/qview_zh_Hant.ts b/i18n/qview_zh_Hant.ts index 48f2bbed..f4ba33b6 100644 --- a/i18n/qview_zh_Hant.ts +++ b/i18n/qview_zh_Hant.ts @@ -628,7 +628,7 @@ No write permission or file is read-only. Frames: - 幅: + 幅數: From ae0b9f256c9dbb9a73b55c30b15974009821d823 Mon Sep 17 00:00:00 2001 From: Christian Elbrianno Date: Sat, 12 Aug 2023 05:11:42 +0000 Subject: [PATCH 086/111] Translated using Weblate (Indonesian) Currently translated at 53.9% (144 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/id/ --- i18n/qview_id.ts | 133 ++++++++++++++++++++++++----------------------- 1 file changed, 67 insertions(+), 66 deletions(-) diff --git a/i18n/qview_id.ts b/i18n/qview_id.ts index 60469489..606c4da8 100644 --- a/i18n/qview_id.ts +++ b/i18n/qview_id.ts @@ -438,22 +438,22 @@ Tidak ada izin tulis atau berkas hanya dapat dibaca (read-only). Res&ume - + Lanjutkan Pause - + Jeda Start S&lideshow - + Mulai tampilan S&lide Stop S&lideshow - + Hentikan tampilan S&lide @@ -461,17 +461,17 @@ Tidak ada izin tulis atau berkas hanya dapat dibaca (read-only). All Applications (*.app) - + Semua Aplikasi (*.app) Programs (*.exe *.pif *.com *.bat *.cmd) - + Program (*.exe *.pif *.com *.bat *.cmd) All Files (*) - + Semua Berkas (*) @@ -479,12 +479,12 @@ Tidak ada izin tulis atau berkas hanya dapat dibaca (read-only). file - + berkas The file to open. - + Berkas untuk dibuka. @@ -492,43 +492,43 @@ Tidak ada izin tulis atau berkas hanya dapat dibaca (read-only). About qView - + Tentang qView version %1 - + versi %1 Nightly %1 - + NIghtly %1 Built with Qt %1 (%2)<br>Source code available under GPLv3 on <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurplel/qView">GitHub</a><br>Icon glyph created by Guilhem from the Noun Project<br>Copyright © %3 jurplel and qView contributors - + Dibuat dengan Qt %1 (%2)<br>Kode sumber tersedia dengan lisensi GPLv3 via <a style="color: #03A9F4; text-decoration:none;" href="https://github.com/jurplel/qView">GitHub</a><br>Simbol ikon dibuat oleh Guilhem dari Noun Project<br>Hak Cipta © %3 jurplel dan kontributor qView Checking for updates... - + Memeriksa pembaharuan... %1 update available %1 is a version number e.g. "4.0 update available" - + Pembaharuan ke v%1 tersedia No updates available - + Tidak ada pembaharuan tersedia Error checking for updates - + Kesalahan pengecekan pembaruan @@ -536,17 +536,17 @@ Tidak ada izin tulis atau berkas hanya dapat dibaca (read-only). Supported Images - + Format Gambar Didukung All Files - + Semua Berkas Open... - + Buka... @@ -554,7 +554,7 @@ Tidak ada izin tulis atau berkas hanya dapat dibaca (read-only). (default) - + (asali) @@ -562,13 +562,14 @@ Tidak ada izin tulis atau berkas hanya dapat dibaca (read-only). Error - + Kesalahan Error occurred opening "%3": %2 (Error %1) - + Kesalahan membuka "%3" +%2 (Kesalahan %1) @@ -576,12 +577,12 @@ Tidak ada izin tulis atau berkas hanya dapat dibaca (read-only). File Info - + Info Berkas Name: - + Nama: @@ -593,37 +594,37 @@ Tidak ada izin tulis atau berkas hanya dapat dibaca (read-only). error - + kesalahan Type: - + Tipe: Location: - + Lokasi: Size: - + Ukuran: Modified: - + Modifikasi: Dimensions: - + Dimensi: Aspect Ratio: - + Rasio Aspek: @@ -633,17 +634,17 @@ Tidak ada izin tulis atau berkas hanya dapat dibaca (read-only). Refresh - + Segarkan %1 (%2 bytes) - + %1 (%2 bita) %1 x %2 (%3 MP) - + %1 x %2 (%3 MP) @@ -651,67 +652,67 @@ Tidak ada izin tulis atau berkas hanya dapat dibaca (read-only). Choose Application - + Pilih Aplikasi Development - + Pengembangan Education - + Edukasi Games - + Permainan Graphics - + Grafik Internet - + Internet Multimedia - + Multimedia Office - + Kantor Science - + Sains Settings - + Pengaturan System - + Sistem Utilities - + Utilitas Other - + Lainnya @@ -719,42 +720,42 @@ Tidak ada izin tulis atau berkas hanya dapat dibaca (read-only). Options - + Opsi Window - + Jendela Back&ground color: - + Warna latar belakan&g: Changes the amount of information displayed in the titlebar - + Ubah informasi yang ditampilkan di bar judul Titlebar text: - + Teks bar judul: &Basic - + Dasar &Minimal - + &Minimal &Practical - + &Praktikal @@ -765,32 +766,32 @@ Tidak ada izin tulis atau berkas hanya dapat dibaca (read-only). Control when the window should resize to fit the image's actual size - + Kontrol ketika jendela harus menyesuaikan dengan ukuran asli gambar Window matches image size: - + Jendela sesuai ukuran gambar: Never - + Jangan pernah When launching - + Ketika memulai When opening images - + Ketika membuka gambar Minimum size: - + Ukuran minimum: @@ -801,7 +802,7 @@ Tidak ada izin tulis atau berkas hanya dapat dibaca (read-only). % of screen size - + % dari ukuran layar @@ -812,7 +813,7 @@ Tidak ada izin tulis atau berkas hanya dapat dibaca (read-only). Maximum size: - + Ukuran maksimum: @@ -822,12 +823,12 @@ Tidak ada izin tulis atau berkas hanya dapat dibaca (read-only). &Titlebar always dark - + Bar judul selalu gelap Show menubar - + Tampilkan bar menu From 5e9b8829af86f3bc3e9c5c399736048a01b648ed Mon Sep 17 00:00:00 2001 From: albanobattistella Date: Sun, 13 Aug 2023 05:40:37 +0000 Subject: [PATCH 087/111] Translated using Weblate (Italian) Currently translated at 100.0% (267 of 267 strings) Translation: qView/qView Translate-URL: https://hosted.weblate.org/projects/qview/qview/it/ --- i18n/qview_it.ts | 56 ++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/i18n/qview_it.ts b/i18n/qview_it.ts index 27253503..7971b279 100644 --- a/i18n/qview_it.ts +++ b/i18n/qview_it.ts @@ -95,7 +95,7 @@ Open Containing &Folder - Apri &cartella contenente + Apri il contenuto della &cartella @@ -433,12 +433,12 @@ Nessun permesso di scrittura o il file è di sola lettura. Save Frame As... - + Salva fotogramma come... Res&ume - + Ricomincia @@ -448,12 +448,12 @@ Nessun permesso di scrittura o il file è di sola lettura. Start S&lideshow - + Avvia Presentazione Stop S&lideshow - + Ferma presentazione @@ -502,7 +502,7 @@ Nessun permesso di scrittura o il file è di sola lettura. Nightly %1 - + Notturna %1 @@ -624,7 +624,7 @@ Nessun permesso di scrittura o il file è di sola lettura. Aspect Ratio: - + Proporzioni: @@ -730,7 +730,7 @@ Nessun permesso di scrittura o il file è di sola lettura. Back&ground color: - + Colore di sfondo: @@ -740,7 +740,7 @@ Nessun permesso di scrittura o il file è di sola lettura. Titlebar text: - + Testo della barra del titolo: @@ -760,7 +760,7 @@ Nessun permesso di scrittura o il file è di sola lettura. &Verbose - + &Prolisso @@ -833,17 +833,17 @@ Nessun permesso di scrittura o il file è di sola lettura. Choose whether or not to display the titlebar text while in fullscreen - + Scegli se visualizzare o meno il testo della barra del titolo a schermo intero Show titlebar text in fullscreen - + Mostra il testo della barra del titolo a schermo intero &Quit on last window closed - + &Esci all'ultima finestra chiusa @@ -863,17 +863,17 @@ Nessun permesso di scrittura o il file è di sola lettura. &Bilinear filtering - + &Filtraggio bilineare Images appear aliased (having jagged edges) without this, but it is faster - + Le immagini appaiono distorte (con bordi frastagliati) senza questo, ma è più veloce &Image scaling - + &Ridimensionamento immagine @@ -883,7 +883,7 @@ Nessun permesso di scrittura o il file è di sola lettura. &Scaling above window size - + &Ridimensionamento sopra la dimensione della finestra @@ -909,12 +909,12 @@ Nessun permesso di scrittura o il file è di sola lettura. Stop the image from going past its actual size when resizing the window - you can still zoom past it though - + Impedisci all'immagine di superare la sua dimensione effettiva durante il ridimensionamento della finestra: puoi comunque eseguire lo zoom Image resizes &past actual size - + L'immagine si ridimensiona &supera le dimensioni effettive @@ -940,17 +940,17 @@ Nessun permesso di scrittura o il file è di sola lettura. On window resize: - + Al ridimensionamento della finestra: Choose whether or not zooming in and out above 100% zoom will zoom towards the cursor - + Scegli se lo zoom in avanti e indietro oltre il 100% verrà eseguito in direzione del cursore Zoom &towards cursor - + Zoom &verso il cursore @@ -1006,7 +1006,7 @@ Nessun permesso di scrittura o il file è di sola lettura. Preloading: - + Precaricamento: @@ -1031,12 +1031,12 @@ Nessun permesso di scrittura o il file è di sola lettura. &Loop through folders - + &Esegui il ciclo delle cartelle Slideshow direction: - + Direzione della presentazione: @@ -1051,7 +1051,7 @@ Nessun permesso di scrittura o il file è di sola lettura. Slideshow timer: - + Timer presentazione: @@ -1077,7 +1077,7 @@ Nessun permesso di scrittura o il file è di sola lettura. Move Back - + Sposta indietro @@ -1087,7 +1087,7 @@ Nessun permesso di scrittura o il file è di sola lettura. Move Forward - + Sposta avanti From 3ec4ee95384315e6ae152249d29ef8dfd2455f91 Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Wed, 16 Aug 2023 00:07:07 -0400 Subject: [PATCH 088/111] Remove print --- src/qvapplication.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/qvapplication.cpp b/src/qvapplication.cpp index 4c119780..e4369e29 100644 --- a/src/qvapplication.cpp +++ b/src/qvapplication.cpp @@ -360,7 +360,6 @@ void QVApplication::defineFilterLists() } filterString.chop(1); filterString += ")"; - qDebug() << filterList << filterString << fileExtensionList; // Build mime type list const auto &byteArrayMimeTypes = QImageReader::supportedMimeTypes(); From 9f6c225451bb060af8fafd948839432a6de32f4a Mon Sep 17 00:00:00 2001 From: Benjamin O Date: Wed, 16 Aug 2023 00:48:57 -0400 Subject: [PATCH 089/111] fix mismatching info.plist --- qView.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qView.pro b/qView.pro index 1baa40dd..0e3223f5 100644 --- a/qView.pro +++ b/qView.pro @@ -62,7 +62,7 @@ macx { } QMAKE_TARGET_BUNDLE_PREFIX = "com.interversehq" - QMAKE_INFO_PLIST = "dist/mac/Info_legacy.plist" + QMAKE_INFO_PLIST = "dist/mac/Info.plist" # Older icon for qt 5 on mac lessThan(QT_MAJOR_VERSION, 6) { ICON = "dist/mac/qView_legacy.icns" From 20bb24de4aee0c63f829e65401cd19e9dbe81ef6 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Fri, 25 Aug 2023 19:13:26 -0400 Subject: [PATCH 090/111] Workaround for slow font loading on Windows. --- src/mainwindow.cpp | 3 ++- src/qvinfodialog.cpp | 10 ++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index e431516f..c3f5a3ab 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -318,7 +318,8 @@ void MainWindow::fileChanged() populateOpenWithTimer->start(); disableActions(); - refreshProperties(); + if (info->isVisible()) + refreshProperties(); buildWindowTitle(); } diff --git a/src/qvinfodialog.cpp b/src/qvinfodialog.cpp index b445119b..b4855563 100644 --- a/src/qvinfodialog.cpp +++ b/src/qvinfodialog.cpp @@ -2,6 +2,7 @@ #include "ui_qvinfodialog.h" #include #include +#include static int getGcd (int a, int b) { return (b == 0) ? a : getGcd(b, a%b); @@ -31,8 +32,12 @@ void QVInfoDialog::setInfo(const QFileInfo &value, const int &value2, const int width = value2; height = value3; frameCount = value4; - updateInfo(); - window()->adjustSize(); + // Instead of running updateInfo immediately, add it to the event queue. This is a workaround + // for a (Windows-specific?) delay when calling adjustSize on the window if the font contains + // certain characters (e.g. Chinese) the first time that happens for a given font. At least + // on Windows, by making the work happen later in the event loop, it allows the main window + // to repaint first, giving the illusion of better responsiveness. + QTimer::singleShot(0, this, &QVInfoDialog::updateInfo); } void QVInfoDialog::updateInfo() @@ -63,4 +68,5 @@ void QVInfoDialog::updateInfo() ui->framesLabel2->hide(); ui->framesLabel->hide(); } + window()->adjustSize(); } From c6ad165b772d5d312a4a805ab43c6a4fd6ff5a16 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Mon, 21 Aug 2023 21:36:05 -0400 Subject: [PATCH 091/111] Fix window getting unmaximized/resized when exiting full screen mode. This occurred with "window matches image size" set to "when opening images". --- src/mainwindow.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index e431516f..7b2372e5 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1084,7 +1084,6 @@ void MainWindow::toggleFullScreen() if (windowState() == Qt::WindowFullScreen) { setWindowState(storedWindowState); - setWindowSize(); } else { From a59696e437a65f8f60639939904f0e5f9e594299 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sat, 26 Aug 2023 09:54:46 -0400 Subject: [PATCH 092/111] Improve slow font loading workaround. --- src/qvinfodialog.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/qvinfodialog.cpp b/src/qvinfodialog.cpp index b4855563..63aca2a2 100644 --- a/src/qvinfodialog.cpp +++ b/src/qvinfodialog.cpp @@ -32,12 +32,20 @@ void QVInfoDialog::setInfo(const QFileInfo &value, const int &value2, const int width = value2; height = value3; frameCount = value4; - // Instead of running updateInfo immediately, add it to the event queue. This is a workaround - // for a (Windows-specific?) delay when calling adjustSize on the window if the font contains - // certain characters (e.g. Chinese) the first time that happens for a given font. At least - // on Windows, by making the work happen later in the event loop, it allows the main window - // to repaint first, giving the illusion of better responsiveness. - QTimer::singleShot(0, this, &QVInfoDialog::updateInfo); + + // If the dialog is visible, it means we've just navigated to a new image. Instead of running + // updateInfo immediately, add it to the event queue. This is a workaround for a (Windows-specific?) + // delay when calling adjustSize on the window if the font contains certain characters (e.g. Chinese) + // the first time that happens for a given font. At least on Windows, by making the work happen later + // in the event loop, it allows the main window to repaint first, giving the appearance of better + // responsiveness. If the dialog is not visible, however, it means we're preparing to display for an + // image already opened. In this case there is no urgency to repaint the main window, and we need to + // process the updates here synchronously to avoid the caller showing the dialog before it's ready + // (i.e. to avoid showing outdated info or placeholder text). + if (isVisible()) + QTimer::singleShot(0, this, &QVInfoDialog::updateInfo); + else + updateInfo(); } void QVInfoDialog::updateInfo() From 4dfdabe47eaa7d24ef0582910e5a82a033104d3a Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sat, 26 Aug 2023 20:37:02 -0400 Subject: [PATCH 093/111] Add "Reload File" feature --- src/actionmanager.cpp | 7 +++++++ src/mainwindow.cpp | 5 +++++ src/mainwindow.h | 2 ++ src/qvgraphicsview.cpp | 8 ++++++++ src/qvgraphicsview.h | 2 ++ src/qvimagecore.cpp | 4 ++-- src/qvimagecore.h | 2 +- src/shortcutmanager.cpp | 1 + 8 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/actionmanager.cpp b/src/actionmanager.cpp index bc62c753..6c22948d 100644 --- a/src/actionmanager.cpp +++ b/src/actionmanager.cpp @@ -177,6 +177,7 @@ QMenuBar *ActionManager::buildMenuBar(QWidget *parent) addCloneOfAction(fileMenu, "open"); addCloneOfAction(fileMenu, "openurl"); fileMenu->addMenu(buildRecentsMenu(true, fileMenu)); + addCloneOfAction(fileMenu, "reloadfile"); fileMenu->addSeparator(); #ifdef Q_OS_MACOS fileMenu->addSeparator(); @@ -585,6 +586,8 @@ void ActionManager::actionTriggered(QAction *triggeredAction, MainWindow *releva relevantWindow->openWith(openWithItem); } else if (key == "openurl") { relevantWindow->pickUrl(); + } else if (key == "reloadfile") { + relevantWindow->reloadFile(); } else if (key == "opencontainingfolder") { relevantWindow->openContainingFolder(); } else if (key == "showfileinfo") { @@ -660,6 +663,10 @@ void ActionManager::initializeActionLibrary() auto *openUrlAction = new QAction(QIcon::fromTheme("document-open-remote", QIcon::fromTheme("folder-remote")), tr("Open &URL...")); actionLibrary.insert("openurl", openUrlAction); + auto *reloadFileAction = new QAction(QIcon::fromTheme("view-refresh"), tr("Re&load File")); + reloadFileAction->setData({"disable"}); + actionLibrary.insert("reloadfile", reloadFileAction); + auto *closeWindowAction = new QAction(QIcon::fromTheme("window-close"), tr("Close Window")); actionLibrary.insert("closewindow", closeWindowAction); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index e431516f..17fcad0a 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -667,6 +667,11 @@ void MainWindow::pickUrl() inputDialog->open(); } +void MainWindow::reloadFile() +{ + graphicsView->reloadFile(); +} + void MainWindow::openWith(const OpenWith::OpenWithItem &openWithItem) { OpenWith::openWith(getCurrentFileDetails().fileInfo.absoluteFilePath(), openWithItem); diff --git a/src/mainwindow.h b/src/mainwindow.h index 9bae41c5..19c82bca 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -51,6 +51,8 @@ class MainWindow : public QMainWindow void pickUrl(); + void reloadFile(); + void openContainingFolder(); void openWith(const OpenWith::OpenWithItem &exec); diff --git a/src/qvgraphicsview.cpp b/src/qvgraphicsview.cpp index 3e25ca0f..b5c604f9 100644 --- a/src/qvgraphicsview.cpp +++ b/src/qvgraphicsview.cpp @@ -244,6 +244,14 @@ void QVGraphicsView::loadFile(const QString &fileName) imageCore.loadFile(fileName); } +void QVGraphicsView::reloadFile() +{ + if (!getCurrentFileDetails().isPixmapLoaded) + return; + + imageCore.loadFile(getCurrentFileDetails().fileInfo.absoluteFilePath(), true); +} + void QVGraphicsView::postLoad() { updateLoadedPixmapItem(); diff --git a/src/qvgraphicsview.h b/src/qvgraphicsview.h index 8299dbf1..d2fb8624 100644 --- a/src/qvgraphicsview.h +++ b/src/qvgraphicsview.h @@ -38,6 +38,8 @@ class QVGraphicsView : public QGraphicsView void loadMimeData(const QMimeData *mimeData); void loadFile(const QString &fileName); + void reloadFile(); + void zoomIn(const QPoint &pos = QPoint(-1, -1)); void zoomOut(const QPoint &pos = QPoint(-1, -1)); diff --git a/src/qvimagecore.cpp b/src/qvimagecore.cpp index 0a933997..8a940abb 100644 --- a/src/qvimagecore.cpp +++ b/src/qvimagecore.cpp @@ -68,7 +68,7 @@ QVImageCore::QVImageCore(QObject *parent) : QObject(parent) settingsUpdated(); } -void QVImageCore::loadFile(const QString &fileName) +void QVImageCore::loadFile(const QString &fileName, bool isReloading) { if (waitingOnLoad) { @@ -105,7 +105,7 @@ void QVImageCore::loadFile(const QString &fileName) QString cacheKey = getPixmapCacheKey(sanitaryFileName, fileInfo.size(), targetColorSpace); //check if cached already before loading the long way - auto *cachedData = QVImageCore::pixmapCache.take(cacheKey); + auto *cachedData = isReloading ? nullptr : QVImageCore::pixmapCache.take(cacheKey); if (cachedData != nullptr) { ReadData readData = *cachedData; diff --git a/src/qvimagecore.h b/src/qvimagecore.h index 2cf443e4..92796af7 100644 --- a/src/qvimagecore.h +++ b/src/qvimagecore.h @@ -60,7 +60,7 @@ class QVImageCore : public QObject explicit QVImageCore(QObject *parent = nullptr); - void loadFile(const QString &fileName); + void loadFile(const QString &fileName, bool isReloaing = false); ReadData readFile(const QString &fileName, const QColorSpace &targetColorSpace, bool forCache); void loadPixmap(const ReadData &readData); void closeImage(); diff --git a/src/shortcutmanager.cpp b/src/shortcutmanager.cpp index 3bd7c155..f1d88535 100644 --- a/src/shortcutmanager.cpp +++ b/src/shortcutmanager.cpp @@ -44,6 +44,7 @@ void ShortcutManager::initializeShortcutsList() { shortcutsList.append({tr("Open"), "open", keyBindingsToStringList(QKeySequence::Open), {}}); shortcutsList.append({tr("Open URL"), "openurl", QStringList(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_O).toString()), {}}); + shortcutsList.append({tr("Reload File"), "reloadfile", keyBindingsToStringList(QKeySequence::Refresh), {}}); shortcutsList.append({tr("Open Containing Folder"), "opencontainingfolder", {}, {}}); //Sets open containing folder action name to platform-appropriate alternative #ifdef Q_OS_WIN From 0334910b03bbdc0e96f4775ea7a638d96741e473 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sun, 27 Aug 2023 16:41:18 -0400 Subject: [PATCH 094/111] CR feedback for "Reload File" --- src/qvimagecore.h | 2 +- src/shortcutmanager.cpp | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/qvimagecore.h b/src/qvimagecore.h index 92796af7..20e5f0fd 100644 --- a/src/qvimagecore.h +++ b/src/qvimagecore.h @@ -60,7 +60,7 @@ class QVImageCore : public QObject explicit QVImageCore(QObject *parent = nullptr); - void loadFile(const QString &fileName, bool isReloaing = false); + void loadFile(const QString &fileName, bool isReloading = false); ReadData readFile(const QString &fileName, const QColorSpace &targetColorSpace, bool forCache); void loadPixmap(const ReadData &readData); void closeImage(); diff --git a/src/shortcutmanager.cpp b/src/shortcutmanager.cpp index f1d88535..84f2d00c 100644 --- a/src/shortcutmanager.cpp +++ b/src/shortcutmanager.cpp @@ -59,7 +59,10 @@ void ShortcutManager::initializeShortcutsList() #endif shortcutsList.append({tr("Copy"), "copy", keyBindingsToStringList(QKeySequence::Copy), {}}); shortcutsList.append({tr("Paste"), "paste", keyBindingsToStringList(QKeySequence::Paste), {}}); - shortcutsList.append({tr("Rename"), "rename", QStringList({QKeySequence(Qt::Key_F2).toString(), QKeySequence(Qt::CTRL | Qt::Key_R).toString()}), {}}); + shortcutsList.append({tr("Rename"), "rename", QStringList(QKeySequence(Qt::Key_F2).toString()), {}}); + // ctrl+r for renaming, unless it conflicts with refresh (i.e. reload file) + if (!QKeySequence::keyBindings(QKeySequence::Refresh).contains(QKeySequence(Qt::CTRL | Qt::Key_R))) + shortcutsList.last().defaultShortcuts << QKeySequence(Qt::CTRL | Qt::Key_R).toString(); // cmd+enter for renaming, mac-style shortcutsList.last().defaultShortcuts.prepend(QKeySequence(Qt::CTRL | Qt::Key_Return).toString()); From 0e9a41588f2bb5c33e3de1f871ad18a6fd8ce6bb Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sun, 27 Aug 2023 17:14:54 -0400 Subject: [PATCH 095/111] When "window matches image size" changes, enable/disable size controls accordingly And some code deduplication. --- src/qvoptionsdialog.cpp | 32 +++++++------------------------- 1 file changed, 7 insertions(+), 25 deletions(-) diff --git a/src/qvoptionsdialog.cpp b/src/qvoptionsdialog.cpp index ebb88e48..8e61a3fb 100644 --- a/src/qvoptionsdialog.cpp +++ b/src/qvoptionsdialog.cpp @@ -64,6 +64,7 @@ QVOptionsDialog::QVOptionsDialog(QWidget *parent) : #endif syncSettings(false, true); + connect(ui->windowResizeComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &QVOptionsDialog::windowResizeComboBoxCurrentIndexChanged); connect(ui->langComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &QVOptionsDialog::languageComboBoxCurrentIndexChanged); syncShortcuts(); updateButtonBox(); @@ -136,17 +137,7 @@ void QVOptionsDialog::syncSettings(bool defaults, bool makeConnections) ui->titlebarRadioButton2, ui->titlebarRadioButton3}, "titlebarmode", defaults, makeConnections); // windowresizemode syncComboBox(ui->windowResizeComboBox, "windowresizemode", defaults, makeConnections); - if (ui->windowResizeComboBox->currentIndex() == 0) { - ui->minWindowResizeLabel->setEnabled(false); - ui->minWindowResizeSpinBox->setEnabled(false); - ui->maxWindowResizeLabel->setEnabled(false); - ui->maxWindowResizeSpinBox->setEnabled(false); - } else { - ui->minWindowResizeLabel->setEnabled(true); - ui->minWindowResizeSpinBox->setEnabled(true); - ui->maxWindowResizeLabel->setEnabled(true); - ui->maxWindowResizeSpinBox->setEnabled(true); - } + windowResizeComboBoxCurrentIndexChanged(ui->windowResizeComboBox->currentIndex()); // minwindowresizedpercentage syncSpinBox(ui->minWindowResizeSpinBox, "minwindowresizedpercentage", defaults, makeConnections); // maxwindowresizedperecentage @@ -445,20 +436,11 @@ void QVOptionsDialog::scalingCheckboxStateChanged(int arg1) void QVOptionsDialog::windowResizeComboBoxCurrentIndexChanged(int index) { - if (index == 0) - { - ui->minWindowResizeLabel->setEnabled(false); - ui->minWindowResizeSpinBox->setEnabled(false); - ui->maxWindowResizeLabel->setEnabled(false); - ui->maxWindowResizeSpinBox->setEnabled(false); - } - else - { - ui->minWindowResizeLabel->setEnabled(true); - ui->minWindowResizeSpinBox->setEnabled(true); - ui->maxWindowResizeLabel->setEnabled(true); - ui->maxWindowResizeSpinBox->setEnabled(true); - } + bool enableRelatedControls = index != 0; + ui->minWindowResizeLabel->setEnabled(enableRelatedControls); + ui->minWindowResizeSpinBox->setEnabled(enableRelatedControls); + ui->maxWindowResizeLabel->setEnabled(enableRelatedControls); + ui->maxWindowResizeSpinBox->setEnabled(enableRelatedControls); } void QVOptionsDialog::populateLanguages() From ef2ded39fe818379919c0ef6621fed271a1209d5 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sat, 26 Aug 2023 19:23:43 -0400 Subject: [PATCH 096/111] Make sure arrow keys don't scroll the image --- src/qvgraphicsview.cpp | 12 ++++++++++++ src/qvgraphicsview.h | 2 ++ 2 files changed, 14 insertions(+) diff --git a/src/qvgraphicsview.cpp b/src/qvgraphicsview.cpp index 039bfbeb..a8a88044 100644 --- a/src/qvgraphicsview.cpp +++ b/src/qvgraphicsview.cpp @@ -245,6 +245,18 @@ void QVGraphicsView::wheelEvent(QWheelEvent *event) zoom(zoomFactor, eventPos); } +void QVGraphicsView::keyPressEvent(QKeyEvent *event) +{ + if (event->key() == Qt::Key_Up || event->key() == Qt::Key_Down || event->key() == Qt::Key_Left || event->key() == Qt::Key_Right) + { + // Normally the arrow keys are assigned to shortcuts, but in case they aren't or get passed + // through due to modifier keys, swallow the event to avoid scrolling + return; + } + + QGraphicsView::keyPressEvent(event); +} + // Functions QMimeData *QVGraphicsView::getMimeData() const diff --git a/src/qvgraphicsview.h b/src/qvgraphicsview.h index e197fa12..67a5846e 100644 --- a/src/qvgraphicsview.h +++ b/src/qvgraphicsview.h @@ -105,6 +105,8 @@ class QVGraphicsView : public QGraphicsView void mouseMoveEvent(QMouseEvent *event) override; + void keyPressEvent(QKeyEvent *event) override; + bool event(QEvent *event) override; void centerOn(const QPointF &pos); From 673d876b0e53aee3ac20aa3a4abe31fe75a8bf99 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Wed, 30 Aug 2023 20:03:49 -0400 Subject: [PATCH 097/111] Slightly reduce overscan amount And correct for rounding error that made the image jump around more than necessary when resizing window --- src/mainwindow.cpp | 2 +- src/qvgraphicsview.cpp | 9 ++++++--- src/qvgraphicsview.h | 6 +++--- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 200294eb..41845396 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -511,7 +511,7 @@ void MainWindow::setWindowSize() QSize imageSize = graphicsView->getEffectiveOriginalSize().toSize(); - imageSize -= QSize(4, 4); + imageSize -= QSize(QVGraphicsView::FitOverscan * 2, QVGraphicsView::FitOverscan * 2); // Try to grab the current screen diff --git a/src/qvgraphicsview.cpp b/src/qvgraphicsview.cpp index a8a88044..631b4a9c 100644 --- a/src/qvgraphicsview.cpp +++ b/src/qvgraphicsview.cpp @@ -610,6 +610,9 @@ void QVGraphicsView::centerOn(const QPointF &pos) QRect targetRect = getUsableViewportRect(); QPointF viewPoint = transform().map(pos); + // Snap to nearest 64th pixel, helps with floating point rounding errors + viewPoint = QPointF((viewPoint * 64.0).toPoint()) / 64.0; + if (isRightToLeft()) { qint64 horizontal = 0; @@ -648,7 +651,7 @@ QRectF QVGraphicsView::getContentRect() const return transform().mapRect(loadedPixmapItem->boundingRect()); } -QRect QVGraphicsView::getUsableViewportRect(bool addMargin) const +QRect QVGraphicsView::getUsableViewportRect(bool addOverscan) const { #ifdef COCOA_LOADED int obscuredHeight = QVCocoaFunctions::getObscuredHeight(window()->windowHandle()); @@ -657,8 +660,8 @@ QRect QVGraphicsView::getUsableViewportRect(bool addMargin) const #endif QRect rect = viewport()->rect(); rect.setTop(obscuredHeight); - if (addMargin) - rect.adjust(MARGIN, MARGIN, -MARGIN, -MARGIN); + if (addOverscan) + rect.adjust(-FitOverscan, -FitOverscan, FitOverscan, FitOverscan); return rect; } diff --git a/src/qvgraphicsview.h b/src/qvgraphicsview.h index 67a5846e..66f16f8f 100644 --- a/src/qvgraphicsview.h +++ b/src/qvgraphicsview.h @@ -17,6 +17,8 @@ class QVGraphicsView : public QGraphicsView public: QVGraphicsView(QWidget *parent = nullptr); + static const int FitOverscan = 1; + enum class GoToFileMode { constant, @@ -117,7 +119,7 @@ class QVGraphicsView : public QGraphicsView QRectF getContentRect() const; - QRect getUsableViewportRect(bool addMargin = false) const; + QRect getUsableViewportRect(bool addOverscan = false) const; qreal getContentToViewportRatio() const; @@ -152,8 +154,6 @@ private slots: int cropMode; qreal scaleFactor; - const int MARGIN = -2; - bool resizeResetsZoom; bool navResetsZoom; qreal currentScale; From 4116e30d798e210778a062641e237f4cf39976ed Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Mon, 4 Sep 2023 17:30:07 -0400 Subject: [PATCH 098/111] Make fit overscan more like a setting than a constant To match code style of the fork in which this has a settings UI entry --- src/mainwindow.cpp | 3 ++- src/qvgraphicsview.cpp | 3 ++- src/qvgraphicsview.h | 5 +++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 41845396..7b4ad9af 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -511,7 +511,8 @@ void MainWindow::setWindowSize() QSize imageSize = graphicsView->getEffectiveOriginalSize().toSize(); - imageSize -= QSize(QVGraphicsView::FitOverscan * 2, QVGraphicsView::FitOverscan * 2); + const int fitOverscan = graphicsView->getFitOverscan(); + imageSize -= QSize(fitOverscan * 2, fitOverscan * 2); // Try to grab the current screen diff --git a/src/qvgraphicsview.cpp b/src/qvgraphicsview.cpp index 631b4a9c..09e09625 100644 --- a/src/qvgraphicsview.cpp +++ b/src/qvgraphicsview.cpp @@ -42,6 +42,7 @@ QVGraphicsView::QVGraphicsView(QWidget *parent) : QGraphicsView(parent) scaleFactor = 1.25; // Initialize other variables + fitOverscan = 1; resizeResetsZoom = true; navResetsZoom = true; currentScale = 1.0; @@ -661,7 +662,7 @@ QRect QVGraphicsView::getUsableViewportRect(bool addOverscan) const QRect rect = viewport()->rect(); rect.setTop(obscuredHeight); if (addOverscan) - rect.adjust(-FitOverscan, -FitOverscan, FitOverscan, FitOverscan); + rect.adjust(-fitOverscan, -fitOverscan, fitOverscan, fitOverscan); return rect; } diff --git a/src/qvgraphicsview.h b/src/qvgraphicsview.h index 66f16f8f..1711081b 100644 --- a/src/qvgraphicsview.h +++ b/src/qvgraphicsview.h @@ -17,8 +17,6 @@ class QVGraphicsView : public QGraphicsView public: QVGraphicsView(QWidget *parent = nullptr); - static const int FitOverscan = 1; - enum class GoToFileMode { constant, @@ -75,6 +73,8 @@ class QVGraphicsView : public QGraphicsView const QMovie& getLoadedMovie() const { return imageCore.getLoadedMovie(); } qreal getCurrentScale() const { return currentScale; } + int getFitOverscan() const { return fitOverscan; } + signals: void cancelSlideshow(); @@ -145,6 +145,7 @@ private slots: bool isScalingEnabled; bool isScalingTwoEnabled; bool isPastActualSizeEnabled; + int fitOverscan; bool isScrollZoomsEnabled; bool isLoopFoldersEnabled; bool isCursorZoomEnabled; From 0ebe90c824782d5d8ed8ac2ada6eddc051271bcf Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Thu, 31 Aug 2023 21:48:09 -0400 Subject: [PATCH 099/111] Fix expensive scaling size calculation The desired size already has the correct aspect ratio; any further adjustment by Qt could cause the size to be off a pixel or so from what we want. --- src/qvimagecore.cpp | 14 +++++--------- src/qvimagecore.h | 1 - 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/qvimagecore.cpp b/src/qvimagecore.cpp index c3f9bdea..9806c149 100644 --- a/src/qvimagecore.cpp +++ b/src/qvimagecore.cpp @@ -549,19 +549,11 @@ void QVImageCore::setSpeed(int desiredSpeed) loadedMovie.setSpeed(desiredSpeed); } -QPixmap QVImageCore::scaleExpensively(const int desiredWidth, const int desiredHeight) -{ - return scaleExpensively(QSizeF(desiredWidth, desiredHeight)); -} - QPixmap QVImageCore::scaleExpensively(const QSizeF desiredSize) { if (!currentFileDetails.isPixmapLoaded) return QPixmap(); - QSize size = QSize(loadedPixmap.width(), loadedPixmap.height()); - size.scale(desiredSize.toSize(), Qt::KeepAspectRatio); - // Get the current frame of the animation if this is an animation QPixmap relevantPixmap; if (!currentFileDetails.isMovieLoaded) @@ -580,7 +572,11 @@ QPixmap QVImageCore::scaleExpensively(const QSizeF desiredSize) return relevantPixmap; } - return relevantPixmap.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation);; + QSize size = desiredSize.toSize(); + size.rwidth() = qMax(size.width(), 1); + size.rheight() = qMax(size.height(), 1); + + return relevantPixmap.scaled(size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); } diff --git a/src/qvimagecore.h b/src/qvimagecore.h index 96327fe5..845f6d8c 100644 --- a/src/qvimagecore.h +++ b/src/qvimagecore.h @@ -79,7 +79,6 @@ class QVImageCore : public QObject void setPaused(bool desiredState); void setSpeed(int desiredSpeed); - QPixmap scaleExpensively(const int desiredWidth, const int desiredHeight); QPixmap scaleExpensively(const QSizeF desiredSize); //returned const reference is read-only From 1589918e021a74796b992566b770e0dbc11ea8bf Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sat, 2 Sep 2023 11:09:25 -0400 Subject: [PATCH 100/111] Window sizing fixes Calculated aspect ratio was slightly off in some cases. Also enforce minimum window size in both dimensions. --- src/mainwindow.cpp | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 7b4ad9af..75a3adcb 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -509,12 +509,6 @@ void MainWindow::setWindowSize() qreal minWindowResizedPercentage = qvApp->getSettingsManager().getInteger("minwindowresizedpercentage")/100.0; qreal maxWindowResizedPercentage = qvApp->getSettingsManager().getInteger("maxwindowresizedpercentage")/100.0; - - QSize imageSize = graphicsView->getEffectiveOriginalSize().toSize(); - const int fitOverscan = graphicsView->getFitOverscan(); - imageSize -= QSize(fitOverscan * 2, fitOverscan * 2); - - // Try to grab the current screen QScreen *currentScreen = screenContaining(frameGeometry()); @@ -542,27 +536,25 @@ void MainWindow::setWindowSize() const QSize screenSize = currentScreen->size(); const QSize minWindowSize = (screenSize * minWindowResizedPercentage).boundedTo(hardLimitSize); const QSize maxWindowSize = (screenSize * maxWindowResizedPercentage).boundedTo(hardLimitSize); + const QSizeF imageSize = graphicsView->getEffectiveOriginalSize(); + const int fitOverscan = graphicsView->getFitOverscan(); + const QSize fitOverscanSize = QSize(fitOverscan * 2, fitOverscan * 2); - if (imageSize.width() < minWindowSize.width() && imageSize.height() < minWindowSize.height()) - { - imageSize.scale(minWindowSize, Qt::KeepAspectRatio); - } - else if (imageSize.width() > maxWindowSize.width() || imageSize.height() > maxWindowSize.height()) + QSize targetSize = imageSize.toSize() - fitOverscanSize; + + if (targetSize.width() > maxWindowSize.width() || targetSize.height() > maxWindowSize.height()) { - imageSize.scale(maxWindowSize, Qt::KeepAspectRatio); + const QSizeF viewSize = maxWindowSize + fitOverscanSize; + const qreal fitRatio = qMin(viewSize.width() / imageSize.width(), viewSize.height() / imageSize.height()); + targetSize = (imageSize * fitRatio).toSize() - fitOverscanSize; } - // Windows reports the wrong minimum width, so we constrain the image size relative to the dpi to stop weirdness with tiny images -#ifdef Q_OS_WIN - auto minimumImageSize = QSize(qRound(logicalDpiX()*1.5), logicalDpiY()/2); - if (imageSize.boundedTo(minimumImageSize) == imageSize) - imageSize = minimumImageSize; -#endif + targetSize = targetSize.expandedTo(minWindowSize).boundedTo(maxWindowSize); // Match center after new geometry // This is smoother than a single geometry set for some reason QRect oldRect = geometry(); - resize(imageSize + extraWidgetsSize); + resize(targetSize + extraWidgetsSize); QRect newRect = geometry(); newRect.moveCenter(oldRect.center()); From d638fbf74b3ec0c84111c6c97c3caec8df01473a Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Mon, 4 Sep 2023 17:45:44 -0400 Subject: [PATCH 101/111] Rework scaling code to mitigate floating point rounding errors. --- src/mainwindow.cpp | 4 +- src/qvgraphicsview.cpp | 127 +++++++++++++++++++++++++---------------- src/qvgraphicsview.h | 23 ++++---- 3 files changed, 93 insertions(+), 61 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 75a3adcb..2bfd14e3 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -454,7 +454,7 @@ void MainWindow::buildWindowTitle() } case 2: { - newString = QString::number(graphicsView->getCurrentScale() * 100.0, 'f', 1) + "%"; + newString = QString::number(graphicsView->getZoomLevel() * 100.0, 'f', 1) + "%"; newString += " - " + QString::number(getCurrentFileDetails().loadedIndexInFolder+1); newString += "/" + QString::number(getCurrentFileDetails().folderFileInfoList.count()); newString += " - " + getCurrentFileDetails().fileInfo.fileName(); @@ -462,7 +462,7 @@ void MainWindow::buildWindowTitle() } case 3: { - newString = QString::number(graphicsView->getCurrentScale() * 100.0, 'f', 1) + "%"; + newString = QString::number(graphicsView->getZoomLevel() * 100.0, 'f', 1) + "%"; newString += " - " + QString::number(getCurrentFileDetails().loadedIndexInFolder+1); newString += "/" + QString::number(getCurrentFileDetails().folderFileInfoList.count()); newString += " - " + getCurrentFileDetails().fileInfo.fileName(); diff --git a/src/qvgraphicsview.cpp b/src/qvgraphicsview.cpp index 09e09625..c7f25ca2 100644 --- a/src/qvgraphicsview.cpp +++ b/src/qvgraphicsview.cpp @@ -39,14 +39,15 @@ QVGraphicsView::QVGraphicsView(QWidget *parent) : QGraphicsView(parent) isConstrainedPositioningEnabled = false; isConstrainedSmallCenteringEnabled = true; cropMode = 0; - scaleFactor = 1.25; + zoomMultiplier = 1.25; // Initialize other variables fitOverscan = 1; resizeResetsZoom = true; navResetsZoom = true; - currentScale = 1.0; - appliedScaleAdjustment = 1.0; + zoomLevel = 1.0; + appliedDpiAdjustment = 1.0; + appliedExpensiveScaleZoomLevel = 0.0; lastZoomEventPos = QPoint(-1, -1); lastZoomRoundingError = QPointF(); @@ -66,7 +67,7 @@ QVGraphicsView::QVGraphicsView(QWidget *parent) : QGraphicsView(parent) expensiveScaleTimer = new QTimer(this); expensiveScaleTimer->setSingleShot(true); expensiveScaleTimer->setInterval(50); - connect(expensiveScaleTimer, &QTimer::timeout, this, [this]{scaleExpensively();}); + connect(expensiveScaleTimer, &QTimer::timeout, this, [this]{applyExpensiveScaling();}); constrainBoundsTimer = new QTimer(this); constrainBoundsTimer->setSingleShot(true); @@ -103,7 +104,7 @@ void QVGraphicsView::paintEvent(QPaintEvent *event) { // This is the most reliable place to detect DPI changes. QWindow::screenChanged() // doesn't detect when the DPI is changed on the current monitor, for example. - handleScaleAdjustmentChange(); + handleDpiAdjustmentChange(); QGraphicsView::paintEvent(event); } @@ -187,7 +188,7 @@ bool QVGraphicsView::event(QEvent *event) if (changeFlags & QPinchGesture::ScaleFactorChanged) { const QPoint hotPoint = mapFromGlobal(pinchGesture->hotSpot().toPoint()); - zoom(pinchGesture->scaleFactor(), hotPoint); + zoomRelative(pinchGesture->scaleFactor(), hotPoint); } // Fun rotation stuff maybe later @@ -237,13 +238,13 @@ void QVGraphicsView::wheelEvent(QWheelEvent *event) return; const qreal fractionalWheelClicks = qFabs(yDelta) / yScale; - const qreal zoomAmountPerWheelClick = scaleFactor - 1.0; + const qreal zoomAmountPerWheelClick = zoomMultiplier - 1.0; qreal zoomFactor = 1.0 + (fractionalWheelClicks * zoomAmountPerWheelClick); if (yDelta < 0) zoomFactor = qPow(zoomFactor, -1); - zoom(zoomFactor, eventPos); + zoomRelative(zoomFactor, eventPos); } void QVGraphicsView::keyPressEvent(QKeyEvent *event) @@ -313,7 +314,7 @@ void QVGraphicsView::postLoad() scrollHelper->cancelAnimation(); // Set the pixmap to the new image and reset the transform's scale to a known value - makeUnscaled(); + removeExpensiveScaling(); if (navResetsZoom) zoomToFit(); @@ -329,24 +330,26 @@ void QVGraphicsView::postLoad() void QVGraphicsView::zoomIn(const QPoint &pos) { - zoom(scaleFactor, pos); + zoomRelative(zoomMultiplier, pos); } void QVGraphicsView::zoomOut(const QPoint &pos) { - zoom(qPow(scaleFactor, -1), pos); + zoomRelative(qPow(zoomMultiplier, -1), pos); } -void QVGraphicsView::zoom(qreal scaleFactor, const QPoint &pos) +void QVGraphicsView::zoomRelative(qreal relativeLevel, const QPoint &pos) { - //don't zoom too far out, dude - currentScale *= scaleFactor; - if (currentScale >= 500 || currentScale <= 0.01) - { - currentScale *= qPow(scaleFactor, -1); + const qreal absoluteLevel = zoomLevel * relativeLevel; + + if (absoluteLevel >= 500 || absoluteLevel <= 0.01) return; - } + zoomAbsolute(absoluteLevel, pos); +} + +void QVGraphicsView::zoomAbsolute(const qreal absoluteLevel, const QPoint &pos) +{ if (pos != lastZoomEventPos) { lastZoomEventPos = pos; @@ -354,7 +357,18 @@ void QVGraphicsView::zoom(qreal scaleFactor, const QPoint &pos) } const QPointF scenePos = mapToScene(pos) - lastZoomRoundingError; - scale(scaleFactor, scaleFactor); + if (appliedExpensiveScaleZoomLevel != 0.0) + { + const qreal baseTransformScale = 1.0 / devicePixelRatioF(); + const qreal relativeLevel = absoluteLevel / appliedExpensiveScaleZoomLevel; + setTransformScale(baseTransformScale * relativeLevel); + } + else + { + setTransformScale(absoluteLevel * appliedDpiAdjustment); + } + zoomLevel = absoluteLevel; + scrollHelper->cancelAnimation(); // If we have a point to zoom towards and cursor zooming is enabled/applicable @@ -376,11 +390,6 @@ void QVGraphicsView::zoom(qreal scaleFactor, const QPoint &pos) emitZoomLevelChangedTimer->start(); } -void QVGraphicsView::setZoomLevel(qreal absoluteScaleFactor) -{ - zoom(absoluteScaleFactor / currentScale); -} - bool QVGraphicsView::getResizeResetsZoom() const { return resizeResetsZoom; @@ -411,7 +420,7 @@ void QVGraphicsView::setNavResetsZoom(bool value) emit navResetsZoomChanged(); } -void QVGraphicsView::scaleExpensively() +void QVGraphicsView::applyExpensiveScaling() { if (!isScalingEnabled || !getCurrentFileDetails().isPixmapLoaded) return; @@ -420,24 +429,25 @@ void QVGraphicsView::scaleExpensively() if (getContentToViewportRatio() > (isScalingTwoEnabled ? 3.0 : 1.00001)) { // Return to original size - makeUnscaled(); + removeExpensiveScaling(); return; } // Calculate scaled resolution - qreal scaleAdjustment = getScaleAdjustment(); - const QSizeF mappedSize = QSizeF(getCurrentFileDetails().loadedPixmapSize) * currentScale * scaleAdjustment * devicePixelRatioF(); + const qreal dpiAdjustment = getDpiAdjustment(); + const QSizeF mappedSize = QSizeF(getCurrentFileDetails().loadedPixmapSize) * zoomLevel * dpiAdjustment * devicePixelRatioF(); // Set image to scaled version loadedPixmapItem->setPixmap(imageCore.scaleExpensively(mappedSize)); // Set appropriate scale factor - qreal targetScale = 1.0 / devicePixelRatioF(); - setTransform(getTransformWithNoScaling().scale(targetScale, targetScale)); - appliedScaleAdjustment = scaleAdjustment; + const qreal newTransformScale = 1.0 / devicePixelRatioF(); + setTransformScale(newTransformScale); + appliedDpiAdjustment = dpiAdjustment; + appliedExpensiveScaleZoomLevel = zoomLevel; } -void QVGraphicsView::makeUnscaled() +void QVGraphicsView::removeExpensiveScaling() { // Return to original size if (getCurrentFileDetails().isMovieLoaded) @@ -446,10 +456,11 @@ void QVGraphicsView::makeUnscaled() loadedPixmapItem->setPixmap(getLoadedPixmap()); // Set appropriate scale factor - qreal scaleAdjustment = getScaleAdjustment(); - qreal targetScale = currentScale * scaleAdjustment; - setTransform(getTransformWithNoScaling().scale(targetScale, targetScale)); - appliedScaleAdjustment = scaleAdjustment; + const qreal dpiAdjustment = getDpiAdjustment(); + const qreal newTransformScale = zoomLevel * dpiAdjustment; + setTransformScale(newTransformScale); + appliedDpiAdjustment = dpiAdjustment; + appliedExpensiveScaleZoomLevel = 0.0; } void QVGraphicsView::animatedFrameChanged(QRect rect) @@ -458,7 +469,7 @@ void QVGraphicsView::animatedFrameChanged(QRect rect) if (isScalingEnabled) { - scaleExpensively(); + applyExpensiveScaling(); } else { @@ -497,12 +508,12 @@ void QVGraphicsView::zoomToFit() if (targetRatio > 1.0 && !isPastActualSizeEnabled) targetRatio = 1.0; - setZoomLevel(targetRatio); + zoomAbsolute(targetRatio); } void QVGraphicsView::originalSize() { - setZoomLevel(1.0); + zoomAbsolute(1.0); } void QVGraphicsView::centerImage() @@ -644,7 +655,7 @@ void QVGraphicsView::centerOn(const QGraphicsItem *item) QSizeF QVGraphicsView::getEffectiveOriginalSize() const { - return getTransformWithNoScaling().mapRect(QRectF(QPoint(), getCurrentFileDetails().loadedPixmapSize)).size() * getScaleAdjustment(); + return getTransformWithNoScaling().mapRect(QRectF(QPoint(), getCurrentFileDetails().loadedPixmapSize)).size() * getDpiAdjustment(); } QRectF QVGraphicsView::getContentRect() const @@ -673,23 +684,41 @@ qreal QVGraphicsView::getContentToViewportRatio() const return qMax(contentSize.width() / viewportSize.width(), contentSize.height() / viewportSize.height()); } +void QVGraphicsView::setTransformScale(qreal value) +{ +#ifdef Q_OS_WIN + // On Windows, the positioning of scaled pixels seems to follow a floor rule rather + // than rounding, so increase the scale just a hair to cover rounding errors in case + // the desired scale was targeting an integer pixel boundary. + value *= 1.0 + std::numeric_limits::epsilon(); +#endif + setTransform(getTransformWithNoScaling().scale(value, value)); +} + QTransform QVGraphicsView::getTransformWithNoScaling() const { - QRectF unityRect = transform().mapRect(QRectF(0, 0, 1, 1)); - return transform().scale(1.0 / unityRect.width(), 1.0 / unityRect.height()); + const QTransform t = transform(); + // Only intended to handle combinations of scaling, mirroring, flipping, and rotation + // in increments of 90 degrees. A seemingly simpler approach would be to scale the + // transform by the inverse of its scale factor, but the resulting scale factor may + // not exactly equal 1 due to floating point rounding errors. + if (t.type() == QTransform::TxRotate) + return { 0, t.m12() < 0 ? -1.0 : 1.0, t.m21() < 0 ? -1.0 : 1.0, 0, 0, 0 }; + else + return { t.m11() < 0 ? -1.0 : 1.0, 0, 0, t.m22() < 0 ? -1.0 : 1.0, 0, 0 }; } -qreal QVGraphicsView::getScaleAdjustment() const +qreal QVGraphicsView::getDpiAdjustment() const { return isOneToOnePixelSizingEnabled ? 1.0 / devicePixelRatioF() : 1.0; } -void QVGraphicsView::handleScaleAdjustmentChange() +void QVGraphicsView::handleDpiAdjustmentChange() { - if (appliedScaleAdjustment == getScaleAdjustment()) + if (appliedDpiAdjustment == getDpiAdjustment()) return; - makeUnscaled(); + removeExpensiveScaling(); if (resizeResetsZoom) zoomToFit(); @@ -739,7 +768,7 @@ void QVGraphicsView::settingsUpdated() if (isScalingEnabled) expensiveScaleTimer->start(); else - makeUnscaled(); + removeExpensiveScaling(); //scaling2 if (!isScalingEnabled) @@ -751,7 +780,7 @@ void QVGraphicsView::settingsUpdated() cropMode = settingsManager.getInteger("cropmode"); //scalefactor - scaleFactor = settingsManager.getInteger("scalefactor")*0.01+1; + zoomMultiplier = 1.0 + (settingsManager.getInteger("scalefactor") / 100.0); //resize past actual size isPastActualSizeEnabled = settingsManager.getBoolean("pastactualsizeenabled"); @@ -776,7 +805,7 @@ void QVGraphicsView::settingsUpdated() // End of settings variables - handleScaleAdjustmentChange(); + handleDpiAdjustmentChange(); if (resizeResetsZoom) zoomToFit(); diff --git a/src/qvgraphicsview.h b/src/qvgraphicsview.h index 1711081b..5fc716de 100644 --- a/src/qvgraphicsview.h +++ b/src/qvgraphicsview.h @@ -38,9 +38,9 @@ class QVGraphicsView : public QGraphicsView void zoomOut(const QPoint &pos = QPoint(-1, -1)); - void zoom(qreal scaleFactor, const QPoint &pos = QPoint(-1, -1)); + void zoomRelative(const qreal relativeLevel, const QPoint &pos = QPoint(-1, -1)); - void setZoomLevel(qreal absoluteScaleFactor); + void zoomAbsolute(const qreal absoluteLevel, const QPoint &pos = QPoint(-1, -1)); bool getResizeResetsZoom() const; void setResizeResetsZoom(bool value); @@ -48,8 +48,8 @@ class QVGraphicsView : public QGraphicsView bool getNavResetsZoom() const; void setNavResetsZoom(bool value); - void scaleExpensively(); - void makeUnscaled(); + void applyExpensiveScaling(); + void removeExpensiveScaling(); void zoomToFit(); void originalSize(); @@ -71,7 +71,7 @@ class QVGraphicsView : public QGraphicsView const QVImageCore::FileDetails& getCurrentFileDetails() const { return imageCore.getCurrentFileDetails(); } const QPixmap& getLoadedPixmap() const { return imageCore.getLoadedPixmap(); } const QMovie& getLoadedMovie() const { return imageCore.getLoadedMovie(); } - qreal getCurrentScale() const { return currentScale; } + qreal getZoomLevel() const { return zoomLevel; } int getFitOverscan() const { return fitOverscan; } @@ -123,11 +123,13 @@ class QVGraphicsView : public QGraphicsView qreal getContentToViewportRatio() const; + void setTransformScale(qreal absoluteScale); + QTransform getTransformWithNoScaling() const; - qreal getScaleAdjustment() const; + qreal getDpiAdjustment() const; - void handleScaleAdjustmentChange(); + void handleDpiAdjustmentChange(); private slots: void animatedFrameChanged(QRect rect); @@ -153,12 +155,13 @@ private slots: bool isConstrainedPositioningEnabled; bool isConstrainedSmallCenteringEnabled; int cropMode; - qreal scaleFactor; + qreal zoomMultiplier; bool resizeResetsZoom; bool navResetsZoom; - qreal currentScale; - qreal appliedScaleAdjustment; + qreal zoomLevel; + qreal appliedDpiAdjustment; + qreal appliedExpensiveScaleZoomLevel; QPoint lastZoomEventPos; QPointF lastZoomRoundingError; From 4ca66e80bc77fdda0ce857131056748bef55ee8a Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sat, 2 Sep 2023 16:04:34 -0400 Subject: [PATCH 102/111] Fix zoom to fit leaving a pixel gap sometimes if the window's aspect ratio is almost identical to the image's. --- src/qvgraphicsview.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/qvgraphicsview.cpp b/src/qvgraphicsview.cpp index c7f25ca2..3495ac80 100644 --- a/src/qvgraphicsview.cpp +++ b/src/qvgraphicsview.cpp @@ -501,9 +501,20 @@ void QVGraphicsView::zoomToFit() targetRatio = fitXRatio; break; default: - targetRatio = qMin(fitXRatio, fitYRatio); + { + QSize xRatioSize = (effectiveImageSize * fitXRatio * devicePixelRatioF()).toSize(); + QSize yRatioSize = (effectiveImageSize * fitYRatio * devicePixelRatioF()).toSize(); + QSize maxSize = (viewSize * devicePixelRatioF()).toSize(); + // If the aspect ratios are extremely close, it's possible that both are sufficient to + // fit the image, but one results in the opposing dimension getting rounded down to + // just under the view size, so use the larger of the two ratios in that case. + if (xRatioSize.boundedTo(maxSize) == xRatioSize && yRatioSize.boundedTo(maxSize) == yRatioSize) + targetRatio = qMax(fitXRatio, fitYRatio); + else + targetRatio = qMin(fitXRatio, fitYRatio); break; } + } if (targetRatio > 1.0 && !isPastActualSizeEnabled) targetRatio = 1.0; From 334851fef66e2038625a312e29ef03550bea383e Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sat, 2 Sep 2023 17:00:00 -0400 Subject: [PATCH 103/111] When fitting image, use exact 1.0 scaling ratio when possible. --- src/qvgraphicsview.cpp | 43 ++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/src/qvgraphicsview.cpp b/src/qvgraphicsview.cpp index 3495ac80..914d4dc8 100644 --- a/src/qvgraphicsview.cpp +++ b/src/qvgraphicsview.cpp @@ -483,7 +483,7 @@ void QVGraphicsView::zoomToFit() return; QSizeF effectiveImageSize = getEffectiveOriginalSize(); - QSizeF viewSize = getUsableViewportRect(true).size(); + QSize viewSize = getUsableViewportRect(true).size(); if (viewSize.isEmpty()) return; @@ -493,28 +493,43 @@ void QVGraphicsView::zoomToFit() qreal targetRatio; + // Each mode will check if the rounded image size already produces the desired fit, + // in which case we can use exactly 1.0 to avoid unnecessary scaling + switch (cropMode) { // should be enum tbh case 1: // only take into account height - targetRatio = fitYRatio; + if (qRound(effectiveImageSize.height()) == viewSize.height()) + targetRatio = 1.0; + else + targetRatio = fitYRatio; break; case 2: // only take into account width - targetRatio = fitXRatio; + if (qRound(effectiveImageSize.width()) == viewSize.width()) + targetRatio = 1.0; + else + targetRatio = fitXRatio; break; default: - { - QSize xRatioSize = (effectiveImageSize * fitXRatio * devicePixelRatioF()).toSize(); - QSize yRatioSize = (effectiveImageSize * fitYRatio * devicePixelRatioF()).toSize(); - QSize maxSize = (viewSize * devicePixelRatioF()).toSize(); - // If the aspect ratios are extremely close, it's possible that both are sufficient to - // fit the image, but one results in the opposing dimension getting rounded down to - // just under the view size, so use the larger of the two ratios in that case. - if (xRatioSize.boundedTo(maxSize) == xRatioSize && yRatioSize.boundedTo(maxSize) == yRatioSize) - targetRatio = qMax(fitXRatio, fitYRatio); + if ((qRound(effectiveImageSize.height()) == viewSize.height() && qRound(effectiveImageSize.width()) <= viewSize.width()) || + (qRound(effectiveImageSize.width()) == viewSize.width() && qRound(effectiveImageSize.height()) <= viewSize.height())) + { + targetRatio = 1.0; + } else - targetRatio = qMin(fitXRatio, fitYRatio); + { + QSize xRatioSize = (effectiveImageSize * fitXRatio * devicePixelRatioF()).toSize(); + QSize yRatioSize = (effectiveImageSize * fitYRatio * devicePixelRatioF()).toSize(); + QSize maxSize = (QSizeF(viewSize) * devicePixelRatioF()).toSize(); + // If the aspect ratios are extremely close, it's possible that both are sufficient to + // fit the image, but one results in the opposing dimension getting rounded down to + // just under the view size, so use the larger of the two ratios in that case. + if (xRatioSize.boundedTo(maxSize) == xRatioSize && yRatioSize.boundedTo(maxSize) == yRatioSize) + targetRatio = qMax(fitXRatio, fitYRatio); + else + targetRatio = qMin(fitXRatio, fitYRatio); + } break; } - } if (targetRatio > 1.0 && !isPastActualSizeEnabled) targetRatio = 1.0; From 355aca46c4f73cd90c6387dd98e5c25c0b9c8011 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Mon, 4 Sep 2023 17:49:39 -0400 Subject: [PATCH 104/111] Change fit overscan to 0. --- src/qvgraphicsview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qvgraphicsview.cpp b/src/qvgraphicsview.cpp index 914d4dc8..8079dcdd 100644 --- a/src/qvgraphicsview.cpp +++ b/src/qvgraphicsview.cpp @@ -42,7 +42,7 @@ QVGraphicsView::QVGraphicsView(QWidget *parent) : QGraphicsView(parent) zoomMultiplier = 1.25; // Initialize other variables - fitOverscan = 1; + fitOverscan = 0; resizeResetsZoom = true; navResetsZoom = true; zoomLevel = 1.0; From 43b040957d185ed245dcefca4f0c8b050ac48d1a Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Mon, 4 Sep 2023 10:55:06 -0400 Subject: [PATCH 105/111] Fix another centering issue that could cause 1 pixel offset --- src/qvgraphicsview.cpp | 62 +++++++++++++++--------------------------- src/qvgraphicsview.h | 6 ---- 2 files changed, 22 insertions(+), 46 deletions(-) diff --git a/src/qvgraphicsview.cpp b/src/qvgraphicsview.cpp index 8079dcdd..b71fa751 100644 --- a/src/qvgraphicsview.cpp +++ b/src/qvgraphicsview.cpp @@ -520,9 +520,9 @@ void QVGraphicsView::zoomToFit() QSize xRatioSize = (effectiveImageSize * fitXRatio * devicePixelRatioF()).toSize(); QSize yRatioSize = (effectiveImageSize * fitYRatio * devicePixelRatioF()).toSize(); QSize maxSize = (QSizeF(viewSize) * devicePixelRatioF()).toSize(); - // If the aspect ratios are extremely close, it's possible that both are sufficient to - // fit the image, but one results in the opposing dimension getting rounded down to - // just under the view size, so use the larger of the two ratios in that case. + // If the fit ratios are extremely close, it's possible that both are sufficient to + // contain the image, but one results in the opposing dimension getting rounded down + // to just under the view size, so use the larger of the two ratios in that case. if (xRatioSize.boundedTo(maxSize) == xRatioSize && yRatioSize.boundedTo(maxSize) == yRatioSize) targetRatio = qMax(fitXRatio, fitYRatio); else @@ -544,7 +544,25 @@ void QVGraphicsView::originalSize() void QVGraphicsView::centerImage() { - centerOn(loadedPixmapItem); + QRect viewRect = getUsableViewportRect(); + QRect contentRect = getContentRect().toRect(); + + if (isRightToLeft()) + { + qint64 horizontal = 0; + horizontal += horizontalScrollBar()->minimum(); + horizontal += horizontalScrollBar()->maximum(); + horizontal -= int((contentRect.width() - viewRect.width()) / 2.0); + horizontalScrollBar()->setValue(horizontal); + } + else + { + horizontalScrollBar()->setValue(int((contentRect.width() - viewRect.width()) / 2.0)); + } + + verticalScrollBar()->setValue(int((contentRect.height() - viewRect.height()) / 2.0) - viewRect.top()); + + scrollHelper->cancelAnimation(); } void QVGraphicsView::goToFile(const GoToFileMode &mode, int index) @@ -643,42 +661,6 @@ void QVGraphicsView::goToFile(const GoToFileMode &mode, int index) loadFile(nextImageFilePath); } -void QVGraphicsView::centerOn(const QPointF &pos) -{ - QRect targetRect = getUsableViewportRect(); - QPointF viewPoint = transform().map(pos); - - // Snap to nearest 64th pixel, helps with floating point rounding errors - viewPoint = QPointF((viewPoint * 64.0).toPoint()) / 64.0; - - if (isRightToLeft()) - { - qint64 horizontal = 0; - horizontal += horizontalScrollBar()->minimum(); - horizontal += horizontalScrollBar()->maximum(); - horizontal -= int(viewPoint.x() - (targetRect.width() / 2.0)); - horizontalScrollBar()->setValue(horizontal); - } - else - { - horizontalScrollBar()->setValue(int(viewPoint.x() - (targetRect.width() / 2.0))); - } - - verticalScrollBar()->setValue(int(viewPoint.y() - targetRect.top() - (targetRect.height() / 2.0))); - - scrollHelper->cancelAnimation(); -} - -void QVGraphicsView::centerOn(qreal x, qreal y) -{ - centerOn(QPointF(x, y)); -} - -void QVGraphicsView::centerOn(const QGraphicsItem *item) -{ - centerOn(item->sceneBoundingRect().center()); -} - QSizeF QVGraphicsView::getEffectiveOriginalSize() const { return getTransformWithNoScaling().mapRect(QRectF(QPoint(), getCurrentFileDetails().loadedPixmapSize)).size() * getDpiAdjustment(); diff --git a/src/qvgraphicsview.h b/src/qvgraphicsview.h index 5fc716de..cf69fced 100644 --- a/src/qvgraphicsview.h +++ b/src/qvgraphicsview.h @@ -111,12 +111,6 @@ class QVGraphicsView : public QGraphicsView bool event(QEvent *event) override; - void centerOn(const QPointF &pos); - - void centerOn(qreal x, qreal y); - - void centerOn(const QGraphicsItem *item); - QRectF getContentRect() const; QRect getUsableViewportRect(bool addOverscan = false) const; From 00a1d15047d80e664fb46c9b94cfcdce424efe01 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Mon, 4 Sep 2023 18:10:12 -0400 Subject: [PATCH 106/111] Fix Qt 5.9 build --- src/scrollhelper.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/scrollhelper.h b/src/scrollhelper.h index 5cb68d57..09d9323f 100644 --- a/src/scrollhelper.h +++ b/src/scrollhelper.h @@ -1,6 +1,7 @@ #ifndef SCROLLHELPER_H #define SCROLLHELPER_H +#include #include #include #include From 50059812288c330b4e031424cd25dfe2f8fbdebe Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Mon, 11 Sep 2023 19:31:22 -0400 Subject: [PATCH 107/111] Fix centering with rotate/flip/mirror commands --- src/qvgraphicsview.cpp | 28 +++++++++++----------------- src/scrollhelper.cpp | 4 +++- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/qvgraphicsview.cpp b/src/qvgraphicsview.cpp index b71fa751..003006b1 100644 --- a/src/qvgraphicsview.cpp +++ b/src/qvgraphicsview.cpp @@ -544,23 +544,17 @@ void QVGraphicsView::originalSize() void QVGraphicsView::centerImage() { - QRect viewRect = getUsableViewportRect(); - QRect contentRect = getContentRect().toRect(); - - if (isRightToLeft()) - { - qint64 horizontal = 0; - horizontal += horizontalScrollBar()->minimum(); - horizontal += horizontalScrollBar()->maximum(); - horizontal -= int((contentRect.width() - viewRect.width()) / 2.0); - horizontalScrollBar()->setValue(horizontal); - } - else - { - horizontalScrollBar()->setValue(int((contentRect.width() - viewRect.width()) / 2.0)); - } - - verticalScrollBar()->setValue(int((contentRect.height() - viewRect.height()) / 2.0) - viewRect.top()); + const QRect viewRect = getUsableViewportRect(); + const QRect contentRect = getContentRect().toRect(); + const int hOffset = isRightToLeft() ? + horizontalScrollBar()->minimum() + horizontalScrollBar()->maximum() - contentRect.left() : + contentRect.left(); + const int vOffset = contentRect.top() - viewRect.top(); + const int hOverflow = contentRect.width() - viewRect.width(); + const int vOverflow = contentRect.height() - viewRect.height(); + + horizontalScrollBar()->setValue(hOffset + (hOverflow / (isRightToLeft() ? -2 : 2))); + verticalScrollBar()->setValue(vOffset + (vOverflow / 2)); scrollHelper->cancelAnimation(); } diff --git a/src/scrollhelper.cpp b/src/scrollhelper.cpp index 930aace0..d1973ceb 100644 --- a/src/scrollhelper.cpp +++ b/src/scrollhelper.cpp @@ -29,7 +29,9 @@ void ScrollHelper::move(QPointF delta) calculateScrollRange( p.ContentRect.width(), p.UsableViewportRect.width(), - (p.ContentRect.left() * (isRightToLeft ? -1 : 1)) - (isRightToLeft ? p.ContentRect.width() : 0), + isRightToLeft ? + hScrollBar->minimum() + hScrollBar->maximum() + p.UsableViewportRect.width() - p.ContentRect.left() - p.ContentRect.width() : + p.ContentRect.left(), p.ShouldCenter, hMin, hMax From 71964991646593d537152fce70b2ea925ad47102 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sun, 17 Sep 2023 18:17:32 -0400 Subject: [PATCH 108/111] Allow arrow keys to scroll image in some cases. Not sure if this use case was intentional in qView, but regardless it exists and people have gotten used to it. --- src/qvgraphicsview.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/qvgraphicsview.cpp b/src/qvgraphicsview.cpp index 003006b1..fae51219 100644 --- a/src/qvgraphicsview.cpp +++ b/src/qvgraphicsview.cpp @@ -251,8 +251,18 @@ void QVGraphicsView::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Up || event->key() == Qt::Key_Down || event->key() == Qt::Key_Left || event->key() == Qt::Key_Right) { - // Normally the arrow keys are assigned to shortcuts, but in case they aren't or get passed - // through due to modifier keys, swallow the event to avoid scrolling + // Normally the arrow keys are assigned to shortcuts, but in case they aren't or + // get passed through due to modifier keys, handle it here instead of letting the + // base class do it to ensure any bounds constraints are enforced. + const int stepDown = verticalScrollBar()->singleStep(); + const int stepRight = horizontalScrollBar()->singleStep() * (isRightToLeft() ? -1 : 1); + QPoint delta {}; + if (event->key() == Qt::Key_Up) delta.ry() -= stepDown; + if (event->key() == Qt::Key_Down) delta.ry() += stepDown; + if (event->key() == Qt::Key_Left) delta.rx() -= stepRight; + if (event->key() == Qt::Key_Right) delta.rx() += stepRight; + scrollHelper->move(delta); + constrainBoundsTimer->start(); return; } From 975260880da31aedb02979ecb44a1cdd794e5425 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Wed, 27 Sep 2023 21:10:43 -0400 Subject: [PATCH 109/111] Fix viewport not clearing when file is closed --- src/qvgraphicsview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qvgraphicsview.cpp b/src/qvgraphicsview.cpp index fae51219..bd382933 100644 --- a/src/qvgraphicsview.cpp +++ b/src/qvgraphicsview.cpp @@ -462,7 +462,7 @@ void QVGraphicsView::removeExpensiveScaling() // Return to original size if (getCurrentFileDetails().isMovieLoaded) loadedPixmapItem->setPixmap(getLoadedMovie().currentPixmap()); - else if (getCurrentFileDetails().isPixmapLoaded) + else loadedPixmapItem->setPixmap(getLoadedPixmap()); // Set appropriate scale factor From 27033de7a385d19f8105de8f49d144e3d81fd273 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Wed, 27 Sep 2023 23:42:34 -0400 Subject: [PATCH 110/111] Rename member variables to match naming convention --- src/qvgraphicsview.cpp | 8 ++++---- src/scrollhelper.cpp | 30 +++++++++++++++--------------- src/scrollhelper.h | 8 ++++---- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/qvgraphicsview.cpp b/src/qvgraphicsview.cpp index bd382933..6fb1f897 100644 --- a/src/qvgraphicsview.cpp +++ b/src/qvgraphicsview.cpp @@ -54,10 +54,10 @@ QVGraphicsView::QVGraphicsView(QWidget *parent) : QGraphicsView(parent) scrollHelper = new ScrollHelper(this, [this](ScrollHelper::Parameters &p) { - p.ContentRect = getContentRect().toRect(); - p.UsableViewportRect = getUsableViewportRect(); - p.ShouldConstrain = isConstrainedPositioningEnabled; - p.ShouldCenter = isConstrainedSmallCenteringEnabled; + p.contentRect = getContentRect().toRect(); + p.usableViewportRect = getUsableViewportRect(); + p.shouldConstrain = isConstrainedPositioningEnabled; + p.shouldCenter = isConstrainedSmallCenteringEnabled; }); connect(&imageCore, &QVImageCore::animatedFrameChanged, this, &QVGraphicsView::animatedFrameChanged); diff --git a/src/scrollhelper.cpp b/src/scrollhelper.cpp index d1973ceb..661a927d 100644 --- a/src/scrollhelper.cpp +++ b/src/scrollhelper.cpp @@ -19,7 +19,7 @@ void ScrollHelper::move(QPointF delta) { Parameters p; getParametersCallback(p); - if (!p.ContentRect.isValid() || !p.UsableViewportRect.isValid()) + if (!p.contentRect.isValid() || !p.usableViewportRect.isValid()) { overscrollDistance = {}; return; @@ -27,27 +27,27 @@ void ScrollHelper::move(QPointF delta) bool isRightToLeft = hScrollBar->isRightToLeft(); int hMin, hMax, vMin, vMax; calculateScrollRange( - p.ContentRect.width(), - p.UsableViewportRect.width(), + p.contentRect.width(), + p.usableViewportRect.width(), isRightToLeft ? - hScrollBar->minimum() + hScrollBar->maximum() + p.UsableViewportRect.width() - p.ContentRect.left() - p.ContentRect.width() : - p.ContentRect.left(), - p.ShouldCenter, + hScrollBar->minimum() + hScrollBar->maximum() + p.usableViewportRect.width() - p.contentRect.left() - p.contentRect.width() : + p.contentRect.left(), + p.shouldCenter, hMin, hMax ); calculateScrollRange( - p.ContentRect.height(), - p.UsableViewportRect.height(), - p.ContentRect.top() - p.UsableViewportRect.top(), - p.ShouldCenter, + p.contentRect.height(), + p.usableViewportRect.height(), + p.contentRect.top() - p.usableViewportRect.top(), + p.shouldCenter, vMin, vMax ); QPointF scrollLocation = QPointF(hScrollBar->value(), vScrollBar->value()) + lastMoveRoundingError; qreal scrollDeltaX = delta.x(); qreal scrollDeltaY = delta.y(); - if (p.ShouldConstrain) + if (p.shouldConstrain) { scrollDeltaX = calculateScrollDelta(scrollLocation.x(), hMin, hMax, scrollDeltaX); scrollDeltaY = calculateScrollDelta(scrollLocation.y(), vMin, vMax, scrollDeltaY); @@ -57,12 +57,12 @@ void ScrollHelper::move(QPointF delta) int scrollValueY = qRound(scrollLocation.y()); lastMoveRoundingError = QPointF(scrollLocation.x() - scrollValueX, scrollLocation.y() - scrollValueY); int overscrollDistanceX = - p.ShouldConstrain && scrollValueX < hMin ? scrollValueX - hMin : - p.ShouldConstrain && scrollValueX > hMax ? scrollValueX - hMax : + p.shouldConstrain && scrollValueX < hMin ? scrollValueX - hMin : + p.shouldConstrain && scrollValueX > hMax ? scrollValueX - hMax : 0; int overscrollDistanceY = - p.ShouldConstrain && scrollValueY < vMin ? scrollValueY - vMin : - p.ShouldConstrain && scrollValueY > vMax ? scrollValueY - vMax : + p.shouldConstrain && scrollValueY < vMin ? scrollValueY - vMin : + p.shouldConstrain && scrollValueY > vMax ? scrollValueY - vMax : 0; overscrollDistance = QPoint(overscrollDistanceX, overscrollDistanceY); hScrollBar->setValue(scrollValueX); diff --git a/src/scrollhelper.h b/src/scrollhelper.h index 09d9323f..65bd0b1d 100644 --- a/src/scrollhelper.h +++ b/src/scrollhelper.h @@ -13,10 +13,10 @@ class ScrollHelper : public QObject public: struct Parameters { - QRect ContentRect; - QRect UsableViewportRect; - bool ShouldConstrain; - bool ShouldCenter; + QRect contentRect; + QRect usableViewportRect; + bool shouldConstrain; + bool shouldCenter; }; typedef std::function GetParametersCallback; From f1e3b3edc4c2e6707cb0dde7e69725e6a6690d5a Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Thu, 28 Sep 2023 18:05:02 -0400 Subject: [PATCH 111/111] Lock zoom level if no image is loaded --- src/qvgraphicsview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qvgraphicsview.cpp b/src/qvgraphicsview.cpp index 6fb1f897..53262a9e 100644 --- a/src/qvgraphicsview.cpp +++ b/src/qvgraphicsview.cpp @@ -234,7 +234,7 @@ void QVGraphicsView::wheelEvent(QWheelEvent *event) const int yDelta = event->angleDelta().y(); const qreal yScale = 120.0; - if (yDelta == 0) + if (yDelta == 0 || !getCurrentFileDetails().isPixmapLoaded) return; const qreal fractionalWheelClicks = qFabs(yDelta) / yScale;