71 QTransform t = m.TS * m.SC * m.S * m.projectedP;
89 const QPointF expectedCurveOffset =
104 : m_d(new
Private(defaultBounds))
119 return !
m_d->transformChannels.isEmpty();
126 if (
m_d->transformChannels.isEmpty())
return args;
127 if (
m_d->defaultBounds->currentLevelOfDetail() > 0)
return args;
147 if (posXChannel || posYChannel) {
148 qreal xPosition = posXChannel ? posXChannel->
currentValue() : args->transformedCenter().x();
149 qreal yPosition = posYChannel ? posYChannel->
currentValue() : args->transformedCenter().y();
151 args->setTransformedCenter(QPointF(xPosition, yPosition));
161 if (scaleXChannel || scaleYChannel) {
162 qreal xScale = scaleXChannel ? scaleXChannel->
currentValue() : args->scaleX();
163 qreal yScale = scaleYChannel ? scaleYChannel->
currentValue() : args->scaleY();
165 args->setScaleX(xScale);
166 args->setScaleY(yScale);
176 if (shearXChannel || shearYChannel) {
177 qreal xShear = shearXChannel ? shearXChannel->
currentValue() : args->shearX();
178 qreal yShear = shearYChannel ? shearYChannel->
currentValue() : args->shearY();
180 args->setShearX(xShear);
181 args->setShearY(yShear);
192 if (rotationXChannel || rotationYChannel || rotationZChannel) {
197 args->setAX(xRotation);
198 args->setAY(yRotation);
199 args->setAZ(zRotation);
203 args->setTransformedCenter(centerOffsetCurvesToArgs(*args));
214 channel->setDefaultBounds(
bounds);
220 return m_d->defaultBounds;
250 return m_d->transformChannels.value(
id,
nullptr).data();
258 return args->transformedCenter().x();
260 return args->transformedCenter().y();
262 return args->scaleX();
264 return args->scaleY();
266 return args->shearX();
268 return args->shearY();
282 m_d->baseArgs.syncLodCache();
302 makeChangeValueCommand<&Private::isHidden>(
m_d.data(), adapter->
isHidden(), parentCommand);
303 makeChangeValueCommand<&Private::isInitialized>(
m_d.data(), adapter->
isInitialized(), parentCommand);
312 struct ChangeParamsCommand :
KisChangeValueCommand<&Private::baseArgs, KisLodCapableTransformArgs::LodState>
314 ChangeParamsCommand(
Private *base,
323 const QPointF layerCenterOffset = args.
originalCenter() -
m_d->baseArgs->originalCenter();
325 new ChangeParamsCommand(
m_d.data(), std::make_pair(
m_d->defaultBounds->currentLevelOfDetail(), args), parentCommand);
327 if (
m_d->transformChannels.isEmpty())
return;
328 if (
m_d->defaultBounds->currentLevelOfDetail() > 0)
return;
331 if (!layerCenterOffset.isNull()) {
337 auto translateChannel = [
this] (
const KoID &channelId, qreal offset,
KUndo2Command *parentCommand)
345 keyframe->setValue(keyframe->value() + offset, parentCommand);
353 const int currentTime =
m_d->defaultBounds->currentTime();
362 keyframe->setValue(
value, parentCommand);
366 const QPointF curvesCenterOffset = centerOffsetArgsToCurves(args);
float value(const T *src, size_t ch)
KisKeyframeChannel stores and manages KisKeyframes. Maps units of time to virtual keyframe values....
QSet< int > allKeyframeTimes() const
Get a set of all integer times that map to a keyframe.
static const KoID RotationY
KisKeyframeSP keyframeAt(int time) const
Get a keyframe at specified time. Used primarily when the value of a given keyframe is needed.
static const KoID RotationZ
static KoID channelIdToKoId(const QString &id)
static const KoID RotationX
static const KoID PositionX
int keyframeCount() const
static const KoID PositionY
std::pair< int, ToolTransformArgs > LodState
The KisScalarKeyframeChannel is a concrete KisKeyframeChannel subclass that stores and manages KisSca...
void setDefaultInterpolationMode(KisScalarKeyframe::InterpolationMode mode)
void setDefaultValue(qreal value)
The KisScalarKeyframe class is a concrete subclass of KisKeyframe that wraps a scalar value and inter...
#define KIS_SAFE_ASSERT_RECOVER(cond)
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
T kisRadiansToDegrees(T radians)
T kisDegreesToRadians(T degrees)
QSharedPointer< T > toQShared(T *ptr)
ToolTransformArgs syncLodNValue< ToolTransformArgs >(const ToolTransformArgs &value, int lod)