File indexing completed on 2024-05-12 15:59:08
0001 /* 0002 * SPDX-FileCopyrightText: 2016 Boudewijn Rempt <boud@valdyas.org> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 #include "View.h" 0007 #include <QPointer> 0008 #include <QScopedPointer> 0009 0010 #include <KoPattern.h> 0011 #include <KoAbstractGradient.h> 0012 #include <kis_paintop_preset.h> 0013 #include <KisView.h> 0014 #include <KisViewManager.h> 0015 #include <kis_node_manager.h> 0016 #include <kis_selection_manager.h> 0017 #include <kis_canvas_resource_provider.h> 0018 #include <kis_exposure_gamma_correction_interface.h> 0019 #include <kis_paintop_box.h> 0020 #include <KisMainWindow.h> 0021 #include <KoCanvasBase.h> 0022 #include <kis_canvas2.h> 0023 #include <KisResourceTypes.h> 0024 #include <KisDocument.h> 0025 #include "Document.h" 0026 #include "Canvas.h" 0027 #include "Window.h" 0028 #include "Resource.h" 0029 #include "ManagedColor.h" 0030 0031 #include "LibKisUtils.h" 0032 0033 0034 struct View::Private { 0035 Private() {} 0036 QPointer<KisView> view; 0037 }; 0038 0039 View::View(KisView* view, QObject *parent) 0040 : QObject(parent) 0041 , d(new Private) 0042 { 0043 d->view = view; 0044 } 0045 0046 View::~View() 0047 { 0048 delete d; 0049 } 0050 0051 bool View::operator==(const View &other) const 0052 { 0053 return (d->view == other.d->view); 0054 } 0055 0056 bool View::operator!=(const View &other) const 0057 { 0058 return !(operator==(other)); 0059 } 0060 0061 Window* View::window() const 0062 { 0063 if (!d->view) return 0; 0064 KisMainWindow *mainwin = d->view->mainWindow(); 0065 Window *win = new Window(mainwin); 0066 return win; 0067 } 0068 0069 0070 Document* View::document() const 0071 { 0072 if (!d->view) return 0; 0073 Document *doc = new Document(d->view->document(), false); 0074 return doc; 0075 } 0076 0077 void View::setDocument(Document *document) 0078 { 0079 if (!d->view || !document || !document->document()) return; 0080 d->view = d->view->replaceBy(document->document()); 0081 } 0082 0083 bool View::visible() const 0084 { 0085 if (!d->view) return false; 0086 return d->view->isVisible(); 0087 } 0088 0089 void View::setVisible() 0090 { 0091 if (!d->view) return; 0092 KisMainWindow *mainwin = d->view->mainWindow(); 0093 mainwin->setActiveView(d->view); 0094 mainwin->subWindowActivated(); 0095 } 0096 0097 Canvas* View::canvas() const 0098 { 0099 if (!d->view) return 0; 0100 Canvas *c = new Canvas(d->view->canvasBase()); 0101 return c; 0102 } 0103 0104 KisView *View::view() 0105 { 0106 return d->view; 0107 } 0108 0109 void View::activateResource(Resource *resource) 0110 { 0111 if (!d->view) return; 0112 if (!resource) return; 0113 0114 KoResourceSP r = resource->resource(); 0115 if (!r) return; 0116 0117 if (KoPatternSP pattern = r.dynamicCast<KoPattern>()) { 0118 QVariant value = QVariant::fromValue(pattern); 0119 d->view->canvasBase()->resourceManager()->setResource(KoCanvasResource::CurrentPattern, value); 0120 } else if (KoAbstractGradientSP gradient = r.dynamicCast<KoAbstractGradient>()) { 0121 QVariant value = QVariant::fromValue(gradient); 0122 d->view->canvasBase()->resourceManager()->setResource(KoCanvasResource::CurrentGradient, value); 0123 } else if (KoResourceSP preset = r.dynamicCast<KisPaintOpPreset>()) { 0124 d->view->viewManager()->paintOpBox()->resourceSelected(preset); 0125 } 0126 } 0127 0128 0129 ManagedColor *View::foregroundColor() const 0130 { 0131 if (!d->view) return 0; 0132 return new ManagedColor(d->view->resourceProvider()->fgColor()); 0133 } 0134 0135 void View::setForeGroundColor(ManagedColor *color) 0136 { 0137 if (!d->view) return; 0138 d->view->resourceProvider()->setFGColor(color->color()); 0139 } 0140 0141 ManagedColor *View::backgroundColor() const 0142 { 0143 if (!d->view) return 0; 0144 return new ManagedColor(d->view->resourceProvider()->bgColor()); 0145 } 0146 0147 void View::setBackGroundColor(ManagedColor *color) 0148 { 0149 if (!d->view) return; 0150 d->view->resourceProvider()->setBGColor(color->color()); 0151 } 0152 0153 Resource *View::currentBrushPreset() const 0154 { 0155 if (!d->view) return 0; 0156 return new Resource(d->view->resourceProvider()->currentPreset(), ResourceType::PaintOpPresets); 0157 } 0158 0159 void View::setCurrentBrushPreset(Resource *resource) 0160 { 0161 activateResource(resource); 0162 } 0163 0164 Resource *View::currentPattern() const 0165 { 0166 if (!d->view) return 0; 0167 return new Resource(d->view->resourceProvider()->currentPattern(), ResourceType::Patterns); 0168 } 0169 0170 void View::setCurrentPattern(Resource *resource) 0171 { 0172 activateResource(resource); 0173 } 0174 0175 Resource *View::currentGradient() const 0176 { 0177 if (!d->view) return 0; 0178 return new Resource(d->view->resourceProvider()->currentGradient(), ResourceType::Gradients); 0179 } 0180 0181 void View::setCurrentGradient(Resource *resource) 0182 { 0183 activateResource(resource); 0184 } 0185 0186 QString View::currentBlendingMode() const 0187 { 0188 if (!d->view) return ""; 0189 return d->view->resourceProvider()->currentCompositeOp(); 0190 } 0191 0192 void View::setCurrentBlendingMode(const QString &blendingMode) 0193 { 0194 if (!d->view) return; 0195 d->view->resourceProvider()->setCurrentCompositeOp(blendingMode); 0196 } 0197 0198 float View::HDRExposure() const 0199 { 0200 if (!d->view) return 0.0; 0201 KisExposureGammaCorrectionInterface *iface = d->view->canvasBase()->exposureGammaCorrectionInterface(); 0202 return iface->currentExposure(); 0203 } 0204 0205 void View::setHDRExposure(float exposure) 0206 { 0207 if (!d->view) return; 0208 KisExposureGammaCorrectionInterface *iface = d->view->canvasBase()->exposureGammaCorrectionInterface(); 0209 iface->setCurrentExposure(exposure); 0210 } 0211 0212 float View::HDRGamma() const 0213 { 0214 if (!d->view) return 0.0; 0215 KisExposureGammaCorrectionInterface *iface = d->view->canvasBase()->exposureGammaCorrectionInterface(); 0216 return iface->currentGamma(); 0217 } 0218 0219 void View::setHDRGamma(float gamma) 0220 { 0221 if (!d->view) return; 0222 KisExposureGammaCorrectionInterface *iface = d->view->canvasBase()->exposureGammaCorrectionInterface(); 0223 return iface->setCurrentGamma(gamma); 0224 } 0225 0226 qreal View::paintingOpacity() const 0227 { 0228 if (!d->view) return 0.0; 0229 return d->view->resourceProvider()->opacity(); 0230 } 0231 0232 void View::setPaintingOpacity(qreal opacity) 0233 { 0234 if (!d->view) return; 0235 d->view->resourceProvider()->setOpacity(opacity); 0236 } 0237 0238 qreal View::brushSize() const 0239 { 0240 if (!d->view) return 0.0; 0241 return d->view->resourceProvider()->size(); 0242 } 0243 0244 void View::setBrushSize(qreal brushSize) 0245 { 0246 if (!d->view) return; 0247 d->view->resourceProvider()->setSize(brushSize); 0248 } 0249 0250 qreal View::paintingFlow() const 0251 { 0252 if (!d->view) return 0.0; 0253 return d->view->resourceProvider()->flow(); 0254 } 0255 0256 void View::setPaintingFlow(qreal flow) 0257 { 0258 if (!d->view) return; 0259 d->view->resourceProvider()->setFlow(flow); 0260 } 0261 0262 QList<Node *> View::selectedNodes() const 0263 { 0264 if (!d->view) return QList<Node *>(); 0265 if (!d->view->viewManager()) return QList<Node *>(); 0266 if (!d->view->viewManager()->nodeManager()) return QList<Node *>(); 0267 0268 KisNodeList selectedNodes = d->view->viewManager()->nodeManager()->selectedNodes(); 0269 return LibKisUtils::createNodeList(selectedNodes, d->view->image()); 0270 } 0271 0272 void View::showFloatingMessage(const QString &message, const QIcon& icon, int timeout, int priority) 0273 { 0274 if (!d->view) return; 0275 0276 KisFloatingMessage::Priority p; 0277 p = static_cast<KisFloatingMessage::Priority>(priority); 0278 0279 d->view->showFloatingMessage(message, icon, timeout, p); 0280 }