File indexing completed on 2024-06-16 04:17:42
0001 /* 0002 * SPDX-FileCopyrightText: 1999 Matthias Elter <elter@kde.org> 0003 * SPDX-FileCopyrightText: 2002 Patrick Julien <freak@codepimps.org> 0004 * SPDX-FileCopyrightText: 2010 Lukáš Tvrdý <lukast.dev@gmail.com> 0005 * SPDX-FileCopyrightText: 2018 Emmet & Eoin O'Neill <emmetoneill.pdx@gmail.com> 0006 * 0007 * SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 0010 #ifndef KIS_TOOL_COLOR_SAMPLER_H_ 0011 #define KIS_TOOL_COLOR_SAMPLER_H_ 0012 0013 #include <QTimer> 0014 #include "KoToolFactoryBase.h" 0015 #include "ui_wdgcolorsampler.h" 0016 #include "kis_tool.h" 0017 #include <kis_icon.h> 0018 #include <KoColorSet.h> 0019 #include <QPainter> 0020 #include <KisAsyncColorSamplerHelper.h> 0021 0022 class KisTagFilterResourceProxyModel; 0023 0024 namespace KisToolUtils { 0025 struct ColorSamplerConfig; 0026 } 0027 0028 class ColorSamplerOptionsWidget : public QWidget, public Ui::ColorSamplerOptionsWidget 0029 { 0030 Q_OBJECT 0031 0032 public: 0033 ColorSamplerOptionsWidget(QWidget *parent) : QWidget(parent) { 0034 setupUi(this); 0035 } 0036 }; 0037 0038 class KisToolColorSampler : public KisTool 0039 { 0040 Q_OBJECT 0041 0042 public: 0043 KisToolColorSampler(KoCanvasBase *canvas); 0044 ~KisToolColorSampler() override; 0045 0046 public: 0047 struct Configuration { 0048 Configuration(); 0049 0050 bool toForegroundColor; 0051 bool updateColor; 0052 bool addPalette; 0053 bool normaliseValues; 0054 bool sampleMerged; 0055 int radius; 0056 int blend; 0057 0058 void save() const; 0059 void load(); 0060 }; 0061 0062 public: 0063 QWidget* createOptionWidget() override; 0064 0065 void beginPrimaryAction(KoPointerEvent *event) override; 0066 void continuePrimaryAction(KoPointerEvent *event) override; 0067 void mouseMoveEvent(KoPointerEvent *event) override; 0068 void endPrimaryAction(KoPointerEvent *event) override; 0069 void requestUpdateOutline(const QPointF &outlineDocPoint, const KoPointerEvent *event); 0070 0071 void activatePrimaryAction() override; 0072 void deactivatePrimaryAction() override; 0073 0074 void paint(QPainter &gc, const KoViewConverter &converter) override; 0075 0076 protected: 0077 void activate(const QSet<KoShape*> &) override; 0078 void deactivate() override; 0079 0080 public Q_SLOTS: 0081 void slotSetUpdateColor(bool); 0082 void slotSetNormaliseValues(bool); 0083 void slotSetAddPalette(bool); 0084 void slotChangeRadius(int); 0085 void slotChangeBlend(int); 0086 void slotSetColorSource(int value); 0087 0088 private Q_SLOTS: 0089 void slotChangePalette(int); 0090 0091 void slotColorPickerRequestedCursor(const QCursor &cursor); 0092 void slotColorPickerRequestedCursorReset(); 0093 void slotColorPickerRequestedOutlineUpdate(); 0094 void slotColorPickerSelectedColor(const KoColor &color); 0095 void slotColorPickerSelectionFinished(const KoColor &color); 0096 0097 private: 0098 void displaySampledColor(const KoColor &color); 0099 void updateOptionWidget(); 0100 0101 // Configuration 0102 QScopedPointer<KisToolUtils::ColorSamplerConfig> m_config; 0103 0104 bool m_isActivated {false}; 0105 QPointF m_outlineDocPoint; 0106 0107 QRectF m_oldColorPreviewUpdateRect; 0108 0109 KoColor m_sampledColor; 0110 0111 KisAsyncColorSamplerHelper m_helper; 0112 0113 ColorSamplerOptionsWidget *m_optionsWidget {0}; 0114 KisTagFilterResourceProxyModel *m_tagFilterProxyModel {0}; 0115 }; 0116 0117 class KisToolColorSamplerFactory : public KoToolFactoryBase 0118 { 0119 public: 0120 KisToolColorSamplerFactory() 0121 : KoToolFactoryBase("KritaSelected/KisToolColorSampler") { 0122 setToolTip(i18n("Color Sampler Tool")); 0123 setSection(ToolBoxSection::Fill); 0124 setPriority(2); 0125 setIconName(koIconNameCStr("krita_tool_color_sampler")); 0126 setShortcut(QKeySequence(Qt::Key_P)); 0127 setActivationShapeId(KRITA_TOOL_ACTIVATION_ID); 0128 } 0129 0130 ~KisToolColorSamplerFactory() override {} 0131 0132 KoToolBase *createTool(KoCanvasBase *canvas) override { 0133 return new KisToolColorSampler(canvas); 0134 } 0135 }; 0136 0137 #endif // KIS_TOOL_COLOR_SAMPLER_H_