Commit: b0d6cbfeec5dbf6a9baeca459d3f8b98dd93c148
Author: Antonio Vazquez
Date:   Wed Aug 30 10:52:29 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rBb0d6cbfeec5dbf6a9baeca459d3f8b98dd93c148

Speed up multiedit loop

If not multiedit, avoid the loop in select

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

M       source/blender/editors/gpencil/gpencil_brush.c
M       source/blender/editors/gpencil/gpencil_intern.h
M       source/blender/editors/screen/screen_context.c
M       source/blender/editors/transform/transform_conversions.c

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

diff --git a/source/blender/editors/gpencil/gpencil_brush.c 
b/source/blender/editors/gpencil/gpencil_brush.c
index e6f10d9326a..a04ff64c3ac 100644
--- a/source/blender/editors/gpencil/gpencil_brush.c
+++ b/source/blender/editors/gpencil/gpencil_brush.c
@@ -1446,7 +1446,12 @@ static bool gpsculpt_brush_apply_standard(bContext *C, 
tGP_BrushEditData *gso)
 
        CTX_DATA_BEGIN(C, bGPDlayer *, gpl, editable_gpencil_layers)
        {
-               for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
+               bGPDframe *init_gpf = gpl->actframe;
+               if (is_multiedit) {
+                       init_gpf = gpl->frames.first;
+               }
+
+               for (bGPDframe *gpf = init_gpf; gpf; gpf = gpf->next) {
                        if ((gpf == gpl->actframe) || ((gpf->flag & 
GP_FRAME_SELECT) && (is_multiedit))) {
 
                                /* calculate difference matrix */
@@ -1541,6 +1546,10 @@ static bool gpsculpt_brush_apply_standard(bContext *C, 
tGP_BrushEditData *gso)
                                }
 
                        }
+                       /* if not multiedit out of loop */
+                       if (!is_multiedit) {
+                               break;
+                       }
                }
        }
        CTX_DATA_END;
diff --git a/source/blender/editors/gpencil/gpencil_intern.h 
b/source/blender/editors/gpencil/gpencil_intern.h
index 0a217dbccf3..57abc007cc0 100644
--- a/source/blender/editors/gpencil/gpencil_intern.h
+++ b/source/blender/editors/gpencil/gpencil_intern.h
@@ -348,7 +348,11 @@ typedef enum ACTCONT_TYPES {
        bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd_);          
             \
        CTX_DATA_BEGIN(C, bGPDlayer*, gpl, editable_gpencil_layers)             
            \
        {                                                                       
            \
-               for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) 
{                        \
+               bGPDframe *init_gpf = gpl->actframe;                            
                    \
+               if (is_multiedit) {                                             
                    \
+                       init_gpf = gpl->frames.first;                           
                        \
+               }                                                               
                    \
+               for (bGPDframe *gpf = init_gpf; gpf; gpf = gpf->next) {         
               \
                        if ((gpf == gpl->actframe) || ((gpf->flag & 
GP_FRAME_SELECT) && (is_multiedit))) {  \
                                /* calculate difference matrix */               
                                \
                                float diff_mat[4][4];                           
                                \
@@ -366,6 +370,9 @@ typedef enum ACTCONT_TYPES {
 #define GP_EDITABLE_STROKES_END    \
                                }                  \
                        }                      \
+                       if (!is_multiedit) {   \
+                               break;             \
+                       }                      \
                }                          \
        }                              \
        CTX_DATA_END;                  \
diff --git a/source/blender/editors/screen/screen_context.c 
b/source/blender/editors/screen/screen_context.c
index fa11ad5cb41..737cc698aab 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -563,8 +563,12 @@ int ed_screen_context(const bContext *C, const char 
*member, bContextDataResult
                                if (gpencil_layer_is_editable(gpl) && 
(gpl->actframe)) {
                                        bGPDframe *gpf;
                                        bGPDstroke *gps;
+                                       bGPDframe *init_gpf = gpl->actframe;
+                                       if (is_multiedit) {
+                                               init_gpf = gpl->frames.first;
+                                       }
 
-                                       for (gpf = gpl->frames.first; gpf; gpf 
= gpf->next) {
+                                       for (gpf = init_gpf; gpf; gpf = 
gpf->next) {
                                                if ((gpf == gpl->actframe) || 
((gpf->flag & GP_FRAME_SELECT) && (is_multiedit))) {
                                                        for (gps = 
gpf->strokes.first; gps; gps = gps->next) {
                                                                if 
(ED_gpencil_stroke_can_use_direct(sa, gps)) {
@@ -577,6 +581,10 @@ int ed_screen_context(const bContext *C, const char 
*member, bContextDataResult
                                                                }
                                                        }
                                                }
+                                               /* if not multiedit out of loop 
*/
+                                               if (!is_multiedit) {
+                                                       break;
+                                               }
                                        }
                                }
                        }
diff --git a/source/blender/editors/transform/transform_conversions.c 
b/source/blender/editors/transform/transform_conversions.c
index 7a127c4f546..91c6a3551e2 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -7857,7 +7857,12 @@ static void createTransGPencil(bContext *C, TransInfo *t)
                if (gpencil_layer_is_editable(gpl) && (gpl->actframe != NULL)) {
                        bGPDframe *gpf;
                        bGPDstroke *gps;
-                       for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
+                       bGPDframe *init_gpf = gpl->actframe;
+                       if (is_multiedit) {
+                               init_gpf = gpl->frames.first;
+                       }
+
+                       for (gpf = init_gpf; gpf; gpf = gpf->next) {
                                if ((gpf == gpl->actframe) || ((gpf->flag & 
GP_FRAME_SELECT) && (is_multiedit))) {
 
                                        for (gps = gpf->strokes.first; gps; gps 
= gps->next) {
@@ -7897,6 +7902,10 @@ static void createTransGPencil(bContext *C, TransInfo *t)
                                                }
                                        }
                                }
+                               /* if not multiedit out of loop */
+                               if (!is_multiedit) {
+                                       break;
+                               }
                        }
                }
        }
@@ -7922,6 +7931,11 @@ static void createTransGPencil(bContext *C, TransInfo *t)
                        float diff_mat[4][4];
                        float inverse_diff_mat[4][4];
 
+                       bGPDframe *init_gpf = gpl->actframe;
+                       if (is_multiedit) {
+                               init_gpf = gpl->frames.first;
+                       }
+
                        /* calculate difference matrix */
                        ED_gpencil_parent_location(obact, gpd, gpl, diff_mat);
                        /* undo matrix */
@@ -7941,7 +7955,7 @@ static void createTransGPencil(bContext *C, TransInfo *t)
                        }
 
                        /* Loop over strokes, adding TransData for points as 
needed... */
-                       for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
+                       for (gpf = init_gpf; gpf; gpf = gpf->next) {
                                if ((gpf == gpl->actframe) || ((gpf->flag & 
GP_FRAME_SELECT) && (is_multiedit))) {
                                        for (gps = gpf->strokes.first; gps; gps 
= gps->next) {
                                                TransData *head = td;
@@ -8057,6 +8071,10 @@ static void createTransGPencil(bContext *C, TransInfo *t)
                                                }
                                        }
                                }
+                               /* if not multiedit out of loop */
+                               if (!is_multiedit) {
+                                       break;
+                               }
                        }
                }
        }

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

Reply via email to