[Bf-blender-cvs] [41e5c61] GPencil_EditStrokes: Deselecting GP strokes deselects them for all frames and all (editable) layers
Joshua Leung
noreply at git.blender.org
Tue Oct 21 15:23:41 CEST 2014
Commit: 41e5c6198f218a7de0adbab2dad41a6287d0c9d3
Author: Joshua Leung
Date: Fri Oct 17 00:16:52 2014 +1300
Branches: GPencil_EditStrokes
https://developer.blender.org/rB41e5c6198f218a7de0adbab2dad41a6287d0c9d3
Deselecting GP strokes deselects them for all frames and all (editable) layers
===================================================================
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 2965062..3991ec3 100644
--- a/source/blender/editors/gpencil/gpencil_select.c
+++ b/source/blender/editors/gpencil/gpencil_select.c
@@ -112,38 +112,73 @@ static int gpencil_select_all_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
}
- /* select or deselect all strokes */
- CTX_DATA_BEGIN(C, bGPDstroke *, gps, editable_gpencil_strokes)
- {
- bGPDspoint *pt;
- int i;
- bool selected = false;
-
- /* Change selection status of all points, then make the stroke match */
- for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
- switch (action) {
- case SEL_SELECT:
- pt->flag |= GP_SPOINT_SELECT;
- break;
- case SEL_DESELECT:
- pt->flag &= ~GP_SPOINT_SELECT;
- break;
- case SEL_INVERT:
- pt->flag ^= GP_SPOINT_SELECT;
- break;
+ /* if deselecting, we need to deselect strokes across all frames
+ * - Currently, an exception is only given for deselection
+ * Selecting and toggling should only affect what's visible,
+ * while deselecting helps clean up unintended/forgotten
+ * stuff on other frames
+ */
+ if (action == SEL_DESELECT) {
+ /* deselect strokes across editable layers
+ * NOTE: we limit ourselves to editable layers, since once a layer is "locked/hidden
+ * nothing should be able to touch it
+ */
+ CTX_DATA_BEGIN(C, bGPDlayer *, gpl, editable_gpencil_layers)
+ {
+ bGPDframe *gpf;
+
+ /* deselect all strokes on all frames */
+ for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
+ bGPDstroke *gps;
+
+ for (gps = gpf->strokes.first; gps; gps = gps->next) {
+ bGPDspoint *pt;
+ int i;
+
+ for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+ pt->flag &= ~GP_SPOINT_SELECT;
+ }
+
+ gps->flag &= ~GP_STROKE_SELECT;
+ }
+ }
+ }
+ CTX_DATA_END;
+ }
+ else {
+ /* select or deselect all strokes */
+ CTX_DATA_BEGIN(C, bGPDstroke *, gps, editable_gpencil_strokes)
+ {
+ bGPDspoint *pt;
+ int i;
+ bool selected = false;
+
+ /* Change selection status of all points, then make the stroke match */
+ for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+ switch (action) {
+ case SEL_SELECT:
+ pt->flag |= GP_SPOINT_SELECT;
+ break;
+ //case SEL_DESELECT:
+ // pt->flag &= ~GP_SPOINT_SELECT;
+ // break;
+ case SEL_INVERT:
+ pt->flag ^= GP_SPOINT_SELECT;
+ break;
+ }
+
+ if (pt->flag & GP_SPOINT_SELECT)
+ selected = true;
}
- if (pt->flag & GP_SPOINT_SELECT)
- selected = true;
+ /* Change status of stroke */
+ if (selected)
+ gps->flag |= GP_STROKE_SELECT;
+ else
+ gps->flag &= ~GP_STROKE_SELECT;
}
-
- /* Change status of stroke */
- if (selected)
- gps->flag |= GP_STROKE_SELECT;
- else
- gps->flag &= ~GP_STROKE_SELECT;
+ CTX_DATA_END;
}
- CTX_DATA_END;
/* updates */
WM_event_add_notifier(C, NC_GPENCIL | NA_SELECTED, NULL);
More information about the Bf-blender-cvs
mailing list