78 if (sact ==
nullptr) {
107 if (
ELEM(
nullptr, markers, act)) {
112 for (marker =
static_cast<TimeMarker *
>(markers->
first); marker; marker = markern) {
113 markern = marker->
next;
137 ot->name =
"Make Markers Local";
138 ot->idname =
"ACTION_OT_markers_make_local";
139 ot->description =
"Move selected scene markers to the active Action as local 'pose' markers";
158 ListBase anim_data = {
nullptr,
nullptr};
171 *
max = -999999999.0f;
174 if (anim_data.
first) {
183 const float framenum =
float(gpf->framenum);
194 const float framenum =
float(masklay_shape->frame);
204 for (
const auto [key, frame] : layer.
frames().
items()) {
205 if (onlySel && !frame.is_selected()) {
270 if (ac.
scene ==
nullptr) {
297 ot->name =
"Set Preview Range to Selected";
298 ot->idname =
"ACTION_OT_previewrange_set";
299 ot->description =
"Set Preview Range based on extents of selected Keyframes";
324 ListBase anim_data = {
nullptr,
nullptr};
339 ale = ale->
next, ymax -= channel_step)
385 if (only_sel && (found ==
false)) {
405 if (only_sel ==
false) {
418 float ymid = (ymax - ymin) / 2.0f + ymin;
454 ot->name =
"Frame All";
455 ot->idname =
"ACTION_OT_view_all";
456 ot->description =
"Reset viewable area to show full keyframe range";
469 ot->name =
"Frame Selected";
470 ot->idname =
"ACTION_OT_view_selected";
471 ot->description =
"Reset viewable area to show selected keyframes range";
498 ot->name =
"Go to Current Frame";
499 ot->idname =
"ACTION_OT_view_frame";
500 ot->description =
"Move the view to the current frame";
520 ListBase anim_data = {
nullptr,
nullptr};
550 paste_context.
flip = flip;
556 ListBase anim_data = {
nullptr,
nullptr};
575 ListBase anim_data = {
nullptr,
nullptr};
635 if (!kf_ok && !gpf_ok) {
647 ot->name =
"Copy Keyframes";
648 ot->idname =
"ACTION_OT_copy";
649 ot->description =
"Copy selected keyframes to the internal clipboard";
667 bool gpframes_inbuf =
false;
691 "Keyframe pasting is not available for Grease Pencil or mask mode");
703 if (!gpframes_inbuf) {
736 return BLI_strdup(
TIP_(
"Paste keyframes from mirrored bones if they exist"));
747 ot->name =
"Paste Keyframes";
748 ot->idname =
"ACTION_OT_paste";
750 "Paste keyframes from the internal clipboard for the selected channels, starting on the "
769 "Paste time offset of keys");
775 "Method of merging pasted keys and existing");
777 ot->srna,
"flipped",
false,
"Flipped",
"Paste keyframes from mirrored bones if they exist");
789 {1,
"ALL", 0,
"All Channels",
""},
790 {2,
"SEL", 0,
"Only Selected Channels",
""},
792 {3,
"GROUP", 0,
"In Active Group",
""},
793 {0,
nullptr, 0,
nullptr,
nullptr},
806 if (gpd != *gpd_old) {
814 const bool hold_previous)
819 const int current_frame_number = ac->
scene->
r.
cfra;
821 if (layer->
frames().contains(current_frame_number)) {
825 bool changed =
false;
827 const std::optional<int> active_frame_number = layer->
start_frame_at(current_frame_number);
828 if (!active_frame_number) {
831 changed |= grease_pencil->insert_frame(*layer, current_frame_number) !=
nullptr;
835 changed = grease_pencil->insert_duplicate_frame(
836 *layer, *active_frame_number, current_frame_number,
false);
841 changed |= grease_pencil->insert_frame(*layer, current_frame_number) !=
nullptr;
876 const std::optional<blender::StringRefNull> channel_group = fcu->
grp ?
877 std::optional(fcu->
grp->
name) :
883 {{fcu->rna_path, {}, fcu->array_index}},
889 result.generate_reports(reports);
913 ListBase anim_data = {
nullptr,
nullptr};
929 else if (mode == 3) {
965 BLI_assert_msg(
false,
"Keys cannot be inserted into this animation type.");
1010 ot->name =
"Insert Keyframes";
1011 ot->idname =
"ACTION_OT_keyframe_insert";
1012 ot->description =
"Insert keyframes for the specified channels";
1034 ListBase anim_data = {
nullptr,
nullptr};
1036 bool changed =
false;
1098 ot->name =
"Duplicate Keyframes";
1099 ot->idname =
"ACTION_OT_duplicate";
1100 ot->description =
"Make a copy of all selected keyframes";
1118 ListBase anim_data = {
nullptr,
nullptr};
1120 bool changed_final =
false;
1129 bool changed =
false;
1152 ale->key_data =
nullptr;
1158 changed_final =
true;
1165 return changed_final;
1197 IFACE_(
"Delete selected keyframes?"),
1209 ot->name =
"Delete Keyframes";
1210 ot->idname =
"ACTION_OT_delete";
1211 ot->description =
"Remove all selected keyframes";
1231 ListBase anim_data = {
nullptr,
nullptr};
1244 const bool only_selected_keys = !clean_chan;
1247 clean_fcurve(ale, thresh, clean_chan, only_selected_keys);
1290 ot->name =
"Clean Keyframes";
1291 ot->idname =
"ACTION_OT_clean";
1292 ot->description =
"Simplify F-Curves by removing closely spaced keyframes";
1304 ot->srna,
"threshold", 0.001f, 0.0f,
FLT_MAX,
"Threshold",
"", 0.0f, 1000.0f);
1317 ListBase anim_data = {
nullptr,
nullptr};
1364 ot->name =
"Bake Keyframes";
1365 ot->idname =
"ACTION_OT_bake_keys";
1366 ot->description =
"Add keyframes on every frame between the selected keyframes";
1383#define MAKE_CYCLIC_EXPO -1
1384#define CLEAR_CYCLIC_EXPO -2
1391 "Constant Extrapolation",
1392 "Values on endpoint keyframes are held"},
1396 "Linear Extrapolation",
1397 "Straight-line slope of end segments are extended past the endpoint keyframes"},
1402 "Make Cyclic (F-Modifier)",
1403 "Add Cycles F-Modifier if one does not exist already"},
1407 "Clear Cyclic (F-Modifier)",
1408 "Remove Cycles F-Modifier if not needed anymore"},
1409 {0,
nullptr, 0,
nullptr,
nullptr},
1415 ListBase anim_data = {
nullptr,
nullptr};
1495 ot->name =
"Set F-Curve Extrapolation";
1496 ot->idname =
"ACTION_OT_extrapolation_type";
1497 ot->description =
"Set extrapolation mode for selected F-Curves";
1551 ot->name =
"Set Keyframe Interpolation";
1552 ot->idname =
"ACTION_OT_interpolation_type";
1554 "Set interpolation mode for the F-Curve segments starting from the selected keyframes";
1605 ot->name =
"Set Keyframe Easing Type";
1606 ot->idname =
"ACTION_OT_easing_type";
1608 "Set easing type for the F-Curve segments starting from the selected keyframes";
1632 ListBase anim_data = {
nullptr,
nullptr};
1695 ot->name =
"Set Keyframe Handle Type";
1696 ot->idname =
"ACTION_OT_handle_type";
1697 ot->description =
"Set type of handle for selected keyframes";
1720 ListBase anim_data = {
nullptr,
nullptr};
1734 switch (ale->type) {
1748 nullptr,
static_cast<FCurve *
>(ale->key_data),
nullptr, set_cb,
nullptr);
1753 BLI_assert_msg(
false,
"Keytype cannot be set into this animation type.");
1789 ot->name =
"Set Keyframe Type";
1790 ot->idname =
"ACTION_OT_keyframe_type";
1791 ot->description =
"Set type of keyframe for the selected keyframes";
1814 if (
G.is_rendering) {
1825 ListBase anim_data = {
nullptr,
nullptr};
1840 switch (ale->datatype) {
1850 ked.
f1 += gpf->framenum;
1860 const Layer &layer = *
static_cast<Layer *
>(ale->data);
1861 for (
auto [frame_number, frame] : layer.
frames().items()) {
1862 if (!frame.is_selected()) {
1865 ked.
f1 += frame_number;
1880 BLI_assert_msg(
false,
"Cannot jump to keyframe into this animation type.");
1902 ot->name =
"Jump to Keyframes";
1903 ot->idname =
"ACTION_OT_frame_jump";
1904 ot->description =
"Set the current frame to the average frame value of selected keyframes";
1925 "Selection to Current Frame",
1926 "Snap selected keyframes to the current frame"},
1930 "Selection to Nearest Frame",
1931 "Snap selected keyframes to the nearest (whole) frame "
1932 "(use to fix accidental subframe offsets)"},
1936 "Selection to Nearest Second",
1937 "Snap selected keyframes to the nearest second"},
1941 "Selection to Nearest Marker",
1942 "Snap selected keyframes to the nearest marker"},
1943 {0,
nullptr, 0,
nullptr,
nullptr},
1949 ListBase anim_data = {
nullptr,
nullptr};
2036 ot->name =
"Snap Keys";
2037 ot->idname =
"ACTION_OT_snap";
2038 ot->description =
"Snap selected keyframes to the times specified";
2063 "By Times Over Current Frame",
2064 "Flip times of selected keyframes using the current frame as the mirror line"},
2068 "By Values Over Zero Value",
2069 "Flip values of selected keyframes (i.e. negative values become positive, and vice versa)"},
2073 "By Times Over First Selected Marker",
2074 "Flip times of selected keyframes using the first selected marker as the reference point"},
2075 {0,
nullptr, 0,
nullptr,
nullptr},
2081 ListBase anim_data = {
nullptr,
nullptr};
2170 ot->name =
"Mirror Keys";
2171 ot->idname =
"ACTION_OT_mirror";
2172 ot->description =
"Flip selected keyframes over the selected mirror line";
Functions and classes to work with Actions.
Functions to work with AnimData.
Functions to modify FCurves.
Functions to insert, delete or modify keyframes.
AnimationEvalContext BKE_animsys_eval_context_construct(struct Depsgraph *depsgraph, float eval_time) ATTR_WARN_UNUSED_RESULT
bScreen * CTX_wm_screen(const bContext *C)
SpaceAction * CTX_wm_space_action(const bContext *C)
ScrArea * CTX_wm_area(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
void BKE_fcurve_handles_recalc(FCurve *fcu)
FModifier * add_fmodifier(ListBase *modifiers, int type, FCurve *owner_fcu)
bool remove_fmodifier(ListBase *modifiers, FModifier *fcm)
bool list_has_suitable_fmodifier(const ListBase *modifiers, int mtype, short acttype)
bool BKE_fcurve_is_empty(const FCurve *fcu)
bool BKE_fcurve_delete_keys_selected(FCurve *fcu)
float evaluate_fcurve(const FCurve *fcu, float evaltime)
void BKE_fcurve_merge_duplicate_keys(FCurve *fcu, const int sel_flag, const bool use_handle)
bool BKE_fcurve_calc_range(const FCurve *fcu, float *r_min, float *r_max, bool selected_keys_only)
struct bGPDframe * BKE_gpencil_layer_frame_get(struct bGPDlayer *gpl, int cframe, eGP_GetFrame_Mode addnew)
void BKE_gpencil_tag(struct bGPdata *gpd)
Low-level operations for grease pencil.
void BKE_report(ReportList *reports, eReportType type, const char *message)
#define BLI_assert_msg(a, msg)
#define LISTBASE_FOREACH(type, var, list)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE int round_fl_to_int(float a)
MINLINE float max_ff(float a, float b)
MINLINE float min_ff(float a, float b)
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
#define BLT_I18NCONTEXT_ID_ACTION
void DEG_id_tag_update(ID *id, unsigned int flags)
@ SACTION_POSEMARKERS_SHOW
@ FCURVE_EXTRAPOLATE_CONSTANT
@ FCURVE_EXTRAPOLATE_LINEAR
@ GP_TOOL_FLAG_RETAIN_LAST
@ ANIMTYPE_GREASE_PENCIL_LAYER
#define ANIM_UPDATE_DEFAULT
@ ACHANNEL_SETTING_SELECT
@ ANIMFILTER_DATA_VISIBLE
@ ANIMFILTER_LIST_VISIBLE
@ ANIMFILTER_LIST_CHANNELS
@ KEYFRAME_PASTE_MERGE_MIX
@ KEYFRAME_PASTE_VALUE_OFFSET_NONE
@ KEYFRAME_PASTE_OFFSET_CFRA_START
short(*)(KeyframeEditData *ked, BezTriple *bezt) KeyframeEditFunc
@ KEYFRAME_PASTE_NOTHING_TO_PASTE
@ KEYFRAME_PASTE_NOWHERE_TO_PASTE
void ED_masklayer_snap_frames(MaskLayer *mask_layer, Scene *scene, short mode)
bool ED_masklayer_frames_duplicate(MaskLayer *mask_layer)
bool ED_masklayer_frames_delete(MaskLayer *mask_layer)
void ED_area_tag_redraw(ScrArea *area)
bool ED_operator_action_active(bContext *C)
void UI_view2d_sync(bScreen *screen, ScrArea *area, View2D *v2dcur, int flag)
void UI_view2d_center_get(const View2D *v2d, float *r_x, float *r_y)
void UI_view2d_center_set(View2D *v2d, float x, float y)
static wmOperatorStatus actkeys_viewall(bContext *C, const bool only_sel)
void ACTION_OT_view_selected(wmOperatorType *ot)
static bool actkeys_framejump_poll(bContext *C)
static wmOperatorStatus actkeys_viewsel_exec(bContext *C, wmOperator *)
void ACTION_OT_keyframe_type(wmOperatorType *ot)
static wmOperatorStatus actkeys_snap_exec(bContext *C, wmOperator *op)
static std::string actkeys_paste_get_description(bContext *, wmOperatorType *, PointerRNA *ptr)
void ACTION_OT_easing_type(wmOperatorType *ot)
static void bake_action_keys(bAnimContext *ac)
static bool act_markers_make_local_poll(bContext *C)
static bool copy_action_keys(bAnimContext *ac)
static void snap_action_keys(bAnimContext *ac, short mode)
static wmOperatorStatus actkeys_handletype_exec(bContext *C, wmOperator *op)
static wmOperatorStatus actkeys_previewrange_exec(bContext *C, wmOperator *)
static void clean_action_keys(bAnimContext *ac, float thresh, bool clean_chan)
static const EnumPropertyItem prop_actkeys_snap_types[]
static wmOperatorStatus actkeys_keytype_exec(bContext *C, wmOperator *op)
void ACTION_OT_view_all(wmOperatorType *ot)
static bool duplicate_action_keys(bAnimContext *ac)
static wmOperatorStatus actkeys_clean_exec(bContext *C, wmOperator *op)
void ACTION_OT_previewrange_set(wmOperatorType *ot)
void ACTION_OT_duplicate(wmOperatorType *ot)
void ACTION_OT_delete(wmOperatorType *ot)
void ACTION_OT_view_frame(wmOperatorType *ot)
static wmOperatorStatus actkeys_easing_exec(bContext *C, wmOperator *op)
void ACTION_OT_extrapolation_type(wmOperatorType *ot)
static wmOperatorStatus actkeys_copy_exec(bContext *C, wmOperator *op)
void ACTION_OT_keyframe_insert(wmOperatorType *ot)
static void insert_action_keys(bAnimContext *ac, short mode)
static eKeyPasteError paste_action_keys(bAnimContext *ac, const eKeyPasteOffset offset_mode, const eKeyMergeMode merge_mode, bool flip)
static bool delete_action_keys(bAnimContext *ac)
void ACTION_OT_snap(wmOperatorType *ot)
static void insert_grease_pencil_key(bAnimContext *ac, bAnimListElem *ale, const bool hold_previous)
static wmOperatorStatus act_markers_make_local_exec(bContext *C, wmOperator *)
static wmOperatorStatus actkeys_view_frame_exec(bContext *C, wmOperator *op)
static wmOperatorStatus actkeys_framejump_exec(bContext *C, wmOperator *)
static wmOperatorStatus actkeys_ipo_exec(bContext *C, wmOperator *op)
void ACTION_OT_bake_keys(wmOperatorType *ot)
static wmOperatorStatus actkeys_expo_exec(bContext *C, wmOperator *op)
void ACTION_OT_frame_jump(wmOperatorType *ot)
void ACTION_OT_paste(wmOperatorType *ot)
static wmOperatorStatus actkeys_delete_exec(bContext *C, wmOperator *)
static wmOperatorStatus actkeys_paste_exec(bContext *C, wmOperator *op)
static const EnumPropertyItem prop_actkeys_mirror_types[]
static void setkeytype_action_keys(bAnimContext *ac, eBezTriple_KeyframeType mode)
static bool actkeys_channels_get_selected_extents(bAnimContext *ac, float *r_min, float *r_max)
static blender::ed::greasepencil::KeyframeClipboard & get_grease_pencil_keyframe_clipboard()
static void sethandles_action_keys(bAnimContext *ac, short mode)
static void insert_fcurve_key(bAnimContext *ac, bAnimListElem *ale, const AnimationEvalContext anim_eval_context, eInsertKeyFlags flag)
static void mirror_action_keys(bAnimContext *ac, short mode)
void ACTION_OT_copy(wmOperatorType *ot)
static wmOperatorStatus actkeys_bake_exec(bContext *C, wmOperator *op)
static bool get_keyframe_extents(bAnimContext *ac, float *min, float *max, const short onlySel)
static wmOperatorStatus actkeys_mirror_exec(bContext *C, wmOperator *op)
void ACTION_OT_markers_make_local(wmOperatorType *ot)
void ACTION_OT_interpolation_type(wmOperatorType *ot)
void ACTION_OT_handle_type(wmOperatorType *ot)
static wmOperatorStatus actkeys_insertkey_exec(bContext *C, wmOperator *op)
static const EnumPropertyItem prop_actkeys_insertkey_types[]
void ACTION_OT_mirror(wmOperatorType *ot)
static void insert_gpencil_key(bAnimContext *ac, bAnimListElem *ale, const eGP_GetFrame_Mode add_frame_mode, bGPdata **gpd_old)
static wmOperatorStatus actkeys_viewall_exec(bContext *C, wmOperator *)
static void setexpo_action_keys(bAnimContext *ac, short mode)
static wmOperatorStatus actkeys_duplicate_exec(bContext *C, wmOperator *)
static wmOperatorStatus actkeys_delete_invoke(bContext *C, wmOperator *op, const wmEvent *)
void ACTION_OT_clean(wmOperatorType *ot)
#define CLEAR_CYCLIC_EXPO
static const EnumPropertyItem prop_actkeys_expo_types[]
@ ACTKEYS_SNAP_NEAREST_FRAME
@ ACTKEYS_SNAP_NEAREST_SECOND
@ ACTKEYS_SNAP_NEAREST_MARKER
float ANIM_UI_get_channel_step()
float ANIM_UI_get_first_channel_top(View2D *v2d)
float ANIM_UI_get_channel_height()
short ANIM_channel_setting_get(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting)
const bAnimChannelType * ANIM_channel_get_typeinfo(const bAnimListElem *ale)
void ED_anim_ale_fcurve_delete(bAnimContext &ac, bAnimListElem &ale)
void ANIM_animdata_freelist(ListBase *anim_data)
void ANIM_deselect_keys_in_animation_editors(bContext *C)
void ANIM_animdata_update(bAnimContext *ac, ListBase *anim_data)
void ANIM_nla_mapping_apply_if_needed_fcurve(bAnimListElem *ale, FCurve *fcu, const bool restore, const bool only_keys)
void ANIM_center_frame(bContext *C, int smooth_viewtx)
rctf ANIM_frame_range_view2d_add_xmargin(const View2D &view_2d, const rctf view_rect)
float ANIM_nla_tweakedit_remap(bAnimListElem *ale, const float cframe, const eNlaTime_ConvertModes mode)
bAction * ANIM_active_action_from_area(Scene *scene, ViewLayer *view_layer, const ScrArea *area, ID **r_action_user)
bool ANIM_animdata_get_context(const bContext *C, bAnimContext *ac)
size_t ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, const eAnimFilter_Flags filter_mode, void *data, const eAnimCont_Types datatype)
ListBase * ED_context_get_markers(const bContext *C)
TimeMarker * ED_markers_get_first_selected(ListBase *markers)
const Map< FramesMapKeyT, GreasePencilFrame > & frames() const
std::optional< int > start_frame_at(int frame_number) const
ItemIterator items() const &
const Map< FramesMapKeyT, GreasePencilFrame > & frames() const
void ED_gpencil_layer_frames_keytype_set(bGPDlayer *gpl, short type)
void ED_gpencil_layer_frames_duplicate(bGPDlayer *gpl)
bool ED_gpencil_layer_frames_delete(bGPDlayer *gpl)
bool ED_gpencil_anim_copybuf_paste(bAnimContext *ac, const short offset_mode)
bool ED_gpencil_layer_frame_select_check(const bGPDlayer *gpl)
void ED_gpencil_layer_mirror_frames(bGPDlayer *gpl, Scene *scene, short mode)
void ED_gpencil_layer_snap_frames(bGPDlayer *gpl, Scene *scene, short mode)
bool ED_gpencil_anim_copybuf_copy(bAnimContext *ac)
KeyframeEditFunc ANIM_editkeyframes_mirror(short mode)
KeyframeEditFunc ANIM_editkeyframes_easing(short mode)
KeyframeEditFunc ANIM_editkeyframes_ipo(short mode)
short ANIM_fcurve_keyframes_loop(KeyframeEditData *ked, FCurve *fcu, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb)
KeyframeEditFunc ANIM_editkeyframes_keytype(const eBezTriple_KeyframeType keyframe_type)
KeyframeEditFunc ANIM_editkeyframes_ok(short mode)
KeyframeEditFunc ANIM_editkeyframes_snap(short mode)
void ANIM_animdata_keyframe_callback(bAnimContext *ac, eAnimFilter_Flags filter, KeyframeEditFunc callback_fn)
short bezt_calc_average(KeyframeEditData *ked, BezTriple *bezt)
KeyframeEditFunc ANIM_editkeyframes_handles(short mode)
const EnumPropertyItem rna_enum_keyframe_paste_offset_items[]
const EnumPropertyItem rna_enum_keyframe_paste_merge_items[]
bool copy_animedit_keys(bAnimContext *ac, ListBase *anim_data)
void clean_fcurve(bAnimListElem *ale, float thresh, bool cleardefault, const bool only_selected_keys)
eKeyPasteError paste_animedit_keys(bAnimContext *ac, ListBase *anim_data, const KeyframePasteContext &paste_context)
bool duplicate_fcurve_keys(FCurve *fcu)
void assert_baklava_phase_1_invariants(const Action &action)
KeyframeSettings get_keyframe_settings(bool from_userprefs)
CombinedKeyingResult insert_keyframes(Main *bmain, PointerRNA *struct_pointer, std::optional< StringRefNull > channel_group, const blender::Span< RNAPath > rna_paths, std::optional< float > scene_frame, const AnimationEvalContext &anim_eval_context, eBezTriple_KeyframeType key_type, eInsertKeyFlags insert_key_flags)
Main key-frame insertion API.
SingleKeyingResult insert_vert_fcurve(FCurve *fcu, const float2 position, const KeyframeSettings &settings, eInsertKeyFlags flag)
Main Key-framing API call.
ID * action_slot_get_id_for_keying(Main &bmain, Action &action, slot_handle_t slot_handle, ID *primary_id)
void bake_fcurve_segments(FCurve *fcu)
eInsertKeyFlags get_keyframing_flags(Scene *scene)
bool remove_all_selected_frames(GreasePencil &grease_pencil, bke::greasepencil::Layer &layer)
bool grease_pencil_copy_keyframes(bAnimContext *ac, KeyframeClipboard &clipboard)
bool grease_pencil_paste_keyframes(bAnimContext *ac, const eKeyPasteOffset offset_mode, const eKeyMergeMode merge_mode, const KeyframeClipboard &clipboard)
void set_selected_frames_type(bke::greasepencil::Layer &layer, const eBezTriple_KeyframeType key_type)
bool mirror_selected_frames(GreasePencil &grease_pencil, bke::greasepencil::Layer &layer, Scene &scene, const eEditKeyframes_Mirror mode)
bool duplicate_selected_frames(GreasePencil &grease_pencil, bke::greasepencil::Layer &layer)
bool snap_selected_frames(GreasePencil &grease_pencil, bke::greasepencil::Layer &layer, Scene &scene, const eEditKeyframes_Snap mode)
float wrap(float value, float max, float min)
float RNA_float_get(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PointerRNA RNA_id_pointer_create(ID *id)
const EnumPropertyItem rna_enum_beztriple_interpolation_mode_items[]
const EnumPropertyItem rna_enum_keyframe_handle_type_items[]
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
const EnumPropertyItem rna_enum_beztriple_interpolation_easing_items[]
const EnumPropertyItem rna_enum_beztriple_keyframe_type_items[]
eKeyPasteValueOffset value_offset_mode
eKeyPasteOffset offset_mode
bool update(Progress &progress)
struct ToolSettings * toolsettings
bool(* has_setting)(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting)
eAnimChannel_Role channel_role
eBezTriple_KeyframeType keyframe_type
struct ReportList * reports
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_operator_properties_confirm_or_exec(wmOperatorType *ot)
wmOperatorStatus WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *)
int WM_operator_smooth_viewtx_get(const wmOperator *op)
wmOperatorStatus WM_operator_confirm_ex(bContext *C, wmOperator *op, const char *title, const char *message, const char *confirm_text, int icon, bool cancel_default)