[Bf-blender-cvs] [f1c97a56142] temp-gpencil-bezier-v2: GPencil: curve select more/less
Falk David
noreply at git.blender.org
Fri Feb 19 18:16:41 CET 2021
Commit: f1c97a561423edeec96a1da87cf9f21f016573f3
Author: Falk David
Date: Thu Feb 18 13:38:36 2021 +0100
Branches: temp-gpencil-bezier-v2
https://developer.blender.org/rBf1c97a561423edeec96a1da87cf9f21f016573f3
GPencil: curve select more/less
===================================================================
M source/blender/editors/gpencil/gpencil_select.c
===================================================================
diff --git a/source/blender/editors/gpencil/gpencil_select.c b/source/blender/editors/gpencil/gpencil_select.c
index f6e90a5fecb..8588aa1f8d3 100644
--- a/source/blender/editors/gpencil/gpencil_select.c
+++ b/source/blender/editors/gpencil/gpencil_select.c
@@ -926,106 +926,98 @@ void GPENCIL_OT_select_last(wmOperatorType *ot)
static int gpencil_select_more_exec(bContext *C, wmOperator *UNUSED(op))
{
bGPdata *gpd = ED_gpencil_data_get_active(C);
- const bool is_curve_edit = (bool)GPENCIL_CURVE_EDIT_SESSIONS_ON(gpd);
/* If not edit/sculpt mode, the event has been caught but not processed. */
if (GPENCIL_NONE_EDIT_MODE(gpd)) {
return OPERATOR_CANCELLED;
}
bool changed = false;
- if (is_curve_edit) {
- GP_EDITABLE_STROKES_BEGIN (gp_iter, C, gpl, gps) {
- if (gps->editcurve != NULL && gps->flag & GP_STROKE_SELECT) {
- bGPDcurve *editcurve = gps->editcurve;
+ CTX_DATA_BEGIN (C, bGPDstroke *, gps, editable_gpencil_strokes) {
+ if (GPENCIL_STROKE_IS_CURVE(gps) && (gps->editcurve->flag & GP_CURVE_SELECT)) {
+ bGPDcurve *gpc = gps->editcurve;
- bool prev_sel = false;
- for (int i = 0; i < editcurve->tot_curve_points; i++) {
- bGPDcurve_point *gpc_pt = &editcurve->curve_points[i];
- BezTriple *bezt = &gpc_pt->bezt;
- if (gpc_pt->flag & GP_CURVE_POINT_SELECT) {
- /* selected point - just set flag for next point */
- prev_sel = true;
- }
- else {
- /* unselected point - expand selection if previous was selected... */
- if (prev_sel) {
- gpc_pt->flag |= GP_CURVE_POINT_SELECT;
- BEZT_SEL_ALL(bezt);
- changed = true;
- }
- prev_sel = false;
+ bool prev_sel = false;
+ for (int i = 0; i < gpc->tot_curve_points; i++) {
+ bGPDcurve_point *gpc_pt = &gpc->curve_points[i];
+ BezTriple *bezt = &gpc_pt->bezt;
+ if (gpc_pt->flag & GP_CURVE_POINT_SELECT) {
+ /* selected point - just set flag for next point */
+ prev_sel = true;
+ }
+ else {
+ /* unselected point - expand selection if previous was selected... */
+ if (prev_sel) {
+ gpc_pt->flag |= GP_CURVE_POINT_SELECT;
+ BEZT_SEL_ALL(bezt);
+ changed = true;
}
+ prev_sel = false;
}
+ }
- prev_sel = false;
- for (int i = editcurve->tot_curve_points - 1; i >= 0; i--) {
- bGPDcurve_point *gpc_pt = &editcurve->curve_points[i];
- BezTriple *bezt = &gpc_pt->bezt;
- if (gpc_pt->flag & GP_CURVE_POINT_SELECT) {
- prev_sel = true;
- }
- else {
- /* unselected point - expand selection if previous was selected... */
- if (prev_sel) {
- gpc_pt->flag |= GP_CURVE_POINT_SELECT;
- BEZT_SEL_ALL(bezt);
- changed = true;
- }
- prev_sel = false;
+ prev_sel = false;
+ for (int i = gpc->tot_curve_points - 1; i >= 0; i--) {
+ bGPDcurve_point *gpc_pt = &gpc->curve_points[i];
+ BezTriple *bezt = &gpc_pt->bezt;
+ if (gpc_pt->flag & GP_CURVE_POINT_SELECT) {
+ prev_sel = true;
+ }
+ else {
+ /* unselected point - expand selection if previous was selected... */
+ if (prev_sel) {
+ gpc_pt->flag |= GP_CURVE_POINT_SELECT;
+ BEZT_SEL_ALL(bezt);
+ changed = true;
}
+ prev_sel = false;
}
}
}
- GP_EDITABLE_STROKES_END(gp_iter);
- }
- else {
- CTX_DATA_BEGIN (C, bGPDstroke *, gps, editable_gpencil_strokes) {
- if (gps->flag & GP_STROKE_SELECT) {
- bGPDspoint *pt;
- int i;
- bool prev_sel;
+ else if (gps->flag & GP_STROKE_SELECT) {
+ bGPDspoint *pt;
+ int i;
+ bool prev_sel;
- /* First Pass: Go in forward order,
- * expanding selection if previous was selected (pre changes).
- * - This pass covers the "after" edges of selection islands
- */
- prev_sel = false;
- for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
- if (pt->flag & GP_SPOINT_SELECT) {
- /* selected point - just set flag for next point */
- prev_sel = true;
- }
- else {
- /* unselected point - expand selection if previous was selected... */
- if (prev_sel) {
- pt->flag |= GP_SPOINT_SELECT;
- changed = true;
- }
- prev_sel = false;
+ /* First Pass: Go in forward order,
+ * expanding selection if previous was selected (pre changes).
+ * - This pass covers the "after" edges of selection islands
+ */
+ prev_sel = false;
+ for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+ if (pt->flag & GP_SPOINT_SELECT) {
+ /* selected point - just set flag for next point */
+ prev_sel = true;
+ }
+ else {
+ /* unselected point - expand selection if previous was selected... */
+ if (prev_sel) {
+ pt->flag |= GP_SPOINT_SELECT;
+ changed = true;
}
+ prev_sel = false;
}
+ }
- /* Second Pass: Go in reverse order, doing the same as before (except in opposite order)
- * - This pass covers the "before" edges of selection islands
- */
- prev_sel = false;
- for (pt -= 1; i > 0; i--, pt--) {
- if (pt->flag & GP_SPOINT_SELECT) {
- prev_sel = true;
- }
- else {
- /* unselected point - expand selection if previous was selected... */
- if (prev_sel) {
- pt->flag |= GP_SPOINT_SELECT;
- changed = true;
- }
- prev_sel = false;
+ /* Second Pass: Go in reverse order, doing the same as before (except in opposite order)
+ * - This pass covers the "before" edges of selection islands
+ */
+ prev_sel = false;
+ for (pt -= 1; i > 0; i--, pt--) {
+ if (pt->flag & GP_SPOINT_SELECT) {
+ prev_sel = true;
+ }
+ else {
+ /* unselected point - expand selection if previous was selected... */
+ if (prev_sel) {
+ pt->flag |= GP_SPOINT_SELECT;
+ changed = true;
}
+ prev_sel = false;
}
}
}
- CTX_DATA_END;
}
+ CTX_DATA_END;
if (changed) {
/* updates */
@@ -1065,7 +1057,6 @@ void GPENCIL_OT_select_more(wmOperatorType *ot)
static int gpencil_select_less_exec(bContext *C, wmOperator *UNUSED(op))
{
bGPdata *gpd = ED_gpencil_data_get_active(C);
- const bool is_curve_edit = (bool)GPENCIL_CURVE_EDIT_SESSIONS_ON(gpd);
/* If not edit/sculpt mode, the event has been caught but not processed. */
if (GPENCIL_NONE_EDIT_MODE(gpd)) {
@@ -1073,105 +1064,115 @@ static int gpencil_select_less_exec(bContext *C, wmOperator *UNUSED(op))
}
bool changed = false;
- if (is_curve_edit) {
- GP_EDITABLE_STROKES_BEGIN (gp_iter, C, gpl, gps) {
- if (gps->editcurve != NULL && gps->flag & GP_STROKE_SELECT) {
- bGPDcurve *editcurve = gps->editcurve;
- int i;
+ CTX_DATA_BEGIN (C, bGPDstroke *, gps, editable_gpencil_strokes) {
+ if (GPENCIL_STROKE_IS_CURVE(gps) && (gps->editcurve->flag & GP_CURVE_SELECT)) {
+ bGPDcurve *gpc = gps->editcurve;
+ int tot_selected = 0, num_deselected = 0;
- bool prev_sel = false;
- for (i = 0; i < editcurve->tot_curve_points; i++) {
- bGPDcurve_point *gpc_pt = &editcurve->curve_points[i];
- BezTriple *bezt = &gpc_pt->bezt;
- if (gpc_pt->flag & GP_CURVE_POINT_SELECT) {
- /* shrink if previous wasn't selected */
- if (prev_sel == false) {
- gpc_pt->flag &= ~GP_CURVE_POINT_SELECT;
- BEZT_DESEL_ALL(bezt);
- changed = true;
- }
- prev_sel = true;
- }
- else {
- /* mark previous as being unselected - and hence, is trigger for shrinking */
- prev_sel = false;
+ bool prev_sel = false;
+ int i;
+ for (i = 0; i < gpc->tot_curve_points; i++) {
+ bGPDcurve_point *gpc_pt = &gpc->curve_points[i];
+ BezTriple *bezt = &gpc_pt->bezt;
+ if (gpc_pt->flag & GP_CURVE_POINT_SELECT) {
+ /* shrink if previous wasn't selected */
+ if (prev_sel == false) {
+ gpc_pt->flag &= ~GP_CURVE_POINT_SELECT;
+ BEZT_DESEL_ALL(bezt);
+ changed = true;
+ num_deselected++;
}
+ prev_sel = true;
+ tot_selected++;
+ }
+ else {
+ /* mark previous as being unselected - and hence, is trigger for shrinking */
+ prev_sel = false;
}
+ }
- /* Second Pass: Go in reverse order, doing the same as before (except in opposite order)
- * - This pass covers the "before" edges of selection islands
- */
- prev_sel = false;
- for (i = editcurve->tot_curve_points - 1; i > 0; i--) {
- bGPDcurve_point *gpc_pt = &editcurve->curve_points[i];
- BezTriple *bezt = &gpc_pt->bezt;
- if (gpc_pt->flag & GP_CURVE_POINT_SELECT) {
- /* shrink if previous wasn't selected */
- if (prev_sel == false) {
- gpc_pt->flag &= ~GP_CURVE_POINT_SELECT;
- BEZT_DESEL_ALL(bezt);
- changed = true;
- }
- prev_sel = true;
- }
- else {
- /* mark previous as being unselected - and hence, is trigger for shrinking */
- prev_sel = false;
+ /* Second Pass: Go in reverse order, doing the same as before (except in opposite order)
+ * - This pass covers the "before" edges of selection islands
+ */
+ prev_sel = false;
+ for (i = gpc->tot_curve_points - 1; i > 0; i--) {
+ bGPDcurve_point *gpc_pt = &gpc->curve_points[i];
+ BezTriple *bezt = &gpc_pt->bezt;
+ if (gpc_pt->flag & GP_CURVE_POINT_SELECT) {
+
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list