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