11#include <klocalizedstring.h>
14#include <QPainterPath>
15#include <QLinearGradient>
35 , m_ellipse(rhs.m_ellipse)
36 , m_extraEllipse(rhs.m_extraEllipse)
48 qreal Ratio = QLineF(center, strokeBegin).length() /QLineF(center, initial).length();
51 QLineF extrapolate0 = QLineF(center, *
handles()[0]);
52 extrapolate0.setLength(extrapolate0.length()*Ratio);
53 QLineF extrapolate1 = QLineF(center, *
handles()[1]);
54 extrapolate1.setLength(extrapolate1.length()*Ratio);
66 return project(pt, strokeBegin);
71 point =
project(point, strokeBegin);
87 QPointF initial =
m_ellipse.
project(initialTransform.inverted().map(mousePos));
89 qreal Ratio = QLineF(center, initialTransform.inverted().map(mousePos)).length() /QLineF(center, initial).length();
93 gc.setTransform(initialTransform);
110 if (assistantVisible ==
false ||
handles().size() < 2) {
118 gc.setTransform(initialTransform);
129 gc.setTransform(initialTransform);
168 QTransform newTransform;
172 const QPointF
p1 = newTransform.map(QPointF(newAxes.x(), 0));
173 const QPointF
p2 = newTransform.map(QPointF(-newAxes.x(), 0));
174 const QPointF
p3 = newTransform.map(QPointF(0, newAxes.y()));
193 return "concentric ellipse";
198 return i18n(
"Concentric Ellipse");
~ConcentricEllipseAssistantFactory() override
ConcentricEllipseAssistantFactory()
QString id() const override
KisPaintingAssistant * createPaintingAssistant() const override
QString name() const override
QRect boundingRect() const override
KisPaintingAssistantSP clone(QMap< KisPaintingAssistantHandleSP, KisPaintingAssistantHandleSP > &handleMap) const override
ConcentricEllipseAssistant()
QPointF getDefaultEditorPosition() const override
void adjustLine(QPointF &point, QPointF &strokeBegin) override
void drawCache(QPainter &gc, const KisCoordinatesConverter *converter, bool assistantVisible=true) override
performance layer where the graphics can be drawn from a cache instead of generated every render upda...
QPointF adjustPosition(const QPointF &point, const QPointF &strokeBegin, const bool snapToAny, qreal moveThresholdPt) override
void transform(const QTransform &transform) override
void drawAssistant(QPainter &gc, const QRectF &updateRect, const KisCoordinatesConverter *converter, bool cached, KisCanvas2 *canvas, bool assistantVisible=true, bool previewVisible=true) override
QPointF project(const QPointF &pt, const QPointF &strokeBegin) const
bool isAssistantComplete() const override
const QTransform & getInverse() const
bool set(const QPointF &m1, const QPointF &m2, const QPointF &p)
QRectF boundingRect() const
QPointF project(const QPointF &) const
QTransform documentToWidgetTransform() const
virtual QRect boundingRect() const
QPointF effectiveBrushPosition(const KisCoordinatesConverter *converter, KisCanvas2 *canvas) const
Query the effective brush position to be used for preview lines. This is intended to be used for pain...
bool isSnappingActive() const
void drawPath(QPainter &painter, const QPainterPath &path, bool drawActive=true)
void drawPreview(QPainter &painter, const QPainterPath &path)
virtual void drawAssistant(QPainter &gc, const QRectF &updateRect, const KisCoordinatesConverter *converter, bool cached, KisCanvas2 *canvas=0, bool assistantVisible=true, bool previewVisible=true)
const QList< KisPaintingAssistantHandleSP > & handles() const
QSharedPointer< KisPaintingAssistant > KisPaintingAssistantSP
std::pair< QPointF, QTransform > transformEllipse(const QPointF &axes, const QTransform &fullLocalToGlobal)
static double extrapolate2(struct osn_context *ctx, int xsb, int ysb, double dx, double dy)