diff options
author | Philipp Oeser <info@graphics-engineer.com> | 2021-10-19 17:24:23 +0300 |
---|---|---|
committer | Philipp Oeser <info@graphics-engineer.com> | 2021-10-20 12:36:33 +0300 |
commit | 25c173ffd12c0b46de4cc9919b8dbcc125f7e5ec (patch) | |
tree | 44694ba0e2b902a1b7401addefe2b390f0e64ba9 /source/blender/editors | |
parent | 2bcf93bbbeb9e32f680c37a1e0054ff16cb00ef0 (diff) |
Tracking: support editing all selected tracks
This patch adds a "selected_movieclip_tracks" context member and enables
editing properties of multiple selected tracks via the usual Alt-click
editing (as well as the "Copy To Selected" operator). Both use
UI_context_copy_to_selected_list() to gather a list of other selected
items [which are now taken via said new context member]. Strictly
speaking, this could be done without the context member as well [just
gathering other selected tracks in UI_context_copy_to_selected_list()
without relying on a context member], but this might come in handy in
other places (e.g. Addons).
note: some could be desired for markers (e.g. editing pattern/search
areas of all selected track markers, but since this is burried in a
uiTemplate, this is a bit more work for another patch).
Differential Revision: https://developer.blender.org/D12923
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/interface/interface_ops.c | 3 | ||||
-rw-r--r-- | source/blender/editors/screen/screen_context.c | 31 |
2 files changed, 34 insertions, 0 deletions
diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c index 423950d4dbd..69a3cc959c9 100644 --- a/source/blender/editors/interface/interface_ops.c +++ b/source/blender/editors/interface/interface_ops.c @@ -849,6 +849,9 @@ bool UI_context_copy_to_selected_list(bContext *C, else if (RNA_struct_is_a(ptr->type, &RNA_NlaStrip)) { *r_lb = CTX_data_collection_get(C, "selected_nla_strips"); } + else if (RNA_struct_is_a(ptr->type, &RNA_MovieTrackingTrack)) { + *r_lb = CTX_data_collection_get(C, "selected_movieclip_tracks"); + } else if (RNA_struct_is_a(ptr->type, &RNA_Constraint) && (path_from_bone = RNA_path_resolve_from_type_to_property(ptr, prop, &RNA_PoseBone)) != NULL) { diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c index 3d447d90626..a8c63027254 100644 --- a/source/blender/editors/screen/screen_context.c +++ b/source/blender/editors/screen/screen_context.c @@ -49,11 +49,13 @@ #include "BKE_gpencil.h" #include "BKE_layer.h" #include "BKE_object.h" +#include "BKE_tracking.h" #include "RNA_access.h" #include "ED_anim_api.h" #include "ED_armature.h" +#include "ED_clip.h" #include "ED_gpencil.h" #include "SEQ_select.h" @@ -99,6 +101,7 @@ const char *screen_context_dir[] = { "active_nla_track", "active_nla_strip", "selected_nla_strips", /* nla editor */ + "selected_movieclip_tracks", "gpencil_data", "gpencil_data_owner", /* grease pencil data */ "annotation_data", @@ -709,6 +712,33 @@ static eContextResult screen_ctx_selected_nla_strips(const bContext *C, bContext } return CTX_RESULT_NO_DATA; } +static eContextResult screen_ctx_selected_movieclip_tracks(const bContext *C, + bContextDataResult *result) +{ + SpaceClip *space_clip = CTX_wm_space_clip(C); + if (space_clip == NULL) { + return CTX_RESULT_NO_DATA; + } + MovieClip *clip = ED_space_clip_get_clip(space_clip); + if (clip == NULL) { + return CTX_RESULT_NO_DATA; + } + MovieTracking *tracking = &clip->tracking; + if (tracking == NULL) { + return CTX_RESULT_NO_DATA; + } + + ListBase *tracks_list = BKE_tracking_get_active_tracks(tracking); + LISTBASE_FOREACH (MovieTrackingTrack *, track, tracks_list) { + if (!TRACK_SELECTED(track)) { + continue; + } + CTX_data_list_add(result, &clip->id, &RNA_MovieTrackingTrack, track); + } + + CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION); + return CTX_RESULT_OK; +} static eContextResult screen_ctx_gpencil_data(const bContext *C, bContextDataResult *result) { wmWindow *win = CTX_wm_window(C); @@ -1143,6 +1173,7 @@ static void ensure_ed_screen_context_functions(void) register_context_function("active_nla_track", screen_ctx_active_nla_track); register_context_function("active_nla_strip", screen_ctx_active_nla_strip); register_context_function("selected_nla_strips", screen_ctx_selected_nla_strips); + register_context_function("selected_movieclip_tracks", screen_ctx_selected_movieclip_tracks); register_context_function("gpencil_data", screen_ctx_gpencil_data); register_context_function("gpencil_data_owner", screen_ctx_gpencil_data_owner); register_context_function("annotation_data", screen_ctx_annotation_data); |