File indexing completed on 2025-02-02 04:22:31
0001 /* 0002 * 0003 * SPDX-FileCopyrightText: 2007 Sven Langkamp <sven.langkamp@gmail.com> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #ifndef KIS_TOOL_MEASURE_H_ 0009 #define KIS_TOOL_MEASURE_H_ 0010 0011 #include <QLabel> 0012 0013 #include <KoUnit.h> 0014 0015 #include "kis_tool.h" 0016 #include "kis_global.h" 0017 #include "kis_types.h" 0018 #include "KoToolFactoryBase.h" 0019 #include "flake/kis_node_shape.h" 0020 #include <kis_icon.h> 0021 0022 #include <QVector2D> 0023 0024 class QPointF; 0025 class QWidget; 0026 class QVector2D; 0027 0028 class KoCanvasBase; 0029 0030 0031 class KisToolMeasureOptionsWidget : public QWidget 0032 { 0033 Q_OBJECT 0034 0035 public: 0036 KisToolMeasureOptionsWidget(QWidget* parent, KisImageWSP image); 0037 0038 public Q_SLOTS: 0039 void slotSetDistance(double distance); 0040 void slotSetAngle(double angle); 0041 void slotUnitChanged(int index); 0042 void slotResolutionChanged(double xRes, double yRes); 0043 0044 private: 0045 void updateDistance(); 0046 0047 QLabel* m_angleLabel {nullptr}; 0048 double m_distance {0.0}; 0049 public: 0050 QLabel* m_distanceLabel {nullptr}; 0051 double m_resolution; 0052 KoUnit m_unit; 0053 }; 0054 0055 class KisToolMeasure : public KisTool 0056 { 0057 0058 Q_OBJECT 0059 0060 public: 0061 KisToolMeasure(KoCanvasBase * canvas); 0062 ~KisToolMeasure() override; 0063 0064 void beginPrimaryAction(KoPointerEvent *event) override; 0065 void continuePrimaryAction(KoPointerEvent *event) override; 0066 void endPrimaryAction(KoPointerEvent *event) override; 0067 void showDistanceAngleOnCanvas(); 0068 0069 QPointF lockedAngle(QPointF pos); 0070 0071 void paint(QPainter& gc, const KoViewConverter &converter) override; 0072 0073 QWidget * createOptionWidget() override; 0074 0075 Q_SIGNALS: 0076 void sigDistanceChanged(double distance); 0077 void sigAngleChanged(double angle); 0078 0079 private: 0080 QRectF boundingRect(); 0081 double angle(); 0082 double distance(); 0083 0084 private: 0085 KisToolMeasureOptionsWidget *m_optionsWidget {nullptr}; 0086 0087 QPointF m_startPos {QPointF(0, 0)}; 0088 QPointF m_endPos {QPointF(0, 0)}; 0089 QVector2D m_baseLineVec {QPointF(1, 0)}; 0090 bool m_chooseBaseLineVec {false}; 0091 }; 0092 0093 0094 class KisToolMeasureFactory : public KoToolFactoryBase 0095 { 0096 0097 public: 0098 0099 KisToolMeasureFactory() 0100 : KoToolFactoryBase("KritaShape/KisToolMeasure") { 0101 setSection(ToolBoxSection::View); 0102 setToolTip(i18n("Measure Tool")); 0103 setIconName(koIconNameCStr("krita_tool_measure")); 0104 setPriority(1); 0105 setActivationShapeId(KRITA_TOOL_ACTIVATION_ID); 0106 } 0107 0108 ~KisToolMeasureFactory() override {} 0109 0110 KoToolBase * createTool(KoCanvasBase *canvas) override { 0111 return new KisToolMeasure(canvas); 0112 } 0113 0114 }; 0115 0116 0117 0118 0119 #endif //KIS_TOOL_MEASURE_H_