File indexing completed on 2024-05-12 16:01:27
0001 /* 0002 * SPDX-FileCopyrightText: 2006 Boudewijn Rempt <boud@valdyas.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef KIS_CANVAS_RESOURCE_PROVIDER_H_ 0008 #define KIS_CANVAS_RESOURCE_PROVIDER_H_ 0009 0010 #include <QObject> 0011 0012 #include <KoColor.h> 0013 #include <KoID.h> 0014 #include <KoCanvasResourceProvider.h> 0015 #include <KoResource.h> 0016 0017 #include "kis_types.h" 0018 #include "kritaui_export.h" 0019 0020 #include <KoPattern.h> 0021 #include <KoAbstractGradient.h> 0022 #include <resources/KoGamutMask.h> 0023 #include <kis_workspace_resource.h> 0024 #include "KisPresetShadowUpdater.h" 0025 0026 class KoColorProfile; 0027 class KoAbstractGradient; 0028 0029 class KoCanvasBase; 0030 class KisViewManager; 0031 0032 class KisFilterConfiguration; 0033 0034 #include <kis_abstract_perspective_grid.h> 0035 0036 /** 0037 * KisCanvasResourceProvider contains the per-window current settings that 0038 * influence painting, like paintop, color, gradients and so on. 0039 */ 0040 class KRITAUI_EXPORT KisCanvasResourceProvider : public QObject 0041 { 0042 Q_OBJECT 0043 0044 public: 0045 KisCanvasResourceProvider(KisViewManager * view); 0046 ~KisCanvasResourceProvider() override; 0047 0048 void setResourceManager(KoCanvasResourceProvider *resourceManager); 0049 KoCanvasResourceProvider* resourceManager(); 0050 0051 KoCanvasBase * canvas() const; 0052 0053 KoColor bgColor() const; 0054 void setBGColor(const KoColor& c); 0055 0056 KoColor fgColor() const; 0057 void setFGColor(const KoColor& c); 0058 0059 float HDRExposure() const; 0060 void setHDRExposure(float exposure); 0061 0062 float HDRGamma() const; 0063 void setHDRGamma(float gamma); 0064 0065 bool eraserMode() const; 0066 void setEraserMode(bool value); 0067 0068 KoPatternSP currentPattern() const; 0069 0070 KoAbstractGradientSP currentGradient() const; 0071 0072 KisImageWSP currentImage() const; 0073 0074 KisNodeSP currentNode() const; 0075 0076 KoGamutMaskSP currentGamutMask() const; 0077 bool gamutMaskActive() const; 0078 0079 KisPaintOpPresetSP currentPreset() const; 0080 void setPaintOpPreset(const KisPaintOpPresetSP preset); 0081 0082 KisPaintOpPresetSP previousPreset() const; 0083 void setPreviousPaintOpPreset(const KisPaintOpPresetSP preset); 0084 0085 void setCurrentCompositeOp(const QString& compositeOp); 0086 QString currentCompositeOp() const; 0087 0088 QList<QPointer<KisAbstractPerspectiveGrid> > perspectiveGrids() const; 0089 void addPerspectiveGrid(KisAbstractPerspectiveGrid*); 0090 void removePerspectiveGrid(KisAbstractPerspectiveGrid*); 0091 void clearPerspectiveGrids(); 0092 0093 void setMirrorHorizontal(bool mirrorHorizontal); 0094 bool mirrorHorizontal() const; 0095 0096 void setMirrorVertical(bool mirrorVertical); 0097 bool mirrorVertical() const; 0098 0099 // options for horizontal and vertical mirror toolbar 0100 void setMirrorHorizontalLock(bool isLocked); 0101 bool mirrorHorizontalLock(); 0102 void setMirrorVerticalLock(bool isLocked); 0103 bool mirrorVerticalLock(); 0104 0105 void setMirrorVerticalHideDecorations(bool hide); 0106 bool mirrorVerticalHideDecorations(); 0107 0108 void setMirrorHorizontalHideDecorations(bool hide); 0109 bool mirrorHorizontalHideDecorations(); 0110 0111 void mirrorVerticalMoveCanvasToCenter(); 0112 void mirrorHorizontalMoveCanvasToCenter(); 0113 0114 void setOpacity(qreal opacity); 0115 qreal opacity() const; 0116 0117 void setFlow(qreal opacity); 0118 qreal flow() const; 0119 0120 void setSize(qreal size); 0121 qreal size() const; 0122 0123 void setPatternSize(qreal size); 0124 qreal patternSize() const; 0125 0126 void setGlobalAlphaLock(bool lock); 0127 bool globalAlphaLock() const; 0128 0129 void setDisablePressure(bool value); 0130 bool disablePressure() const; 0131 0132 ///Notify that the workspace is saved and settings should be saved to it 0133 void notifySavingWorkspace(KisWorkspaceResourceSP workspace); 0134 0135 ///Notify that the workspace is loaded and settings can be read 0136 void notifyLoadingWorkspace(KisWorkspaceResourceSP workspace); 0137 0138 public Q_SLOTS: 0139 0140 void slotSetFGColor(const KoColor& c); 0141 void slotSetBGColor(const KoColor& c); 0142 void slotPatternActivated(KoResourceSP pattern); 0143 void slotGradientActivated(KoResourceSP gradient); 0144 void slotNodeActivated(const KisNodeSP node); 0145 void slotPainting(); 0146 0147 void slotGamutMaskActivated(KoGamutMaskSP mask); 0148 void slotGamutMaskUnset(); 0149 void slotGamutMaskPreviewUpdate(); 0150 void slotGamutMaskDeactivate(); 0151 0152 /** 0153 * Set the image size in pixels. The resource provider will store 0154 * the image size in postscript points. 0155 */ 0156 // FIXME: this slot doesn't catch the case when image resolution is changed 0157 void slotImageSizeChanged(); 0158 void slotOnScreenResolutionChanged(); 0159 0160 private Q_SLOTS: 0161 0162 void slotCanvasResourceChanged(int key, const QVariant & res); 0163 0164 Q_SIGNALS: 0165 0166 void sigPaintOpPresetChanged(const KisPaintOpPresetSP); 0167 void sigFGColorChanged(const KoColor &); 0168 void sigBGColorChanged(const KoColor &); 0169 void sigGradientChanged(KoAbstractGradientSP); 0170 void sigPatternChanged(KoPatternSP); 0171 void sigNodeChanged(const KisNodeSP); 0172 void sigDisplayProfileChanged(const KoColorProfile *); 0173 void sigFGColorUsed(const KoColor&); 0174 void sigOnScreenResolutionChanged(qreal scaleX, qreal scaleY); 0175 void sigEraserModeToggled(bool); 0176 void sigOpacityChanged(qreal); 0177 void sigSavingWorkspace(KisWorkspaceResourceSP workspace); 0178 void sigLoadingWorkspace(KisWorkspaceResourceSP workspace); 0179 0180 void mirrorModeChanged(); 0181 void moveMirrorVerticalCenter(); 0182 void moveMirrorHorizontalCenter(); 0183 0184 void sigGamutMaskChanged(KoGamutMaskSP mask); 0185 void sigGamutMaskUnset(); 0186 void sigGamutMaskPreviewUpdate(); 0187 void sigGamutMaskDeactivated(); 0188 0189 private: 0190 0191 KisViewManager * m_view {nullptr}; 0192 KoCanvasResourceProvider *m_resourceManager {nullptr}; 0193 bool m_fGChanged {true}; 0194 QList<QPointer<KisAbstractPerspectiveGrid> > m_perspectiveGrids; 0195 KisPresetShadowUpdater m_presetShadowUpdater; 0196 }; 0197 0198 #endif