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:
Diffstat (limited to 'source/blender/draw/intern/draw_cache_impl_gpencil.c')
-rw-r--r--source/blender/draw/intern/draw_cache_impl_gpencil.c21
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);
}