Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/editors/sculpt_paint/paint_ops.c38
-rw-r--r--source/blender/makesdna/DNA_brush_types.h4
-rw-r--r--source/blender/makesrna/intern/rna_brush.c12
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);