From kde-commits Fri Dec 31 23:27:33 2010 From: Geoffry Song Date: Fri, 31 Dec 2010 23:27:33 +0000 To: kde-commits Subject: [Calligra] 2431bf7: add perspective value to KisPaintInformation Message-Id: <20101231232733.F3A83A6090 () git ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=129383809416689 commit 2431bf7e0a12c1958f1bb26ce657d6ff84b29661 branch master Author: Geoffry Song Date: Wed Dec 29 14:41:44 2010 -0500 add perspective value to KisPaintInformation diff --git a/krita/image/brushengine/kis_paint_information.cc b/krita/image/brushengine/kis_paint_information.cc index 7979679..44c7a96 100644 --- a/krita/image/brushengine/kis_paint_information.cc +++ b/krita/image/brushengine/kis_paint_information.cc @@ -30,6 +30,7 @@ struct KisPaintInformation::Private { qreal angle; qreal rotation; qreal tangentialPressure; + qreal perspective; int time; }; @@ -38,6 +39,7 @@ KisPaintInformation::KisPaintInformation(const QPointF & pos_, qreal pressure_, const KisVector2D& movement_, qreal rotation_, qreal tangentialPressure_, + qreal perspective_, int time) : d(new Private) { @@ -48,6 +50,7 @@ KisPaintInformation::KisPaintInformation(const QPointF & pos_, qreal pressure_, d->movement = movement_; d->rotation = rotation_; d->tangentialPressure = tangentialPressure_; + d->perspective = perspective_; d->angle = atan2(movement_.y(), movement_.x()); d->time = time; } @@ -78,6 +81,7 @@ void KisPaintInformation::toXML(QDomDocument&, QDomElement& e) const e.setAttribute("movementY", QString::number(movement().y(), 'g', 15)); e.setAttribute("rotation", QString::number(rotation(), 'g', 15)); e.setAttribute("tangentialPressure", QString::number(tangentialPressure(), 'g', 15)); + e.setAttribute("perspective", QString::number(perspective(), 'g', 15)); e.setAttribute("time", d->time); } @@ -88,6 +92,7 @@ KisPaintInformation KisPaintInformation::fromXML(const QDomElement& e) qreal pressure = qreal(e.attribute("pressure", "0.0").toDouble()); qreal rotation = qreal(e.attribute("rotation", "0.0").toDouble()); qreal tangentialPressure = qreal(e.attribute("tangentialPressure", "0.0").toDouble()); + qreal perspective = qreal(e.attribute("perspective", "0.0").toDouble()); qreal xTilt = qreal(e.attribute("xTilt", "0.0").toDouble()); qreal yTilt = qreal(e.attribute("yTilt", "0.0").toDouble()); qreal movementX = qreal(e.attribute("movementX", "0.0").toDouble()); @@ -95,7 +100,7 @@ KisPaintInformation KisPaintInformation::fromXML(const QDomElement& e) int time = e.attribute("time", "0").toInt(); return KisPaintInformation(QPointF(pointX, pointY), pressure, xTilt, yTilt, KisVector2D(movementX, movementY), - rotation, tangentialPressure, time); + rotation, tangentialPressure, perspective, time); } const QPointF& KisPaintInformation::pos() const @@ -148,6 +153,11 @@ qreal KisPaintInformation::tangentialPressure() const return d->tangentialPressure; } +qreal KisPaintInformation::perspective() const +{ + return d->perspective; +} + int KisPaintInformation::currentTime() const { return d->time; @@ -165,6 +175,7 @@ QDebug operator<<(QDebug dbg, const KisPaintInformation &info) dbg.nospace() << ", Movement: " << toQPointF(info.movement()); dbg.nospace() << ", Rotation: " << info.rotation(); dbg.nospace() << ", Tangential Pressure: " << info.tangentialPressure(); + dbg.nospace() << ", Perspective: " << info.perspective(); dbg.nospace() << ", Angle: " << info.angle(); dbg.nospace() << ", Time: " << info.currentTime(); #endif @@ -178,6 +189,7 @@ KisPaintInformation KisPaintInformation::mix(const QPointF& p, qreal t, const Ki qreal yTilt = (1 - t) * pi1.yTilt() + t * pi2.yTilt(); qreal rotation = (1 - t) * pi1.rotation() + t * pi2.rotation(); qreal tangentialPressure = (1 - t) * pi1.tangentialPressure() + t * pi2.tangentialPressure(); + qreal perspective = (1 - t) * pi1.perspective() + t * pi2.perspective(); int time = (1 - t) * pi1.currentTime() + t * pi2.currentTime(); - return KisPaintInformation(p, pressure, xTilt, yTilt, movement, rotation, tangentialPressure, time); + return KisPaintInformation(p, pressure, xTilt, yTilt, movement, rotation, tangentialPressure, perspective, time); } diff --git a/krita/image/brushengine/kis_paint_information.h b/krita/image/brushengine/kis_paint_information.h index 4453529..78c64b4 100644 --- a/krita/image/brushengine/kis_paint_information.h +++ b/krita/image/brushengine/kis_paint_information.h @@ -50,6 +50,7 @@ class QDomElement; * @param movement: current position minus the last position of the call to paintAt * @param rotation * @param tangentialPressure + * @param perspective **/ class KRITAIMAGE_EXPORT KisPaintInformation { @@ -67,6 +68,7 @@ public: const KisVector2D& movement = nullKisVector2D(), qreal rotation = 0.0, qreal tangentialPressure = 0.0, + qreal perspective = 1.0, int time = 0); KisPaintInformation(const KisPaintInformation& rhs); @@ -102,6 +104,9 @@ public: /// tangential pressure (i.e., rate for an airbrush device) qreal tangentialPressure() const; + + /// reciprocal of distance on the perspective grid + qreal perspective() const; /// Number of ms since the beginning of the stroke int currentTime() const; diff --git a/krita/plugins/paintops/libpaintop/tests/kis_sensors_test.cpp b/krita/plugins/paintops/libpaintop/tests/kis_sensors_test.cpp index 5937b36..13ffeed 100644 --- a/krita/plugins/paintops/libpaintop/tests/kis_sensors_test.cpp +++ b/krita/plugins/paintops/libpaintop/tests/kis_sensors_test.cpp @@ -23,14 +23,14 @@ KisSensorsTest::KisSensorsTest() { - paintInformations.append(KisPaintInformation(QPointF(0,0), 0, 0, 0, KisVector2D(0,1), 0.0, 0.0 )); - paintInformations.append(KisPaintInformation(QPointF(0,1), 0, 0, 0, KisVector2D(1,1), 0.0, 0.0 )); - paintInformations.append(KisPaintInformation(QPointF(1,2), 0, 0, 0, KisVector2D(1,0), 0.0, 0.0 )); - paintInformations.append(KisPaintInformation(QPointF(2,2), 0, 0, 0, KisVector2D(1,-1), 0.0, 0.0 )); - paintInformations.append(KisPaintInformation(QPointF(3,1), 0, 0, 0, KisVector2D(0,-1), 0.0, 0.0 )); - paintInformations.append(KisPaintInformation(QPointF(3,0), 0, 0, 0, KisVector2D(-1,-1), 0.0, 0.0 )); - paintInformations.append(KisPaintInformation(QPointF(2,-1), 0, 0, 0, KisVector2D(-1,0), 0.0, 0.0 )); - paintInformations.append(KisPaintInformation(QPointF(1,-1), 0, 0, 0, KisVector2D(-1,1), 0.0, 0.0 )); + paintInformations.append(KisPaintInformation(QPointF(0,0), 0, 0, 0, KisVector2D(0,1), 0.0, 0.0, 1.0 )); + paintInformations.append(KisPaintInformation(QPointF(0,1), 0, 0, 0, KisVector2D(1,1), 0.0, 0.0, 1.0 )); + paintInformations.append(KisPaintInformation(QPointF(1,2), 0, 0, 0, KisVector2D(1,0), 0.0, 0.0, 1.0 )); + paintInformations.append(KisPaintInformation(QPointF(2,2), 0, 0, 0, KisVector2D(1,-1), 0.0, 0.0, 1.0 )); + paintInformations.append(KisPaintInformation(QPointF(3,1), 0, 0, 0, KisVector2D(0,-1), 0.0, 0.0, 1.0 )); + paintInformations.append(KisPaintInformation(QPointF(3,0), 0, 0, 0, KisVector2D(-1,-1), 0.0, 0.0, 1.0 )); + paintInformations.append(KisPaintInformation(QPointF(2,-1), 0, 0, 0, KisVector2D(-1,0), 0.0, 0.0, 1.0 )); + paintInformations.append(KisPaintInformation(QPointF(1,-1), 0, 0, 0, KisVector2D(-1,1), 0.0, 0.0, 1.0 )); } void KisSensorsTest::testDrawingAngle() diff --git a/krita/ui/tool/kis_tool_freehand.cc b/krita/ui/tool/kis_tool_freehand.cc index bb50e6d..702c6dc 100644 --- a/krita/ui/tool/kis_tool_freehand.cc +++ b/krita/ui/tool/kis_tool_freehand.cc @@ -144,7 +144,7 @@ void KisToolFreehand::mousePressEvent(KoPointerEvent *e) bool ignoreEvent = currentPaintOpPreset()->settings()->mousePressEvent(KisPaintInformation(convertToPixelCoord(e->point), pressureToCurve(e->pressure()), e->xTilt(), e->yTilt(), KisVector2D::Zero(), - e->rotation(), e->tangentialPressure(), m_strokeTimeMeasure.elapsed()),e->modifiers()); + e->rotation(), e->tangentialPressure(), 1.0, m_strokeTimeMeasure.elapsed()),e->modifiers()); if (!ignoreEvent){ e->accept(); return; @@ -168,7 +168,7 @@ void KisToolFreehand::mousePressEvent(KoPointerEvent *e) m_previousPaintInformation = KisPaintInformation(convertToPixelCoord(adjustPosition(e->point, e->point)), pressureToCurve(e->pressure()), e->xTilt(), e->yTilt(), KisVector2D::Zero(), - e->rotation(), e->tangentialPressure(), m_strokeTimeMeasure.elapsed()); + e->rotation(), e->tangentialPressure(), 1.0, m_strokeTimeMeasure.elapsed()); m_strokeBegin = e->point; e->accept(); @@ -218,7 +218,7 @@ void KisToolFreehand::mouseMoveEvent(KoPointerEvent *e) KisPaintInformation info = KisPaintInformation(pos, pressureToCurve(e->pressure()), e->xTilt(), e->yTilt(), toKisVector2D(dragVec), - e->rotation(), e->tangentialPressure(), + e->rotation(), e->tangentialPressure(), 1.0, m_strokeTimeMeasure.elapsed()); if (m_smooth) {