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:
authorAntonioya <blendergit@gmail.com>2018-09-14 23:24:03 +0300
committerAntonioya <blendergit@gmail.com>2018-09-14 23:54:18 +0300
commit54f1375e298696b81aea86862ae634eaa8c97464 (patch)
treef8a72c0d85e2f3be6bb0751272347a8f22e0c0c1 /source/blender
parent460731f39e438cf283080d9bd138c622eb255504 (diff)
GP: Add pressure option to eraser size
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/gpencil/gpencil_paint.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index 8239afd1a48..e8b4d1088df 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -1609,12 +1609,28 @@ static void gp_stroke_doeraser(tGPsdata *p)
bGPDlayer *gpl;
bGPDstroke *gps, *gpn;
rcti rect;
+ Brush *brush = p->brush;
+ Brush *eraser = p->eraser;
+ bool use_pressure = false;
+ float press = 1.0f;
+ /* detect if use pressure in eraser */
+ if (brush->gpencil_settings->brush_type == GP_BRUSH_TYPE_ERASE) {
+ use_pressure = (bool)(brush->gpencil_settings->flag & GP_BRUSH_USE_PRESSURE);
+ }
+ else if ((eraser != NULL) & (eraser->gpencil_settings->brush_type == GP_BRUSH_TYPE_ERASE)) {
+ use_pressure = (bool)(eraser->gpencil_settings->flag & GP_BRUSH_USE_PRESSURE);
+ }
+ if (use_pressure) {
+ press = p->pressure;
+ CLAMP(press, 0.01f, 1.0f);
+ }
/* rect is rectangle of eraser */
- rect.xmin = p->mval[0] - p->radius;
- rect.ymin = p->mval[1] - p->radius;
- rect.xmax = p->mval[0] + p->radius;
- rect.ymax = p->mval[1] + p->radius;
+ const int calc_radius = (int)p->radius * press;
+ rect.xmin = p->mval[0] - calc_radius;
+ rect.ymin = p->mval[1] - calc_radius;
+ rect.xmax = p->mval[0] + calc_radius;
+ rect.ymax = p->mval[1] + calc_radius;
if (p->sa->spacetype == SPACE_VIEW3D) {
if (p->flags & GP_PAINTFLAG_V3D_ERASER_DEPTH) {
@@ -1650,7 +1666,7 @@ static void gp_stroke_doeraser(tGPsdata *p)
* (e.g. 2D space strokes in the 3D view, if the same datablock is shared)
*/
if (ED_gpencil_stroke_can_use_direct(p->sa, gps)) {
- gp_stroke_eraser_dostroke(p, gpl, gpf, gps, p->mval, p->mvalo, p->radius, &rect);
+ gp_stroke_eraser_dostroke(p, gpl, gpf, gps, p->mval, p->mvalo, calc_radius, &rect);
}
}
}