Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWayde Moss <wbmoss_dev@yahoo.com>2020-10-15 21:53:26 +0300
committerWayde Moss <wbmoss_dev@yahoo.com>2020-10-15 21:55:09 +0300
commit0a66436fe5f26f8d7b6fb49396f21313fded8654 (patch)
tree09f9fedc668bc575a0d28da362539b8de946dfac
parenta88076e948a93c087e1b20bb3d3c424db0f39fbe (diff)
Fix T76597: Support Keyframe: Copy To Selected
Reviewed By: Sybren, Luciano Muñoz Sessarego Differential Revision: https://developer.blender.org/D7783
-rw-r--r--source/blender/editors/interface/interface_ops.c3
-rw-r--r--source/blender/editors/screen/screen_context.c42
2 files changed, 45 insertions, 0 deletions
diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c
index 4cb8a47690e..2b91d1b273d 100644
--- a/source/blender/editors/interface/interface_ops.c
+++ b/source/blender/editors/interface/interface_ops.c
@@ -816,6 +816,9 @@ bool UI_context_copy_to_selected_list(bContext *C,
else if (RNA_struct_is_a(ptr->type, &RNA_FCurve)) {
*r_lb = CTX_data_collection_get(C, "selected_editable_fcurves");
}
+ else if (RNA_struct_is_a(ptr->type, &RNA_Keyframe)) {
+ *r_lb = CTX_data_collection_get(C, "selected_editable_keyframes");
+ }
else if (RNA_struct_is_a(ptr->type, &RNA_NlaStrip)) {
*r_lb = CTX_data_collection_get(C, "selected_nla_strips");
}
diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c
index 74621b917c6..0fa19f76fed 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -109,6 +109,7 @@ const char *screen_context_dir[] = {
"selected_visible_fcurves",
"selected_editable_fcurves",
"active_editable_fcurve",
+ "selected_editable_keyframes",
NULL,
};
@@ -984,6 +985,46 @@ static eContextResult screen_ctx_active_editable_fcurve(const bContext *C,
}
return CTX_RESULT_NO_DATA;
}
+static eContextResult screen_ctx_selected_editable_keyframes(const bContext *C,
+ bContextDataResult *result)
+{
+ bAnimContext ac;
+ if (ANIM_animdata_get_context(C, &ac) && ELEM(ac.spacetype, SPACE_ACTION, SPACE_GRAPH)) {
+ ListBase anim_data = {NULL, NULL};
+
+ /* Use keyframes from editable selected FCurves. */
+ int filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_NODUPLIS | ANIMFILTER_FOREDIT |
+ ANIMFILTER_SEL) |
+ (ac.spacetype == SPACE_GRAPH ? ANIMFILTER_CURVE_VISIBLE :
+ ANIMFILTER_LIST_VISIBLE);
+
+ ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
+
+ int i;
+ FCurve *fcurve;
+ BezTriple *bezt;
+ LISTBASE_FOREACH (bAnimListElem *, ale, &anim_data) {
+ if (!ELEM(ale->type, ANIMTYPE_FCURVE, ANIMTYPE_NLACURVE)) {
+ continue;
+ }
+
+ fcurve = (FCurve *)ale->data;
+ for (i = 0, bezt = fcurve->bezt; i < fcurve->totvert; i++, bezt++) {
+ if ((bezt->f2 & SELECT) == 0) {
+ continue;
+ }
+
+ CTX_data_list_add(result, ale->fcurve_owner_id, &RNA_Keyframe, bezt);
+ }
+ }
+
+ ANIM_animdata_freelist(&anim_data);
+
+ CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
+ return CTX_RESULT_OK;
+ }
+ return CTX_RESULT_NO_DATA;
+}
/* Registry of context callback functions. */
@@ -1058,6 +1099,7 @@ static void ensure_ed_screen_context_functions(void)
register_context_function("selected_editable_fcurves", screen_ctx_selected_editable_fcurves);
register_context_function("selected_visible_fcurves", screen_ctx_selected_visible_fcurves);
register_context_function("active_editable_fcurve", screen_ctx_active_editable_fcurve);
+ register_context_function("selected_editable_keyframes", screen_ctx_selected_editable_keyframes);
}
/* Entry point for the screen context. */