76 if (sact ==
nullptr) {
84 if (sact->
action ==
nullptr) {
112 for (marker =
static_cast<TimeMarker *
>(
markers->first); marker; marker = markern) {
113 markern = marker->
next;
136 ot->
name =
"Make Markers Local";
137 ot->
idname =
"ACTION_OT_markers_make_local";
138 ot->
description =
"Move selected scene markers to the active Action as local 'pose' markers";
157 ListBase anim_data = {
nullptr,
nullptr};
170 *max = -999999999.0f;
173 if (anim_data.
first) {
183 const float framenum =
float(gpf->framenum);
185 *max =
max_ff(*max, framenum);
194 const float framenum =
float(masklay_shape->frame);
196 *max =
max_ff(*max, framenum);
204 for (
const auto [key, frame] : layer.frames().items()) {
205 if (onlySel && !frame.is_selected()) {
209 *max =
max_ff(*max,
float(key));
228 *max =
max_ff(*max, tmax);
273 if (ac.
scene ==
nullptr) {
284 scene->r.pefra =
ceilf(max);
286 if (scene->r.psfra == scene->r.pefra) {
287 scene->r.pefra = scene->r.psfra + 1;
300 ot->
name =
"Set Preview Range to Selected";
301 ot->
idname =
"ACTION_OT_previewrange_set";
302 ot->
description =
"Set Preview Range based on extents of selected Keyframes";
327 ListBase anim_data = {
nullptr,
nullptr};
342 ale = ale->
next, ymax -= channel_step)
388 if (only_sel && (found ==
false)) {
397 v2d->
cur.
xmax = max + xwidth / 2.0f;
408 if (only_sel ==
false) {
421 float ymid = (ymax - ymin) / 2.0f + ymin;
459 ot->
description =
"Reset viewable area to show full keyframe range";
472 ot->
name =
"Frame Selected";
473 ot->
idname =
"ACTION_OT_view_selected";
474 ot->
description =
"Reset viewable area to show selected keyframes range";
501 ot->
name =
"Go to Current Frame";
502 ot->
idname =
"ACTION_OT_view_frame";
523 ListBase anim_data = {
nullptr,
nullptr};
549 ListBase anim_data = {
nullptr,
nullptr};
617 if (kf_empty && !gpf_ok) {
629 ot->
name =
"Copy Keyframes";
631 ot->
description =
"Copy selected keyframes to the internal clipboard";
649 bool gpframes_inbuf =
false;
673 "Keyframe pasting is not available for grease pencil or mask mode");
685 if (!gpframes_inbuf) {
718 return BLI_strdup(
TIP_(
"Paste keyframes from mirrored bones if they exist"));
729 ot->
name =
"Paste Keyframes";
732 "Paste keyframes from the internal clipboard for the selected channels, starting on the "
751 "Paste time offset of keys");
757 "Method of merging pasted keys and existing");
759 ot->
srna,
"flipped",
false,
"Flipped",
"Paste keyframes from mirrored bones if they exist");
771 {1,
"ALL", 0,
"All Channels",
""},
772 {2,
"SEL", 0,
"Only Selected Channels",
""},
774 {3,
"GROUP", 0,
"In Active Group",
""},
775 {0,
nullptr, 0,
nullptr,
nullptr},
788 if (gpd != *gpd_old) {
796 const bool hold_previous)
799 Layer *layer =
static_cast<Layer *
>(ale->
data);
801 const int current_frame_number = ac->
scene->
r.
cfra;
803 if (layer->frames().contains(current_frame_number)) {
807 bool changed =
false;
809 const std::optional<int> active_frame_number = layer->start_frame_at(current_frame_number);
810 if (!active_frame_number) {
813 changed |= grease_pencil->insert_frame(*layer, current_frame_number) !=
nullptr;
817 changed = grease_pencil->insert_duplicate_frame(
818 *layer, *active_frame_number, current_frame_number,
false);
823 changed |= grease_pencil->insert_frame(*layer, current_frame_number) !=
nullptr;
858 const std::optional<blender::StringRefNull> channel_group = fcu->
grp ?
859 std::optional(fcu->
grp->
name) :
865 {{fcu->rna_path, {}, fcu->array_index}},
870 if (result.get_count(SingleKeyingResult::SUCCESS) == 0) {
882 float cfra = anim_eval_context.eval_time;
899 ListBase anim_data = {
nullptr,
nullptr};
915 else if (mode == 3) {
951 BLI_assert_msg(
false,
"Keys cannot be inserted into this animation type.");
996 ot->
name =
"Insert Keyframes";
997 ot->
idname =
"ACTION_OT_keyframe_insert";
998 ot->
description =
"Insert keyframes for the specified channels";
1020 ListBase anim_data = {
nullptr,
nullptr};
1022 bool changed =
false;
1084 ot->
name =
"Duplicate Keyframes";
1085 ot->
idname =
"ACTION_OT_duplicate";
1104 ListBase anim_data = {
nullptr,
nullptr};
1106 bool changed_final =
false;
1115 bool changed =
false;
1142 ale->key_data =
nullptr;
1148 changed_final =
true;
1155 return changed_final;
1185 IFACE_(
"Delete selected keyframes?"),
1197 ot->
name =
"Delete Keyframes";
1219 ListBase anim_data = {
nullptr,
nullptr};
1232 const bool only_selected_keys = !clean_chan;
1235 clean_fcurve(ac, ale, thresh, clean_chan, only_selected_keys);
1278 ot->
name =
"Clean Keyframes";
1280 ot->
description =
"Simplify F-Curves by removing closely spaced keyframes";
1292 ot->
srna,
"threshold", 0.001f, 0.0f,
FLT_MAX,
"Threshold",
"", 0.0f, 1000.0f);
1305 ListBase anim_data = {
nullptr,
nullptr};
1352 ot->
name =
"Bake Keyframes";
1353 ot->
idname =
"ACTION_OT_bake_keys";
1354 ot->
description =
"Add keyframes on every frame between the selected keyframes";
1371#define MAKE_CYCLIC_EXPO -1
1372#define CLEAR_CYCLIC_EXPO -2
1379 "Constant Extrapolation",
1380 "Values on endpoint keyframes are held"},
1384 "Linear Extrapolation",
1385 "Straight-line slope of end segments are extended past the endpoint keyframes"},
1390 "Make Cyclic (F-Modifier)",
1391 "Add Cycles F-Modifier if one doesn't exist already"},
1395 "Clear Cyclic (F-Modifier)",
1396 "Remove Cycles F-Modifier if not needed anymore"},
1397 {0,
nullptr, 0,
nullptr,
nullptr},
1403 ListBase anim_data = {
nullptr,
nullptr};
1483 ot->
name =
"Set F-Curve Extrapolation";
1484 ot->
idname =
"ACTION_OT_extrapolation_type";
1485 ot->
description =
"Set extrapolation mode for selected F-Curves";
1539 ot->
name =
"Set Keyframe Interpolation";
1540 ot->
idname =
"ACTION_OT_interpolation_type";
1542 "Set interpolation mode for the F-Curve segments starting from the selected keyframes";
1593 ot->
name =
"Set Keyframe Easing Type";
1594 ot->
idname =
"ACTION_OT_easing_type";
1596 "Set easing type for the F-Curve segments starting from the selected keyframes";
1620 ListBase anim_data = {
nullptr,
nullptr};
1683 ot->
name =
"Set Keyframe Handle Type";
1684 ot->
idname =
"ACTION_OT_handle_type";
1685 ot->
description =
"Set type of handle for selected keyframes";
1708 ListBase anim_data = {
nullptr,
nullptr};
1722 switch (ale->type) {
1737 nullptr,
static_cast<FCurve *
>(ale->key_data),
nullptr, set_cb,
nullptr);
1742 BLI_assert_msg(
false,
"Keytype cannot be set into this animation type.");
1778 ot->
name =
"Set Keyframe Type";
1779 ot->
idname =
"ACTION_OT_keyframe_type";
1780 ot->
description =
"Set type of keyframe for the selected keyframes";
1803 if (
G.is_rendering) {
1814 ListBase anim_data = {
nullptr,
nullptr};
1829 switch (ale->datatype) {
1839 ked.
f1 += gpf->framenum;
1849 const Layer &layer = *
static_cast<Layer *
>(ale->data);
1850 for (
auto [frame_number, frame] : layer.frames().items()) {
1851 if (!frame.is_selected()) {
1854 ked.
f1 += frame_number;
1875 BLI_assert_msg(
false,
"Cannot jump to keyframe into this animation type.");
1885 scene->r.subframe = 0.0f;
1897 ot->
name =
"Jump to Keyframes";
1898 ot->
idname =
"ACTION_OT_frame_jump";
1899 ot->
description =
"Set the current frame to the average frame value of selected keyframes";
1920 "Selection to Current Frame",
1921 "Snap selected keyframes to the current frame"},
1925 "Selection to Nearest Frame",
1926 "Snap selected keyframes to the nearest (whole) frame "
1927 "(use to fix accidental subframe offsets)"},
1931 "Selection to Nearest Second",
1932 "Snap selected keyframes to the nearest second"},
1936 "Selection to Nearest Marker",
1937 "Snap selected keyframes to the nearest marker"},
1938 {0,
nullptr, 0,
nullptr,
nullptr},
1944 ListBase anim_data = {
nullptr,
nullptr};
2041 ot->
description =
"Snap selected keyframes to the times specified";
2066 "By Times Over Current Frame",
2067 "Flip times of selected keyframes using the current frame as the mirror line"},
2071 "By Values Over Zero Value",
2072 "Flip values of selected keyframes (i.e. negative values become positive, and vice versa)"},
2076 "By Times Over First Selected Marker",
2077 "Flip times of selected keyframes using the first selected marker as the reference point"},
2078 {0,
nullptr, 0,
nullptr,
nullptr},
2084 ListBase anim_data = {
nullptr,
nullptr};
2179 ot->
name =
"Mirror Keys";
2181 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)
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.
float BKE_nla_tweakedit_remap(AnimData *adt, float cframe, short mode)
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(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct 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)
void ACTION_OT_view_selected(wmOperatorType *ot)
static int actkeys_delete_invoke(bContext *C, wmOperator *op, const wmEvent *)
static bool actkeys_framejump_poll(bContext *C)
void ACTION_OT_keyframe_type(wmOperatorType *ot)
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 void snap_action_keys(bAnimContext *ac, short mode)
static int actkeys_delete_exec(bContext *C, wmOperator *)
static int actkeys_view_frame_exec(bContext *C, wmOperator *op)
static void clean_action_keys(bAnimContext *ac, float thresh, bool clean_chan)
static int act_markers_make_local_exec(bContext *C, wmOperator *)
static const EnumPropertyItem prop_actkeys_snap_types[]
void ACTION_OT_view_all(wmOperatorType *ot)
static int actkeys_viewall(bContext *C, const bool only_sel)
static bool duplicate_action_keys(bAnimContext *ac)
void ACTION_OT_previewrange_set(wmOperatorType *ot)
static int actkeys_previewrange_exec(bContext *C, wmOperator *)
static int actkeys_snap_exec(bContext *C, wmOperator *op)
void ACTION_OT_duplicate(wmOperatorType *ot)
void ACTION_OT_delete(wmOperatorType *ot)
void ACTION_OT_view_frame(wmOperatorType *ot)
static int actkeys_viewsel_exec(bContext *C, wmOperator *)
void ACTION_OT_extrapolation_type(wmOperatorType *ot)
static int actkeys_ipo_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 int actkeys_paste_exec(bContext *C, wmOperator *op)
static int actkeys_duplicate_exec(bContext *C, wmOperator *)
void ACTION_OT_bake_keys(wmOperatorType *ot)
void ACTION_OT_frame_jump(wmOperatorType *ot)
void ACTION_OT_paste(wmOperatorType *ot)
static int actkeys_bake_exec(bContext *C, wmOperator *op)
static int actkeys_framejump_exec(bContext *C, wmOperator *)
static int actkeys_clean_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 short copy_action_keys(bAnimContext *ac)
static bool get_keyframe_extents(bAnimContext *ac, float *min, float *max, const short onlySel)
static int actkeys_easing_exec(bContext *C, wmOperator *op)
static int actkeys_copy_exec(bContext *C, wmOperator *op)
static int actkeys_mirror_exec(bContext *C, wmOperator *op)
void ACTION_OT_markers_make_local(wmOperatorType *ot)
void ACTION_OT_interpolation_type(wmOperatorType *ot)
static int actkeys_viewall_exec(bContext *C, wmOperator *)
static int actkeys_expo_exec(bContext *C, wmOperator *op)
static int actkeys_handletype_exec(bContext *C, wmOperator *op)
void ACTION_OT_handle_type(wmOperatorType *ot)
static const EnumPropertyItem prop_actkeys_insertkey_types[]
static int actkeys_insertkey_exec(bContext *C, wmOperator *op)
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 void setexpo_action_keys(bAnimContext *ac, short mode)
void ACTION_OT_clean(wmOperatorType *ot)
#define CLEAR_CYCLIC_EXPO
static int actkeys_keytype_exec(bContext *C, wmOperator *op)
static const EnumPropertyItem prop_actkeys_expo_types[]
@ ACTKEYS_SNAP_NEAREST_FRAME
@ ACTKEYS_SNAP_NEAREST_SECOND
@ ACTKEYS_SNAP_NEAREST_MARKER
const bAnimChannelType * ANIM_channel_get_typeinfo(bAnimListElem *ale)
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)
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)
AnimData * ANIM_nla_mapping_get(bAnimContext *ac, bAnimListElem *ale)
void ANIM_center_frame(bContext *C, int smooth_viewtx)
void ANIM_nla_mapping_apply_fcurve(AnimData *adt, FCurve *fcu, bool restore, bool only_keys)
rctf ANIM_frame_range_view2d_add_xmargin(const View2D &view_2d, const rctf view_rect)
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)
void generate_reports(ReportList *reports, eReportType report_level=RPT_ERROR)
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)
draw_view in_light_buf[] float
DO_INLINE void filter(lfVector *V, fmatrix3x3 *S)
const vector< Marker > & markers
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)
void clean_fcurve(bAnimContext *ac, bAnimListElem *ale, float thresh, bool cleardefault, const bool only_selected_keys)
const EnumPropertyItem rna_enum_keyframe_paste_offset_items[]
short copy_animedit_keys(bAnimContext *ac, ListBase *anim_data)
const EnumPropertyItem rna_enum_keyframe_paste_merge_items[]
eKeyPasteError paste_animedit_keys(bAnimContext *ac, ListBase *anim_data, const eKeyPasteOffset offset_mode, const eKeyPasteValueOffset value_offset_mode, const eKeyMergeMode merge_mode, bool flip)
void ANIM_fcurves_copybuf_free()
bool duplicate_fcurve_keys(FCurve *fcu)
void assert_baklava_phase_1_invariants(const Action &action)
KeyframeSettings get_keyframe_settings(bool from_userprefs)
SingleKeyingResult insert_vert_fcurve(FCurve *fcu, const float2 position, const KeyframeSettings &settings, eInsertKeyFlags flag)
Main Key-framing API call.
void bake_fcurve_segments(FCurve *fcu)
void animdata_fcurve_delete(bAnimContext *ac, AnimData *adt, 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[]
bool(* has_setting)(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting)
eAnimChannel_Role channel_role
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
std::string(* get_description)(bContext *C, wmOperatorType *ot, PointerRNA *ptr)
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_operator_properties_confirm_or_exec(wmOperatorType *ot)
int WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *)
int WM_operator_confirm_ex(bContext *C, wmOperator *op, const char *title, const char *message, const char *confirm_text, int icon, bool cancel_default)
int WM_operator_smooth_viewtx_get(const wmOperator *op)