diff options
author | Siddhartha Jejurkar <f20180617@goa.bits-pilani.ac.in> | 2021-12-17 16:01:32 +0300 |
---|---|---|
committer | Siddhartha Jejurkar <f20180617@goa.bits-pilani.ac.in> | 2021-12-17 16:01:32 +0300 |
commit | dbc41b30f88b96f7d8c6e995b17f5930eb55cc77 (patch) | |
tree | c6c495328443ea3621e5df2ef483b0e0dd504496 /source/blender/editors/animation/anim_draw.c | |
parent | 99a2af76d10e05a18987be5d554ada197b1ca086 (diff) | |
parent | 7c9e4099854a4fc8eab4db97173c1aacd25f9e08 (diff) |
Merge branch 'master' into soc-2021-uv-edge-select-supportsoc-2021-uv-edge-select-support
Diffstat (limited to 'source/blender/editors/animation/anim_draw.c')
-rw-r--r-- | source/blender/editors/animation/anim_draw.c | 82 |
1 files changed, 64 insertions, 18 deletions
diff --git a/source/blender/editors/animation/anim_draw.c b/source/blender/editors/animation/anim_draw.c index 993d10cf303..6589756c526 100644 --- a/source/blender/editors/animation/anim_draw.c +++ b/source/blender/editors/animation/anim_draw.c @@ -63,7 +63,6 @@ /* *************************************************** */ /* CURRENT FRAME DRAWING */ -/* General call for drawing current frame indicator in animation editor */ void ANIM_draw_cfra(const bContext *C, View2D *v2d, short flag) { Scene *scene = CTX_data_scene(C); @@ -92,7 +91,6 @@ void ANIM_draw_cfra(const bContext *C, View2D *v2d, short flag) /* PREVIEW RANGE 'CURTAINS' */ /* NOTE: 'Preview Range' tools are defined in `anim_ops.c`. */ -/* Draw preview range 'curtains' for highlighting where the animation data is */ void ANIM_draw_previewrange(const bContext *C, View2D *v2d, int end_frame_width) { Scene *scene = CTX_data_scene(C); @@ -127,11 +125,6 @@ void ANIM_draw_previewrange(const bContext *C, View2D *v2d, int end_frame_width) /* *************************************************** */ /* SCENE FRAME RANGE */ -/** - * Draw frame range guides (for scene frame range) in background. - * - * TODO: Should we still show these when preview range is enabled? - */ void ANIM_draw_framerange(Scene *scene, View2D *v2d) { /* draw darkened area outside of active timeline frame range */ @@ -168,14 +161,73 @@ void ANIM_draw_framerange(Scene *scene, View2D *v2d) immUnbindProgram(); } +void ANIM_draw_action_framerange( + AnimData *adt, bAction *action, View2D *v2d, float ymin, float ymax) +{ + if ((action->flag & ACT_FRAME_RANGE) == 0) { + return; + } + + /* Compute the dimensions. */ + CLAMP_MIN(ymin, v2d->cur.ymin); + CLAMP_MAX(ymax, v2d->cur.ymax); + + if (ymin > ymax) { + return; + } + + const float sfra = BKE_nla_tweakedit_remap(adt, action->frame_start, NLATIME_CONVERT_MAP); + const float efra = BKE_nla_tweakedit_remap(adt, action->frame_end, NLATIME_CONVERT_MAP); + + /* Diagonal stripe filled area outside of the frame range. */ + GPU_blend(GPU_BLEND_ALPHA); + + GPUVertFormat *format = immVertexFormat(); + uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); + + immBindBuiltinProgram(GPU_SHADER_2D_DIAG_STRIPES); + + float color[4]; + UI_GetThemeColorShadeAlpha4fv(TH_BACK, -40, -50, color); + + immUniform4f("color1", color[0], color[1], color[2], color[3]); + immUniform4f("color2", 0.0f, 0.0f, 0.0f, 0.0f); + immUniform1i("size1", 2 * U.dpi_fac); + immUniform1i("size2", 4 * U.dpi_fac); + + if (sfra < efra) { + immRectf(pos, v2d->cur.xmin, ymin, sfra, ymax); + immRectf(pos, efra, ymin, v2d->cur.xmax, ymax); + } + else { + immRectf(pos, v2d->cur.xmin, ymin, v2d->cur.xmax, ymax); + } + + immUnbindProgram(); + + GPU_blend(GPU_BLEND_NONE); + + /* Thin lines where the actual frames are. */ + immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); + immUniformThemeColorShade(TH_BACK, -60); + + GPU_line_width(1.0f); + + immBegin(GPU_PRIM_LINES, 4); + + immVertex2f(pos, sfra, ymin); + immVertex2f(pos, sfra, ymax); + + immVertex2f(pos, efra, ymin); + immVertex2f(pos, efra, ymax); + + immEnd(); + immUnbindProgram(); +} + /* *************************************************** */ /* NLA-MAPPING UTILITIES (required for drawing and also editing keyframes). */ -/** - * Obtain the AnimData block providing NLA-mapping for the given channel (if applicable). - * - * TODO: do not supply return this if the animdata tells us that there is no mapping to perform. - */ AnimData *ANIM_nla_mapping_get(bAnimContext *ac, bAnimListElem *ale) { /* sanity checks */ @@ -251,10 +303,6 @@ static short bezt_nlamapping_apply(KeyframeEditData *ked, BezTriple *bezt) return 0; } -/* Apply/Unapply NLA mapping to all keyframes in the nominated F-Curve - * - restore = whether to map points back to non-mapped time - * - only_keys = whether to only adjust the location of the center point of beztriples - */ void ANIM_nla_mapping_apply_fcurve(AnimData *adt, FCurve *fcu, bool restore, bool only_keys) { KeyframeEditData ked = {{NULL}}; @@ -282,7 +330,6 @@ void ANIM_nla_mapping_apply_fcurve(AnimData *adt, FCurve *fcu, bool restore, boo /* *************************************************** */ /* UNITS CONVERSION MAPPING (required for drawing and editing keyframes) */ -/* Get flags used for normalization in ANIM_unit_mapping_get_factor. */ short ANIM_get_normalization_flags(bAnimContext *ac) { if (ac->sl->spacetype == SPACE_GRAPH) { @@ -450,7 +497,6 @@ static float normalization_factor_get(Scene *scene, FCurve *fcu, short flag, flo return factor; } -/* Get unit conversion factor for given ID + F-Curve */ float ANIM_unit_mapping_get_factor(Scene *scene, ID *id, FCurve *fcu, short flag, float *r_offset) { if (flag & ANIM_UNITCONV_NORMALIZE) { |