Commit: 779826d2956c86991239f5b4b1b8a9c8544a999f
Author: Joshua Leung
Date:   Sat Oct 11 11:43:43 2014 +1300
Branches: GPencil_EditStrokes
https://developer.blender.org/rB779826d2956c86991239f5b4b1b8a9c8544a999f

Code cleanup: Separated out selection syncing logic for strokes into an API 
Function

===================================================================

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/makesrna/intern/rna_gpencil.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_gpencil.h 
b/source/blender/blenkernel/BKE_gpencil.h
index 86c1116..8095d0f 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -35,6 +35,7 @@ struct ListBase;
 struct bGPdata;
 struct bGPDlayer;
 struct bGPDframe;
+struct bGPDstroke;
 
 /* ------------ Grease-Pencil API ------------------ */
 
@@ -43,6 +44,8 @@ void free_gpencil_frames(struct bGPDlayer *gpl);
 void free_gpencil_layers(struct ListBase *list);
 void BKE_gpencil_free(struct bGPdata *gpd);
 
+void gpencil_stroke_sync_selection(struct bGPDstroke *gps);
+
 struct bGPDframe *gpencil_frame_addnew(struct bGPDlayer *gpl, int cframe);
 struct bGPDlayer *gpencil_layer_addnew(struct bGPdata *gpd, const char *name, 
int setactive);
 struct bGPdata *gpencil_data_addnew(const char name[]);
diff --git a/source/blender/blenkernel/intern/gpencil.c 
b/source/blender/blenkernel/intern/gpencil.c
index e226e9d..fc09400 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -300,6 +300,31 @@ bGPdata *gpencil_data_duplicate(bGPdata *src)
        return dst;
 }
 
+/* -------- GP-Stroke API --------- */
+
+/* ensure selection status of stroke is in sync with its points */
+void gpencil_stroke_sync_selection(bGPDstroke *gps)
+{
+       bGPDspoint *pt;
+       int i;
+       
+       /* error checking */
+       if (gps == NULL)
+               return;
+       
+       /* we'll stop when we find the first selected point,
+        * so initially, we must deselect
+        */
+       gps->flag &= ~GP_STROKE_SELECT;
+       
+       for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+               if (pt->flag & GP_SPOINT_SELECT) {
+                       gps->flag |= GP_STROKE_SELECT;
+                       break;
+               }
+       }
+}
+
 /* -------- GP-Frame API ---------- */
 
 /* delete the last stroke of the given frame */
diff --git a/source/blender/editors/gpencil/gpencil_select.c 
b/source/blender/editors/gpencil/gpencil_select.c
index 6088c63..2d27f66 100644
--- a/source/blender/editors/gpencil/gpencil_select.c
+++ b/source/blender/editors/gpencil/gpencil_select.c
@@ -248,17 +248,8 @@ static bool gp_stroke_do_circle_sel(bGPDstroke *gps, 
ARegion *ar, View2D *v2d, r
                        }
                }
                
-               /* Do a second pass to sync up the stroke selection with the 
points selection 
-                * - We only need a single selected vert to have a selected 
stroke
-                */
-               gps->flag &= ~GP_STROKE_SELECT;
-               
-               for (i = 0, pt1 = gps->points; i < gps->totpoints; i++, pt1++) {
-                       if (pt1->flag & GP_SPOINT_SELECT) {
-                               gps->flag |= GP_STROKE_SELECT;
-                               break;
-                       }
-               }
+               /* Ensure that stroke selection is in sync with its points */
+               gpencil_stroke_sync_selection(gps);
        }
        
        return changed;
@@ -514,21 +505,11 @@ static int gpencil_select_exec(bContext *C, wmOperator 
*op)
                        hit_stroke->flag |= GP_STROKE_SELECT;
                }
                else {
-                       bGPDspoint *pt;
-                       int i;
-                       
                        /* deselect point */
                        hit_point->flag &= ~GP_SPOINT_SELECT;
                        
                        /* ensure that stroke is selected correctly */
-                       hit_stroke->flag &= ~GP_STROKE_SELECT;
-                       
-                       for (i = 0, pt = hit_stroke->points; i < 
hit_stroke->totpoints; i++, pt++) {
-                               if (pt->flag & GP_SPOINT_SELECT) {
-                                       hit_stroke->flag |= GP_STROKE_SELECT;
-                                       break;
-                               }
-                       }
+                       gpencil_stroke_sync_selection(hit_stroke);
                }
        }
        
diff --git a/source/blender/makesrna/intern/rna_gpencil.c 
b/source/blender/makesrna/intern/rna_gpencil.c
index 5069a62..9a474a1 100644
--- a/source/blender/makesrna/intern/rna_gpencil.c
+++ b/source/blender/makesrna/intern/rna_gpencil.c
@@ -161,9 +161,6 @@ static void rna_GPencil_stroke_point_select_set(PointerRNA 
*ptr, const int value
         */
        gps = rna_GPencil_stroke_point_find_stroke(gpd, pt, NULL, NULL);
        if (gps) {
-               bGPDspoint *spt;
-               int i;
-               
                /* Set the new selection state for the point */
                if (value)
                        pt->flag |= GP_SPOINT_SELECT;
@@ -171,14 +168,7 @@ static void rna_GPencil_stroke_point_select_set(PointerRNA 
*ptr, const int value
                        pt->flag &= ~GP_SPOINT_SELECT;
                
                /* Check if the stroke should be selected or not... */
-               gps->flag &= ~GP_STROKE_SELECT;
-               
-               for (i = 0, spt = gps->points; i < gps->totpoints; i++, spt++) {
-                       if (spt->flag & GP_SPOINT_SELECT) {
-                               gps->flag |= GP_STROKE_SELECT;
-                               break;
-                       }
-               }
+               gpencil_stroke_sync_selection(gps);
        }
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to