File indexing completed on 2024-06-23 04:26:00
0001 /* 0002 * SPDX-FileCopyrightText: 2022 Srirupa Datta <srirupa.sps@gmail.com> 0003 */ 0004 0005 #ifndef _PERSPECTIVE_ELLIPSE_ASSISTANT_H_ 0006 #define _PERSPECTIVE_ELLIPSE_ASSISTANT_H_ 0007 0008 #include "kis_abstract_perspective_grid.h" 0009 #include "kis_painting_assistant.h" 0010 #include "Ellipse.h" 0011 #include <QObject> 0012 0013 class PerspectiveEllipseAssistant : public KisAbstractPerspectiveGrid, public KisPaintingAssistant 0014 { 0015 Q_OBJECT 0016 public: 0017 PerspectiveEllipseAssistant(QObject * parent = 0); 0018 ~PerspectiveEllipseAssistant(); 0019 0020 0021 KisPaintingAssistantSP clone(QMap<KisPaintingAssistantHandleSP, KisPaintingAssistantHandleSP> &handleMap) const override; 0022 QPointF adjustPosition(const QPointF& point, const QPointF& strokeBegin, const bool snapToAny, qreal moveThresholdPt) override; 0023 void adjustLine(QPointF &point, QPointF& strokeBegin) override; 0024 0025 QPointF getDefaultEditorPosition() const override; 0026 int numHandles() const override { return 4; } 0027 bool isAssistantComplete() const override; 0028 0029 // implements KisAbstractPerspectiveGrid 0030 bool contains(const QPointF& point) const override; 0031 qreal distance(const QPointF& point) const override; 0032 bool isActive() const override; 0033 0034 protected: 0035 QRect boundingRect() const override; 0036 void drawAssistant(QPainter& gc, const QRectF& updateRect, const KisCoordinatesConverter* converter, bool cached, KisCanvas2* canvas, bool assistantVisible=true, bool previewVisible=true) override; 0037 void drawCache(QPainter& gc, const KisCoordinatesConverter *converter, bool assistantVisible=true) override; 0038 private: 0039 QPointF project(const QPointF& pt, const QPointF& strokeBegin); 0040 0041 // finds the transform from perspective coordinates (a unit square) to the document 0042 bool getTransform(QPolygonF& polyOut, QTransform& transformOut); 0043 0044 0045 bool isEllipseValid(); 0046 void updateCache(); 0047 0048 0049 0050 explicit PerspectiveEllipseAssistant(const PerspectiveEllipseAssistant &rhs, QMap<KisPaintingAssistantHandleSP, KisPaintingAssistantHandleSP> &handleMap); 0051 0052 0053 class Private; 0054 QScopedPointer<Private> d; 0055 0056 }; 0057 0058 class PerspectiveEllipseAssistantFactory : public KisPaintingAssistantFactory 0059 { 0060 public: 0061 PerspectiveEllipseAssistantFactory(); 0062 ~PerspectiveEllipseAssistantFactory() override; 0063 QString id() const override; 0064 QString name() const override; 0065 KisPaintingAssistant* createPaintingAssistant() const override; 0066 }; 0067 0068 #endif