Animation: Gaussian Smooth operator for Graph Editor #105635
|
@ -1067,7 +1067,8 @@ void GRAPH_OT_ease(wmOperatorType *ot)
|
||||||
|
|
||||||
typedef struct tGaussOperatorData {
|
typedef struct tGaussOperatorData {
|
||||||
double *kernel;
|
double *kernel;
|
||||||
ListBase segment_links /* tFCurveSegmentLink */;
|
ListBase segment_links; /* tFCurveSegmentLink */
|
||||||
|
ListBase anim_data; /* bAnimListElem */
|
||||||
} tGaussOperatorData;
|
} tGaussOperatorData;
|
||||||
|
|
||||||
typedef struct tFCurveSegmentLink {
|
typedef struct tFCurveSegmentLink {
|
||||||
|
@ -1110,8 +1111,8 @@ static void gauss_smooth_allocate_operator_data(tGraphSliderOp *gso,
|
||||||
BLI_addtail(&segment_links, segment_link);
|
BLI_addtail(&segment_links, segment_link);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ANIM_animdata_freelist(&anim_data);
|
|
||||||
|
|
||||||
|
operator_data->anim_data = anim_data;
|
||||||
operator_data->segment_links = segment_links;
|
operator_data->segment_links = segment_links;
|
||||||
gso->operator_data = operator_data;
|
gso->operator_data = operator_data;
|
||||||
}
|
}
|
||||||
|
@ -1125,6 +1126,7 @@ static void gauss_smooth_free_operator_data(void *operator_data)
|
||||||
}
|
}
|
||||||
MEM_freeN(gauss_data->kernel);
|
MEM_freeN(gauss_data->kernel);
|
||||||
BLI_freelistN(&gauss_data->segment_links);
|
BLI_freelistN(&gauss_data->segment_links);
|
||||||
|
ANIM_animdata_freelist(&gauss_data->anim_data);
|
||||||
MEM_freeN(gauss_data);
|
MEM_freeN(gauss_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1187,6 +1189,12 @@ static void gauss_smooth_modal_update(bContext *C, wmOperator *op)
|
||||||
{
|
{
|
||||||
tGraphSliderOp *gso = op->customdata;
|
tGraphSliderOp *gso = op->customdata;
|
||||||
|
|
||||||
|
bAnimContext ac;
|
||||||
|
|
||||||
|
if (ANIM_animdata_get_context(C, &ac) == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
gauss_smooth_draw_status_header(C, gso);
|
gauss_smooth_draw_status_header(C, gso);
|
||||||
|
|
||||||
const float factor = slider_factor_get_and_remember(op);
|
const float factor = slider_factor_get_and_remember(op);
|
||||||
|
@ -1202,6 +1210,11 @@ static void gauss_smooth_modal_update(bContext *C, wmOperator *op)
|
||||||
operator_data->kernel);
|
operator_data->kernel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LISTBASE_FOREACH (bAnimListElem *, ale, &operator_data->anim_data) {
|
||||||
|
ale->update |= ANIM_UPDATE_DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
ANIM_animdata_update(&ac, &operator_data->anim_data);
|
||||||
WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
|
WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1224,7 +1237,7 @@ static int gauss_smooth_invoke(bContext *C, wmOperator *op, const wmEvent *event
|
||||||
gso->free_operator_data = gauss_smooth_free_operator_data;
|
gso->free_operator_data = gauss_smooth_free_operator_data;
|
||||||
|
|
||||||
ED_slider_allow_overshoot_set(gso->slider, false);
|
ED_slider_allow_overshoot_set(gso->slider, false);
|
||||||
ease_draw_status_header(C, gso);
|
gauss_smooth_draw_status_header(C, gso);
|
||||||
|
|
||||||
return invoke_result;
|
return invoke_result;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue