diff options
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_ops.c | 38 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_brush_types.h | 4 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_brush.c | 12 |
3 files changed, 34 insertions, 20 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_ops.c b/source/blender/editors/sculpt_paint/paint_ops.c index 40a18734948..20eb0a1ef2f 100644 --- a/source/blender/editors/sculpt_paint/paint_ops.c +++ b/source/blender/editors/sculpt_paint/paint_ops.c @@ -454,9 +454,9 @@ STENCIL_ROTATE } StencilControlMode; typedef struct { - int init_mouse[2]; - int init_spos[2]; - int init_sdim[2]; + float init_mouse[2]; + float init_spos[2]; + float init_sdim[2]; float init_rot; float init_angle; float lenorig; @@ -468,15 +468,16 @@ static int stencil_control_invoke(bContext *C, wmOperator *op, const wmEvent *ev { Paint *paint = paint_get_active_from_context(C); Brush *br = paint_brush(paint); - int mdiff[2]; + float mdiff[2]; + float mvalf[2] = {event->mval[0], event->mval[1]}; StencilControlData *scd = MEM_mallocN(sizeof(StencilControlData), "stencil_control"); - copy_v2_v2_int(scd->init_mouse, event->mval); - copy_v2_v2_int(scd->init_sdim, br->stencil_dimension); - copy_v2_v2_int(scd->init_spos, br->stencil_pos); - sub_v2_v2v2_int(mdiff, event->mval, br->stencil_pos); - scd->lenorig = sqrtf(mdiff[0] * mdiff[0] + mdiff[1] * mdiff[1]); + copy_v2_v2(scd->init_mouse, mvalf); + copy_v2_v2(scd->init_sdim, br->stencil_dimension); + copy_v2_v2(scd->init_spos, br->stencil_pos); + sub_v2_v2v2(mdiff, mvalf, br->stencil_pos); + scd->lenorig = len_v2(mdiff); scd->br = br; scd->init_rot = br->mtex.rot; scd->init_angle = atan2(mdiff[1], mdiff[0]); @@ -494,8 +495,8 @@ static int stencil_control_cancel(bContext *UNUSED(C), wmOperator *op) StencilControlData *scd = op->customdata; Brush *br = scd->br; - copy_v2_v2_int(br->stencil_dimension, scd->init_sdim); - copy_v2_v2_int(br->stencil_pos, scd->init_spos); + copy_v2_v2(br->stencil_dimension, scd->init_sdim); + copy_v2_v2(br->stencil_pos, scd->init_spos); br->mtex.rot = scd->init_rot; MEM_freeN(op->customdata); return OPERATOR_CANCELLED; @@ -508,28 +509,29 @@ static int stencil_control_modal(bContext *C, wmOperator *op, const wmEvent *eve switch (event->type) { case MOUSEMOVE: { - int mdiff[2]; + float mdiff[2]; + float mvalf[2] = {event->mval[0], event->mval[1]}; switch (scd->mode) { case STENCIL_TRANSLATE: - sub_v2_v2v2_int(mdiff, event->mval, scd->init_mouse); - add_v2_v2v2_int(scd->br->stencil_pos, scd->init_spos, + sub_v2_v2v2(mdiff, mvalf, scd->init_mouse); + add_v2_v2v2(scd->br->stencil_pos, scd->init_spos, mdiff); break; case STENCIL_SCALE: { float len, factor; - sub_v2_v2v2_int(mdiff, event->mval, scd->br->stencil_pos); - len = sqrtf(mdiff[0] * mdiff[0] + mdiff[1] * mdiff[1]); + sub_v2_v2v2(mdiff, mvalf, scd->br->stencil_pos); + len = len_v2(mdiff); factor = len / scd->lenorig; mdiff[0] = factor * scd->init_sdim[0]; mdiff[1] = factor * scd->init_sdim[1]; - copy_v2_v2_int(scd->br->stencil_dimension, mdiff); + copy_v2_v2(scd->br->stencil_dimension, mdiff); break; } case STENCIL_ROTATE: { float angle; - sub_v2_v2v2_int(mdiff, event->mval, scd->br->stencil_pos); + sub_v2_v2v2(mdiff, mvalf, scd->br->stencil_pos); angle = atan2(mdiff[1], mdiff[0]); angle = scd->init_rot + angle - scd->init_angle; if (angle < 0.0f) diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h index 11dd68bb11b..97ff24d3366 100644 --- a/source/blender/makesdna/DNA_brush_types.h +++ b/source/blender/makesdna/DNA_brush_types.h @@ -106,8 +106,8 @@ typedef struct Brush { float add_col[3]; float sub_col[3]; - int stencil_pos[2]; - int stencil_dimension[2]; + float stencil_pos[2]; + float stencil_dimension[2]; } Brush; /* Brush.flag */ diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index 8946274fc38..b0cc999a9e9 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -793,6 +793,18 @@ static void rna_def_brush(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Autosmooth", "Amount of smoothing to automatically apply to each stroke"); RNA_def_property_update(prop, 0, "rna_Brush_update"); + prop = RNA_def_property(srna, "stencil_pos", PROP_FLOAT, PROP_DISTANCE); + RNA_def_property_float_sdna(prop, NULL, "stencil_pos"); + RNA_def_property_array(prop, 2); + RNA_def_property_ui_text(prop, "Stencil Position", "Position of stencil in viewport"); + RNA_def_property_update(prop, 0, "rna_Brush_update"); + + prop = RNA_def_property(srna, "stencil_dimension", PROP_FLOAT, PROP_DISTANCE); + RNA_def_property_float_sdna(prop, NULL, "stencil_dimension"); + RNA_def_property_array(prop, 2); + RNA_def_property_ui_text(prop, "Stencil Dimensions", "Dimensions of stencil in viewport"); + RNA_def_property_update(prop, 0, "rna_Brush_update"); + /* flag */ prop = RNA_def_property(srna, "use_airbrush", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_AIRBRUSH); |