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