98 float(scene->
r.
pefra + end_frame_width),
130 if (!sequencer_scene) {
134 if (!scene_strip || !scene_strip->
scene) {
156 if (start_frame > end_frame) {
157 std::swap(start_frame, end_frame);
342 short only_keys = short(ked->
i1);
345 if (only_keys == 0) {
361 short only_keys = short(ked->
i1);
364 if (only_keys == 0) {
386 ked.
data = (
void *)adt;
387 ked.
i1 = int(only_keys);
404 const bool only_keys)
442 if (use_preview_only) {
445 bool replace =
false;
453 const int unclamped_start = int(scene->
r.
psfra - fcu->
fpt[0].
vec[0]);
454 start =
max_ii(unclamped_start, 0);
461 for (
int i = start;
i < end;
i++, bezt++) {
470 max_coord =
max_ff(max_coord, bezt->
vec[1][1]);
471 min_coord =
min_ff(min_coord, bezt->
vec[1][1]);
479 max_coord =
max_ff(max_coord, bezt->
vec[1][1]);
480 min_coord =
min_ff(min_coord, bezt->
vec[1][1]);
481 max_coord =
max_ff(max_coord, prev_bezt->
vec[1][1]);
482 min_coord =
min_ff(min_coord, prev_bezt->
vec[1][1]);
485 const int resol = fcu->
driver ?
490 max_coord =
max_ff(max_coord, prev_bezt->
vec[1][1]);
491 min_coord =
min_ff(min_coord, prev_bezt->
vec[1][1]);
497 float v1[2],
v2[2], v3[2], v4[2];
499 v1[0] = prev_bezt->
vec[1][0];
500 v1[1] = prev_bezt->
vec[1][1];
501 v2[0] = prev_bezt->
vec[2][0];
502 v2[1] = prev_bezt->
vec[2][1];
504 v3[0] = bezt->
vec[0][0];
505 v3[1] = bezt->
vec[0][1];
506 v4[0] = bezt->
vec[1][0];
507 v4[1] = bezt->
vec[1][1];
512 v1[0],
v2[0], v3[0], v4[0],
data, resol,
sizeof(
float[3]));
514 v1[1],
v2[1], v3[1], v4[1],
data + 1, resol,
sizeof(
float[3]));
516 for (
int j = 0; j <= resol; ++j) {
517 const float *fp = &
data[j * 3];
518 max_coord =
max_ff(max_coord, fp[1]);
519 min_coord =
min_ff(min_coord, fp[1]);
526 float step_size = (bezt->
vec[1][0] - prev_bezt->
vec[1][0]) / resol;
527 for (
int j = 0; j <= resol; j++) {
528 float eval_time = prev_bezt->
vec[1][0] + step_size * j;
530 max_coord =
max_ff(max_coord, eval_value);
531 min_coord =
min_ff(min_coord, eval_value);
541 for (
int i = start;
i < end; ++
i, ++fpt) {
542 min_coord =
min_ff(min_coord, fpt->
vec[1]);
543 max_coord =
max_ff(max_coord, fpt->
vec[1]);
549 *r_min_coord = min_coord;
552 *r_max_coord = max_coord;
558 float factor = 1.0f, offset = 0.0f;
602 if (min_coord < max_coord &&
ulp_diff_ff(min_coord, max_coord) > 256) {
604 const float range = max_coord - min_coord;
605 factor = 2.0f / range;
606 offset = -min_coord - range / 2.0f;
637 if (!
id || !fcu || !fcu->
rna_path || !scene) {
679 float cfranext, cfraprev;
680 bool donenext =
false, doneprev =
false;
681 int nextcount = 0, prevcount = 0;
712 if (scene->
r.
cfra ==
int(aknext->
cfra)) {
714 cfranext = aknext->
cfra;
718 if (++nextcount ==
U.view_frame_keyframes) {
722 cfranext = aknext->
cfra;
724 }
while ((aknext !=
nullptr) && (donenext ==
false));
730 if (scene->
r.
cfra ==
int(akprev->
cfra)) {
735 if (++prevcount ==
U.view_frame_keyframes) {
739 cfraprev = akprev->
cfra;
741 }
while ((akprev !=
nullptr) && (doneprev ==
false));
747 if (doneprev || donenext) {
749 *r_prevfra = cfraprev;
752 *r_prevfra = scene->
r.
cfra - (cfranext - scene->
r.
cfra);
756 *r_nextfra = cfranext;
759 *r_nextfra = scene->
r.
cfra + (scene->
r.
cfra - cfraprev);
774 int nextfra, prevfra;
776 switch (
U.view_frame_type) {
778 const float fps = scene->frames_per_second();
779 newrct.
xmax = scene->
r.
cfra +
U.view_frame_seconds * fps + 1;
780 newrct.
xmin = scene->
r.
cfra -
U.view_frame_seconds * fps - 1;
789 newrct.
xmax = nextfra;
790 newrct.
xmin = prevfra;
815 const float margin_in_px = 4 * keyframe_size;
825 const float margin_in_frames = margin_in_px * target_scale;
831 const float margin = std::min(margin_in_frames, margin_max);
833 rctf rect_with_margin = view_rect;
834 rect_with_margin.
xmin -= margin;
835 rect_with_margin.
xmax += margin;
837 return rect_with_margin;
WorkSpace * CTX_wm_workspace(const bContext *C)
Mask * CTX_data_edit_mask(const bContext *C)
SpaceAction * CTX_wm_space_action(const bContext *C)
Object * CTX_data_active_object(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
void BKE_curve_forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride)
int BKE_fcurve_bezt_binarysearch_index(const BezTriple array[], float frame, int arraylen, bool *r_replace)
float evaluate_fcurve_only_curve(const FCurve *fcu, float evaltime)
void BKE_fcurve_correct_bezpart(const float v1[2], float v2[2], float v3[2], const float v4[2])
struct MaskLayer * BKE_mask_layer_active(struct Mask *mask)
float BKE_nla_tweakedit_remap(AnimData *adt, float cframe, eNlaTime_ConvertModes mode)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
MINLINE float max_ff(float a, float b)
MINLINE int min_ii(int a, int b)
MINLINE float min_ff(float a, float b)
MINLINE int max_ii(int a, int b)
MINLINE uint ulp_diff_ff(float a, float b)
MINLINE float len_v2v2(const float v1[2], const float v2[2]) ATTR_WARN_UNUSED_RESULT
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
@ ADS_SHOW_SCENE_STRIP_FRAME_RANGE
@ ADS_OVERLAY_SHOW_OVERLAYS
Object is a sort of wrapper for general info.
@ ZOOM_FRAME_MODE_SECONDS
@ ZOOM_FRAME_MODE_KEYFRAMES
@ ZOOM_FRAME_MODE_KEEP_RANGE
@ WORKSPACE_SYNC_SCENE_TIME
@ ANIMTYPE_GREASE_PENCIL_DATABLOCK
@ ANIMTYPE_GREASE_PENCIL_LAYER
@ ANIMTYPE_GREASE_PENCIL_LAYER_GROUP
@ ANIM_UNITCONV_NORMALIZE
@ ANIM_UNITCONV_NORMALIZE_FREEZE
short(*)(KeyframeEditData *ked, BezTriple *bezt) KeyframeEditFunc
@ GPU_SHADER_2D_DIAG_STRIPES
@ GPU_SHADER_3D_UNIFORM_COLOR
void GPU_line_width(float width)
void GPU_blend(GPUBlend blend)
#define RNA_SUBTYPE_UNIT(subtype)
@ TH_ANIM_SCENE_STRIP_RANGE
void UI_GetThemeColorShadeAlpha4fv(int colorid, int coloffset, int alphaoffset, float col[4])
void UI_view2d_smooth_view(const bContext *C, ARegion *region, const rctf *cur, int smooth_viewtx)
short ANIM_get_normalization_flags(SpaceLink *space_link)
static short bezt_nlamapping_apply(KeyframeEditData *ked, BezTriple *bezt)
static bool find_prev_next_keyframes(bContext *C, int *r_nextfra, int *r_prevfra)
void ANIM_draw_action_framerange(AnimData *adt, bAction *action, View2D *v2d, float ymin, float ymax)
void ANIM_nla_mapping_apply_if_needed_fcurve(bAnimListElem *ale, FCurve *fcu, const bool restore, const bool only_keys)
static float normalization_factor_get(Scene *scene, FCurve *fcu, short flag, float *r_offset)
void ANIM_draw_cfra(const bContext *C, View2D *v2d, short flag)
void ANIM_center_frame(bContext *C, int smooth_viewtx)
void ANIM_nla_mapping_apply_fcurve(AnimData *adt, FCurve *fcu, bool restore, bool only_keys)
void ANIM_draw_scene_strip_range(const bContext *C, View2D *v2d)
bool ANIM_nla_mapping_allowed(const bAnimListElem *ale)
static void fcurve_scene_coord_range_get(Scene *scene, const FCurve *fcu, float *r_min_coord, float *r_max_coord)
rctf ANIM_frame_range_view2d_add_xmargin(const View2D &view_2d, const rctf view_rect)
void ANIM_draw_previewrange(const Scene *scene, View2D *v2d, int end_frame_width)
float ANIM_unit_mapping_get_factor(Scene *scene, ID *id, FCurve *fcu, short flag, float *r_offset)
float ANIM_nla_tweakedit_remap(bAnimListElem *ale, const float cframe, const eNlaTime_ConvertModes mode)
static short bezt_nlamapping_restore(KeyframeEditData *ked, BezTriple *bezt)
void ANIM_draw_framerange(Scene *scene, View2D *v2d)
BMesh const char void * data
ATTR_WARN_UNUSED_RESULT const BMVert * v2
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
short ANIM_fcurve_keyframes_loop(KeyframeEditData *ked, FCurve *fcu, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb)
void mask_to_keylist(bDopeSheet *, MaskLayer *masklay, AnimKeylist *keylist)
const ActKeyColumn * ED_keylist_find_prev(const AnimKeylist *keylist, const float cfra)
void gpencil_to_keylist(bDopeSheet *ads, bGPdata *gpd, AnimKeylist *keylist, const bool active)
void scene_to_keylist(bDopeSheet *ads, Scene *sce, AnimKeylist *keylist, const int saction_flag, blender::float2 range)
void ob_to_keylist(bDopeSheet *ads, Object *ob, AnimKeylist *keylist, const int saction_flag, blender::float2 range)
void ED_keylist_prepare_for_direct_access(AnimKeylist *keylist)
AnimKeylist * ED_keylist_create()
void ED_keylist_free(AnimKeylist *keylist)
const ActKeyColumn * ED_keylist_find_next(const AnimKeylist *keylist, const float cfra)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
const Strip * get_scene_strip_for_time_sync(const Scene *sequence_scene)
int time_right_handle_frame_get(const Scene *scene, const Strip *strip)
float give_frame_index(const Scene *scene, const Strip *strip, float timeline_frame)
int time_left_handle_frame_get(const Scene *, const Strip *strip)
PropertySubType RNA_property_subtype(PropertyRNA *prop)
PointerRNA RNA_id_pointer_create(ID *id)
bool RNA_path_resolve_property(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
SpaceActionOverlays overlays
struct Scene * sequencer_scene