File indexing completed on 2024-05-19 04:28:53

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     void setMirrorHorizontal(bool mirrorHorizontal);
0089     bool mirrorHorizontal() const;
0090 
0091     void setMirrorVertical(bool mirrorVertical);
0092     bool mirrorVertical() const;
0093 
0094     // options for horizontal and vertical mirror toolbar
0095     void setMirrorHorizontalLock(bool isLocked);
0096     bool mirrorHorizontalLock();
0097     void setMirrorVerticalLock(bool isLocked);
0098     bool mirrorVerticalLock();
0099 
0100     void setMirrorVerticalHideDecorations(bool hide);
0101     bool mirrorVerticalHideDecorations();
0102 
0103     void setMirrorHorizontalHideDecorations(bool hide);
0104     bool mirrorHorizontalHideDecorations();
0105 
0106     void mirrorVerticalMoveCanvasToCenter();
0107     void mirrorHorizontalMoveCanvasToCenter();
0108 
0109     void setOpacity(qreal opacity);
0110     qreal opacity() const;
0111 
0112     void setFlow(qreal opacity);
0113     qreal flow() const;
0114 
0115     void setSize(qreal size);
0116     qreal size() const;
0117 
0118     void setBrushRotation(qreal rotation);
0119     qreal brushRotation() const;
0120 
0121     void setPatternSize(qreal size);
0122     qreal patternSize() const;
0123 
0124     void setGlobalAlphaLock(bool lock);
0125     bool globalAlphaLock() const;
0126 
0127     void setDisablePressure(bool value);
0128     bool disablePressure() const;
0129 
0130     ///Notify that the workspace is saved and settings should be saved to it
0131     void notifySavingWorkspace(KisWorkspaceResourceSP workspace);
0132 
0133     ///Notify that the workspace is loaded and settings can be read
0134     void notifyLoadingWorkspace(KisWorkspaceResourceSP workspace);
0135 
0136 public Q_SLOTS:
0137 
0138     void slotSetFGColor(const KoColor& c);
0139     void slotSetBGColor(const KoColor& c);
0140     void slotPatternActivated(KoResourceSP pattern);
0141     void slotGradientActivated(KoResourceSP gradient);
0142     void slotNodeActivated(const KisNodeSP node);
0143     void slotPainting();
0144 
0145     void slotGamutMaskActivated(KoGamutMaskSP mask);
0146     void slotGamutMaskUnset();
0147     void slotGamutMaskPreviewUpdate();
0148     void slotGamutMaskDeactivate();
0149 
0150     /**
0151      * Set the image size in pixels. The resource provider will store
0152      * the image size in postscript points.
0153      */
0154     // FIXME: this slot doesn't catch the case when image resolution is changed
0155     void slotImageSizeChanged();
0156     void slotOnScreenResolutionChanged();
0157 
0158 private Q_SLOTS:
0159 
0160     void slotCanvasResourceChanged(int key, const QVariant & res);
0161 
0162 Q_SIGNALS:
0163 
0164     void sigPaintOpPresetChanged(const KisPaintOpPresetSP);
0165     void sigFGColorChanged(const KoColor &);
0166     void sigBGColorChanged(const KoColor &);
0167     void sigGradientChanged(KoAbstractGradientSP);
0168     void sigPatternChanged(KoPatternSP);
0169     void sigNodeChanged(const KisNodeSP);
0170     void sigDisplayProfileChanged(const KoColorProfile *);
0171     void sigFGColorUsed(const KoColor&);
0172     void sigOnScreenResolutionChanged(qreal scaleX, qreal scaleY);
0173     void sigEffectiveCompositeOpChanged();
0174     void sigOpacityChanged(qreal);
0175     void sigSavingWorkspace(KisWorkspaceResourceSP workspace);
0176     void sigLoadingWorkspace(KisWorkspaceResourceSP workspace);
0177 
0178     void mirrorModeChanged();
0179     void moveMirrorVerticalCenter();
0180     void moveMirrorHorizontalCenter();
0181 
0182     void sigGamutMaskChanged(KoGamutMaskSP mask);
0183     void sigGamutMaskUnset();
0184     void sigGamutMaskPreviewUpdate();
0185     void sigGamutMaskDeactivated();
0186 
0187 private:
0188 
0189     KisViewManager * m_view {nullptr};
0190     KoCanvasResourceProvider *m_resourceManager {nullptr};
0191     bool m_fGChanged {true};
0192     KisPresetShadowUpdater m_presetShadowUpdater;
0193 };
0194 
0195 #endif