File indexing completed on 2024-05-26 04:34:31

0001 /*
0002  *  SPDX-FileCopyrightText: 2004 Boudewijn Rempt (boud@valdyas.org)
0003  *  SPDX-FileCopyrightText: 2015 Michael Abrahams <miabraha@gmail.com>
0004  *
0005  *  SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 #ifndef KIS_TOOL_SELECT_SIMILAR_H_
0008 #define KIS_TOOL_SELECT_SIMILAR_H_
0009 
0010 #include <KisSelectionToolFactoryBase.h>
0011 #include <kis_icon.h>
0012 #include <kconfig.h>
0013 #include "kis_tool_select_base.h"
0014 #include <kconfiggroup.h>
0015 #include <commands_new/KisMergeLabeledLayersCommand.h>
0016 
0017 /*
0018  * Tool to select colors by pointing at a color on the image.
0019  */
0020 class KisToolSelectSimilar: public KisToolSelect
0021 {
0022     Q_OBJECT
0023 
0024 public:
0025     KisToolSelectSimilar(KoCanvasBase * canvas);
0026     void beginPrimaryAction(KoPointerEvent *event) override;
0027     void endPrimaryAction(KoPointerEvent *event) override;
0028     void paint(QPainter&, const KoViewConverter &) override {}
0029     QWidget* createOptionWidget() override;
0030     void resetCursorStyle() override;
0031 
0032 public Q_SLOTS:
0033     void activate(const QSet<KoShape*> &shapes) override;
0034     void deactivate() override;
0035     void slotSetThreshold(int);
0036     void slotSetOpacitySpread(int);
0037 
0038 protected:
0039     using KisToolSelectBase::m_widgetHelper;
0040     bool isPixelOnly() const override { return true; }
0041     bool usesColorLabels() const override { return true; }
0042 
0043 private:
0044     int m_threshold;
0045     int m_opacitySpread;
0046     KConfigGroup m_configGroup;
0047     KisPaintDeviceSP m_referencePaintDevice;
0048     KisMergeLabeledLayersCommand::ReferenceNodeInfoListSP m_referenceNodeList;
0049     int m_previousTime;
0050 };
0051 
0052 
0053 class KisToolSelectSimilarFactory : public KisSelectionToolFactoryBase
0054 {
0055 public:
0056     KisToolSelectSimilarFactory()
0057         : KisSelectionToolFactoryBase("KisToolSelectSimilar")
0058     {
0059         setToolTip(i18n("Similar Color Selection Tool"));
0060         setSection(ToolBoxSection::Select);
0061         setActivationShapeId(KRITA_TOOL_ACTIVATION_ID);
0062         setIconName(koIconNameCStr("tool_similar_selection"));
0063         setPriority(5);
0064     }
0065     ~KisToolSelectSimilarFactory() override {}
0066     KoToolBase * createTool(KoCanvasBase *canvas) override {
0067         return  new KisToolSelectSimilar(canvas);
0068     }
0069 };
0070 
0071 
0072 #endif // KIS_TOOL_SELECT_SIMILAR_H_
0073