forked from blender/blender
WIP: uv-simple-select #1
@ -41,10 +41,10 @@ struct PropertyRNA;
|
|||||||
*/
|
*/
|
||||||
void BKE_nlastrip_free(struct NlaStrip *strip, bool do_id_user);
|
void BKE_nlastrip_free(struct NlaStrip *strip, bool do_id_user);
|
||||||
/**
|
/**
|
||||||
* Remove the given NLA track from the set of NLA tracks, free the track's data,
|
* Remove & Frees all NLA strips from the given NLA track,
|
||||||
* and the track itself.
|
* then frees (doesn't remove) the track itself.
|
||||||
*/
|
*/
|
||||||
void BKE_nlatrack_free(ListBase *tracks, struct NlaTrack *nlt, bool do_id_user);
|
void BKE_nlatrack_free(struct NlaTrack *nlt, bool do_id_user);
|
||||||
/**
|
/**
|
||||||
* Free the elements of type NLA Tracks provided in the given list, but do not free
|
* Free the elements of type NLA Tracks provided in the given list, but do not free
|
||||||
* the list itself since that is not free-standing
|
* the list itself since that is not free-standing
|
||||||
@ -95,6 +95,17 @@ struct NlaTrack *BKE_nlatrack_add(struct AnimData *adt,
|
|||||||
struct NlaTrack *prev,
|
struct NlaTrack *prev,
|
||||||
bool is_liboverride);
|
bool is_liboverride);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the given NLA track from the list of tracks provided.
|
||||||
|
*/
|
||||||
|
void BKE_nlatrack_remove(ListBase *tracks, struct NlaTrack *nlt);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the given NLA track from the list of NLA tracks, free the track's data,
|
||||||
|
* and the track itself.
|
||||||
|
*/
|
||||||
|
void BKE_nlatrack_remove_and_free(ListBase *tracks, struct NlaTrack *nlt, bool do_id_user);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a NLA Strip referencing the given Action.
|
* Create a NLA Strip referencing the given Action.
|
||||||
*/
|
*/
|
||||||
|
@ -91,7 +91,7 @@ void BKE_nlastrip_free(NlaStrip *strip, const bool do_id_user)
|
|||||||
MEM_freeN(strip);
|
MEM_freeN(strip);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BKE_nlatrack_free(ListBase *tracks, NlaTrack *nlt, bool do_id_user)
|
void BKE_nlatrack_free(NlaTrack *nlt, const bool do_id_user)
|
||||||
{
|
{
|
||||||
NlaStrip *strip, *stripn;
|
NlaStrip *strip, *stripn;
|
||||||
|
|
||||||
@ -107,12 +107,7 @@ void BKE_nlatrack_free(ListBase *tracks, NlaTrack *nlt, bool do_id_user)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* free NLA track itself now */
|
/* free NLA track itself now */
|
||||||
if (tracks) {
|
|
||||||
BLI_freelinkN(tracks, nlt);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
MEM_freeN(nlt);
|
MEM_freeN(nlt);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BKE_nla_tracks_free(ListBase *tracks, bool do_id_user)
|
void BKE_nla_tracks_free(ListBase *tracks, bool do_id_user)
|
||||||
@ -127,7 +122,7 @@ void BKE_nla_tracks_free(ListBase *tracks, bool do_id_user)
|
|||||||
/* free tracks one by one */
|
/* free tracks one by one */
|
||||||
for (nlt = tracks->first; nlt; nlt = nltn) {
|
for (nlt = tracks->first; nlt; nlt = nltn) {
|
||||||
nltn = nlt->next;
|
nltn = nlt->next;
|
||||||
BKE_nlatrack_free(tracks, nlt, do_id_user);
|
BKE_nlatrack_remove_and_free(tracks, nlt, do_id_user);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* clear the list's pointers to be safe */
|
/* clear the list's pointers to be safe */
|
||||||
@ -514,6 +509,20 @@ void BKE_nla_strip_foreach_id(NlaStrip *strip, LibraryForeachIDData *data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Removing ------------------------------------------ */
|
||||||
|
|
||||||
|
void BKE_nlatrack_remove(ListBase *tracks, struct NlaTrack *nlt)
|
||||||
|
{
|
||||||
|
BLI_assert(tracks);
|
||||||
|
BLI_remlink(tracks, nlt);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BKE_nlatrack_remove_and_free(ListBase *tracks, struct NlaTrack *nlt, bool do_id_user)
|
||||||
|
{
|
||||||
|
BKE_nlatrack_remove(tracks, nlt);
|
||||||
|
BKE_nlatrack_free(nlt, do_id_user);
|
||||||
|
}
|
||||||
|
|
||||||
/* *************************************************** */
|
/* *************************************************** */
|
||||||
/* NLA Evaluation <-> Editing Stuff */
|
/* NLA Evaluation <-> Editing Stuff */
|
||||||
|
|
||||||
|
@ -91,4 +91,24 @@ TEST(nla_track, BKE_nlatrack_remove_strip)
|
|||||||
EXPECT_EQ(-1, BLI_findindex(&track.strips, &strip2));
|
EXPECT_EQ(-1, BLI_findindex(&track.strips, &strip2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(nla_track, BKE_nlatrack_remove_and_free)
|
||||||
|
{
|
||||||
|
AnimData adt{};
|
||||||
|
NlaTrack *track1;
|
||||||
|
NlaTrack *track2;
|
||||||
|
|
||||||
|
// Add NLA tracks to the Animation Data.
|
||||||
|
track1 = BKE_nlatrack_add(&adt, NULL, false);
|
||||||
|
track2 = BKE_nlatrack_add(&adt, track1, false);
|
||||||
|
|
||||||
|
// ensure we have 2 tracks in the track.
|
||||||
|
EXPECT_EQ(2, BLI_listbase_count(&adt.nla_tracks));
|
||||||
|
|
||||||
|
BKE_nlatrack_remove_and_free(&adt.nla_tracks, track2, false);
|
||||||
|
EXPECT_EQ(1, BLI_listbase_count(&adt.nla_tracks));
|
||||||
|
|
||||||
|
// ensure the correct track was removed.
|
||||||
|
EXPECT_EQ(-1, BLI_findindex(&adt.nla_tracks, track2));
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace blender::bke::tests
|
} // namespace blender::bke::tests
|
||||||
|
@ -590,7 +590,7 @@ void ED_animedit_unlink_action(
|
|||||||
|
|
||||||
if (nlt->strips.first == NULL) {
|
if (nlt->strips.first == NULL) {
|
||||||
BLI_assert(nstrip == NULL);
|
BLI_assert(nstrip == NULL);
|
||||||
BKE_nlatrack_free(&adt->nla_tracks, nlt, true);
|
BKE_nlatrack_remove_and_free(&adt->nla_tracks, nlt, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -736,7 +736,7 @@ static int nlaedit_delete_tracks_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* call delete on this track - deletes all strips too */
|
/* call delete on this track - deletes all strips too */
|
||||||
BKE_nlatrack_free(&adt->nla_tracks, nlt, true);
|
BKE_nlatrack_remove_and_free(&adt->nla_tracks, nlt, true);
|
||||||
ale->update = ANIM_UPDATE_DEPS;
|
ale->update = ANIM_UPDATE_DEPS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -593,7 +593,7 @@ static void rna_NlaTrack_remove(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BKE_nlatrack_free(&adt->nla_tracks, track, true);
|
BKE_nlatrack_remove_and_free(&adt->nla_tracks, track, true);
|
||||||
RNA_POINTER_INVALIDATE(track_ptr);
|
RNA_POINTER_INVALIDATE(track_ptr);
|
||||||
|
|
||||||
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_REMOVED, NULL);
|
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_REMOVED, NULL);
|
||||||
|
Loading…
Reference in New Issue
Block a user