Krita Source Code Documentation
Loading...
Searching...
No Matches
FileLayer.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2017 Wolthera van Hövell tot Westerflier <griffinvalley@gmail.com>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6#include "FileLayer.h"
7#include <kis_file_layer.h>
8#include <kis_image.h>
9#include <QFileInfo>
10#include <QDir>
11
12FileLayer::FileLayer(KisImageSP image, const QString name, const QString baseName, const QString fileName,
13 const QString scalingMethod, const QString scalingFilter, QObject *parent)
14 : Node(image, new KisFileLayer(image, name, OPACITY_OPAQUE_U8), parent)
15{
16 KisFileLayer *file = dynamic_cast<KisFileLayer*>(this->node().data());
17 KIS_ASSERT(file);
19 if (scalingMethod=="ToImageSize") {
21 } else if (scalingMethod=="ToImagePPI") {
23 }
24 file->setScalingMethod(sm);
25 file->setScalingFilter(scalingFilter);
26
27 const QString &basePath = QFileInfo(baseName).absolutePath();
28 const QString &absoluteFilePath = QFileInfo(fileName).absoluteFilePath();
29 file->setFileName(basePath, getFileNameFromAbsolute(basePath, absoluteFilePath));
30}
31
32FileLayer::FileLayer(KisFileLayerSP layer, QObject *parent)
33 : Node(layer->image(), layer, parent)
34{
35
36}
37
42
43QString FileLayer::type() const
44{
45 return "filelayer";
46}
47
48void FileLayer::setProperties(QString fileName, QString scalingMethod, QString scalingFilter)
49{
50 KisFileLayer *file = dynamic_cast<KisFileLayer*>(this->node().data());
51 KIS_ASSERT(file);
53 if (scalingMethod.toLower() == "toimagesize") {
55 } else if (scalingMethod.toLower() == "toimageppi") {
57 }
58 file->setScalingMethod(sm);
59 file->setScalingFilter(scalingFilter);
60
61 const QString basePath = QFileInfo(file->path()).absolutePath();
62 const QString absoluteFilePath = QFileInfo(fileName).absoluteFilePath();
63 file->setFileName(basePath, getFileNameFromAbsolute(basePath, absoluteFilePath));
64}
65
67{
68 KisFileLayer *file = dynamic_cast<KisFileLayer*>(this->node().data());
70 file->resetCache();
71}
72
73QString FileLayer::path() const
74{
75 const KisFileLayer *file = qobject_cast<const KisFileLayer*>(this->node());
76 KIS_ASSERT(file);
77 return file->path();
78}
79
81{
82 const KisFileLayer *file = qobject_cast<const KisFileLayer*>(this->node());
84 KisFileLayer::ScalingMethod sm = file->scalingMethod();
85 QString method = "None";
86
88 method = "ToImageSize";
89 } else if (sm==KisFileLayer::ToImagePPI) {
90 method = "ToImagePPI";
91 }
92 return method;
93}
94
96{
97 const KisFileLayer *file = qobject_cast<const KisFileLayer*>(this->node());
98 KIS_ASSERT_RECOVER_RETURN_VALUE(file, "Bicubic");
99 return file->scalingFilter();
100}
101
102QString FileLayer::getFileNameFromAbsolute(const QString &basePath, QString filePath)
103{
104 KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(QFileInfo(filePath).isAbsolute(), filePath);
105
106 // try to resolve symlink
107 {
108 const QFileInfo fi(filePath);
109 if (fi.isSymLink()) {
110 filePath = fi.symLinkTarget();
111 }
112 }
113
114 if (!basePath.isEmpty()) {
115 QDir directory(basePath);
116 filePath = directory.relativeFilePath(filePath);
117 }
118
119 return filePath;
120}
121
122
const quint8 OPACITY_OPAQUE_U8
~FileLayer() override
Definition FileLayer.cpp:38
QString getFileNameFromAbsolute(const QString &basePath, QString filePath)
getFileNameFromAbsolute referenced from the fileLayer dialog, this will jumps through all the hoops t...
void resetCache()
makes the file layer to reload the connected image from disk
Definition FileLayer.cpp:66
QString scalingFilter() const
scalingFilter returns the filter with which the file referenced is scaled.
Definition FileLayer.cpp:95
QString scalingMethod() const
scalingMethod returns how the file referenced is scaled.
Definition FileLayer.cpp:80
QString type() const override
type Krita has several types of nodes, split in layers and masks. Group layers can contain other laye...
Definition FileLayer.cpp:43
void setProperties(QString fileName, QString scalingMethod=QString("None"), QString scalingFilter=QString("Bicubic"))
setProperties Change the properties of the file layer.
Definition FileLayer.cpp:48
QString path() const
path
Definition FileLayer.cpp:73
The KisFileLayer class loads a particular file as a layer into the layer stack.
Definition Node.h:24
KisNodeSP node() const
Definition Node.cpp:827
friend class FileLayer
Definition Node.h:699
#define KIS_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:85
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129
#define KIS_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:75
#define KIS_ASSERT(cond)
Definition kis_assert.h:33