Fix memory leak running project-paint from Python
This commit is contained in:
parent
7a62fe316b
commit
e8c24ee0d9
|
@ -954,7 +954,6 @@ static int paint_invoke(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
|
||||
static int paint_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
PaintOperation *pop;
|
||||
PropertyRNA *strokeprop;
|
||||
PointerRNA firstpoint;
|
||||
float mouse[2];
|
||||
|
@ -966,18 +965,12 @@ static int paint_exec(bContext *C, wmOperator *op)
|
|||
|
||||
RNA_float_get_array(&firstpoint, "mouse", mouse);
|
||||
|
||||
if (!(pop = texture_paint_init(C, op, mouse))) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
op->customdata = paint_stroke_new(C, op, NULL, paint_stroke_test_start,
|
||||
paint_stroke_update_step,
|
||||
paint_stroke_redraw,
|
||||
paint_stroke_done, 0);
|
||||
/* frees op->customdata */
|
||||
paint_stroke_exec(C, op);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
return paint_stroke_exec(C, op);
|
||||
}
|
||||
|
||||
void PAINT_OT_image_paint(wmOperatorType *ot)
|
||||
|
|
|
@ -1237,23 +1237,33 @@ int paint_stroke_exec(bContext *C, wmOperator *op)
|
|||
{
|
||||
PaintStroke *stroke = op->customdata;
|
||||
|
||||
RNA_BEGIN (op->ptr, itemptr, "stroke")
|
||||
{
|
||||
/* only when executed for the first time */
|
||||
if (stroke->stroke_started == 0) {
|
||||
float mval[2];
|
||||
RNA_float_get_array(&itemptr, "mouse", mval);
|
||||
stroke->test_start(C, op, mval);
|
||||
stroke->stroke_started = 1;
|
||||
}
|
||||
/* only when executed for the first time */
|
||||
if (stroke->stroke_started == 0) {
|
||||
PropertyRNA *strokeprop;
|
||||
PointerRNA firstpoint;
|
||||
float mouse[2];
|
||||
|
||||
stroke->update_step(C, stroke, &itemptr);
|
||||
strokeprop = RNA_struct_find_property(op->ptr, "stroke");
|
||||
|
||||
if (RNA_property_collection_lookup_int(op->ptr, strokeprop, 0, &firstpoint)) {
|
||||
RNA_float_get_array(&firstpoint, "mouse", mouse);
|
||||
stroke->stroke_started = stroke->test_start(C, op, mouse);
|
||||
}
|
||||
}
|
||||
RNA_END;
|
||||
|
||||
if (stroke->stroke_started) {
|
||||
RNA_BEGIN (op->ptr, itemptr, "stroke")
|
||||
{
|
||||
stroke->update_step(C, stroke, &itemptr);
|
||||
}
|
||||
RNA_END;
|
||||
}
|
||||
|
||||
bool ok = (stroke->stroke_started != 0);
|
||||
|
||||
stroke_done(C, op);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
return ok ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
void paint_stroke_cancel(bContext *C, wmOperator *op)
|
||||
|
|
Loading…
Reference in New Issue