File indexing completed on 2024-05-19 04:26:55
0001 /* 0002 * SPDX-FileCopyrightText: 2017 Wolthera van Hövell tot Westerflier <griffinvalley@gmail.com> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 #include "FileLayer.h" 0007 #include <kis_file_layer.h> 0008 #include <kis_image.h> 0009 #include <QFileInfo> 0010 #include <QDir> 0011 0012 FileLayer::FileLayer(KisImageSP image, const QString name, const QString baseName, const QString fileName, 0013 const QString scalingMethod, const QString scalingFilter, QObject *parent) 0014 : Node(image, new KisFileLayer(image, name, OPACITY_OPAQUE_U8), parent) 0015 { 0016 KisFileLayer *file = dynamic_cast<KisFileLayer*>(this->node().data()); 0017 KIS_ASSERT(file); 0018 KisFileLayer::ScalingMethod sm = KisFileLayer::None; 0019 if (scalingMethod=="ToImageSize") { 0020 sm= KisFileLayer::ToImageSize; 0021 } else if (scalingMethod=="ToImagePPI") { 0022 sm= KisFileLayer::ToImagePPI; 0023 } 0024 file->setScalingMethod(sm); 0025 file->setScalingFilter(scalingFilter); 0026 0027 const QString &basePath = QFileInfo(baseName).absolutePath(); 0028 const QString &absoluteFilePath = QFileInfo(fileName).absoluteFilePath(); 0029 file->setFileName(basePath, getFileNameFromAbsolute(basePath, absoluteFilePath)); 0030 } 0031 0032 FileLayer::FileLayer(KisFileLayerSP layer, QObject *parent) 0033 : Node(layer->image(), layer, parent) 0034 { 0035 0036 } 0037 0038 FileLayer::~FileLayer() 0039 { 0040 0041 } 0042 0043 QString FileLayer::type() const 0044 { 0045 return "filelayer"; 0046 } 0047 0048 void FileLayer::setProperties(QString fileName, QString scalingMethod, QString scalingFilter) 0049 { 0050 KisFileLayer *file = dynamic_cast<KisFileLayer*>(this->node().data()); 0051 KIS_ASSERT(file); 0052 KisFileLayer::ScalingMethod sm = KisFileLayer::None; 0053 if (scalingMethod.toLower() == "toimagesize") { 0054 sm= KisFileLayer::ToImageSize; 0055 } else if (scalingMethod.toLower() == "toimageppi") { 0056 sm= KisFileLayer::ToImagePPI; 0057 } 0058 file->setScalingMethod(sm); 0059 file->setScalingFilter(scalingFilter); 0060 0061 const QString basePath = QFileInfo(file->path()).absolutePath(); 0062 const QString absoluteFilePath = QFileInfo(fileName).absoluteFilePath(); 0063 file->setFileName(basePath, getFileNameFromAbsolute(basePath, absoluteFilePath)); 0064 } 0065 0066 void FileLayer::resetCache() 0067 { 0068 KisFileLayer *file = dynamic_cast<KisFileLayer*>(this->node().data()); 0069 KIS_ASSERT_RECOVER_RETURN(file); 0070 file->resetCache(); 0071 } 0072 0073 QString FileLayer::path() const 0074 { 0075 const KisFileLayer *file = qobject_cast<const KisFileLayer*>(this->node()); 0076 KIS_ASSERT(file); 0077 return file->path(); 0078 } 0079 0080 QString FileLayer::scalingMethod() const 0081 { 0082 const KisFileLayer *file = qobject_cast<const KisFileLayer*>(this->node()); 0083 KIS_ASSERT_RECOVER_RETURN_VALUE(file, "None"); 0084 KisFileLayer::ScalingMethod sm = file->scalingMethod(); 0085 QString method = "None"; 0086 0087 if (sm==KisFileLayer::ToImageSize) { 0088 method = "ToImageSize"; 0089 } else if (sm==KisFileLayer::ToImagePPI) { 0090 method = "ToImagePPI"; 0091 } 0092 return method; 0093 } 0094 0095 QString FileLayer::scalingFilter() const 0096 { 0097 const KisFileLayer *file = qobject_cast<const KisFileLayer*>(this->node()); 0098 KIS_ASSERT_RECOVER_RETURN_VALUE(file, "Bicubic"); 0099 return file->scalingFilter(); 0100 } 0101 0102 QString FileLayer::getFileNameFromAbsolute(const QString &basePath, QString filePath) 0103 { 0104 KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(QFileInfo(filePath).isAbsolute(), filePath); 0105 0106 // try to resolve symlink 0107 { 0108 const QFileInfo fi(filePath); 0109 if (fi.isSymLink()) { 0110 filePath = fi.symLinkTarget(); 0111 } 0112 } 0113 0114 if (!basePath.isEmpty()) { 0115 QDir directory(basePath); 0116 filePath = directory.relativeFilePath(filePath); 0117 } 0118 0119 return filePath; 0120 } 0121 0122