diff options
author | Antonioya <blendergit@gmail.com> | 2019-04-13 11:47:38 +0300 |
---|---|---|
committer | Antonioya <blendergit@gmail.com> | 2019-04-13 12:19:03 +0300 |
commit | 789d242fa7bdd4cb8435ddce178ec43a36067615 (patch) | |
tree | 0622a08e56930064312c5e63df96ad1493130841 /source/blender/editors | |
parent | a43b373c429c16a66788791e66ec6e7338a85f0e (diff) |
GPencil: Implement Opacity transform
Add Shift+F to transform points opacity in Edit mode
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/include/ED_transform.h | 1 | ||||
-rw-r--r-- | source/blender/editors/transform/transform.c | 84 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_conversions.c | 10 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_ops.c | 1 |
4 files changed, 94 insertions, 2 deletions
diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h index 1bd8782bb12..bb5b72e3fa2 100644 --- a/source/blender/editors/include/ED_transform.h +++ b/source/blender/editors/include/ED_transform.h @@ -82,6 +82,7 @@ enum TfmMode { TFM_SEQ_SLIDE, TFM_BONE_ENVELOPE_DIST, TFM_NORMAL_ROTATION, + TFM_GPENCIL_OPACITY, }; /* TRANSFORM CONTEXTS */ diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 89536f5f092..4135a1b320d 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -205,6 +205,9 @@ static void applyAlign(TransInfo *t, const int mval[2]); static void initSeqSlide(TransInfo *t); static void applySeqSlide(TransInfo *t, const int mval[2]); + +static void initGPOpacity(TransInfo *t); +static void applyGPOpacity(TransInfo *t, const int mval[2]); /* end transform callbacks */ @@ -2613,6 +2616,9 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve case TFM_NORMAL_ROTATION: initNormalRotation(t); break; + case TFM_GPENCIL_OPACITY: + initGPOpacity(t); + break; } if (t->state == TRANS_CANCEL) { @@ -5525,6 +5531,84 @@ static void applyGPShrinkFatten(TransInfo *t, const int UNUSED(mval[2])) } /** \} */ +/* -------------------------------------------------------------------- */ +/* Transform (GPencil Opacity) */ + +/** \name Transform GPencil Strokes Opacity + * \{ */ + +static void initGPOpacity(TransInfo *t) +{ + t->mode = TFM_GPENCIL_OPACITY; + t->transform = applyGPOpacity; + + initMouseInputMode(t, &t->mouse, INPUT_SPRING); + + t->idx_max = 0; + t->num.idx_max = 0; + t->snap[0] = 0.0f; + t->snap[1] = 0.1f; + t->snap[2] = t->snap[1] * 0.1f; + + copy_v3_fl(t->num.val_inc, t->snap[1]); + t->num.unit_sys = t->scene->unit.system; + t->num.unit_type[0] = B_UNIT_NONE; + + t->flag |= T_NO_ZERO; +#ifdef USE_NUM_NO_ZERO + t->num.val_flag[0] |= NUM_NO_ZERO; +#endif + + t->flag |= T_NO_CONSTRAINT; +} + +static void applyGPOpacity(TransInfo *t, const int UNUSED(mval[2])) +{ + float ratio; + int i; + char str[UI_MAX_DRAW_STR]; + + ratio = t->values[0]; + + snapGridIncrement(t, &ratio); + + applyNumInput(&t->num, &ratio); + + t->values[0] = ratio; + + /* header print for NumInput */ + if (hasNumInput(&t->num)) { + char c[NUM_STR_REP_LEN]; + + outputNumInput(&(t->num), c, &t->scene->unit); + BLI_snprintf(str, sizeof(str), IFACE_("Opacity: %s"), c); + } + else { + BLI_snprintf(str, sizeof(str), IFACE_("Opacity: %3f"), ratio); + } + + FOREACH_TRANS_DATA_CONTAINER(t, tc) { + TransData *td = tc->data; + for (i = 0; i < tc->data_len; i++, td++) { + if (td->flag & TD_NOACTION) + break; + + if (td->flag & TD_SKIP) + continue; + + if (td->val) { + *td->val = td->ival * ratio; + /* apply PET */ + *td->val = (*td->val * td->factor) + ((1.0f - td->factor) * td->ival); + CLAMP(*td->val, 0.0f, 1.0f); + } + } + } + + ED_area_status_text(t->sa, str); +} +/** \} */ + /* -------------------------------------------------------------------- */ /* Transform (Push/Pull) */ diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 9985b0c9915..a3ee7dd5635 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -8567,8 +8567,14 @@ static void createTransGPencil(bContext *C, TransInfo *t) * but never for scale or mirror */ if ((t->mode != TFM_RESIZE) && (t->mode != TFM_MIRROR)) { - td->val = &pt->pressure; - td->ival = pt->pressure; + if (t->mode != TFM_GPENCIL_OPACITY) { + td->val = &pt->pressure; + td->ival = pt->pressure; + } + else { + td->val = &pt->strength; + td->ival = pt->strength; + } } /* screenspace needs special matrices... */ diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index 648e616a27c..d71f078935d 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -155,6 +155,7 @@ const EnumPropertyItem rna_enum_transform_mode_types[] = {TFM_ALIGN, "ALIGN", 0, "Align", ""}, {TFM_EDGE_SLIDE, "EDGESLIDE", 0, "Edge Slide", ""}, {TFM_SEQ_SLIDE, "SEQSLIDE", 0, "Sequence Slide", ""}, + {TFM_GPENCIL_OPACITY, "GPENCIL_OPACITY", 0, "GPencil_Opacity", ""}, {0, NULL, 0, NULL, NULL}, }; |