File indexing completed on 2024-06-23 04:28:08
0001 /* 0002 * SPDX-FileCopyrightText: 2011 Lukáš Tvrdý <lukast.dev@gmail.com> 0003 * SPDX-FileCopyrightText: 2011 Dmitry Kazakov <dimula73@gmail.com> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #ifndef __KIS_TOOL_MULTIHAND_H 0009 #define __KIS_TOOL_MULTIHAND_H 0010 0011 #include "kis_tool_brush.h" 0012 #include <kis_icon.h> 0013 #include "kis_tool_multihand_config.h" 0014 0015 class QPushButton; 0016 class QCheckBox; 0017 class QComboBox; 0018 class QStackedWidget; 0019 class KisSliderSpinBox; 0020 class KisToolMultihandHelper; 0021 0022 class KisToolMultihand : public KisToolBrush 0023 { 0024 Q_OBJECT 0025 public: 0026 KisToolMultihand(KoCanvasBase *canvas); 0027 ~KisToolMultihand() override; 0028 void beginPrimaryAction(KoPointerEvent *event) override; 0029 void continuePrimaryAction(KoPointerEvent *event) override; 0030 void endPrimaryAction(KoPointerEvent *event) override; 0031 0032 void beginAlternateAction(KoPointerEvent *event, AlternateAction action) override; 0033 void continueAlternateAction(KoPointerEvent *event, AlternateAction action) override; 0034 void endAlternateAction(KoPointerEvent *event, AlternateAction action) override; 0035 0036 void mouseMoveEvent(KoPointerEvent* event) override; 0037 0038 0039 protected: 0040 void paint(QPainter& gc, const KoViewConverter &converter) override; 0041 0042 QWidget* createOptionWidget() override; 0043 0044 private: 0045 void initTransformations(); 0046 void finishAxesSetup(); 0047 void updateCanvas(); 0048 QVector<QPoint> intervalLocations(); 0049 0050 private Q_SLOTS: 0051 void activateAxesPointModeSetup(); 0052 void resetAxes(); 0053 void slotSetHandsCount(int count); 0054 void slotSetAxesAngle(qreal angle); 0055 void slotSetTransformMode(int qcomboboxIndex); 0056 void slotSetAxesVisible(bool vis); 0057 void slotSetMirrorVertically(bool mirror); 0058 void slotSetMirrorHorizontally(bool mirror); 0059 void slotSetTranslateRadius(int radius); 0060 void slotAddSubbrushesMode(bool checked); 0061 void slotRemoveAllSubbrushes(); 0062 void slotSetIntervals(); 0063 void slotSetKeepAspect(); 0064 0065 private: 0066 KisToolMultihandHelper *m_helper; 0067 0068 enum enumTransformModes:int { SYMMETRY=0, MIRROR, TRANSLATE, SNOWFLAKE, COPYTRANSLATE, COPYTRANSLATEINTERVALS }; 0069 enumTransformModes m_transformMode; 0070 QPointF m_axesPoint; 0071 qreal m_angle; 0072 int m_handsCount; 0073 bool m_mirrorVertically; 0074 bool m_mirrorHorizontally; 0075 bool m_showAxes; 0076 int m_translateRadius; 0077 0078 bool m_setupAxesFlag; 0079 bool m_addSubbrushesMode; 0080 QPointF m_lastToolPos; 0081 QVector<QPointF> m_subbrOriginalLocations; 0082 0083 int m_intervalX; 0084 int m_intervalY; 0085 0086 KisToolMultiHandConfigWidget* customUI; 0087 }; 0088 0089 0090 class KisToolMultiBrushFactory : public KisToolBrushFactory 0091 { 0092 0093 public: 0094 KisToolMultiBrushFactory() 0095 : KisToolBrushFactory("KritaShape/KisToolMultiBrush") { 0096 0097 setToolTip(i18n("Multibrush Tool")); 0098 0099 // Temporarily 0100 setSection(ToolBoxSection::Shape); 0101 setIconName(koIconNameCStr("krita_tool_multihand")); 0102 setShortcut(QKeySequence(Qt::Key_Q)); 0103 setPriority(11); 0104 setActivationShapeId(KRITA_TOOL_ACTIVATION_ID); 0105 } 0106 0107 ~KisToolMultiBrushFactory() override {} 0108 0109 KoToolBase * createTool(KoCanvasBase *canvas) override { 0110 return new KisToolMultihand(canvas); 0111 } 0112 0113 }; 0114 0115 #endif /* __KIS_TOOL_MULTIHAND_H */