File indexing completed on 2024-06-23 04:26:00

0001 /*
0002  * SPDX-FileCopyrightText: 2008 Cyrille Berger <cberger@cberger.net>
0003  * SPDX-FileCopyrightText: 2010 Geoffry Song <goffrie@gmail.com>
0004  * SPDX-FileCopyrightText: 2017 Scott Petrovic <scottpetrovic@gmail.com>
0005  *
0006  *  SPDX-License-Identifier: LGPL-2.0-or-later
0007  */
0008 
0009 #ifndef _SPLINE_ASSISTANT_H_
0010 #define _SPLINE_ASSISTANT_H_
0011 
0012 #include "kis_painting_assistant.h"
0013 #include <QObject>
0014 
0015 class SplineAssistant : public KisPaintingAssistant
0016 {
0017 public:
0018     SplineAssistant();
0019     KisPaintingAssistantSP clone(QMap<KisPaintingAssistantHandleSP, KisPaintingAssistantHandleSP> &handleMap) const override;
0020     QPointF adjustPosition(const QPointF& point, const QPointF& strokeBegin, const bool snapToAny, qreal moveThresholdPt) override;
0021     void adjustLine(QPointF &point, QPointF& strokeBegin) override;
0022     QPointF getDefaultEditorPosition() const override;
0023     int numHandles() const override { return 4; }
0024     bool isAssistantComplete() const override;
0025 
0026 protected:
0027     void drawAssistant(QPainter& gc, const QRectF& updateRect, const KisCoordinatesConverter* converter, bool cached, KisCanvas2* canvas, bool assistantVisible=true, bool previewVisible=true) override;
0028     void drawCache(QPainter& gc, const KisCoordinatesConverter *converter,  bool assistantVisible=true) override;
0029 private:
0030     QPointF project(const QPointF& pt, const QPointF& strokeBegin) const;
0031     explicit SplineAssistant(const SplineAssistant &rhs, QMap<KisPaintingAssistantHandleSP, KisPaintingAssistantHandleSP> &handleMap);
0032 
0033     /// used for getting the decoration so the bezier handles aren't drawn while editing
0034     KisCanvas2* m_canvas {nullptr};
0035 
0036 private:
0037     struct Private;
0038     const QScopedPointer<Private> m_d;
0039 };
0040 
0041 class SplineAssistantFactory : public KisPaintingAssistantFactory
0042 {
0043 public:
0044     SplineAssistantFactory();
0045     ~SplineAssistantFactory() override;
0046     QString id() const override;
0047     QString name() const override;
0048     KisPaintingAssistant* createPaintingAssistant() const override;
0049 };
0050 
0051 #endif