From a89e81052632d4d31e40128e61753e1f08e18374 Mon Sep 17 00:00:00 2001 From: Pablo Gil Date: Sat, 4 Oct 2025 16:05:54 +0200 Subject: [PATCH 1/2] merge circle "horizontal radius" and "vertical radius" into a single double "radius" with "x" and "y" values --- src/core/Boxes/circle.cpp | 59 +++++++++++++++++++-------------------- src/core/Boxes/circle.h | 3 +- 2 files changed, 29 insertions(+), 33 deletions(-) diff --git a/src/core/Boxes/circle.cpp b/src/core/Boxes/circle.cpp index 38626461c..845c7488c 100644 --- a/src/core/Boxes/circle.cpp +++ b/src/core/Boxes/circle.cpp @@ -45,38 +45,33 @@ Circle::Circle() : PathBox("Circle", eBoxType::circle) { ca_prependChild(mPathEffectsAnimators.data(), mCenterAnimator); - mHorizontalRadiusAnimator = - enve::make_shared("horizontal radius"); + mRadiusAnimator = enve::make_shared("radius"); + ca_prependChild(mPathEffectsAnimators.data(), mRadiusAnimator); mHorizontalRadiusPoint = enve::make_shared( - mHorizontalRadiusAnimator.get(), mTransformAnimator.get(), + mRadiusAnimator.get(), mTransformAnimator.get(), mCenterPoint.get(), TYPE_PATH_POINT, false); getPointsHandler()->appendPt(mHorizontalRadiusPoint); mHorizontalRadiusPoint->setRelativePos(QPointF(10, 0)); - const auto hXAnimator = mHorizontalRadiusAnimator->getXAnimator(); - ca_prependChild(mPathEffectsAnimators.data(), - hXAnimator->ref()); - hXAnimator->prp_setName("horizontal radius"); - mVerticalRadiusAnimator = - enve::make_shared("vertical radius"); mVerticalRadiusPoint = enve::make_shared( - mVerticalRadiusAnimator.get(), mTransformAnimator.get(), + mRadiusAnimator.get(), mTransformAnimator.get(), mCenterPoint.get(), TYPE_PATH_POINT, true); getPointsHandler()->appendPt(mVerticalRadiusPoint); mVerticalRadiusPoint->setRelativePos(QPointF(0, 10)); - const auto vYAnimator = mVerticalRadiusAnimator->getYAnimator(); - ca_prependChild(mPathEffectsAnimators.data(), - vYAnimator->ref()); - vYAnimator->prp_setName("vertical radius"); + + const auto rXAnimator = mRadiusAnimator->getXAnimator(); + const auto rYAnimator = mRadiusAnimator->getYAnimator(); + rXAnimator->prp_setName("x"); + rYAnimator->prp_setName("y"); const auto pathUpdater = [this](const UpdateReason reason) { setPathsOutdated(reason); }; connect(mCenterAnimator.get(), &Property::prp_currentFrameChanged, this, pathUpdater); - connect(vYAnimator, &Property::prp_currentFrameChanged, + connect(rYAnimator, &Property::prp_currentFrameChanged, this, pathUpdater); - connect(hXAnimator, &Property::prp_currentFrameChanged, + connect(rXAnimator, &Property::prp_currentFrameChanged, this, pathUpdater); } @@ -104,8 +99,8 @@ void Circle::setRadius(const qreal radius) { SkPath Circle::getRelativePath(const qreal relFrame) const { const QPointF center = mCenterAnimator->getEffectiveValue(); - const qreal xRad = mHorizontalRadiusAnimator->getEffectiveXValue(relFrame); - const qreal yRad = mVerticalRadiusAnimator->getEffectiveYValue(relFrame); + const qreal xRad = mRadiusAnimator->getEffectiveXValue(relFrame); + const qreal yRad = mRadiusAnimator->getEffectiveYValue(relFrame); SkPath path; const auto p0 = center + QPointF(0, -yRad); const auto p1 = center + QPointF(xRad, 0); @@ -131,11 +126,11 @@ SkPath Circle::getRelativePath(const qreal relFrame) const { } qreal Circle::getCurrentXRadius() { - return mHorizontalRadiusAnimator->getEffectiveXValue(); + return mRadiusAnimator->getEffectiveXValue(); } qreal Circle::getCurrentYRadius() { - return mVerticalRadiusAnimator->getEffectiveYValue(); + return mRadiusAnimator->getEffectiveYValue(); } QPointFAnimator *Circle::getCenterAnimator() @@ -145,25 +140,23 @@ QPointFAnimator *Circle::getCenterAnimator() QPointFAnimator *Circle::getHRadiusAnimator() { - return mHorizontalRadiusAnimator.get(); + return mRadiusAnimator.get(); } QPointFAnimator *Circle::getVRadiusAnimator() { - return mVerticalRadiusAnimator.get(); + return mRadiusAnimator.get(); } void Circle::getMotionBlurProperties(QList &list) const { PathBox::getMotionBlurProperties(list); - list.append(mHorizontalRadiusAnimator.get()); - list.append(mVerticalRadiusAnimator.get()); + list.append(mRadiusAnimator.get()); } bool Circle::differenceInEditPathBetweenFrames( const int frame1, const int frame2) const { if(mCenterAnimator->prp_differencesBetweenRelFrames(frame1, frame2)) return true; - if(mHorizontalRadiusAnimator->prp_differencesBetweenRelFrames(frame1, frame2)) return true; - return mVerticalRadiusAnimator->prp_differencesBetweenRelFrames(frame1, frame2); + return mRadiusAnimator->prp_differencesBetweenRelFrames(frame1, frame2); } void Circle::setCenter(const QPointF ¢er) { @@ -183,8 +176,8 @@ void Circle::saveSVG(SvgExporter& exp, const auto cX = mCenterAnimator->getXAnimator(); const auto cY = mCenterAnimator->getYAnimator(); - const auto rX = mHorizontalRadiusAnimator->getXAnimator(); - const auto rY = mVerticalRadiusAnimator->getYAnimator(); + const auto rX = mRadiusAnimator->getXAnimator(); + const auto rY = mRadiusAnimator->getYAnimator(); cX->saveQrealSVG(exp, ele, task->visRange(), "cx"); cY->saveQrealSVG(exp, ele, task->visRange(), "cy"); @@ -245,14 +238,18 @@ CircleRadiusPoint::CircleRadiusPoint(QPointFAnimator * const associatedAnimator, QPointF CircleRadiusPoint::getRelativePos() const { const QPointF centerPos = mCenterPoint->getRelativePos(); - return AnimatedPoint::getRelativePos() + centerPos; + const QPointF radius = AnimatedPoint::getRelativePos(); + return centerPos + QPointF(mXBlocked ? 0 : radius.x(), + mXBlocked ? radius.y() : 0); } void CircleRadiusPoint::setRelativePos(const QPointF &relPos) { const QPointF centerPos = mCenterPoint->getRelativePos(); + QPointF radius = AnimatedPoint::getRelativePos(); if(mXBlocked) { - setValue(QPointF(0, relPos.y() - centerPos.y())); + radius.setY(relPos.y() - centerPos.y()); } else { - setValue(QPointF(relPos.x() - centerPos.x(), 0)); + radius.setX(relPos.x() - centerPos.x()); } + setValue(radius); } diff --git a/src/core/Boxes/circle.h b/src/core/Boxes/circle.h index 793ce1199..24fe88a4a 100644 --- a/src/core/Boxes/circle.h +++ b/src/core/Boxes/circle.h @@ -79,8 +79,7 @@ class CORE_EXPORT Circle : public PathBox { stdsptr mVerticalRadiusPoint; qsptr mCenterAnimator; - qsptr mHorizontalRadiusAnimator; - qsptr mVerticalRadiusAnimator; + qsptr mRadiusAnimator; }; #endif // CIRCLE_H From b478bf0828a2541cdd6721a6ba701ef0b806b58a Mon Sep 17 00:00:00 2001 From: Pablo Gil Date: Sat, 4 Oct 2025 16:28:00 +0200 Subject: [PATCH 2/2] add new format version --- src/core/ReadWrite/evformat.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/ReadWrite/evformat.h b/src/core/ReadWrite/evformat.h index 5d45c54ff..2d5a6b090 100644 --- a/src/core/ReadWrite/evformat.h +++ b/src/core/ReadWrite/evformat.h @@ -46,6 +46,7 @@ namespace EvFormat { formatOptions2 = 31, subPathOffset = 32, avStretch = 33, + circleRadiusXY = 34, nextVersion };