diff options
Diffstat (limited to 'source/blender/draw/intern/draw_cache_impl_gpencil.c')
-rw-r--r-- | source/blender/draw/intern/draw_cache_impl_gpencil.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/source/blender/draw/intern/draw_cache_impl_gpencil.c b/source/blender/draw/intern/draw_cache_impl_gpencil.c index 7fe543db01f..5dab0070aff 100644 --- a/source/blender/draw/intern/draw_cache_impl_gpencil.c +++ b/source/blender/draw/intern/draw_cache_impl_gpencil.c @@ -686,6 +686,7 @@ void DRW_cache_gpencil_sbuffer_clear(Object *ob) #define GP_EDIT_STROKE_START (1 << 3) #define GP_EDIT_STROKE_END (1 << 4) #define GP_EDIT_POINT_DIMMED (1 << 5) +#define GP_EDIT_POINT_HIDDEN (1 << 6) typedef struct gpEditIterData { gpEditVert *verts; @@ -697,16 +698,19 @@ typedef struct gpEditCurveIterData { int vgindex; } gpEditCurveIterData; -static uint32_t gpencil_point_edit_flag(const bool layer_lock, - const bGPDspoint *pt, - int v, - int v_len) +static uint32_t gpencil_point_edit_flag( + const bool layer_lock, const bool is_bezier, const bGPDspoint *pt, int v, int v_len) { uint32_t sflag = 0; SET_FLAG_FROM_TEST(sflag, (!layer_lock) && pt->flag & GP_SPOINT_SELECT, GP_EDIT_POINT_SELECTED); SET_FLAG_FROM_TEST(sflag, v == 0, GP_EDIT_STROKE_START); SET_FLAG_FROM_TEST(sflag, v == (v_len - 1), GP_EDIT_STROKE_END); - SET_FLAG_FROM_TEST(sflag, pt->runtime.pt_orig == NULL, GP_EDIT_POINT_DIMMED); + if (!is_bezier) { + SET_FLAG_FROM_TEST(sflag, pt->runtime.pt_orig == NULL, GP_EDIT_POINT_DIMMED); + } + else { + SET_FLAG_FROM_TEST(sflag, ((pt->flag & GP_SPOINT_IS_BEZT_CONTROL) == 0), GP_EDIT_POINT_HIDDEN); + } return sflag; } @@ -725,6 +729,7 @@ static void gpencil_edit_stroke_iter_cb(bGPDlayer *gpl, const int v = gps->runtime.stroke_start + 1; MDeformVert *dvert = ((iter->vgindex > -1) && gps->dvert) ? gps->dvert : NULL; gpEditVert *vert_ptr = iter->verts + v; + const bool is_bezier = GPENCIL_STROKE_TYPE_BEZIER(gps); const bool layer_lock = (gpl->flag & GP_LAYER_LOCKED); uint32_t sflag = 0; @@ -733,12 +738,14 @@ static void gpencil_edit_stroke_iter_cb(bGPDlayer *gpl, SET_FLAG_FROM_TEST(sflag, gpf->runtime.onion_id != 0.0f, GP_EDIT_MULTIFRAME); for (int i = 0; i < v_len; i++) { - vert_ptr->vflag = sflag | gpencil_point_edit_flag(layer_lock, &gps->points[i], i, v_len); + vert_ptr->vflag = sflag | + gpencil_point_edit_flag(layer_lock, is_bezier, &gps->points[i], i, v_len); vert_ptr->weight = gpencil_point_edit_weight(dvert, i, iter->vgindex); vert_ptr++; } /* Draw line to first point to complete the loop for cyclic strokes. */ - vert_ptr->vflag = sflag | gpencil_point_edit_flag(layer_lock, &gps->points[0], 0, v_len); + vert_ptr->vflag = sflag | + gpencil_point_edit_flag(layer_lock, is_bezier, &gps->points[0], 0, v_len); vert_ptr->weight = gpencil_point_edit_weight(dvert, 0, iter->vgindex); } |