Commit: 596f10a0cf14741679a4b3228662e12a0ae591ff Author: Falk David Date: Thu Jul 9 16:24:04 2020 +0200 Branches: soc-2020-greasepencil-curve https://developer.blender.org/rB596f10a0cf14741679a4b3228662e12a0ae591ff
GPencil: Curve mode: Set stroke select flag Set/unset the selection flag for a stroke, when its curve is selected. This change is needed so that operators like "change end caps" work as expected in curve edit mode. =================================================================== M source/blender/blenkernel/BKE_gpencil.h M source/blender/blenkernel/intern/gpencil.c M source/blender/editors/gpencil/gpencil_select.c M source/blender/editors/gpencil/gpencil_utils.c =================================================================== diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h index ffc16dbbaaf..9259729695d 100644 --- a/source/blender/blenkernel/BKE_gpencil.h +++ b/source/blender/blenkernel/BKE_gpencil.h @@ -104,7 +104,7 @@ void BKE_gpencil_batch_cache_dirty_tag(struct bGPdata *gpd); void BKE_gpencil_batch_cache_free(struct bGPdata *gpd); void BKE_gpencil_stroke_sync_selection(struct bGPDstroke *gps); -void BKE_gpencil_curve_sync_selection(struct bGPDcurve *gpc); +void BKE_gpencil_curve_sync_selection(struct bGPDstroke *gps); struct bGPDframe *BKE_gpencil_frame_addnew(struct bGPDlayer *gpl, int cframe); struct bGPDframe *BKE_gpencil_frame_addcopy(struct bGPDlayer *gpl, int cframe); diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c index 1b734e2e792..4d3b820304a 100644 --- a/source/blender/blenkernel/intern/gpencil.c +++ b/source/blender/blenkernel/intern/gpencil.c @@ -934,13 +934,16 @@ void BKE_gpencil_stroke_sync_selection(bGPDstroke *gps) } } -void BKE_gpencil_curve_sync_selection(bGPDcurve *gpc) +void BKE_gpencil_curve_sync_selection(bGPDstroke *gps) { + bGPDcurve *gpc = gps->editcurve; if (gpc == NULL) { return; } + gps->flag &= ~GP_STROKE_SELECT; gpc->flag &= ~GP_CURVE_SELECT; + bool is_selected = false; for (int i = 0; i < gpc->tot_curve_points; i++) { bGPDcurve_point *gpc_pt = &gpc->curve_points[i]; @@ -960,6 +963,7 @@ void BKE_gpencil_curve_sync_selection(bGPDcurve *gpc) if (is_selected) { gpc->flag |= GP_CURVE_SELECT; + gps->flag |= GP_STROKE_SELECT; } } diff --git a/source/blender/editors/gpencil/gpencil_select.c b/source/blender/editors/gpencil/gpencil_select.c index 6dc7228b70a..0a231bee5cc 100644 --- a/source/blender/editors/gpencil/gpencil_select.c +++ b/source/blender/editors/gpencil/gpencil_select.c @@ -1612,6 +1612,7 @@ static void deselect_all_selected(bContext *C) } gpc->flag &= ~GP_CURVE_SELECT; + gps->flag &= ~GP_STROKE_SELECT; } } CTX_DATA_END; @@ -1620,6 +1621,7 @@ static void deselect_all_selected(bContext *C) static void gpencil_select_curve_point(bContext *C, const int mval[2], const int radius_squared, + bGPDstroke **r_gps, bGPDcurve **r_gpc, bGPDcurve_point **r_pt, char *handle) @@ -1658,6 +1660,7 @@ static void gpencil_select_curve_point(bContext *C, const int pt_distance = len_manhattan_v2v2_int(mval, screen_co); if (pt_distance <= radius_squared && pt_distance < hit_distance) { + *r_gps = gps; *r_gpc = gpc; *r_pt = gpc_pt; *handle = j; @@ -1726,10 +1729,10 @@ static int gpencil_select_exec(bContext *C, wmOperator *op) if (is_curve_edit) { gpencil_select_curve_point( - C, mval, radius_squared, &hit_curve, &hit_curve_point, &hit_curve_handle); + C, mval, radius_squared, &hit_stroke, &hit_curve, &hit_curve_point, &hit_curve_handle); } - if (hit_curve_point == NULL) { + if (hit_curve == NULL) { /* init space conversion stuff */ gpencil_point_conversion_init(C, &gsc); @@ -1831,9 +1834,11 @@ static int gpencil_select_exec(bContext *C, wmOperator *op) if (deselect == false) { hit_curve->flag |= GP_CURVE_SELECT; + hit_stroke->flag |= GP_STROKE_SELECT; } else { hit_curve->flag &= ~GP_CURVE_SELECT; + hit_stroke->flag &= ~GP_STROKE_SELECT; } } else { @@ -1866,6 +1871,7 @@ static int gpencil_select_exec(bContext *C, wmOperator *op) hit_curve_point->flag |= GP_CURVE_POINT_SELECT; BEZT_SEL_IDX(&hit_curve_point->bezt, hit_curve_handle); hit_curve->flag |= GP_CURVE_SELECT; + hit_stroke->flag |= GP_STROKE_SELECT; } else { /* we're adding selection, so selection must be true */ @@ -1898,7 +1904,7 @@ static int gpencil_select_exec(bContext *C, wmOperator *op) if (!BEZT_ISSEL_ANY(&hit_curve_point->bezt)) { hit_curve_point->flag &= ~GP_CURVE_POINT_SELECT; } - BKE_gpencil_curve_sync_selection(hit_curve); + BKE_gpencil_curve_sync_selection(hit_stroke); } else { /* deselect point */ diff --git a/source/blender/editors/gpencil/gpencil_utils.c b/source/blender/editors/gpencil/gpencil_utils.c index 82287b81171..7a98284889a 100644 --- a/source/blender/editors/gpencil/gpencil_utils.c +++ b/source/blender/editors/gpencil/gpencil_utils.c @@ -2635,10 +2635,11 @@ void ED_gpencil_select_curve_toggle_all(bContext *C, int action) for (int i = 0; i < gpc->tot_curve_points; i++) { bGPDcurve_point *gpc_pt = &gpc->curve_points[i]; BezTriple *bezt = &gpc_pt->bezt; - gpc_pt->flag |= GP_CURVE_POINT_SELECT; + gpc_pt->flag &= ~GP_CURVE_POINT_SELECT; BEZT_DESEL_ALL(bezt); } gpc->flag &= ~GP_CURVE_SELECT; + gps->flag &= ~GP_STROKE_SELECT; } GP_EDITABLE_CURVES_END(gps_iter); } @@ -2680,9 +2681,11 @@ void ED_gpencil_select_curve_toggle_all(bContext *C, int action) if (selected) { gpc->flag |= GP_CURVE_SELECT; + gps->flag |= GP_STROKE_SELECT; } else { gpc->flag &= ~GP_CURVE_SELECT; + gps->flag &= ~GP_STROKE_SELECT; } } CTX_DATA_END; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs