Fix copy paste resets keyframe type (ca204a0a) · Commits · Multimedia / Kdenlive · GitLab
Admin message
Join us at
Akademy
to celebrate KDE's 30th anniversary!
Travel support requests
are open till May 31st.
Register now
Verified
Commit
ca204a0a
authored
Dec 11, 2025
by
Jean-Baptiste Mardelle
Browse files
parent
a4f5486a
Loading
Loading
Loading
Loading
Original line number
Diff line number
Diff line
@@ -529,7 +529,8 @@ bool KeyframeModel::updateKeyframe(GenTime pos, QVariant value)
return
res
KeyframeType
::
KeyframeEnum
convertFromMltType
mlt_keyframe_type
type
// static
KeyframeType
::
KeyframeEnum
KeyframeModel
::
convertFromMltType
mlt_keyframe_type
type
switch
type
case
mlt_keyframe_linear
Original line number
Diff line number
Diff line
@@ -50,6 +50,7 @@ public:
friend
class
KeyframeContainer
friend
class
KeyframeImport
friend
class
AssetMultiKeyframeCommand
static
KeyframeType
::
KeyframeEnum
convertFromMltType
mlt_keyframe_type
type
);
protected
/** @brief These methods should ONLY be called by keyframemodellist to ensure synchronisation
Original line number
Diff line number
Diff line
@@ -50,6 +50,62 @@
#include
#include
struct
mlt_keyframe_type
const
QChar
keyframe_type_map
[]
// Map keyframe type to any single character except numeric values.
mlt_keyframe_discrete
QChar
'|'
)},
mlt_keyframe_discrete
QChar
'!'
)},
mlt_keyframe_linear
QChar
()},
mlt_keyframe_smooth
QChar
'~'
)},
mlt_keyframe_smooth_loose
QChar
'~'
)},
mlt_keyframe_smooth_natural
QChar
'$'
)},
mlt_keyframe_smooth_tight
QChar
'-'
)},
mlt_keyframe_sinusoidal_in
QChar
'a'
)},
mlt_keyframe_sinusoidal_out
QChar
'b'
)},
mlt_keyframe_sinusoidal_in_out
QChar
'c'
)},
mlt_keyframe_quadratic_in
QChar
'd'
)},
mlt_keyframe_quadratic_out
QChar
'e'
)},
mlt_keyframe_quadratic_in_out
QChar
'f'
)},
mlt_keyframe_cubic_in
QChar
'g'
)},
mlt_keyframe_cubic_out
QChar
'h'
)},
mlt_keyframe_cubic_in_out
QChar
'i'
)},
mlt_keyframe_quartic_in
QChar
'j'
)},
mlt_keyframe_quartic_out
QChar
'k'
)},
mlt_keyframe_quartic_in_out
QChar
'l'
)},
mlt_keyframe_quintic_in
QChar
'm'
)},
mlt_keyframe_quintic_out
QChar
'n'
)},
mlt_keyframe_quintic_in_out
QChar
'o'
)},
mlt_keyframe_exponential_in
QChar
'p'
)},
mlt_keyframe_exponential_out
QChar
'q'
)},
mlt_keyframe_exponential_in_out
QChar
'r'
)},
mlt_keyframe_circular_in
QChar
's'
)},
mlt_keyframe_circular_out
QChar
't'
)},
mlt_keyframe_circular_in_out
QChar
'u'
)},
mlt_keyframe_back_in
QChar
'v'
)},
mlt_keyframe_back_out
QChar
'w'
)},
mlt_keyframe_back_in_out
QChar
'x'
)},
mlt_keyframe_elastic_in
QChar
'y'
)},
mlt_keyframe_elastic_out
QChar
'z'
)},
mlt_keyframe_elastic_in_out
QChar
'A'
)},
mlt_keyframe_bounce_in
QChar
'B'
)},
mlt_keyframe_bounce_out
QChar
'C'
)},
mlt_keyframe_bounce_in_out
QChar
'D'
)},
};
static
mlt_keyframe_type
str_to_keyframe_type
const
QChar
int
map_count
sizeof
keyframe_type_map
sizeof
keyframe_type_map
);
for
int
map_count
++
if
==
keyframe_type_map
].
return
keyframe_type_map
].
return
mlt_keyframe_linear
KeyframeContainer
::
KeyframeContainer
std
::
shared_ptr
AssetParameterModel
model
QModelIndex
index
QSize
frameSize
QWidget
parent
QFormLayout
layout
QObject
parent
m_model
model
@@ -938,7 +994,7 @@ void KeyframeContainer::slotPasteKeyframeFromClipBoard()
return
auto
list
json
array
();
QMap
QString
QMap
int
QVariant
>>
storedValues
QMap
QString
QMap
std
::
pair
int
QChar
QVariant
>>
storedValues
for
const
auto
entry
std
::
as_const
list
))
if
entry
isObject
())
qDebug
()
<<
"Warning : Skipping invalid marker data"
@@ -952,14 +1008,14 @@ void KeyframeContainer::slotPasteKeyframeFromClipBoard()
ParamType
kfrType
entryObj
QLatin1String
"type"
)].
toVariant
().
value
ParamType
();
if
m_model
->
isAnimated
kfrType
))
QMap
int
QVariant
values
QMap
std
::
pair
int
QChar
QVariant
values
if
kfrType
==
ParamType
::
Roto_spline
auto
value
entryObj
value
QLatin1String
"value"
));
if
value
isObject
())
QJsonObject
obj
value
toObject
();
QStringList
keys
obj
keys
();
for
auto
keys
values
insert
toInt
(),
obj
value
));
values
insert
toInt
(),
QChar
()},
obj
value
));
else
if
value
isArray
())
auto
list
value
toArray
();
@@ -971,7 +1027,7 @@ void KeyframeContainer::slotPasteKeyframeFromClipBoard()
QJsonObject
obj
entry
toObject
();
QStringList
keys
obj
keys
();
for
auto
keys
values
insert
toInt
(),
obj
value
));
values
insert
toInt
(),
QChar
()},
obj
value
));
else
@@ -988,15 +1044,21 @@ void KeyframeContainer::slotPasteKeyframeFromClipBoard()
const
QStringList
stringVals
value
split
QLatin1Char
';'
),
Qt
::
SkipEmptyParts
);
for
auto
val
stringVals
int
position
m_model
->
time_to_frames
val
section
QLatin1Char
'='
),
));
values
insert
position
val
section
QLatin1Char
'='
),
));
QChar
separator
QString
timeVal
val
section
QLatin1Char
'='
),
);
if
timeVal
isEmpty
()
&&
timeVal
back
().
isDigit
())
separator
timeVal
back
();
timeVal
chop
);
int
position
m_model
->
time_to_frames
timeVal
);
values
insert
({
position
separator
},
val
section
QLatin1Char
'='
),
));
storedValues
insert
entryObj
QLatin1String
"name"
)].
toString
(),
values
);
else
const
QString
value
entryObj
value
QLatin1String
"value"
)).
toString
();
QMap
int
QVariant
values
values
insert
value
);
QMap
std
::
pair
int
QChar
QVariant
values
values
insert
QChar
()}
value
);
storedValues
insert
entryObj
QLatin1String
"name"
)].
toString
(),
values
);
@@ -1007,12 +1069,14 @@ void KeyframeContainer::slotPasteKeyframeFromClipBoard()
auto
paramName
m_model
->
data
ix
AssetParameterModel
::
NameRole
).
toString
();
if
storedValues
contains
paramName
))
KeyframeModel
km
m_keyframes
->
getKeyModel
ix
);
const
QMap
int
QVariant
values
storedValues
value
paramName
);
int
offset
values
firstKey
();
QMapIterator
int
QVariant
values
);
const
QMap
std
::
pair
int
QChar
QVariant
values
storedValues
value
paramName
);
int
offset
values
firstKey
()
first
QMapIterator
std
::
pair
int
QChar
QVariant
values
);
while
hasNext
())
next
();
km
->
addKeyframe
GenTime
destPos
key
()
offset
pCore
->
getCurrentFps
()),
KeyframeType
::
Linear
value
(),
true
undo
redo
);
mlt_keyframe_type
type
str_to_keyframe_type
key
().
second
);
km
->
addKeyframe
GenTime
destPos
key
().
first
offset
pCore
->
getCurrentFps
()),
KeyframeModel
::
convertFromMltType
type
),
value
(),
true
undo
redo
);
else
qDebug
()
<<
"::: NOT FOUND PARAM: "
<<
paramName
<<
" in list: "
<<
storedValues
keys
();
Loading
US