File indexing completed on 2025-02-02 04:15:56

0001 /*
0002  *  SPDX-FileCopyrightText: 2008 Boudewijn Rempt <boud@valdyas.org>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef KIS_PAINTOP_CONFIG_WIDGET_H_
0008 #define KIS_PAINTOP_CONFIG_WIDGET_H_
0009 
0010 #include "kritaimage_export.h"
0011 
0012 #include "kis_config_widget.h"
0013 #include "kis_image.h"
0014 #include <kis_debug.h>
0015 #include <kis_properties_configuration.h>
0016 #include <lager/reader.hpp>
0017 
0018 class KisResourcesInterface;
0019 using KisResourcesInterfaceSP = QSharedPointer<KisResourcesInterface>;
0020 
0021 class KisPaintopLodLimitations;
0022 
0023 /**
0024  * Base class for widgets that are used to edit and display paintop settings.
0025  */
0026 class KRITAIMAGE_EXPORT KisPaintOpConfigWidget : public KisConfigWidget
0027 {
0028     Q_OBJECT
0029 
0030 public:
0031     KisPaintOpConfigWidget(QWidget * parent = 0, Qt::WindowFlags f = Qt::WindowFlags());
0032     ~KisPaintOpConfigWidget() override;
0033 
0034     void writeConfigurationSafe(KisPropertiesConfigurationSP config) const;
0035     void setConfigurationSafe(const KisPropertiesConfigurationSP config);
0036 
0037 protected:
0038 
0039     friend class CompositeOpModel;
0040 
0041     void setConfiguration(const KisPropertiesConfigurationSP  config) override = 0;
0042     virtual void writeConfiguration(KisPropertiesConfigurationSP config) const = 0;
0043 
0044 public:
0045 
0046 
0047     virtual KisPaintopLodLimitations lodLimitations() const = 0;
0048     virtual lager::reader<KisPaintopLodLimitations> lodLimitationsReader() const = 0;
0049     virtual lager::reader<qreal> effectiveBrushSize() const = 0;
0050 
0051     virtual void setImage(KisImageWSP image);
0052     virtual void setNode(KisNodeWSP node);
0053     virtual void setResourcesInterface(KisResourcesInterfaceSP resourcesInterface);
0054 
0055     KisResourcesInterfaceSP resourcesInterface() const;
0056 
0057     void setView(KisViewManager *view) override;
0058 
0059     /**
0060      * Some paintops are more complicated and require full canvas with layers, projections and KisImage etc.
0061      * Example is duplicate paintop. In this case simple canvas like scratchbox does not work.
0062      * Every paintop supports the scratchbox by default, override and return false if paintop does not.
0063      */
0064     virtual bool supportScratchBox();
0065 
0066 protected:
0067     KisImageWSP m_image;
0068     KisNodeWSP m_node;
0069 
0070     KisResourcesInterfaceSP m_resourcesInterface;
0071 
0072     mutable int m_isInsideUpdateCall;
0073 };
0074 
0075 #endif