Restoring all the whitespace!
authorJoshua Leung <aligorith@gmail.com>
Fri, 26 Dec 2014 23:09:29 +0000 (12:09 +1300)
committerJoshua Leung <aligorith@gmail.com>
Sat, 27 Dec 2014 14:05:09 +0000 (03:05 +1300)
source/blender/editors/gpencil/drawgpencil.c
source/blender/editors/gpencil/editaction_gpencil.c
source/blender/editors/gpencil/gpencil_edit.c
source/blender/editors/gpencil/gpencil_ops.c
source/blender/editors/gpencil/gpencil_paint.c
source/blender/editors/gpencil/gpencil_select.c
source/blender/editors/gpencil/gpencil_undo.c

index 174e7b609ce84edac8d9d79ade1887f4596ccdca..f7795a3c2e44ae54964e3ee4e4fed3bf81ca57b8 100644 (file)
@@ -93,15 +93,15 @@ static void gp_draw_stroke_buffer(tGPspoint *points, int totpoints, short thickn
 {
        tGPspoint *pt;
        int i;
-
+       
        /* error checking */
        if ((points == NULL) || (totpoints <= 0))
                return;
-
+       
        /* check if buffer can be drawn */
        if (dflag & (GP_DRAWDATA_ONLY3D | GP_DRAWDATA_ONLYV2D))
                return;
-
+       
        /* if drawing a single point, draw it larger */
        if (totpoints == 1) {
                /* draw point */
@@ -114,13 +114,13 @@ static void gp_draw_stroke_buffer(tGPspoint *points, int totpoints, short thickn
        }
        else {
                float oldpressure = points[0].pressure;
-
+               
                /* draw stroke curve */
                if (G.debug & G_DEBUG) setlinestyle(2);
-
+               
                glLineWidth(oldpressure * thickness);
                glBegin(GL_LINE_STRIP);
-
+               
                for (i = 0, pt = points; i < totpoints && pt; i++, pt++) {
                        /* if there was a significant pressure change, stop the curve, change the thickness of the stroke,
                         * and continue drawing again (since line-width cannot change in middle of GL_LINE_STRIP)
@@ -129,20 +129,20 @@ static void gp_draw_stroke_buffer(tGPspoint *points, int totpoints, short thickn
                                glEnd();
                                glLineWidth(pt->pressure * thickness);
                                glBegin(GL_LINE_STRIP);
-
+                               
                                /* need to roll-back one point to ensure that there are no gaps in the stroke */
                                if (i != 0) glVertex2iv(&(pt - 1)->x);
-
+                               
                                /* now the point we want... */
                                glVertex2iv(&pt->x);
-
+                               
                                oldpressure = pt->pressure;
                        }
                        else
                                glVertex2iv(&pt->x);
                }
                glEnd();
-
+               
                /* reset for predictable OpenGL context */
                glLineWidth(1.0f);
 
@@ -162,14 +162,14 @@ static void gp_calc_2d_stroke_xy(bGPDspoint *pt, short sflag, int offsx, int off
        else if (sflag & GP_STROKE_2DIMAGE) {
                const float x = (float)((pt->x * winx) + offsx);
                const float y = (float)((pt->y * winy) + offsy);
-
+               
                r_co[0] = x;
                r_co[1] = y;
        }
        else {
                const float x = (float)(pt->x / 100 * winx) + offsx;
                const float y = (float)(pt->y / 100 * winy) + offsy;
-
+               
                r_co[0] = x;
                r_co[1] = y;
        }
@@ -185,36 +185,36 @@ static void gp_draw_stroke_volumetric_buffer(tGPspoint *points, int totpoints, s
 {
        GLUquadricObj *qobj = gluNewQuadric();
        float modelview[4][4];
-
+       
        tGPspoint *pt;
        int i;
-
+       
        /* error checking */
        if ((points == NULL) || (totpoints <= 0))
                return;
-
+       
        /* check if buffer can be drawn */
        if (dflag & (GP_DRAWDATA_ONLY3D | GP_DRAWDATA_ONLYV2D))
                return;
-
+       
        /* get basic matrix - should be camera space (i.e "identity") */
        glGetFloatv(GL_MODELVIEW_MATRIX, (float *)modelview);
-
+       
        /* draw points */
        glPushMatrix();
-
+       
        for (i = 0, pt = points; i < totpoints; i++, pt++) {
                /* set the transformed position */
                // TODO: scale should change based on zoom level, which requires proper translation mult too!
                modelview[3][0] = pt->x;
                modelview[3][1] = pt->y;
-
+               
                glLoadMatrixf((float *)modelview);
-
+               
                /* draw the disk using the current state... */
                gluDisk(qobj, 0.0,  pt->pressure * thickness, 32, 1);
-
-
+               
+               
                modelview[3][0] = modelview[3][1] = 0.0f;
        }
 
@@ -231,10 +231,10 @@ static void gp_draw_stroke_volumetric_2d(bGPDspoint *points, int totpoints, shor
        float modelview[4][4];
        float baseloc[3];
        float scalefac = 1.0f;
-
+       
        bGPDspoint *pt;
        int i;
-
+       
        
        /* HACK: We need a scale factor for the drawing in the image editor,
         * which seems to use 1 unit as it's maximum size, whereas everything
@@ -243,30 +243,30 @@ static void gp_draw_stroke_volumetric_2d(bGPDspoint *points, int totpoints, shor
        if ((dflag & GP_DRAWDATA_IEDITHACK) && (dflag & GP_DRAWDATA_ONLYV2D)) {
                scalefac = 0.001f;
        }
-
+       
        /* get basic matrix */
        glGetFloatv(GL_MODELVIEW_MATRIX, (float *)modelview);
        copy_v3_v3(baseloc, modelview[3]);
-
+       
        /* draw points */
        glPushMatrix();
-
+       
        for (i = 0, pt = points; i < totpoints; i++, pt++) {
                /* set the transformed position */
                float co[2];
-
+               
                gp_calc_2d_stroke_xy(pt, sflag, offsx, offsy, winx, winy, co);
                translate_m4(modelview, co[0], co[1], 0.0f);
-
+               
                glLoadMatrixf((float *)modelview);
-
+               
                /* draw the disk using the current state... */
                gluDisk(qobj, 0.0,  pt->pressure * thickness * scalefac, 32, 1);
-
+               
                /* restore matrix */
                copy_v3_v3(modelview[3], baseloc);
        }
-
+       
        glPopMatrix();
        gluDeleteQuadric(qobj);
 }
@@ -276,18 +276,18 @@ static void gp_draw_stroke_volumetric_3d(bGPDspoint *points, int totpoints, shor
                                          short UNUSED(dflag), short UNUSED(sflag))
 {
        GLUquadricObj *qobj = gluNewQuadric();
-
+       
        float base_modelview[4][4], modelview[4][4];
        float base_loc[3];
-
+       
        bGPDspoint *pt;
        int i;
-
+       
        
        /* Get the basic modelview matrix we use for performing calculations */
        glGetFloatv(GL_MODELVIEW_MATRIX, (float *)base_modelview);
        copy_v3_v3(base_loc, base_modelview[3]);
-
+       
        /* Create the basic view-aligned billboard matrix we're going to actually draw qobj with:
         * - We need to knock out the rotation so that we are
         *   simply left with a camera-facing billboard
@@ -296,28 +296,28 @@ static void gp_draw_stroke_volumetric_3d(bGPDspoint *points, int totpoints, shor
         *   large!
         */
        scale_m4_fl(modelview, 0.1f);
-
+       
        /* draw each point as a disk... */
        glPushMatrix();
-
+       
        for (i = 0, pt = points; i < totpoints && pt; i++, pt++) {
                /* apply translation to base_modelview, so that the translated point is put in the right place */
                translate_m4(base_modelview, pt->x, pt->y, pt->z);
-
+               
                /* copy the translation component to the billboard matrix we're going to use,
                 * then reset the base matrix to the original values so that we can do the same
                 * for the next point without accumulation/pollution effects
                 */
                copy_v3_v3(modelview[3], base_modelview[3]); /* copy offset value */
                copy_v3_v3(base_modelview[3], base_loc);     /* restore */
-
+               
                /* apply our billboard matrix for drawing... */
                glLoadMatrixf((float *)modelview);
-
+               
                /* draw the disk using the current state... */
                gluDisk(qobj, 0.0,  pt->pressure * thickness, 32, 1);
        }
-
+       
        glPopMatrix();
        gluDeleteQuadric(qobj);
 }
@@ -332,28 +332,28 @@ static void gp_draw_stroke_fill(bGPDspoint *points, int totpoints, short UNUSED(
 {
        bGPDspoint *pt;
        int i;
-
+       
        BLI_assert(totpoints >= 3);
-
+       
        /* As an initial implementation, we use the OpenGL filled polygon drawing
         * here since it's the easiest option to implement for this case. It does
         * come with limitations (notably for concave shapes), though it shouldn't
         * be much of an issue in most cases.
         */
        glBegin(GL_POLYGON);
-
+       
        for (i = 0, pt = points; i < totpoints; i++, pt++) {
                if (sflag & GP_STROKE_3DSPACE) {
                        glVertex3fv(&pt->x);
                }
                else {
                        float co[2];
-
+                       
                        gp_calc_2d_stroke_xy(pt, sflag, offsx, offsy, winx, winy, co);
                        glVertex2fv(co);
                }
        }
-
+       
        glEnd();
 }
 
@@ -371,10 +371,10 @@ static void gp_draw_stroke_point(bGPDspoint *points, short thickness, short dfla
        }
        else {
                float co[2];
-
+               
                /* get coordinates of point */
                gp_calc_2d_stroke_xy(points, sflag, offsx, offsy, winx, winy, co);
-
+               
                /* if thickness is less than GP_DRAWTHICKNESS_SPECIAL, simple dot looks ok
                 *  - also mandatory in if Image Editor 'image-based' dot
                 */
@@ -388,14 +388,14 @@ static void gp_draw_stroke_point(bGPDspoint *points, short thickness, short dfla
                else {
                        /* draw filled circle as is done in circf (but without the matrix push/pops which screwed things up) */
                        GLUquadricObj *qobj = gluNewQuadric();
-
+                       
                        gluQuadricDrawStyle(qobj, GLU_FILL);
-
+                       
                        /* need to translate drawing position, but must reset after too! */
                        glTranslatef(co[0], co[1], 0.0);
                        gluDisk(qobj, 0.0,  thickness, 32, 1);
                        glTranslatef(-co[0], -co[1], 0.0);
-
+                       
                        gluDeleteQuadric(qobj);
                }
        }
@@ -407,7 +407,7 @@ static void gp_draw_stroke_3d(bGPDspoint *points, int totpoints, short thickness
        bGPDspoint *pt;
        float curpressure = points[0].pressure;
        int i;
-
+       
        /* draw stroke curve */
        glLineWidth(curpressure * thickness);
        glBegin(GL_LINE_STRIP);
@@ -421,10 +421,10 @@ static void gp_draw_stroke_3d(bGPDspoint *points, int totpoints, short thickness
                        curpressure = pt->pressure;
                        glLineWidth(curpressure * thickness);
                        glBegin(GL_LINE_STRIP);
-
+                       
                        /* need to roll-back one point to ensure that there are no gaps in the stroke */
                        if (i != 0) glVertex3fv(&(pt - 1)->x);
-
+                       
                        /* now the point we want... */
                        glVertex3fv(&pt->x);
                }
@@ -452,13 +452,13 @@ static void gp_draw_stroke_2d(bGPDspoint *points, int totpoints, short thickness
 {
        /* otherwise thickness is twice that of the 3D view */
        float thickness = (float)thickness_s * 0.5f;
-
+       
        /* strokes in Image Editor need a scale factor, since units there are not pixels! */
        float scalefac  = 1.0f;
        if ((dflag & GP_DRAWDATA_IEDITHACK) && (dflag & GP_DRAWDATA_ONLYV2D)) {
                scalefac = 0.001f;
        }
-
+       
        /* tessellation code - draw stroke as series of connected quads with connection
         * edges rotated to minimize shrinking artifacts, and rounded endcaps
         */
@@ -466,31 +466,31 @@ static void gp_draw_stroke_2d(bGPDspoint *points, int totpoints, short thickness
                bGPDspoint *pt1, *pt2;
                float pm[2];
                int i;
-
+               
                glShadeModel(GL_FLAT);
                glBegin(GL_QUADS);
-
+               
                for (i = 0, pt1 = points, pt2 = points + 1; i < (totpoints - 1); i++, pt1++, pt2++) {
                        float s0[2], s1[2];     /* segment 'center' points */
                        float t0[2], t1[2];     /* tessellated coordinates */
                        float m1[2], m2[2];     /* gradient and normal */
                        float mt[2], sc[2];     /* gradient for thickness, point for end-cap */
                        float pthick;           /* thickness at segment point */
-
+                       
                        /* get x and y coordinates from points */
                        gp_calc_2d_stroke_xy(pt1, sflag, offsx, offsy, winx, winy, s0);
                        gp_calc_2d_stroke_xy(pt2, sflag, offsx, offsy, winx, winy, s1);
-
+                       
                        /* calculate gradient and normal - 'angle'=(ny/nx) */
                        m1[1] = s1[1] - s0[1];
                        m1[0] = s1[0] - s0[0];
                        normalize_v2(m1);
                        m2[1] = -m1[0];
                        m2[0] = m1[1];
-
+                       
                        /* always use pressure from first point here */
                        pthick = (pt1->pressure * thickness * scalefac);
-
+                       
                        /* if the first segment, start of segment is segment's normal */
                        if (i == 0) {
                                /* draw start cap first
@@ -500,24 +500,24 @@ static void gp_draw_stroke_2d(bGPDspoint *points, int totpoints, short thickness
                                mt[1] = m2[1] * pthick * 0.5f;
                                sc[0] = s0[0] - (m1[0] * pthick * 0.75f);
                                sc[1] = s0[1] - (m1[1] * pthick * 0.75f);
-
+                               
                                t0[0] = sc[0] - mt[0];
                                t0[1] = sc[1] - mt[1];
                                t1[0] = sc[0] + mt[0];
                                t1[1] = sc[1] + mt[1];
-
+                               
                                glVertex2fv(t0);
                                glVertex2fv(t1);
-
+                               
                                /* calculate points for start of segment */
                                mt[0] = m2[0] * pthick;
                                mt[1] = m2[1] * pthick;
-
+                               
                                t0[0] = s0[0] - mt[0];
                                t0[1] = s0[1] - mt[1];
                                t1[0] = s0[0] + mt[0];
                                t1[1] = s0[1] + mt[1];
-
+                               
                                /* draw this line twice (first to finish off start cap, then for stroke) */
                                glVertex2fv(t1);
                                glVertex2fv(t0);
@@ -528,12 +528,12 @@ static void gp_draw_stroke_2d(bGPDspoint *points, int totpoints, short thickness
                        else {
                                float mb[2];         /* bisector normal */
                                float athick, dfac;  /* actual thickness, difference between thicknesses */
-
+                               
                                /* calculate gradient of bisector (as average of normals) */
                                mb[0] = (pm[0] + m2[0]) / 2;
                                mb[1] = (pm[1] + m2[1]) / 2;
                                normalize_v2(mb);
-
+                               
                                /* calculate gradient to apply
                                 *  - as basis, use just pthick * bisector gradient
                                 *      - if cross-section not as thick as it should be, add extra padding to fix it
@@ -542,46 +542,46 @@ static void gp_draw_stroke_2d(bGPDspoint *points, int totpoints, short thickness
                                mt[1] = mb[1] * pthick;
                                athick = len_v2(mt);
                                dfac = pthick - (athick * 2);
-
+                               
                                if (((athick * 2.0f) < pthick) && (IS_EQF(athick, pthick) == 0)) {
                                        mt[0] += (mb[0] * dfac);
                                        mt[1] += (mb[1] * dfac);
                                }
-
+                               
                                /* calculate points for start of segment */
                                t0[0] = s0[0] - mt[0];
                                t0[1] = s0[1] - mt[1];
                                t1[0] = s0[0] + mt[0];
                                t1[1] = s0[1] + mt[1];
-
+                               
                                /* draw this line twice (once for end of current segment, and once for start of next) */
                                glVertex2fv(t1);
                                glVertex2fv(t0);
                                glVertex2fv(t0);
                                glVertex2fv(t1);
                        }
-
+                       
                        /* if last segment, also draw end of segment (defined as segment's normal) */
                        if (i == totpoints - 2) {
                                /* for once, we use second point's pressure (otherwise it won't be drawn) */
                                pthick = (pt2->pressure * thickness * scalefac);
-
+                               
                                /* calculate points for end of segment */
                                mt[0] = m2[0] * pthick;
                                mt[1] = m2[1] * pthick;
-
+                               
                                t0[0] = s1[0] - mt[0];
                                t0[1] = s1[1] - mt[1];
                                t1[0] = s1[0] + mt[0];
                                t1[1] = s1[1] + mt[1];
-
+                               
                                /* draw this line twice (once for end of stroke, and once for endcap)*/
                                glVertex2fv(t1);
                                glVertex2fv(t0);
                                glVertex2fv(t0);
                                glVertex2fv(t1);
-
-
+                               
+                               
                                /* draw end cap as last step
                                 *      - make points slightly closer to center (about halfway across)
                                 */
@@ -589,32 +589,32 @@ static void gp_draw_stroke_2d(bGPDspoint *points, int totpoints, short thickness
                                mt[1] = m2[1] * pthick * 0.5f;
                                sc[0] = s1[0] + (m1[0] * pthick * 0.75f);
                                sc[1] = s1[1] + (m1[1] * pthick * 0.75f);
-
+                               
                                t0[0] = sc[0] - mt[0];
                                t0[1] = sc[1] - mt[1];
                                t1[0] = sc[0] + mt[0];
                                t1[1] = sc[1] + mt[1];
-
+                               
                                glVertex2fv(t1);
                                glVertex2fv(t0);
                        }
-
+                       
                        /* store stroke's 'natural' normal for next stroke to use */
                        copy_v2_v2(pm, m2);
                }
-
+               
                glEnd();
        }
-
+       
        /* draw debug points of curve on top? (original stroke points) */
        if (debug) {
                bGPDspoint *pt;
                int i;
-
+               
                glBegin(GL_POINTS);
                for (i = 0, pt = points; i < totpoints && pt; i++, pt++) {
                        float co[2];
-
+                       
                        gp_calc_2d_stroke_xy(pt, sflag, offsx, offsy, winx, winy, co);
                        glVertex2fv(co);
                }
@@ -633,24 +633,24 @@ static bool gp_can_draw_stroke(const bGPDstroke *gps, const int dflag)
                return false;
        if (!(dflag & GP_DRAWDATA_ONLY3D) && (gps->flag & GP_STROKE_3DSPACE))
                return false;
-
+       
        /* 2) Screen Space 2D Strokes */
        if ((dflag & GP_DRAWDATA_ONLYV2D) && !(gps->flag & GP_STROKE_2DSPACE))
                return false;
        if (!(dflag & GP_DRAWDATA_ONLYV2D) && (gps->flag & GP_STROKE_2DSPACE))
                return false;
-
+       
        /* 3) Image Space (2D) */
        if ((dflag & GP_DRAWDATA_ONLYI2D) && !(gps->flag & GP_STROKE_2DIMAGE))
                return false;
        if (!(dflag & GP_DRAWDATA_ONLYI2D) && (gps->flag & GP_STROKE_2DIMAGE))
                return false;
-
-
+       
+       
        /* skip stroke if it doesn't have any valid data */
        if ((gps->points == NULL) || (gps->totpoints < 1))
                return false;
-
+       
        /* stroke can be drawn */
        return true;
 }
@@ -660,22 +660,22 @@ static void gp_draw_strokes(bGPDframe *gpf, int offsx, int offsy, int winx, int
                             bool debug, short lthick, const float color[4], const float fill_color[4])
 {
        bGPDstroke *gps;
-
+       
        for (gps = gpf->strokes.first; gps; gps = gps->next) {
                /* check if stroke can be drawn */
                if (gp_can_draw_stroke(gps, dflag) == false)
                        continue;
-
+               
                /* check which stroke-drawer to use */
                if (dflag & GP_DRAWDATA_ONLY3D) {
                        const int no_xray = (dflag & GP_DRAWDATA_NO_XRAY);
                        int mask_orig = 0;
-
+                       
                        if (no_xray) {
                                glGetIntegerv(GL_DEPTH_WRITEMASK, &mask_orig);
                                glDepthMask(0);
                                glEnable(GL_DEPTH_TEST);
-
+                               
                                /* first arg is normally rv3d->dist, but this isn't
                                 * available here and seems to work quite well without */
                                bglPolygonOffset(1.0f, 1.0f);
@@ -684,16 +684,16 @@ static void gp_draw_strokes(bGPDframe *gpf, int offsx, int offsy, int winx, int
                                glPolygonOffset(-1.0f, -1.0f);
 #endif
                        }
-
+                       
                        /* 3D Fill */
                        if ((dflag & GP_DRAWDATA_FILL) && (gps->totpoints >= 3)) {
                                glColor4fv(fill_color);
                                gp_draw_stroke_fill(gps->points, gps->totpoints, lthick, dflag, gps->flag, offsx, offsy, winx, winy);
                        }
-
+                       
                        /* 3D Stroke */
                        glColor4fv(color);
-
+                       
                        if (dflag & GP_DRAWDATA_VOLUMETRIC) {
                                /* volumetric stroke drawing */
                                gp_draw_stroke_volumetric_3d(gps->points, gps->totpoints, lthick, dflag, gps->flag);
@@ -707,11 +707,11 @@ static void gp_draw_strokes(bGPDframe *gpf, int offsx, int offsy, int winx, int
                                        gp_draw_stroke_3d(gps->points, gps->totpoints, lthick, debug, gps->flag);
                                }
                        }
-
+                       
                        if (no_xray) {
                                glDepthMask(mask_orig);
                                glDisable(GL_DEPTH_TEST);
-
+                               
                                bglPolygonOffset(0.0, 0.0);
 #if 0
                                glDisable(GL_POLYGON_OFFSET_LINE);
@@ -725,10 +725,10 @@ static void gp_draw_strokes(bGPDframe *gpf, int offsx, int offsy, int winx, int
                                glColor4fv(fill_color);
                                gp_draw_stroke_fill(gps->points, gps->totpoints, lthick, dflag, gps->flag, offsx, offsy, winx, winy);
                        }
-
+                       
                        /* 2D Strokes... */
                        glColor4fv(color);
-
+                       
                        if (dflag & GP_DRAWDATA_VOLUMETRIC) {
                                /* blob/disk-based "volumetric" drawing */
                                gp_draw_stroke_volumetric_2d(gps->points, gps->totpoints, lthick, dflag, gps->flag, offsx, offsy, winx, winy);
@@ -750,17 +750,17 @@ static void gp_draw_strokes(bGPDframe *gpf, int offsx, int offsy, int winx, int
 static void gp_draw_strokes_edit(bGPDframe *gpf, int offsx, int offsy, int winx, int winy, short dflag, const float tcolor[3])
 {
        bGPDstroke *gps;
-
+       
        const int no_xray = (dflag & GP_DRAWDATA_NO_XRAY);
        int mask_orig = 0;
-
+       
        /* set up depth masks... */
        if (dflag & GP_DRAWDATA_ONLY3D) {
                if (no_xray) {
                        glGetIntegerv(GL_DEPTH_WRITEMASK, &mask_orig);
                        glDepthMask(0);
                        glEnable(GL_DEPTH_TEST);
-
+                       
                        /* first arg is normally rv3d->dist, but this isn't
                         * available here and seems to work quite well without */
                        bglPolygonOffset(1.0f, 1.0f);
@@ -770,25 +770,25 @@ static void gp_draw_strokes_edit(bGPDframe *gpf, int offsx, int offsy, int winx,
 #endif
                }
        }
-
-
+       
+       
        /* draw stroke verts */
        for (gps = gpf->strokes.first; gps; gps = gps->next) {
                bGPDspoint *pt;
                float vsize, bsize;
                int i;
-
+               
                /* check if stroke can be drawn */
                if (gp_can_draw_stroke(gps, dflag) == false)
                        continue;
-
+               
                /* Optimisation: only draw points for selected strokes
                 * We assume that selected points can only occur in
                 * strokes that are selected too.
                 */
                if ((gps->flag & GP_STROKE_SELECT) == 0)
                        continue;
-
+               
                /* Get size of verts:
                 * - The selected state needs to be larger than the unselected state so that
                 *   they stand out more.
@@ -802,7 +802,7 @@ static void gp_draw_strokes_edit(bGPDframe *gpf, int offsx, int offsy, int winx,
                else {
                        vsize = bsize + 2;
                }
-
+               
                /* First Pass: Draw all the verts (i.e. these become the unselected state) */
                if (tcolor != NULL) {
                        /* for now, we assume that the base color of the points is not too close to the real color */
@@ -813,7 +813,7 @@ static void gp_draw_strokes_edit(bGPDframe *gpf, int offsx, int offsy, int winx,
                        UI_ThemeColor(TH_VERTEX);
                }
                glPointSize(bsize);
-
+               
                glBegin(GL_POINTS);
                for (i = 0, pt = gps->points; i < gps->totpoints && pt; i++, pt++) {
                        if (gps->flag & GP_STROKE_3DSPACE) {
@@ -821,18 +821,18 @@ static void gp_draw_strokes_edit(bGPDframe *gpf, int offsx, int offsy, int winx,
                        }
                        else {
                                float co[2];
-
+                               
                                gp_calc_2d_stroke_xy(pt, gps->flag, offsx, offsy, winx, winy, co);
                                glVertex2fv(co);
                        }
                }
                glEnd();
-
-
+               
+               
                /* Second Pass: Draw only verts which are selected */
                UI_ThemeColor(TH_VERTEX_SELECT);
                glPointSize(vsize);
-
+               
                glBegin(GL_POINTS);
                for (i = 0, pt = gps->points; i < gps->totpoints && pt; i++, pt++) {
                        if (pt->flag & GP_SPOINT_SELECT) {
@@ -849,14 +849,14 @@ static void gp_draw_strokes_edit(bGPDframe *gpf, int offsx, int offsy, int winx,
                }
                glEnd();
        }
-
-
+       
+       
        /* clear depth mask */
        if (dflag & GP_DRAWDATA_ONLY3D) {
                if (no_xray) {
                        glDepthMask(mask_orig);
                        glDisable(GL_DEPTH_TEST);
-
+                       
                        bglPolygonOffset(0.0, 0.0);
 #if 0
                        glDisable(GL_POLYGON_OFFSET_LINE);
@@ -874,7 +874,7 @@ static void gp_draw_onionskins(bGPDlayer *gpl, bGPDframe *gpf, int offsx, int of
 {
        const float alpha = gpl->color[3];
        float color[4];
-
+       
        /* 1) Draw Previous Frames First */
        if (gpl->flag & GP_LAYER_GHOST_PREVCOL) {
                copy_v3_v3(color, gpl->gcolor_prev);
@@ -882,11 +882,11 @@ static void gp_draw_onionskins(bGPDlayer *gpl, bGPDframe *gpf, int offsx, int of
        else {
                copy_v3_v3(color, gpl->color);
        }
-
+       
        if (gpl->gstep) {
                bGPDframe *gf;
                float fac;
-
+               
                /* draw previous frames first */
                for (gf = gpf->prev; gf; gf = gf->prev) {
                        /* check if frame is drawable */
@@ -907,8 +907,8 @@ static void gp_draw_onionskins(bGPDlayer *gpl, bGPDframe *gpf, int offsx, int of
                        gp_draw_strokes(gpf->prev, offsx, offsy, winx, winy, dflag, debug, lthick, color, color);
                }
        }
-
-
+       
+       
        /* 2) Now draw next frames */
        if (gpl->flag & GP_LAYER_GHOST_NEXTCOL) {
                copy_v3_v3(color, gpl->gcolor_next);
@@ -916,11 +916,11 @@ static void gp_draw_onionskins(bGPDlayer *gpl, bGPDframe *gpf, int offsx, int of
        else {
                copy_v3_v3(color, gpl->color);
        }
-
+       
        if (gpl->gstep_next) {
                bGPDframe *gf;
                float fac;
-
+               
                /* now draw next frames */
                for (gf = gpf->next; gf; gf = gf->next) {
                        /* check if frame is drawable */
@@ -941,7 +941,7 @@ static void gp_draw_onionskins(bGPDlayer *gpl, bGPDframe *gpf, int offsx, int of
                        gp_draw_strokes(gpf->next, offsx, offsy, winx, winy, dflag, debug, lthick, color, color);
                }
        }
-
+       
        /* 3) restore alpha */
        glColor4fv(gpl->color);
 }
@@ -950,26 +950,26 @@ static void gp_draw_onionskins(bGPDlayer *gpl, bGPDframe *gpf, int offsx, int of
 static void gp_draw_data_layers(bGPdata *gpd, int offsx, int offsy, int winx, int winy, int cfra, int dflag)
 {
        bGPDlayer *gpl;
-
+       
        for (gpl = gpd->layers.first; gpl; gpl = gpl->next) {
                bGPDframe *gpf;
-
+               
                bool debug = (gpl->flag & GP_LAYER_DRAWDEBUG) ? true : false;
                short lthick = gpl->thickness;
-
+               
                /* don't draw layer if hidden */
                if (gpl->flag & GP_LAYER_HIDE)
                        continue;
-
+               
                /* get frame to draw */
                gpf = gpencil_layer_getframe(gpl, cfra, 0);
                if (gpf == NULL)
                        continue;
-
+               
                /* set color, stroke thickness, and point size */
                glLineWidth(lthick);
                glPointSize((float)(gpl->thickness + 2));
-
+               
                /* Add layer drawing settings to the set of "draw flags"
                 * NOTE: If the setting doesn't apply, it *must* be cleared,
                 *       as dflag's carry over from the previous layer
@@ -978,18 +978,18 @@ static void gp_draw_data_layers(bGPdata *gpd, int offsx, int offsy, int winx, in
                        if (condition) dflag |= (draw_flag_value);      \
                        else           dflag &= ~(draw_flag_value);     \
                } (void)0
-
+               
                /* xray... */
                GP_DRAWFLAG_APPLY((gpl->flag & GP_LAYER_NO_XRAY), GP_DRAWDATA_NO_XRAY);
-
+               
                /* volumetric strokes... */
                GP_DRAWFLAG_APPLY((gpl->flag & GP_LAYER_VOLUMETRIC), GP_DRAWDATA_VOLUMETRIC);
-
+               
                /* fill strokes... */
                // XXX: this is not a very good limit
                GP_DRAWFLAG_APPLY((gpl->fill[3] > 0.001f), GP_DRAWDATA_FILL);
 #undef GP_DRAWFLAG_APPLY
-
+               
                /* draw 'onionskins' (frame left + right) */
                if ((gpl->flag & GP_LAYER_ONIONSKIN) && !(dflag & GP_DRAWDATA_NO_ONIONS)) {
                        /* Drawing method - only immediately surrounding (gstep = 0),
@@ -997,10 +997,10 @@ static void gp_draw_data_layers(bGPdata *gpd, int offsx, int offsy, int winx, in
                         */
                        gp_draw_onionskins(gpl, gpf, offsx, offsy, winx, winy, cfra, dflag, debug, lthick);
                }
-
+               
                /* draw the strokes already in active frame */
                gp_draw_strokes(gpf, offsx, offsy, winx, winy, dflag, debug, lthick, gpl->color, gpl->fill);
-
+               
                /* Draw verts of selected strokes
                 *  - when doing OpenGL renders, we don't want to be showing these, as that ends up flickering
                 *      - locked layers can't be edited, so there's no point showing these verts
@@ -1016,7 +1016,7 @@ static void gp_draw_data_layers(bGPdata *gpd, int offsx, int offsy, int winx, in
                        gp_draw_strokes_edit(gpf, offsx, offsy, winx, winy, dflag,
                                             (gpl->color[3] < 0.95f) ? gpl->color : NULL);
                }
-
+               
                /* Check if may need to draw the active stroke cache, only if this layer is the active layer
                 * that is being edited. (Stroke buffer is currently stored in gp-data)
                 */
@@ -1025,7 +1025,7 @@ static void gp_draw_data_layers(bGPdata *gpd, int offsx, int offsy, int winx, in
                {
                        /* Set color for drawing buffer stroke - since this may not be set yet */
                        glColor4fv(gpl->color);
-
+                       
                        /* Buffer stroke needs to be drawn with a different linestyle
                         * to help differentiate them from normal strokes.
                         * 
@@ -1047,25 +1047,25 @@ static void gp_draw_data(bGPdata *gpd, int offsx, int offsy, int winx, int winy,
 {
        /* reset line drawing style (in case previous user didn't reset) */
        setlinestyle(0);
-
+       
        /* turn on smooth lines (i.e. anti-aliasing) */
        glEnable(GL_LINE_SMOOTH);
-
+       
        glEnable(GL_POLYGON_SMOOTH);
        glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
-
+       
        /* turn on alpha-blending */
        glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
        glEnable(GL_BLEND);
-
+       
        /* draw! */
        gp_draw_data_layers(gpd, offsx, offsy, winx, winy, cfra, dflag);
-
+       
        /* turn off alpha blending, then smooth lines */
        glDisable(GL_BLEND); // alpha blending
        glDisable(GL_LINE_SMOOTH); // smooth lines
        glDisable(GL_POLYGON_SMOOTH); // smooth poly lines
-
+       
        /* restore initial gl conditions */
        glLineWidth(1.0);
        glPointSize(1.0);
@@ -1078,7 +1078,7 @@ static void gp_draw_data_all(Scene *scene, bGPdata *gpd, int offsx, int offsy, i
                              int cfra, int dflag, const char spacetype)
 {
        bGPdata *gpd_source = NULL;
-
+       
        if (scene) {
                if (spacetype == SPACE_VIEW3D) {
                        gpd_source = (scene->gpd ? scene->gpd : NULL);
@@ -1087,12 +1087,12 @@ static void gp_draw_data_all(Scene *scene, bGPdata *gpd, int offsx, int offsy, i
                        /* currently drawing only gpencil data from either clip or track, but not both - XXX fix logic behind */
                        gpd_source = (scene->clip->gpd ? scene->clip->gpd : NULL);
                }
-
+               
                if (gpd_source) {
                        gp_draw_data(gpd_source, offsx, offsy, winx, winy, cfra, dflag);
                }
        }
-
+       
        /* scene/clip data has already been drawn, only object/track data is drawn here
         * if gpd_source == gpd, we don't have any object/track data and we can skip */
        if (gpd_source == NULL || (gpd_source && gpd_source != gpd)) {
@@ -1117,25 +1117,25 @@ void ED_gpencil_draw_2dimage(const bContext *C)
        bGPdata *gpd;
        int offsx, offsy, sizex, sizey;
        int dflag = GP_DRAWDATA_NOSTATUS;
-
+       
        gpd = ED_gpencil_data_get_active(C); // XXX
        if (gpd == NULL) return;
-
+       
        /* calculate rect */
        switch (sa->spacetype) {
                case SPACE_IMAGE: /* image */
                case SPACE_CLIP: /* clip */
                {
-
+               
                        /* just draw using standard scaling (settings here are currently ignored anyways) */
                        /* FIXME: the opengl poly-strokes don't draw at right thickness when done this way, so disabled */
                        offsx = 0;
                        offsy = 0;
                        sizex = ar->winx;
                        sizey = ar->winy;
-
+                       
                        wmOrtho2(ar->v2d.cur.xmin, ar->v2d.cur.xmax, ar->v2d.cur.ymin, ar->v2d.cur.ymax);
-
+                       
                        dflag |= GP_DRAWDATA_ONLYV2D | GP_DRAWDATA_IEDITHACK;
                        break;
                }
@@ -1146,7 +1146,7 @@ void ED_gpencil_draw_2dimage(const bContext *C)
                        offsy = 0;
                        sizex = ar->winx;
                        sizey = ar->winy;
-
+                       
                        /* NOTE: I2D was used in 2.4x, but the old settings for that have been deprecated
                         * and everything moved to standard View2d
                         */
@@ -1158,12 +1158,12 @@ void ED_gpencil_draw_2dimage(const bContext *C)
                        offsy = 0;
                        sizex = ar->winx;
                        sizey = ar->winy;
-
+                       
                        dflag |= GP_DRAWDATA_ONLYI2D;
                        break;
        }
-
-
+       
+       
        /* draw it! */
        gp_draw_data_all(scene, gpd, offsx, offsy, sizex, sizey, CFRA, dflag, sa->spacetype);
 }
@@ -1178,17 +1178,17 @@ void ED_gpencil_draw_view2d(const bContext *C, bool onlyv2d)
        Scene *scene = CTX_data_scene(C);
        bGPdata *gpd;
        int dflag = 0;
-
+       
        /* check that we have grease-pencil stuff to draw */
        if (sa == NULL) return;
        gpd = ED_gpencil_data_get_active(C); // XXX
        if (gpd == NULL) return;
-
+       
        /* special hack for Image Editor */
        /* FIXME: the opengl poly-strokes don't draw at right thickness when done this way, so disabled */
        if (ELEM(sa->spacetype, SPACE_IMAGE, SPACE_CLIP))
                dflag |= GP_DRAWDATA_IEDITHACK;
-
+       
        /* draw it! */
        if (onlyv2d) dflag |= (GP_DRAWDATA_ONLYV2D | GP_DRAWDATA_NOSTATUS);
        gp_draw_data_all(scene, gpd, 0, 0, ar->winx, ar->winy, CFRA, dflag, sa->spacetype);
@@ -1203,17 +1203,17 @@ void ED_gpencil_draw_view3d(Scene *scene, View3D *v3d, ARegion *ar, bool only3d)
        int dflag = 0;
        RegionView3D *rv3d = ar->regiondata;
        int offsx,  offsy,  winx,  winy;
-
+       
        /* check that we have grease-pencil stuff to draw */
        gpd = ED_gpencil_data_get_active_v3d(scene, v3d);
        if (gpd == NULL) return;
-
+       
        /* when rendering to the offscreen buffer we don't want to
         * deal with the camera border, otherwise map the coords to the camera border. */
        if ((rv3d->persp == RV3D_CAMOB) && !(G.f & G_RENDER_OGL)) {
                rctf rectf;
                ED_view3d_calc_camera_border(scene, ar, v3d, rv3d, &rectf, true); /* no shift */
-
+               
                offsx = iroundf(rectf.xmin);
                offsy = iroundf(rectf.ymin);
                winx  = iroundf(rectf.xmax - rectf.xmin);
@@ -1225,17 +1225,17 @@ void ED_gpencil_draw_view3d(Scene *scene, View3D *v3d, ARegion *ar, bool only3d)
                winx  = ar->winx;
                winy  = ar->winy;
        }
-
+       
        /* draw it! */
        if (only3d) dflag |= (GP_DRAWDATA_ONLY3D | GP_DRAWDATA_NOSTATUS);
-
+       
        gp_draw_data_all(scene, gpd, offsx, offsy, winx, winy, CFRA, dflag, v3d->spacetype);
 }
 
 void ED_gpencil_draw_ex(Scene *scene, bGPdata *gpd, int winx, int winy, const int cfra, const char spacetype)
 {
        int dflag = GP_DRAWDATA_NOSTATUS | GP_DRAWDATA_ONLYV2D;
-
+       
        gp_draw_data_all(scene, gpd, 0, 0, winx, winy, cfra, dflag, spacetype);
 }
 
index edef9a392d5fee2467f1ced90be4858e15f7e80d..97adaea41a844c0493522ec3e0c3a825b4cc5a8d 100644 (file)
 bool ED_gplayer_frames_looper(bGPDlayer *gpl, Scene *scene, short (*gpf_cb)(bGPDframe *, Scene *))
 {
        bGPDframe *gpf;
-
+       
        /* error checker */
        if (gpl == NULL)
                return false;
-
+       
        /* do loop */
        for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
                /* execute callback */
                if (gpf_cb(gpf, scene))
                        return true;
        }
-
+       
        /* nothing to return */
        return false;
 }
@@ -86,19 +86,19 @@ void ED_gplayer_make_cfra_list(bGPDlayer *gpl, ListBase *elems, bool onlysel)
 {
        bGPDframe *gpf;
        CfraElem *ce;
-
+       
        /* error checking */
        if (ELEM(NULL, gpl, elems))
                return;
-
+       
        /* loop through gp-frames, adding */
        for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
                if ((onlysel == 0) || (gpf->flag & GP_FRAME_SELECT)) {
                        ce = MEM_callocN(sizeof(CfraElem), "CfraElem");
-
+                       
                        ce->cfra = (float)gpf->framenum;
                        ce->sel = (gpf->flag & GP_FRAME_SELECT) ? 1 : 0;
-
+                       
                        BLI_addtail(elems, ce);
                }
        }
@@ -111,17 +111,17 @@ void ED_gplayer_make_cfra_list(bGPDlayer *gpl, ListBase *elems, bool onlysel)
 bool ED_gplayer_frame_select_check(bGPDlayer *gpl)
 {
        bGPDframe *gpf;
-
+       
        /* error checking */
        if (gpl == NULL)
                return false;
-
+       
        /* stop at the first one found */
        for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
                if (gpf->flag & GP_FRAME_SELECT)
                        return true;
        }
-
+       
        /* not found */
        return false;
 }
@@ -131,7 +131,7 @@ static void gpframe_select(bGPDframe *gpf, short select_mode)
 {
        if (gpf == NULL)
                return;
-
+       
        switch (select_mode) {
                case SELECT_ADD:
                        gpf->flag |= GP_FRAME_SELECT;
@@ -149,11 +149,11 @@ static void gpframe_select(bGPDframe *gpf, short select_mode)
 void ED_gpencil_select_frames(bGPDlayer *gpl, short select_mode)
 {
        bGPDframe *gpf;
-
+       
        /* error checking */
        if (gpl == NULL)
                return;
-
+       
        /* handle according to mode */
        for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
                gpframe_select(gpf, select_mode);
@@ -166,7 +166,7 @@ void ED_gplayer_frame_select_set(bGPDlayer *gpl, short mode)
        /* error checking */
        if (gpl == NULL)
                return;
-
+       
        /* now call the standard function */
        ED_gpencil_select_frames(gpl, mode);
 }
@@ -175,12 +175,12 @@ void ED_gplayer_frame_select_set(bGPDlayer *gpl, short mode)
 void ED_gpencil_select_frame(bGPDlayer *gpl, int selx, short select_mode)
 {
        bGPDframe *gpf;
-
+       
        if (gpl == NULL)
                return;
-
+       
        gpf = BKE_gpencil_layer_find_frame(gpl, selx);
-
+       
        if (gpf) {
                gpframe_select(gpf, select_mode);
        }
@@ -190,10 +190,10 @@ void ED_gpencil_select_frame(bGPDlayer *gpl, int selx, short select_mode)
 void ED_gplayer_frames_select_border(bGPDlayer *gpl, float min, float max, short select_mode)
 {
        bGPDframe *gpf;
-
+       
        if (gpl == NULL)
                return;
-
+       
        /* only select those frames which are in bounds */
        for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
                if (IN_RANGE(gpf->framenum, min, max))
@@ -209,19 +209,19 @@ bool ED_gplayer_frames_delete(bGPDlayer *gpl)
 {
        bGPDframe *gpf, *gpfn;
        bool changed = false;
-
+       
        /* error checking */
        if (gpl == NULL)
                return false;
-
+       
        /* check for frames to delete */
        for (gpf = gpl->frames.first; gpf; gpf = gpfn) {
                gpfn = gpf->next;
-
+               
                if (gpf->flag & GP_FRAME_SELECT)
                        changed |= gpencil_layer_delframe(gpl, gpf);
        }
-
+       
        return changed;
 }
 
@@ -229,23 +229,23 @@ bool ED_gplayer_frames_delete(bGPDlayer *gpl)
 void ED_gplayer_frames_duplicate(bGPDlayer *gpl)
 {
        bGPDframe *gpf, *gpfn;
-
+       
        /* error checking */
        if (gpl == NULL)
                return;
-
+       
        /* duplicate selected frames  */
        for (gpf = gpl->frames.first; gpf; gpf = gpfn) {
                gpfn = gpf->next;
-
+               
                /* duplicate this frame */
                if (gpf->flag & GP_FRAME_SELECT) {
                        bGPDframe *gpfd;
-
+                       
                        /* duplicate frame, and deselect self */
                        gpfd = gpencil_frame_duplicate(gpf);
                        gpf->flag &= ~GP_FRAME_SELECT;
-
+                       
                        BLI_insertlinkafter(&gpl->frames, gpf, gpfd);
                }
        }
@@ -257,10 +257,10 @@ void ED_gplayer_frames_duplicate(bGPDlayer *gpl)
 void ED_gplayer_frames_keytype_set(bGPDlayer *gpl, short type)
 {
        bGPDframe *gpf;
-
+       
        if (gpl == NULL)
                return;
-
+       
        for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
                if (gpf->flag & GP_FRAME_SELECT) {
                        gpf->key_type = type;
@@ -287,7 +287,7 @@ static int gpcopy_firstframe = 999999999;
 void free_gpcopybuf()
 {
        free_gpencil_layers(&gpcopybuf);
-
+       
        BLI_listbase_clear(&gpcopybuf);
        gpcopy_firstframe = 999999999;
 }
@@ -302,33 +302,33 @@ void copy_gpdata()
        int filter;
        void *data;
        short datatype;
-
+       
        /* clear buffer first */
        free_gpcopybuf();
-
+       
        /* get data */
        data = get_action_context(&datatype);
        if (data == NULL) return;
        if (datatype != ACTCONT_GPENCIL) return;
-
+       
        /* filter data */
        filter = (ACTFILTER_VISIBLE | ACTFILTER_SEL);
        actdata_filter(&act_data, filter, data, datatype);
-
+       
        /* assume that each of these is an ipo-block */
        for (ale = act_data.first; ale; ale = ale->next) {
                bGPDlayer *gpls, *gpln;
                bGPDframe *gpf, *gpfn;
-
+               
                /* get new layer to put into buffer */
                gpls = (bGPDlayer *)ale->data;
                gpln = MEM_callocN(sizeof(bGPDlayer), "GPCopyPasteLayer");
-
+               
                BLI_listbase_clear(&gpln->frames);
                BLI_strncpy(gpln->info, gpls->info, sizeof(gpln->info));
-
+               
                BLI_addtail(&gpcopybuf, gpln);
-
+               
                /* loop over frames, and copy only selected frames */
                for (gpf = gpls->frames.first; gpf; gpf = gpf->next) {
                        /* if frame is selected, make duplicate it and its strokes */
@@ -336,18 +336,18 @@ void copy_gpdata()
                                /* add frame to buffer */
                                gpfn = gpencil_frame_duplicate(gpf);
                                BLI_addtail(&gpln->frames, gpfn);
-
+                               
                                /* check if this is the earliest frame encountered so far */
                                if (gpf->framenum < gpcopy_firstframe)
                                        gpcopy_firstframe = gpf->framenum;
                        }
                }
        }
-
+       
        /* check if anything ended up in the buffer */
        if (ELEM(NULL, gpcopybuf.first, gpcopybuf.last))
                error("Nothing copied to buffer");
-
+       
        /* free temp memory */
        BLI_freelistN(&act_data);
 }
@@ -359,10 +359,10 @@ void paste_gpdata(Scene *scene)
        int filter;
        void *data;
        short datatype;
-
+       
        const int offset = (CFRA - gpcopy_firstframe);
        short no_name = 0;
-
+       
        /* check if buffer is empty */
        if (ELEM(NULL, gpcopybuf.first, gpcopybuf.last)) {
                error("No data in buffer to paste");
@@ -371,48 +371,48 @@ void paste_gpdata(Scene *scene)
        /* check if single channel in buffer (disregard names if so)  */
        if (gpcopybuf.first == gpcopybuf.last)
                no_name = 1;
-
+       
        /* get data */
        data = get_action_context(&datatype);
        if (data == NULL) return;
        if (datatype != ACTCONT_GPENCIL) return;
-
+       
        /* filter data */
        filter = (ACTFILTER_VISIBLE | ACTFILTER_SEL | ACTFILTER_FOREDIT);
        actdata_filter(&act_data, filter, data, datatype);
-
+       
        /* from selected channels */
        for (ale = act_data.first; ale; ale = ale->next) {
                bGPDlayer *gpld = (bGPDlayer *)ale->data;
                bGPDlayer *gpls = NULL;
                bGPDframe *gpfs, *gpf;
-
+               
                /* find suitable layer from buffer to use to paste from */
                for (gpls = gpcopybuf.first; gpls; gpls = gpls->next) {
                        /* check if layer name matches */
                        if ((no_name) || (strcmp(gpls->info, gpld->info) == 0))
                                break;
                }
-
+               
                /* this situation might occur! */
                if (gpls == NULL)
                        continue;
-
+               
                /* add frames from buffer */
                for (gpfs = gpls->frames.first; gpfs; gpfs = gpfs->next) {
                        /* temporarily apply offset to buffer-frame while copying */
                        gpfs->framenum += offset;
-
+                       
                        /* get frame to copy data into (if no frame returned, then just ignore) */
                        gpf = gpencil_layer_getframe(gpld, gpfs->framenum, 1);
                        if (gpf) {
                                bGPDstroke *gps, *gpsn;
                                ScrArea *sa;
-
+                               
                                /* get area that gp-data comes from */
                                //sa = gpencil_data_findowner((bGPdata *)ale->owner);
                                sa = NULL;
-
+                               
                                /* this should be the right frame... as it may be a pre-existing frame,
                                 * must make sure that only compatible stroke types get copied over
                                 *      - we cannot just add a duplicate frame, as that would cause errors
@@ -420,11 +420,11 @@ void paste_gpdata(Scene *scene)
                                 */
                                for (gps = gpfs->strokes.first; gps; gps = gps->next) {
                                        short stroke_ok;
-
+                                       
                                        /* if there's an area, check that it supports this type of stroke */
                                        if (sa) {
                                                stroke_ok = 0;
-
+                                               
                                                /* check if spacetype supports this type of stroke
                                                 *      - NOTE: must sync this with gp_paint_initstroke() in gpencil.c
                                                 */
@@ -433,14 +433,14 @@ void paste_gpdata(Scene *scene)
                                                                if ((gps->flag == 0) || (gps->flag & GP_STROKE_3DSPACE))
                                                                        stroke_ok = 1;
                                                                break;
-
+                                                       
                                                        case SPACE_NODE: /* Nodes Editor: either screen-aligned or view-aligned */
                                                        case SPACE_IMAGE: /* Image Editor: either screen-aligned or view\image-aligned */
                                                        case SPACE_CLIP: /* Image Editor: either screen-aligned or view\image-aligned */
                                                                if ((gps->flag == 0) || (gps->flag & GP_STROKE_2DSPACE))
                                                                        stroke_ok = 1;
                                                                break;
-
+                                                       
                                                        case SPACE_SEQ: /* Sequence Editor: either screen-aligned or view-aligned */
                                                                if ((gps->flag == 0) || (gps->flag & GP_STROKE_2DIMAGE))
                                                                        stroke_ok = 1;
@@ -449,31 +449,31 @@ void paste_gpdata(Scene *scene)
                                        }
                                        else
                                                stroke_ok = 1;
-
+                                       
                                        /* if stroke is ok, we make a copy of this stroke and add to frame */
                                        if (stroke_ok) {
                                                /* make a copy of stroke, then of its points array */
                                                gpsn = MEM_dupallocN(gps);
                                                gpsn->points = MEM_dupallocN(gps->points);
-
+                                               
                                                /* append stroke to frame */
                                                BLI_addtail(&gpf->strokes, gpsn);
                                        }
                                }
-
+                               
                                /* if no strokes (i.e. new frame) added, free gpf */
                                if (BLI_listbase_is_empty(&gpf->strokes))
                                        gpencil_layer_delframe(gpld, gpf);
                        }
-
+                       
                        /* unapply offset from buffer-frame */
                        gpfs->framenum -= offset;
                }
        }
-
+       
        /* free temp memory */
        BLI_freelistN(&act_data);
-
+       
        /* undo and redraw stuff */
        BIF_undo_push("Paste Grease Pencil Frames");
 }
@@ -541,36 +541,36 @@ void ED_gplayer_snap_frames(bGPDlayer *gpl, Scene *scene, short mode)
 static short mirror_gpf_cframe(bGPDframe *gpf, Scene *scene)
 {
        int diff;
-
+       
        if (gpf->flag & GP_FRAME_SELECT) {
                diff = CFRA - gpf->framenum;
                gpf->framenum = CFRA;
        }
-
+       
        return 0;
 }
 
 static short mirror_gpf_yaxis(bGPDframe *gpf, Scene *scene)
 {
        int diff;
-
+       
        if (gpf->flag & GP_FRAME_SELECT) {
                diff = -gpf->framenum;
                gpf->framenum = diff;
        }
-
+       
        return 0;
 }
 
 static short mirror_gpf_xaxis(bGPDframe *gpf, Scene *scene)
 {
        int diff;
-
+       
        if (gpf->flag & GP_FRAME_SELECT) {
                diff = -gpf->framenum;
                gpf->framenum = diff;
        }
-
+       
        return 0;
 }
 
@@ -579,7 +579,7 @@ static short mirror_gpf_marker(bGPDframe *gpf, Scene *scene)
        static TimeMarker *marker;
        static short initialized = 0;
        int diff;
-
+       
        /* In order for this mirror function to work without
         * any extra arguments being added, we use the case
         * of bezt==NULL to denote that we should find the
@@ -587,7 +587,7 @@ static short mirror_gpf_marker(bGPDframe *gpf, Scene *scene)
         * to use this way, as it will be set to null after
         * each cycle in which this is called.
         */
-
+       
        if (gpf) {
                /* mirroring time */
                if ((gpf->flag & GP_FRAME_SELECT) && (marker)) {
@@ -610,7 +610,7 @@ static short mirror_gpf_marker(bGPDframe *gpf, Scene *scene)
                        }
                }
        }
-
+       
        return 0;
 }
 
index 402174437e96402803547ea9e67082caf4e28b4f..19321269afa055050cc3efcc6968f68d1f9f36aa 100644 (file)
@@ -97,17 +97,17 @@ bGPdata **ED_gpencil_data_get_pointers_direct(ID *screen_id, Scene *scene, ScrAr
         */
        if (sa) {
                SpaceLink *sl = sa->spacedata.first;
-
+               
                switch (sa->spacetype) {
                        case SPACE_VIEW3D: /* 3D-View */
                        case SPACE_TIME: /* Timeline - XXX: this is a hack to get it to show GP keyframes for 3D view */
                        {
                                BLI_assert(scene && ELEM(scene->toolsettings->gpencil_src,
                                                         GP_TOOL_SOURCE_SCENE, GP_TOOL_SOURCE_OBJECT));
-
+                               
                                if (scene->toolsettings->gpencil_src == GP_TOOL_SOURCE_OBJECT) {
                                        /* legacy behaviour for usage with old addons requiring object-linked to objects */
-
+                                       
                                        /* just in case no active/selected object... */
                                        if (ob && (ob->flag & SELECT)) {
                                                /* for now, as long as there's an object, default to using that in 3D-View */
@@ -125,21 +125,21 @@ bGPdata **ED_gpencil_data_get_pointers_direct(ID *screen_id, Scene *scene, ScrAr
                        case SPACE_NODE: /* Nodes Editor */
                        {
                                SpaceNode *snode = (SpaceNode *)sl;
-
+                               
                                /* return the GP data for the active node block/node */
                                if (snode && snode->nodetree) {
                                        /* for now, as long as there's an active node tree, default to using that in the Nodes Editor */
                                        if (ptr) RNA_id_pointer_create(&snode->nodetree->id, ptr);
                                        return &snode->nodetree->gpd;
                                }
-
+                               
                                /* even when there is no node-tree, don't allow this to flow to scene */
                                return NULL;
                        }
                        case SPACE_SEQ: /* Sequencer */
                        {
                                SpaceSeq *sseq = (SpaceSeq *)sl;
-
+                       
                                /* for now, Grease Pencil data is associated with the space (actually preview region only) */
                                /* XXX our convention for everything else is to link to data though... */
                                if (ptr) RNA_pointer_create(screen_id, &RNA_SpaceSequenceEditor, sseq, ptr);
@@ -148,7 +148,7 @@ bGPdata **ED_gpencil_data_get_pointers_direct(ID *screen_id, Scene *scene, ScrAr
                        case SPACE_IMAGE: /* Image/UV Editor */
                        {
                                SpaceImage *sima = (SpaceImage *)sl;
-
+                               
                                /* for now, Grease Pencil data is associated with the space... */
                                /* XXX our convention for everything else is to link to data though... */
                                if (ptr) RNA_pointer_create(screen_id, &RNA_SpaceImageEditor, sima, ptr);
@@ -158,23 +158,23 @@ bGPdata **ED_gpencil_data_get_pointers_direct(ID *screen_id, Scene *scene, ScrAr
                        {
                                SpaceClip *sc = (SpaceClip *)sl;
                                MovieClip *clip = ED_space_clip_get_clip(sc);
-
+                               
                                if (clip) {
                                        if (sc->gpencil_src == SC_GPENCIL_SRC_TRACK) {
                                                MovieTrackingTrack *track = BKE_tracking_track_get_active(&clip->tracking);
-
+                                               
                                                if (!track)
                                                        return NULL;
-
+                                               
                                                if (ptr)
                                                        RNA_pointer_create(&clip->id, &RNA_MovieTrackingTrack, track, ptr);
-
+                                               
                                                return &track->gpd;
                                        }
                                        else {
                                                if (ptr)
                                                        RNA_id_pointer_create(&clip->id, ptr);
-
+                                               
                                                return &clip->gpd;
                                        }
                                }
@@ -184,7 +184,7 @@ bGPdata **ED_gpencil_data_get_pointers_direct(ID *screen_id, Scene *scene, ScrAr
                                return NULL;
                }
        }
-
+       
        /* just fall back on the scene's GP data */
        if (ptr) RNA_id_pointer_create((ID *)scene, ptr);
        return (scene) ? &scene->gpd : NULL;
@@ -197,7 +197,7 @@ bGPdata **ED_gpencil_data_get_pointers(const bContext *C, PointerRNA *ptr)
        Scene *scene = CTX_data_scene(C);
        ScrArea *sa = CTX_wm_area(C);
        Object *ob = CTX_data_active_object(C);
-
+       
        return ED_gpencil_data_get_pointers_direct(screen_id, scene, sa, ob, ptr);
 }
 
@@ -226,7 +226,7 @@ bGPdata *ED_gpencil_data_get_active_v3d(Scene *scene, View3D *v3d)
        /* We have to make sure active object is actually visible and selected, else we must use default scene gpd,
         * to be consistent with ED_gpencil_data_get_active's behavior.
         */
-
+       
        if (base && TESTBASE(v3d, base)) {
                gpd = base->object->gpd;
        }
@@ -248,7 +248,7 @@ static int gp_active_layer_poll(bContext *C)
 {
        bGPdata *gpd = ED_gpencil_data_get_active(C);
        bGPDlayer *gpl = gpencil_layer_getactive(gpd);
-
+       
        return (gpl != NULL);
 }
 
@@ -258,7 +258,7 @@ static int gp_active_layer_poll(bContext *C)
 static int gp_data_add_exec(bContext *C, wmOperator *op)
 {
        bGPdata **gpd_ptr = ED_gpencil_data_get_pointers(C, NULL);
-
+       
        if (gpd_ptr == NULL) {
                BKE_report(op->reports, RPT_ERROR, "Nowhere for grease pencil data to go");
                return OPERATOR_CANCELLED;
@@ -266,14 +266,14 @@ static int gp_data_add_exec(bContext *C, wmOperator *op)
        else {
                /* decrement user count and add new datablock */
                bGPdata *gpd = (*gpd_ptr);
-
+               
                id_us_min(&gpd->id);
                *gpd_ptr = gpencil_data_addnew(DATA_("GPencil"));
        }
-
+       
        /* notifiers */
        WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
-
+       
        return OPERATOR_FINISHED;
 }
 
@@ -284,7 +284,7 @@ void GPENCIL_OT_data_add(wmOperatorType *ot)
        ot->idname = "GPENCIL_OT_data_add";
        ot->description = "Add new Grease Pencil datablock";
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+       
        /* callbacks */
        ot->exec = gp_data_add_exec;
        ot->poll = gp_add_poll;
@@ -296,7 +296,7 @@ void GPENCIL_OT_data_add(wmOperatorType *ot)
 static int gp_data_unlink_poll(bContext *C)
 {
        bGPdata **gpd_ptr = ED_gpencil_data_get_pointers(C, NULL);
-
+       
        /* if we have access to some active data, make sure there's a datablock before enabling this */
        return (gpd_ptr && *gpd_ptr);
 }
@@ -306,7 +306,7 @@ static int gp_data_unlink_poll(bContext *C)
 static int gp_data_unlink_exec(bContext *C, wmOperator *op)
 {
        bGPdata **gpd_ptr = ED_gpencil_data_get_pointers(C, NULL);
-
+       
        if (gpd_ptr == NULL) {
                BKE_report(op->reports, RPT_ERROR, "Nowhere for grease pencil data to go");
                return OPERATOR_CANCELLED;
@@ -318,10 +318,10 @@ static int gp_data_unlink_exec(bContext *C, wmOperator *op)
                id_us_min(&gpd->id);
                *gpd_ptr = NULL;
        }
-
+       
        /* notifiers */
        WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
-
+       
        return OPERATOR_FINISHED;
 }
 
@@ -332,7 +332,7 @@ void GPENCIL_OT_data_unlink(wmOperatorType *ot)
        ot->idname = "GPENCIL_OT_data_unlink";
        ot->description = "Unlink active Grease Pencil datablock";
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+       
        /* callbacks */
        ot->exec = gp_data_unlink_exec;
        ot->poll = gp_data_unlink_poll;
@@ -344,7 +344,7 @@ void GPENCIL_OT_data_unlink(wmOperatorType *ot)
 static int gp_layer_add_exec(bContext *C, wmOperator *op)
 {
        bGPdata **gpd_ptr = ED_gpencil_data_get_pointers(C, NULL);
-
+       
        /* if there's no existing Grease-Pencil data there, add some */
        if (gpd_ptr == NULL) {
                BKE_report(op->reports, RPT_ERROR, "Nowhere for grease pencil data to go");
@@ -352,13 +352,13 @@ static int gp_layer_add_exec(bContext *C, wmOperator *op)
        }
        if (*gpd_ptr == NULL)
                *gpd_ptr = gpencil_data_addnew(DATA_("GPencil"));
-
+       
        /* add new layer now */
        gpencil_layer_addnew(*gpd_ptr, DATA_("GP_Layer"), 1);
-
+       
        /* notifiers */
        WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
-
+       
        return OPERATOR_FINISHED;
 }
 
@@ -368,9 +368,9 @@ void GPENCIL_OT_layer_add(wmOperatorType *ot)
        ot->name = "Add New Layer";
        ot->idname = "GPENCIL_OT_layer_add";
        ot->description = "Add new Grease Pencil layer for the active Grease Pencil datablock";
-
+       
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+       
        /* callbacks */
        ot->exec = gp_layer_add_exec;
        ot->poll = gp_add_poll;
@@ -382,16 +382,16 @@ static int gp_layer_remove_exec(bContext *C, wmOperator *op)
 {
        bGPdata *gpd = ED_gpencil_data_get_active(C);
        bGPDlayer *gpl = gpencil_layer_getactive(gpd);
-
+       
        /* sanity checks */
        if (ELEM(NULL, gpd, gpl))
                return OPERATOR_CANCELLED;
-
+       
        if (gpl->flag & GP_LAYER_LOCKED) {
                BKE_report(op->reports, RPT_ERROR, "Cannot delete locked layers");
                return OPERATOR_CANCELLED;
        }
-
+       
        /* make the layer before this the new active layer
         * - use the one after if this is the first
         * - if this is the only layer, this naturally becomes NULL
@@ -400,13 +400,13 @@ static int gp_layer_remove_exec(bContext *C, wmOperator *op)
                gpencil_layer_setactive(gpd, gpl->prev);
        else
                gpencil_layer_setactive(gpd, gpl->next);
-
+       
        /* delete the layer now... */
        gpencil_layer_delete(gpd, gpl);
-
+       
        /* notifiers */
        WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
-
+       
        return OPERATOR_FINISHED;
 }
 
@@ -416,9 +416,9 @@ void GPENCIL_OT_layer_remove(wmOperatorType *ot)
        ot->name = "Remove Layer";
        ot->idname = "GPENCIL_OT_layer_remove";
        ot->description = "Remove active Grease Pencil layer";
-
+       
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+       
        /* callbacks */
        ot->exec = gp_layer_remove_exec;
        ot->poll = gp_active_layer_poll;
@@ -435,13 +435,13 @@ static int gp_layer_move_exec(bContext *C, wmOperator *op)
 {
        bGPdata *gpd = ED_gpencil_data_get_active(C);
        bGPDlayer *gpl = gpencil_layer_getactive(gpd);
-
+       
        int direction = RNA_enum_get(op->ptr, "type");
-
+       
        /* sanity checks */
        if (ELEM(NULL, gpd, gpl))
                return OPERATOR_CANCELLED;
-
+       
        /* up or down? */
        if (direction == GP_LAYER_MOVE_UP) {
                /* up */
@@ -453,10 +453,10 @@ static int gp_layer_move_exec(bContext *C, wmOperator *op)
                BLI_remlink(&gpd->layers, gpl);
                BLI_insertlinkafter(&gpd->layers, gpl->next, gpl);
        }
-
+       
        /* notifiers */
        WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
-
+       
        return OPERATOR_FINISHED;
 }
 
@@ -467,19 +467,19 @@ void GPENCIL_OT_layer_move(wmOperatorType *ot)
                {GP_LAYER_MOVE_DOWN, "DOWN", 0, "Down", ""},
                {0, NULL, 0, NULL, NULL}
        };
-
+       
        /* identifiers */
        ot->name = "Move Grease Pencil Layer";
        ot->idname = "GPENCIL_OT_layer_move";
        ot->description = "Move the active Grease Pencil layer up/down in the list";
-
+       
        /* api callbacks */
        ot->exec = gp_layer_move_exec;
        ot->poll = gp_active_layer_poll;
-
+       
        /* flags */
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+       
        ot->prop = RNA_def_enum(ot->srna, "type", slot_move, 0, "Type", "");
 }
 
@@ -500,10 +500,10 @@ static void gp_duplicate_points(const bGPDstroke *gps, ListBase *new_strokes)
 {
        bGPDspoint *pt;
        int i;
-
+       
        int start_idx = -1;
-
-
+       
+       
        /* Step through the original stroke's points:
         * - We accumulate selected points (from start_idx to current index)
         *   and then convert that to a new stroke
@@ -518,7 +518,7 @@ static void gp_duplicate_points(const bGPDstroke *gps, ListBase *new_strokes)
                }
                else {
                        size_t len = 0;
-
+                       
                        /* is this the end of current island yet?
                         * 1) Point i-1 was the last one that was selected
                         * 2) Point i is the last in the array
@@ -530,23 +530,23 @@ static void gp_duplicate_points(const bGPDstroke *gps, ListBase *new_strokes)
                                len = i - start_idx + 1;
                        }
                        //printf("copying from %d to %d = %d\n", start_idx, i, len);
-
+               
                        /* make copies of the relevant data */
                        if (len) {
                                bGPDstroke *gpsd;
-
+                               
                                /* make a stupid copy first of the entire stroke (to get the flags too) */
                                gpsd = MEM_dupallocN(gps);
-
+                               
                                /* now, make a new points array, and copy of the relevant parts */
                                gpsd->points = MEM_callocN(sizeof(bGPDspoint) * len, "gps stroke points copy");
                                memcpy(gpsd->points, gps->points + start_idx, sizeof(bGPDspoint) * len);
                                gpsd->totpoints = len;
-
+                               
                                /* add to temp buffer */
                                gpsd->next = gpsd->prev = NULL;
                                BLI_addtail(new_strokes, gpsd);
-
+                               
                                /* cleanup + reset for next */
                                start_idx = -1;
                        }
@@ -557,12 +557,12 @@ static void gp_duplicate_points(const bGPDstroke *gps, ListBase *new_strokes)
 static int gp_duplicate_exec(bContext *C, wmOperator *op)
 {
        bGPdata *gpd = ED_gpencil_data_get_active(C);
-
+       
        if (gpd == NULL) {
                BKE_report(op->reports, RPT_ERROR, "No Grease Pencil data");
                return OPERATOR_CANCELLED;
        }
-
+       
        /* for each visible (and editable) layer's selected strokes,
         * copy the strokes into a temporary buffer, then append
         * once all done
@@ -572,21 +572,21 @@ static int gp_duplicate_exec(bContext *C, wmOperator *op)
                ListBase new_strokes = {NULL, NULL};
                bGPDframe *gpf = gpl->actframe;
                bGPDstroke *gps;
-
+               
                if (gpf == NULL)
                        continue;
-
+               
                /* make copies of selected strokes, and deselect these once we're done */
                for (gps = gpf->strokes.first; gps; gps = gps->next) {
                        if (gps->flag & GP_STROKE_SELECT) {
                                if (gps->totpoints == 1) {
                                        /* Special Case: If there's just a single point in this stroke... */
                                        bGPDstroke *gpsd;
-
+                                       
                                        /* make direct copies of the stroke and its points */
                                        gpsd = MEM_dupallocN(gps);
                                        gpsd->points = MEM_dupallocN(gps->points);
-
+                                       
                                        /* add to temp buffer */
                                        gpsd->next = gpsd->prev = NULL;
                                        BLI_addtail(&new_strokes, gpsd);
@@ -595,23 +595,23 @@ static int gp_duplicate_exec(bContext *C, wmOperator *op)
                                        /* delegate to a helper, as there's too much to fit in here (for copying subsets)... */
                                        gp_duplicate_points(gps, &new_strokes);
                                }
-
+                               
                                /* deselect original stroke, or else the originals get moved too
                                 * (when using the copy + move macro)
                                 */
                                gps->flag &= ~GP_STROKE_SELECT;
                        }
                }
-
+               
                /* add all new strokes in temp buffer to the frame (preventing double-copies) */
                BLI_movelisttolist(&gpf->strokes, &new_strokes);
                BLI_assert(new_strokes.first == NULL);
        }
        CTX_DATA_END;
-
+       
        /* updates */
        WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
-
+       
        return OPERATOR_FINISHED;
 }
 
@@ -621,11 +621,11 @@ void GPENCIL_OT_duplicate(wmOperatorType *ot)
        ot->name = "Duplicate Strokes";
        ot->idname = "GPENCIL_OT_duplicate";
        ot->description = "Duplicate the selected Grease Pencil strokes";
-
+       
        /* callbacks */
        ot->exec = gp_duplicate_exec;
        ot->poll = gp_stroke_edit_poll;
-
+       
        /* flags */
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 }
@@ -636,7 +636,7 @@ static int gp_actframe_delete_poll(bContext *C)
 {
        bGPdata *gpd = ED_gpencil_data_get_active(C);
        bGPDlayer *gpl = gpencil_layer_getactive(gpd);
-
+       
        /* only if there's an active layer with an active frame */
        return (gpl && gpl->actframe);
 }
@@ -648,7 +648,7 @@ static int gp_actframe_delete_exec(bContext *C, wmOperator *op)
        bGPdata *gpd = ED_gpencil_data_get_active(C);
        bGPDlayer *gpl = gpencil_layer_getactive(gpd);
        bGPDframe *gpf = gpencil_layer_getframe(gpl, CFRA, 0);
-
+       
        /* if there's no existing Grease-Pencil data there, add some */
        if (gpd == NULL) {
                BKE_report(op->reports, RPT_ERROR, "No grease pencil data");
@@ -658,13 +658,13 @@ static int gp_actframe_delete_exec(bContext *C, wmOperator *op)
                BKE_report(op->reports, RPT_ERROR, "No active frame to delete");
                return OPERATOR_CANCELLED;
        }
-
+       
        /* delete it... */
        gpencil_layer_delframe(gpl, gpf);
-
+       
        /* notifiers */
        WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
-
+       
        return OPERATOR_FINISHED;
 }
 
@@ -674,9 +674,9 @@ void GPENCIL_OT_active_frame_delete(wmOperatorType *ot)
        ot->name = "Delete Active Frame";
        ot->idname = "GPENCIL_OT_active_frame_delete";
        ot->description = "Delete the active frame for the active Grease Pencil datablock";
-
+       
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+       
        /* callbacks */
        ot->exec = gp_actframe_delete_exec;
        ot->poll = gp_actframe_delete_poll;
@@ -700,30 +700,30 @@ typedef enum eGP_DeleteMode {
 static int gp_delete_selected_strokes(bContext *C)
 {
        bool changed = false;
-
+       
        CTX_DATA_BEGIN(C, bGPDlayer *, gpl, editable_gpencil_layers)
        {
                bGPDframe *gpf = gpl->actframe;
                bGPDstroke *gps, *gpsn;
-
+               
                if (gpf == NULL)
                        continue;
-
+               
                /* simply delete strokes which are selected */
                for (gps = gpf->strokes.first; gps; gps = gpsn) {
                        gpsn = gps->next;
-
+                       
                        if (gps->flag & GP_STROKE_SELECT) {
                                /* free stroke memory arrays, then stroke itself */
                                if (gps->points) MEM_freeN(gps->points);
                                BLI_freelinkN(&gpf->strokes, gps);
-
+                               
                                changed = true;
                        }
                }
        }
        CTX_DATA_END;
-
+       
        if (changed) {
                WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
                return OPERATOR_FINISHED;
@@ -737,27 +737,27 @@ static int gp_delete_selected_strokes(bContext *C)
 static int gp_dissolve_selected_points(bContext *C)
 {
        bool changed = false;
-
+       
        CTX_DATA_BEGIN(C, bGPDlayer *, gpl, editable_gpencil_layers)
        {
                bGPDframe *gpf = gpl->actframe;
                bGPDstroke *gps, *gpsn;
-
+               
                if (gpf == NULL)
                        continue;
-
+               
                /* simply delete points from selected strokes
                 * NOTE: we may still have to remove the stroke if it ends up having no points!
                 */
                for (gps = gpf->strokes.first; gps; gps = gpsn) {
                        gpsn = gps->next;
-
+                       
                        if (gps->flag & GP_STROKE_SELECT) {
                                bGPDspoint *pt;
                                int i;
-
+                               
                                int tot = gps->totpoints; /* number of points in new buffer */
-
+                               
                                /* First Pass: Count how many points are selected (i.e. how many to remove) */
                                for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
                                        if (pt->flag & GP_SPOINT_SELECT) {
@@ -765,7 +765,7 @@ static int gp_dissolve_selected_points(bContext *C)
                                                tot--;
                                        }
                                }
-
+                               
                                /* if no points are left, we simply delete the entire stroke */
                                if (tot <= 0) {
                                        /* remove the entire stroke */
@@ -776,31 +776,31 @@ static int gp_dissolve_selected_points(bContext *C)
                                        /* just copy all unselected into a smaller buffer */
                                        bGPDspoint *new_points = MEM_callocN(sizeof(bGPDspoint) * tot, "new gp stroke points copy");
                                        bGPDspoint *npt        = new_points;
-
+                                       
                                        for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
                                                if ((pt->flag & GP_SPOINT_SELECT) == 0) {
                                                        *npt = *pt;
                                                        npt++;
                                                }
                                        }
-
+                                       
                                        /* free the old buffer */
                                        MEM_freeN(gps->points);
-
+                                       
                                        /* save the new buffer */
                                        gps->points = new_points;
                                        gps->totpoints = tot;
-
+                                       
                                        /* deselect the stroke, since none of its selected points will still be selected */
                                        gps->flag &= ~GP_STROKE_SELECT;
                                }
-
+                               
                                changed = true;
                        }
                }
        }
        CTX_DATA_END;
-
+       
        if (changed) {
                WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
                return OPERATOR_FINISHED;
@@ -814,23 +814,23 @@ static int gp_dissolve_selected_points(bContext *C)
 static int gp_delete_selected_points(bContext *C)
 {
        bool changed = false;
-
+       
        CTX_DATA_BEGIN(C, bGPDlayer *, gpl, editable_gpencil_layers)
        {
                bGPDframe *gpf = gpl->actframe;
                bGPDstroke *gps, *gpsn;
-
+               
                if (gpf == NULL)
                        continue;
-
+               
                /* simply delete strokes which are selected */
                for (gps = gpf->strokes.first; gps; gps = gpsn) {
                        gpsn = gps->next;
-
+                       
                        if (gps->flag & GP_STROKE_SELECT) {
                                bGPDspoint *pt;
                                int i;
-
+                               
                                /* The algorithm used here is as follows:
                                 * 1) We firstly identify the number of "islands" of non-selected points
                                 *    which will all end up being in new strokes.
@@ -844,11 +844,11 @@ static int gp_delete_selected_points(bContext *C)
                                        int start_idx;
                                        int end_idx;
                                } tGPDeleteIsland;
-
+                               
                                tGPDeleteIsland *islands = MEM_callocN(sizeof(tGPDeleteIsland) * (gps->totpoints + 1) / 2, "gp_point_islands");
                                bool in_island  = false;
                                int num_islands = 0;
-
+                               
                                /* First Pass: Identify start/end of islands */
                                for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
                                        if (pt->flag & GP_SPOINT_SELECT) {
@@ -858,7 +858,7 @@ static int gp_delete_selected_points(bContext *C)
                                        else {
                                                /* unselected - start of a new island? */
                                                int idx;
-
+                                               
                                                if (in_island) {
                                                        /* extend existing island */
                                                        idx = num_islands - 1;
@@ -868,33 +868,33 @@ static int gp_delete_selected_points(bContext *C)
                                                        /* start of new island */
                                                        in_island = true;
                                                        num_islands++;
-
+                                                       
                                                        idx = num_islands - 1;
                                                        islands[idx].start_idx = islands[idx].end_idx = i;
                                                }
                                        }
                                }
-
+                               
                                /* Watch out for special case where No islands = All points selected = Delete Stroke only */
                                if (num_islands) {
                                        /* there are islands, so create a series of new strokes, adding them before the "next" stroke */
                                        int idx;
-
+                                       
                                        /* deselect old stroke, since it will be used as template for the new strokes */
                                        gps->flag &= ~GP_STROKE_SELECT;
-
+                                       
                                        /* create each new stroke... */
                                        for (idx = 0; idx < num_islands; idx++) {
                                                tGPDeleteIsland *island = &islands[idx];
                                                bGPDstroke *new_stroke  = MEM_dupallocN(gps);
-
+                                               
                                                /* compute new buffer size (+ 1 needed as the endpoint index is "inclusive") */
                                                new_stroke->totpoints = island->end_idx - island->start_idx + 1;
                                                new_stroke->points    = MEM_callocN(sizeof(bGPDspoint) * new_stroke->totpoints, "gp delete stroke fragment");
-
+                                               
                                                /* copy over the relevant points */
                                                memcpy(new_stroke->points, gps->points + island->start_idx, sizeof(bGPDspoint) * new_stroke->totpoints);
-
+                                               
                                                /* add new stroke to the frame */
                                                if (gpsn) {
                                                        BLI_insertlinkbefore(&gpf->strokes, gpsn, new_stroke);
@@ -904,20 +904,20 @@ static int gp_delete_selected_points(bContext *C)
                                                }
                                        }
                                }
-
+                               
                                /* free islands */
                                MEM_freeN(islands);
-
+                               
                                /* Delete the old stroke */
                                MEM_freeN(gps->points);
                                BLI_freelinkN(&gpf->strokes, gps);
-
+                               
                                changed = true;
                        }
                }
        }
        CTX_DATA_END;
-
+       
        if (changed) {
                WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
                return OPERATOR_FINISHED;
@@ -932,25 +932,25 @@ static int gp_delete_exec(bContext *C, wmOperator *op)
 {
        eGP_DeleteMode mode = RNA_enum_get(op->ptr, "type");
        int result = OPERATOR_CANCELLED;
-
+       
        switch (mode) {
                case GP_DELETEOP_STROKES:       /* selected strokes */
                        result = gp_delete_selected_strokes(C);
                        break;
-
+               
                case GP_DELETEOP_POINTS:        /* selected points (breaks the stroke into segments) */
                        result = gp_delete_selected_points(C);
                        break;
-
+               
                case GP_DELETEOP_POINTS_DISSOLVE: /* selected points (without splitting the stroke) */
                        result = gp_dissolve_selected_points(C);
                        break;
-
+               
                case GP_DELETEOP_FRAME:         /* active frame */
                        result = gp_actframe_delete_exec(C, op);
                        break;
        }
-
+       
        return result;
 }
 
@@ -965,20 +965,20 @@ void GPENCIL_OT_delete(wmOperatorType *ot)
                                              "Delete selected points without splitting strokes"},
                {0, NULL, 0, NULL, NULL}
        };
-
+       
        /* identifiers */
        ot->name = "Delete...";
        ot->idname = "GPENCIL_OT_delete";
        ot->description = "Delete selected Grease Pencil strokes, vertices, or frames";
-
+       
        /* callbacks */
        ot->invoke = WM_menu_invoke;
        ot->exec = gp_delete_exec;
        ot->poll = gp_stroke_edit_poll;
-
+       
        /* flags */
        ot->flag = OPTYPE_UNDO | OPTYPE_REGISTER;
-
+       
        /* props */
        ot->prop = RNA_def_enum(ot->srna, "type", prop_gpencil_delete_types, 0, "Type", "Method used for deleting Grease Pencil data");
 }
@@ -1043,7 +1043,7 @@ static void gp_strokepoint_convertcoords(bContext *C, bGPDstroke *gps, bGPDspoin
        Scene *scene = CTX_data_scene(C);
        View3D *v3d = CTX_wm_view3d(C);
        ARegion *ar = CTX_wm_region(C);
-
+       
        if (gps->flag & GP_STROKE_3DSPACE) {
                /* directly use 3d-coordinates */
                copy_v3_v3(p3d, &pt->x);
@@ -1051,7 +1051,7 @@ static void gp_strokepoint_convertcoords(bContext *C, bGPDstroke *gps, bGPDspoin
        else {
                const float *fp = ED_view3d_cursor3d_get(scene, v3d);
                float mvalf[2];
-
+               
                /* get screen coordinate */
                if (gps->flag & GP_STROKE_2DSPACE) {
                        View2D *v2d = &ar->v2d;
@@ -1067,7 +1067,7 @@ static void gp_strokepoint_convertcoords(bContext *C, bGPDstroke *gps, bGPDspoin
                                mvalf[1] = (float)pt->y / 100.0f * ar->winy;
                        }
                }
-
+               
                ED_view3d_win_to_3d(ar, fp, mvalf, p3d);
        }
 }
@@ -1083,19 +1083,19 @@ typedef struct tGpTimingData {
        bool realtime; /* Will overwrite end_frame in case of Original or CustomGap timing... */
        float gap_duration, gap_randomness; /* To be used with CustomGap mode*/
        int seed;
-
+       
        /* Data set from points, used to compute final timing FCurve */
        int num_points, cur_point;
-
+       
        /* Distances */
        float *dists;
        float tot_dist;
-
+       
        /* Times */
        float *times; /* Note: Gap times will be negative! */
        float tot_time, gap_tot_time;
        double inittime;
-
+       
        /* Only used during creation of dists & times lists. */
        float offset_time;
 } tGpTimingData;
@@ -1106,9 +1106,9 @@ typedef struct tGpTimingData {
 static void gp_timing_data_set_nbr(tGpTimingData *gtd, const int nbr)
 {
        float *tmp;
-
+       
        BLI_assert(nbr > gtd->num_points);
-
+       
        /* distances */
        tmp = gtd->dists;
        gtd->dists = MEM_callocN(sizeof(float) * nbr, __func__);
@@ -1116,7 +1116,7 @@ static void gp_timing_data_set_nbr(tGpTimingData *gtd, const int nbr)
                memcpy(gtd->dists, tmp, sizeof(float) * gtd->num_points);
                MEM_freeN(tmp);
        }
-
+       
        /* times */
        tmp = gtd->times;
        gtd->times = MEM_callocN(sizeof(float) * nbr, __func__);
@@ -1124,7 +1124,7 @@ static void gp_timing_data_set_nbr(tGpTimingData *gtd, const int nbr)
                memcpy(gtd->times, tmp, sizeof(float) * gtd->num_points);
                MEM_freeN(tmp);
        }
-
+       
        gtd->num_points = nbr;
 }
 
@@ -1134,7 +1134,7 @@ static void gp_timing_data_add_point(tGpTimingData *gtd, const double stroke_ini
 {
        float delta_time = 0.0f;
        const int cur_point = gtd->cur_point;
-
+       
        if (!cur_point) {
                /* Special case, first point, if time is not 0.0f we have to compensate! */
                gtd->offset_time = -time;
@@ -1144,18 +1144,18 @@ static void gp_timing_data_add_point(tGpTimingData *gtd, const double stroke_ini
                /* This is a gap, negative value! */
                gtd->times[cur_point] = -(((float)(stroke_inittime - gtd->inittime)) + time + gtd->offset_time);
                delta_time = -gtd->times[cur_point] - gtd->times[cur_point - 1];
-
+               
                gtd->gap_tot_time += delta_time;
        }
        else {
                gtd->times[cur_point] = (((float)(stroke_inittime - gtd->inittime)) + time + gtd->offset_time);
                delta_time = gtd->times[cur_point] - fabsf(gtd->times[cur_point - 1]);
        }
-
+       
        gtd->tot_time += delta_time;
        gtd->tot_dist += delta_dist;
        gtd->dists[cur_point] = gtd->tot_dist;
-
+       
        gtd->cur_point++;
 }
 
@@ -1170,7 +1170,7 @@ static int gp_find_end_of_stroke_idx(tGpTimingData *gtd, RNG *rng, const int idx
                                      float *next_delta_time)
 {
        int j;
-
+       
        for (j = idx + 1; j < gtd->num_points; j++) {
                if (gtd->times[j] < 0) {
                        gtd->times[j] = -gtd->times[j];
@@ -1189,16 +1189,16 @@ static int gp_find_end_of_stroke_idx(tGpTimingData *gtd, RNG *rng, const int idx
                                        }
                                        else {
                                                float delta, min, max;
-
+                                               
                                                /* This code ensures that if the first gaps have been shorter than average gap_duration,
                                                 * next gaps will tend to be longer (i.e. try to recover the lateness), and vice-versa!
                                                 */
                                                delta = delta_time - (gtd->gap_duration * (*nbr_done_gaps));
-
+                                               
                                                /* Clamp min between [-gap_randomness, 0.0], with lower delta giving higher min */
                                                min = -gtd->gap_randomness - delta;
                                                CLAMP(min, -gtd->gap_randomness, 0.0f);
-
+                                               
                                                /* Clamp max between [0.0, gap_randomness], with lower delta giving higher max */
                                                max = gtd->gap_randomness - delta;
                                                CLAMP(max, 0.0f, gtd->gap_randomness);
@@ -1213,7 +1213,7 @@ static int gp_find_end_of_stroke_idx(tGpTimingData *gtd, RNG *rng, const int idx
                        break;
                }
        }
-
+       
        return j - 1;
 }
 
@@ -1221,7 +1221,7 @@ static void gp_stroke_path_animation_preprocess_gaps(tGpTimingData *gtd, RNG *rn
 {
        int i;
        float delta_time = 0.0f;
-
+       
        for (i = 0; i < gtd->num_points; i++) {
                if (gtd->times[i] < 0 && i) {
                        (*nbr_gaps)++;
@@ -1234,7 +1234,7 @@ static void gp_stroke_path_animation_preprocess_gaps(tGpTimingData *gtd, RNG *rn
                }
        }
        gtd->tot_time -= delta_time;
-
+       
        *tot_gaps_time = (float)(*nbr_gaps) * gtd->gap_duration;
        gtd->tot_time += *tot_gaps_time;
        if (G.debug & G_DEBUG) {
@@ -1251,18 +1251,18 @@ static void gp_stroke_path_animation_add_keyframes(ReportList *reports, PointerR
 {
        /* Use actual recorded timing! */
        const float time_start = (float)gtd->start_frame;
-
+       
        float last_valid_time = 0.0f;
        int end_stroke_idx = -1, start_stroke_idx = 0;
        float end_stroke_time = 0.0f;
-
+       
        /* CustomGaps specific */
        float delta_time = 0.0f, next_delta_time = 0.0f;
        int nbr_done_gaps = 0;
-
+       
        int i;
        float cfra;
-
+       
        /* This is a bit tricky, as:
         * - We can't add arbitrarily close points on FCurve (in time).
         * - We *must* have all "caps" points of all strokes in FCurve, as much as possible!
@@ -1278,11 +1278,11 @@ static void gp_stroke_path_animation_add_keyframes(ReportList *reports, PointerR
                        /* This one should *never* be negative! */
                        end_stroke_time = time_start + ((gtd->times[end_stroke_idx] + delta_time) / gtd->tot_time * time_range);
                }
-
+               
                /* Simple proportional stuff... */
                cu->ctime = gtd->dists[i] / gtd->tot_dist * cu->pathlen;
                cfra = time_start + ((gtd->times[i] + delta_time) / gtd->tot_time * time_range);
-
+               
                /* And now, the checks about timing... */
                if (i == start_stroke_idx) {
                        /* If first point of a stroke, be sure it's enough ahead of last valid keyframe, and
@@ -1333,43 +1333,43 @@ static void gp_stroke_path_animation(bContext *C, ReportList *reports, Curve *cu
        PointerRNA ptr;
        PropertyRNA *prop = NULL;
        int nbr_gaps = 0, i;
-
+       
        if (gtd->mode == GP_STROKECONVERT_TIMING_NONE)
                return;
-
+       
        /* gap_duration and gap_randomness are in frames, but we need seconds!!! */
        gtd->gap_duration = FRA2TIME(gtd->gap_duration);
        gtd->gap_randomness = FRA2TIME(gtd->gap_randomness);
-
+       
        /* Enable path! */
        cu->flag |= CU_PATH;
        cu->pathlen = gtd->frame_range;
-
+       
        /* Get RNA pointer to read/write path time values */
        RNA_id_pointer_create((ID *)cu, &ptr);
        prop = RNA_struct_find_property(&ptr, "eval_time");
-
+       
        /* Ensure we have an F-Curve to add keyframes to */
        act = verify_adt_action((ID *)cu, true);
        fcu = verify_fcurve(act, NULL, &ptr, "eval_time", 0, true);
-
+       
        if (G.debug & G_DEBUG) {
                printf("%s: tot len: %f\t\ttot time: %f\n", __func__, gtd->tot_dist, gtd->tot_time);
                for (i = 0; i < gtd->num_points; i++) {
                        printf("\tpoint %d:\t\tlen: %f\t\ttime: %f\n", i, gtd->dists[i], gtd->times[i]);
                }
        }
-
+       
        if (gtd->mode == GP_STROKECONVERT_TIMING_LINEAR) {
                float cfra;
-
+               
                /* Linear extrapolation! */
                fcu->extend = FCURVE_EXTRAPOLATE_LINEAR;
-
+               
                cu->ctime = 0.0f;
                cfra = (float)gtd->start_frame;
                insert_keyframe_direct(reports, ptr, prop, fcu, cfra, INSERTKEY_FAST);
-
+               
                cu->ctime = cu->pathlen;
                if (gtd->realtime) {
                        cfra += (float)TIME2FRA(gtd->tot_time); /* Seconds to frames */
@@ -1383,35 +1383,35 @@ static void gp_stroke_path_animation(bContext *C, ReportList *reports, Curve *cu
                /* Use actual recorded timing! */
                RNG *rng = BLI_rng_new(0);
                float time_range;
-
+               
                /* CustomGaps specific */
                float tot_gaps_time = 0.0f;
-
+               
                /* Pre-process gaps, in case we don't want to keep their original timing */
                if (gtd->mode == GP_STROKECONVERT_TIMING_CUSTOMGAP) {
                        gp_stroke_path_animation_preprocess_gaps(gtd, rng, &nbr_gaps, &tot_gaps_time);
                }
-
+               
                if (gtd->realtime) {
                        time_range = (float)TIME2FRA(gtd->tot_time); /* Seconds to frames */
                }
                else {
                        time_range = (float)(gtd->end_frame - gtd->start_frame);
                }
-
+               
                if (G.debug & G_DEBUG) {
                        printf("GP Stroke Path Conversion: Starting keying!\n");
                }
-
+               
                gp_stroke_path_animation_add_keyframes(reports, ptr, prop, fcu, cu, gtd, rng, time_range,
                                                       nbr_gaps, tot_gaps_time);
-
+               
                BLI_rng_free(rng);
        }
-
+       
        /* As we used INSERTKEY_FAST mode, we need to recompute all curve's handles now */
        calchandles_fcurve(fcu);
-
+       
        if (G.debug & G_DEBUG) {
                printf("%s: \ntot len: %f\t\ttot time: %f\n", __func__, gtd->tot_dist, gtd->tot_time);
                for (i = 0; i < gtd->num_points; i++) {
@@ -1419,9 +1419,9 @@ static void gp_stroke_path_animation(bContext *C, ReportList *reports, Curve *cu
                }
                printf("\n\n");
        }
-
+       
        WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
-
+       
        /* send updates */
        DAG_id_tag_update(&cu->id, 0);
 }
@@ -1441,7 +1441,7 @@ static void gp_stroke_to_path_add_point(tGpTimingData *gtd, BPoint *bp, const fl
 {
        copy_v3_v3(bp->vec, p);
        bp->vec[3] = 1.0f;
-
+       
        /* set settings */
        bp->f1 = SELECT;
        bp->radius = width * rad_fac;
@@ -1453,7 +1453,7 @@ static void gp_stroke_to_path_add_point(tGpTimingData *gtd, BPoint *bp, const fl
        else if (bp->weight > minmax_weights[1]) {
                minmax_weights[1] = bp->weight;
        }
-
+       
        /* Update timing data */
        if (do_gtd) {
                gp_timing_data_add_point(gtd, inittime, time, len_v3v3(prev_p, p));
@@ -1470,7 +1470,7 @@ static void gp_stroke_to_path(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Curv
        const bool do_gtd = (gtd->mode != GP_STROKECONVERT_TIMING_NONE);
        const int add_start_end_points = (add_start_point ? 1 : 0) + (add_end_point ? 1 : 0);
        int i, old_nbp = 0;
-
+       
        /* create new 'nurb' or extend current one within the curve */
        if (nu) {
                old_nbp = nu->pntsu;
@@ -1482,7 +1482,7 @@ static void gp_stroke_to_path(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Curv
        }
        else {
                nu = (Nurb *)MEM_callocN(sizeof(Nurb), "gpstroke_to_path(nurb)");
-
+               
                nu->pntsu = gps->totpoints + add_start_end_points;
                nu->pntsv = 1;
                nu->orderu = 2; /* point-to-point! */
@@ -1491,16 +1491,16 @@ static void gp_stroke_to_path(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Curv
                nu->resolu = cu->resolu;
                nu->resolv = cu->resolv;
                nu->knotsu = NULL;
-
+               
                nu->bp = (BPoint *)MEM_callocN(sizeof(BPoint) * nu->pntsu, "bpoints");
-
+               
                stitch = false; /* Security! */
        }
-
+       
        if (do_gtd) {
                gp_timing_data_set_nbr(gtd, nu->pntsu);
        }
-
+       
        /* If needed, make the link between both strokes with two zero-radius additional points */
        /* About "zero-radius" point interpolations:
         * - If we have at least two points in current curve (most common case), we linearly extrapolate
@@ -1513,16 +1513,16 @@ static void gp_stroke_to_path(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Curv
        if (curnu && !stitch && old_nbp) {
                float p1[3], p2[3], p[3], next_p[3];
                float dt1 = 0.0f, dt2 = 0.0f;
-
+               
                BLI_assert(gps->prev != NULL);
-
+               
                prev_bp = NULL;
                if ((old_nbp > 1) && (gps->prev->totpoints > 1)) {
                        /* Only use last curve segment if previous stroke was not a single-point one! */
                        prev_bp = &nu->bp[old_nbp - 2];
                }
                bp = &nu->bp[old_nbp - 1];
-
+               
                /* First point */
                gp_strokepoint_convertcoords(C, gps, gps->points, p, subrect);
                if (prev_bp) {
@@ -1541,7 +1541,7 @@ static void gp_stroke_to_path(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Curv
                bp++;
                gp_stroke_to_path_add_point(gtd, bp, p1, (bp - 1)->vec, do_gtd, gps->prev->inittime, dt1,
                                            0.0f, rad_fac, minmax_weights);
-
+               
                /* Second point */
                /* Note dt2 is always negative, which marks the gap. */
                if (gps->totpoints > 1) {
@@ -1559,13 +1559,13 @@ static void gp_stroke_to_path(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Curv
                }
                bp++;
                gp_stroke_to_path_add_point(gtd, bp, p2, p1, do_gtd, gps->inittime, dt2, 0.0f, rad_fac, minmax_weights);
-
+               
                old_nbp += 2;
        }
        else if (add_start_point) {
                float p[3], next_p[3];
                float dt = 0.0f;
-
+               
                gp_strokepoint_convertcoords(C, gps, gps->points, p, subrect);
                if (gps->totpoints > 1) {
                        gp_strokepoint_convertcoords(C, gps, gps->points + 1, next_p, subrect);
@@ -1583,14 +1583,14 @@ static void gp_stroke_to_path(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Curv
                 * would not work (it would be *before* gtd->inittime, which is not supported currently).
                 */
                gp_stroke_to_path_add_point(gtd, bp, p, p, do_gtd, gps->inittime, dt, 0.0f, rad_fac, minmax_weights);
-
+               
                old_nbp++;
        }
-
+       
        if (old_nbp) {
                prev_bp = &nu->bp[old_nbp - 1];
        }
-
+       
        /* add points */
        for (i = (stitch) ? 1 : 0, pt = &gps->points[(stitch) ? 1 : 0], bp = &nu->bp[old_nbp];
             i < gps->totpoints;
@@ -1598,20 +1598,20 @@ static void gp_stroke_to_path(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Curv
        {
                float p[3];
                float width = pt->pressure * gpl->thickness * WIDTH_CORR_FAC;
-
+               
                /* get coordinates to add at */
                gp_strokepoint_convertcoords(C, gps, pt, p, subrect);
-
+               
                gp_stroke_to_path_add_point(gtd, bp, p, (prev_bp) ? prev_bp->vec : p, do_gtd, gps->inittime, pt->time,
                                            width, rad_fac, minmax_weights);
-
+               
                prev_bp = bp;
        }
 
        if (add_end_point) {
                float p[3];
                float dt = 0.0f;
-
+               
                if (gps->totpoints > 1) {
                        interp_v3_v3v3(p, prev_bp->vec, (prev_bp - 1)->vec, -GAP_DFAC);
                        if (do_gtd) {
@@ -1627,7 +1627,7 @@ static void gp_stroke_to_path(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Curv
                /* Note bp has already been incremented in main loop above, so it points to the right place. */
                gp_stroke_to_path_add_point(gtd, bp, p, prev_bp->vec, do_gtd, gps->inittime, dt, 0.0f, rad_fac, minmax_weights);
        }
-
+       
        /* add nurb to curve */
        if (!curnu || !*curnu) {
                BLI_addtail(&cu->nurb, nu);
@@ -1635,7 +1635,7 @@ static void gp_stroke_to_path(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Curv
        if (curnu) {
                *curnu = nu;
        }
-
+       
        BKE_nurb_knot_calc_u(nu);
 }
 
@@ -1650,7 +1650,7 @@ static void gp_stroke_to_bezier_add_point(tGpTimingData *gtd, BezTriple *bezt,
        copy_v3_v3(bezt->vec[0], h1);
        copy_v3_v3(bezt->vec[1], p);
        copy_v3_v3(bezt->vec[2], h2);
-
+       
        /* set settings */
        bezt->h1 = bezt->h2 = HD_FREE;
        bezt->f1 = bezt->f2 = bezt->f3 = SELECT;
@@ -1663,7 +1663,7 @@ static void gp_stroke_to_bezier_add_point(tGpTimingData *gtd, BezTriple *bezt,
        else if (bezt->weight > minmax_weights[1]) {
                minmax_weights[1] = bezt->weight;
        }
-
+       
        /* Update timing data */
        if (do_gtd) {
                gp_timing_data_add_point(gtd, inittime, time, len_v3v3(prev_p, p));
@@ -1681,7 +1681,7 @@ static void gp_stroke_to_bezier(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Cu
        const int add_start_end_points = (add_start_point ? 1 : 0) + (add_end_point ? 1 : 0);
        float p3d_cur[3], p3d_prev[3], p3d_next[3], h1[3], h2[3];
        const bool do_gtd = (gtd->mode != GP_STROKECONVERT_TIMING_NONE);
-
+       
        /* create new 'nurb' or extend current one within the curve */
        if (nu) {
                old_nbezt = nu->pntsu;
@@ -1693,22 +1693,22 @@ static void gp_stroke_to_bezier(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Cu
        }
        else {
                nu = (Nurb *)MEM_callocN(sizeof(Nurb), "gpstroke_to_bezier(nurb)");
-
+               
                nu->pntsu = gps->totpoints + add_start_end_points;
                nu->resolu = 12;
                nu->resolv = 12;
                nu->type = CU_BEZIER;
                nu->bezt = (BezTriple *)MEM_callocN(sizeof(BezTriple) * nu->pntsu, "bezts");
-
+               
                stitch = false; /* Security! */
        }
-
+       
        if (do_gtd) {
                gp_timing_data_set_nbr(gtd, nu->pntsu);
        }
-
+       
        tot = gps->totpoints;
-
+       
        /* get initial coordinates */
        pt = gps->points;
        if (tot) {
@@ -1720,11 +1720,11 @@ static void gp_stroke_to_bezier(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Cu
                        gp_strokepoint_convertcoords(C, gps, pt + 2, p3d_next, subrect);
                }
        }
-
+       
        /* If needed, make the link between both strokes with two zero-radius additional points */
        if (curnu && old_nbezt) {
                BLI_assert(gps->prev != NULL);
-
+               
                /* Update last point's second handle */
                if (stitch) {
                        bezt = &nu->bezt[old_nbezt - 1];
@@ -1732,7 +1732,7 @@ static void gp_stroke_to_bezier(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Cu
                        copy_v3_v3(bezt->vec[2], h2);
                        pt++;
                }
-
+               
                /* Create "link points" */
                /* About "zero-radius" point interpolations:
                 * - If we have at least two points in current curve (most common case), we linearly extrapolate
@@ -1745,14 +1745,14 @@ static void gp_stroke_to_bezier(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Cu
                else {
                        float p1[3], p2[3];
                        float dt1 = 0.0f, dt2 = 0.0f;
-
+                       
                        prev_bezt = NULL;
                        if ((old_nbezt > 1) && (gps->prev->totpoints > 1)) {
                                /* Only use last curve segment if previous stroke was not a single-point one! */
                                prev_bezt = &nu->bezt[old_nbezt - 2];
                        }
                        bezt = &nu->bezt[old_nbezt - 1];
-
+                       
                        /* First point */
                        if (prev_bezt) {
                                interp_v3_v3v3(p1, prev_bezt->vec[1], bezt->vec[1], 1.0f + GAP_DFAC);
@@ -1767,7 +1767,7 @@ static void gp_stroke_to_bezier(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Cu
                                        dt1 = interpf(gps->inittime - gps->prev->inittime, 0.0f, GAP_DFAC);
                                }
                        }
-
+                       
                        /* Second point */
                        /* Note dt2 is always negative, which marks the gap. */
                        if (tot > 1) {
@@ -1782,25 +1782,25 @@ static void gp_stroke_to_bezier(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Cu
                                        dt2 = interpf(gps->prev->inittime - gps->inittime, 0.0f, GAP_DFAC);
                                }
                        }
-
+                       
                        /* Second handle of last point of previous stroke. */
                        interp_v3_v3v3(h2, bezt->vec[1], p1, BEZT_HANDLE_FAC);
                        copy_v3_v3(bezt->vec[2], h2);
-
+                       
                        /* First point */
                        interp_v3_v3v3(h1, p1, bezt->vec[1], BEZT_HANDLE_FAC);
                        interp_v3_v3v3(h2, p1, p2, BEZT_HANDLE_FAC);
                        bezt++;
                        gp_stroke_to_bezier_add_point(gtd, bezt, p1, h1, h2, (bezt - 1)->vec[1], do_gtd, gps->prev->inittime, dt1,
                                                      0.0f, rad_fac, minmax_weights);
-
+                       
                        /* Second point */
                        interp_v3_v3v3(h1, p2, p1, BEZT_HANDLE_FAC);
                        interp_v3_v3v3(h2, p2, p3d_cur, BEZT_HANDLE_FAC);
                        bezt++;
                        gp_stroke_to_bezier_add_point(gtd, bezt, p2, h1, h2, p1, do_gtd, gps->inittime, dt2,
                                                      0.0f, rad_fac, minmax_weights);
-
+                       
                        old_nbezt += 2;
                        copy_v3_v3(p3d_prev, p2);
                }
@@ -1808,7 +1808,7 @@ static void gp_stroke_to_bezier(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Cu
        else if (add_start_point) {
                float p[3];
                float dt = 0.0f;
-
+               
                if (gps->totpoints > 1) {
                        interp_v3_v3v3(p, p3d_cur, p3d_next, -GAP_DFAC);
                        if (do_gtd) {
@@ -1825,51 +1825,51 @@ static void gp_stroke_to_bezier(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Cu
                bezt = &nu->bezt[old_nbezt];
                gp_stroke_to_bezier_add_point(gtd, bezt, p, h1, h2, p, do_gtd, gps->inittime, dt,
                                              0.0f, rad_fac, minmax_weights);
-
+               
                old_nbezt++;
                copy_v3_v3(p3d_prev, p);
        }
-
+       
        if (old_nbezt) {
                prev_bezt = &nu->bezt[old_nbezt - 1];
        }
-
+       
        /* add points */
        for (i = stitch ? 1 : 0, bezt = &nu->bezt[old_nbezt]; i < tot; i++, pt++, bezt++) {
                float width = pt->pressure * gpl->thickness * WIDTH_CORR_FAC;
-
+               
                if (i || old_nbezt) {
                        interp_v3_v3v3(h1, p3d_cur, p3d_prev, BEZT_HANDLE_FAC);
                }
                else {
                        interp_v3_v3v3(h1, p3d_cur, p3d_next, -BEZT_HANDLE_FAC);
                }
-
+               
                if (i < tot - 1) {
                        interp_v3_v3v3(h2, p3d_cur, p3d_next, BEZT_HANDLE_FAC);
                }
                else {
                        interp_v3_v3v3(h2, p3d_cur, p3d_prev, -BEZT_HANDLE_FAC);
                }
-
+               
                gp_stroke_to_bezier_add_point(gtd, bezt, p3d_cur, h1, h2, prev_bezt ? prev_bezt->vec[1] : p3d_cur,
                                              do_gtd, gps->inittime, pt->time, width, rad_fac, minmax_weights);
-
+               
                /* shift coord vects */
                copy_v3_v3(p3d_prev, p3d_cur);
                copy_v3_v3(p3d_cur, p3d_next);
-
+               
                if (i + 2 < tot) {
                        gp_strokepoint_convertcoords(C, gps, pt + 2, p3d_next, subrect);
                }
-
+               
                prev_bezt = bezt;
        }
 
        if (add_end_point) {
                float p[3];
                float dt = 0.0f;
-
+               
                if (gps->totpoints > 1) {
                        interp_v3_v3v3(p, prev_bezt->vec[1], (prev_bezt - 1)->vec[1], -GAP_DFAC);
                        if (do_gtd) {
@@ -1882,11 +1882,11 @@ static void gp_stroke_to_bezier(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Cu
                        p[0] += GAP_DFAC;  /* Rather arbitrary... */
                        dt = GAP_DFAC;  /* Rather arbitrary too! */
                }
-
+               
                /* Second handle of last point of this stroke. */
                interp_v3_v3v3(h2, prev_bezt->vec[1], p, BEZT_HANDLE_FAC);
                copy_v3_v3(prev_bezt->vec[2], h2);
-
+               
                /* The end point */
                interp_v3_v3v3(h1, p, prev_bezt->vec[1], BEZT_HANDLE_FAC);
                interp_v3_v3v3(h2, p, prev_bezt->vec[1], -BEZT_HANDLE_FAC);
@@ -1894,10 +1894,10 @@ static void gp_stroke_to_bezier(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Cu
                gp_stroke_to_bezier_add_point(gtd, bezt, p, h1, h2, prev_bezt->vec[1], do_gtd, gps->inittime, dt,
                                              0.0f, rad_fac, minmax_weights);
        }
-
+       
        /* must calculate handles or else we crash */
        BKE_nurb_handles_calc(nu);
-
+       
        if (!curnu || !*curnu) {
                BLI_addtail(&cu->nurb, nu);
        }
@@ -1927,7 +1927,7 @@ static void gp_stroke_finalize_curve_endpoints(Curve *cu)
                        bp[i].weight = bp[i].radius = 0.0f;
                }
        }
-
+       
        /* end */
        nu = cu->nurb.last;
        i = nu->pntsu - 1;
@@ -1951,13 +1951,13 @@ static void gp_stroke_norm_curve_weights(Curve *cu, const float minmax_weights[2
        const float delta = minmax_weights[0];
        float fac;
        int i;
-
+       
        /* when delta == minmax_weights[0] == minmax_weights[1], we get div by zero [#35686] */
        if (IS_EQF(delta, minmax_weights[1]))
                fac = 1.0f;
        else
                fac = 1.0f / (minmax_weights[1] - delta);
-
+       
        for (nu = cu->nurb.first; nu; nu = nu->next) {
                if (nu->bezt) {
                        BezTriple *bezt = nu->bezt;
@@ -1978,10 +1978,10 @@ static int gp_camera_view_subrect(bContext *C, rctf *subrect)
 {
        View3D *v3d = CTX_wm_view3d(C);
        ARegion *ar = CTX_wm_region(C);
-
+       
        if (v3d) {
                RegionView3D *rv3d = ar->regiondata;
-
+               
                /* for camera view set the subrect */
                if (rv3d->persp == RV3D_CAMOB) {
                        Scene *scene = CTX_data_scene(C);
@@ -1989,7 +1989,7 @@ static int gp_camera_view_subrect(bContext *C, rctf *subrect)
                        return 1;
                }
        }
-
+       
        return 0;
 }
 
@@ -2007,55 +2007,55 @@ static void gp_layer_to_curve(bContext *C, ReportList *reports, bGPdata *gpd, bG
        Nurb *nu = NULL;
        Base *base_orig = BASACT, *base_new = NULL;
        float minmax_weights[2] = {1.0f, 0.0f};
-
+       
        /* camera framing */
        rctf subrect, *subrect_ptr = NULL;
-
+       
        /* error checking */
        if (ELEM(NULL, gpd, gpl, gpf))
                return;
-
+       
        /* only convert if there are any strokes on this layer's frame to convert */
        if (BLI_listbase_is_empty(&gpf->strokes))
                return;
-
+       
        /* initialize camera framing */
        if (gp_camera_view_subrect(C, &subrect)) {
                subrect_ptr = &subrect;
        }
-
+       
        /* init the curve object (remove rotation and get curve data from it)
         *      - must clear transforms set on object, as those skew our results
         */
        ob = BKE_object_add_only_object(bmain, OB_CURVE, gpl->info);
        cu = ob->data = BKE_curve_add(bmain, gpl->info, OB_CURVE);
        base_new = BKE_scene_base_add(scene, ob);
-
+       
        cu->flag |= CU_3D;
-
+       
        gtd->inittime = ((bGPDstroke *)gpf->strokes.first)->inittime;
-
+       
        /* add points to curve */
        for (gps = gpf->strokes.first; gps; gps = gps->next) {
                const bool add_start_point = (link_strokes && !(prev_gps));
                const bool add_end_point = (link_strokes && !(gps->next));
-
+               
                /* Detect new strokes created because of GP_STROKE_BUFFER_MAX reached, and stitch them to previous one. */
                bool stitch = false;
                if (prev_gps) {
                        bGPDspoint *pt1 = &prev_gps->points[prev_gps->totpoints - 1];
                        bGPDspoint *pt2 = &gps->points[0];
-
+                       
                        if ((pt1->x == pt2->x) && (pt1->y == pt2->y)) {
                                stitch = true;
                        }
                }
-
+               
                /* Decide whether we connect this stroke to previous one */
                if (!(stitch || link_strokes)) {
                        nu = NULL;
                }
-
+               
                switch (mode) {
                        case GP_STROKECONVERT_PATH:
                                gp_stroke_to_path(C, gpl, gps, cu, subrect_ptr, &nu, minmax_weights, rad_fac, stitch,
@@ -2072,26 +2072,26 @@ static void gp_layer_to_curve(bContext *C, ReportList *reports, bGPdata *gpd, bG
                }
                prev_gps = gps;
        }
-
+       
        /* If link_strokes, be sure first and last points have a zero weight/size! */
        if (link_strokes) {
                gp_stroke_finalize_curve_endpoints(cu);
        }
-
+       
        /* Update curve's weights, if needed */
        if (norm_weights && ((minmax_weights[0] > 0.0f) || (minmax_weights[1] < 1.0f))) {
                gp_stroke_norm_curve_weights(cu, minmax_weights);
        }
-
+       
        /* Create the path animation, if needed */
        gp_stroke_path_animation(C, reports, cu, gtd);
-
+       
        if (mode == GP_STROKECONVERT_POLY) {
                for (nu = cu->nurb.first; nu; nu = nu->next) {
                        BKE_nurb_type_convert(nu, CU_POLY, false);
                }
        }
-
+       
        /* set the layer and select */
        base_new->lay  = ob->lay  = base_orig ? base_orig->lay : BKE_screen_view3d_layer_active(v3d, scene);
        base_new->flag = ob->flag = base_new->flag | SELECT;
@@ -2111,17 +2111,17 @@ static bool gp_convert_check_has_valid_timing(bContext *C, bGPDlayer *gpl, wmOpe
        double base_time, cur_time, prev_time = -1.0;
        int i;
        bool valid = true;
-
+       
        if (!gpl || !(gpf = gpencil_layer_getframe(gpl, CFRA, 0)) || !(gps = gpf->strokes.first))
                return false;
-
+       
        do {
                base_time = cur_time = gps->inittime;
                if (cur_time <= prev_time) {
                        valid = false;
                        break;
                }
-
+               
                prev_time = cur_time;
                for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
                        cur_time = base_time + (double)pt->time;
@@ -2134,12 +2134,12 @@ static bool gp_convert_check_has_valid_timing(bContext *C, bGPDlayer *gpl, wmOpe
                        }
                        prev_time = cur_time;
                }
-
+               
                if (!valid) {
                        break;
                }
        } while ((gps = gps->next));
-
+       
        if (op) {
                RNA_boolean_set(op->ptr, "use_timing_data", valid);
        }
@@ -2151,7 +2151,7 @@ static void gp_convert_set_end_frame(struct Main *UNUSED(main), struct Scene *UN
 {
        int start_frame = RNA_int_get(ptr, "start_frame");
        int end_frame = RNA_int_get(ptr, "end_frame");
-
+       
        if (end_frame <= start_frame) {
                RNA_int_set(ptr, "end_frame", start_frame + 1);
        }
@@ -2164,7 +2164,7 @@ static int gp_convert_poll(bContext *C)
        bGPDframe *gpf = NULL;
        ScrArea *sa = CTX_wm_area(C);
        Scene *scene = CTX_data_scene(C);
-
+       
        /* only if the current view is 3D View, if there's valid data (i.e. at least one stroke!),
         * and if we are not in edit mode!
         */
@@ -2187,19 +2187,19 @@ static int gp_convert_layer_exec(bContext *C, wmOperator *op)
        const bool link_strokes = RNA_boolean_get(op->ptr, "use_link_strokes");
        bool valid_timing;
        tGpTimingData gtd;
-
+       
        /* check if there's data to work with */
        if (gpd == NULL) {
                BKE_report(op->reports, RPT_ERROR, "No Grease Pencil data to work on");
                return OPERATOR_CANCELLED;
        }
-
+       
        if (!RNA_property_is_set(op->ptr, prop) && !gp_convert_check_has_valid_timing(C, gpl, op)) {
                BKE_report(op->reports, RPT_WARNING,
                           "Current Grease Pencil strokes have no valid timing data, most timing options will be hidden!");
        }
        valid_timing = RNA_property_boolean_get(op->ptr, prop);
-
+       
        gtd.mode = RNA_enum_get(op->ptr, "timing_mode");
        /* Check for illegal timing mode! */
        if (!valid_timing && !ELEM(gtd.mode, GP_STROKECONVERT_TIMING_NONE, GP_STROKECONVERT_TIMING_LINEAR)) {
@@ -2209,7 +2209,7 @@ static int gp_convert_layer_exec(bContext *C, wmOperator *op)
        if (!link_strokes) {
                gtd.mode = GP_STROKECONVERT_TIMING_NONE;
        }
-
+       
        /* grab all relevant settings */
        gtd.frame_range = RNA_int_get(op->ptr, "frame_range");
        gtd.start_frame = RNA_int_get(op->ptr, "start_frame");
@@ -2224,10 +2224,10 @@ static int gp_convert_layer_exec(bContext *C, wmOperator *op)
        gtd.tot_dist = gtd.tot_time = gtd.gap_tot_time = 0.0f;
        gtd.inittime = 0.0;
        gtd.offset_time = 0.0f;
-
+       
        /* perform conversion */
        gp_layer_to_curve(C, op->reports, gpd, gpl, mode, norm_weights, rad_fac, link_strokes, &gtd);
-
+       
        /* free temp memory */
        if (gtd.dists) {
                MEM_freeN(gtd.dists);
@@ -2237,11 +2237,11 @@ static int gp_convert_layer_exec(bContext *C, wmOperator *op)
                MEM_freeN(gtd.times);
                gtd.times = NULL;
        }
-
+       
        /* notifiers */
        WM_event_add_notifier(C, NC_OBJECT | NA_ADDED, NULL);
        WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
-
+       
        /* done */
        return OPERATOR_FINISHED;
 }
@@ -2255,7 +2255,7 @@ static bool gp_convert_draw_check_prop(PointerRNA *ptr, PropertyRNA *prop)
        float gap_duration = RNA_float_get(ptr, "gap_duration");
        float gap_randomness = RNA_float_get(ptr, "gap_randomness");
        const bool valid_timing = RNA_boolean_get(ptr, "use_timing_data");
-
+       
        /* Always show those props */
        if (strcmp(prop_id, "type") == 0 ||
            strcmp(prop_id, "use_normalize_weights") == 0 ||
@@ -2264,16 +2264,16 @@ static bool gp_convert_draw_check_prop(PointerRNA *ptr, PropertyRNA *prop)
        {
                return true;
        }
-
+       
        /* Never show this prop */
        if (strcmp(prop_id, "use_timing_data") == 0)
                return false;
-
+       
        if (link_strokes) {
                /* Only show when link_stroke is true */
                if (strcmp(prop_id, "timing_mode") == 0)
                        return true;
-
+               
                if (timing_mode != GP_STROKECONVERT_TIMING_NONE) {
                        /* Only show when link_stroke is true and stroke timing is enabled */
                        if (strcmp(prop_id, "frame_range") == 0 ||
@@ -2281,31 +2281,31 @@ static bool gp_convert_draw_check_prop(PointerRNA *ptr, PropertyRNA *prop)
                        {
                                return true;
                        }
-
+                       
                        /* Only show if we have valid timing data! */
                        if (valid_timing && strcmp(prop_id, "use_realtime") == 0)
                                return true;
-
+                       
                        /* Only show if realtime or valid_timing is false! */
                        if ((!realtime || !valid_timing) && strcmp(prop_id, "end_frame") == 0)
                                return true;
-
+                       
                        if (valid_timing && timing_mode == GP_STROKECONVERT_TIMING_CUSTOMGAP) {
                                /* Only show for custom gaps! */
                                if (strcmp(prop_id, "gap_duration") == 0)
                                        return true;
-
+                               
                                /* Only show randomness for non-null custom gaps! */
                                if (strcmp(prop_id, "gap_randomness") == 0 && (gap_duration > 0.0f))
                                        return true;
-
+                               
                                /* Only show seed for randomize action! */
                                if (strcmp(prop_id, "seed") == 0 && (gap_duration > 0.0f) && (gap_randomness > 0.0f))
                                        return true;
                        }
                }
        }
-
+       
        /* Else, hidden! */
        return false;
 }
@@ -2315,9 +2315,9 @@ static void gp_convert_ui(bContext *C, wmOperator *op)
        uiLayout *layout = op->layout;
        wmWindowManager *wm = CTX_wm_manager(C);
        PointerRNA ptr;
-
+       
        RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr);
-
+       
        /* Main auto-draw call */
        uiDefAutoButsRNA(layout, &ptr, gp_convert_draw_check_prop, '\0');
 }
@@ -2325,35 +2325,35 @@ static void gp_convert_ui(bContext *C, wmOperator *op)
 void GPENCIL_OT_convert(wmOperatorType *ot)
 {
        PropertyRNA *prop;
-
+       
        /* identifiers */
        ot->name = "Convert Grease Pencil";
        ot->idname = "GPENCIL_OT_convert";
        ot->description = "Convert the active Grease Pencil layer to a new Curve Object";
-
+       
        /* callbacks */
        ot->invoke = WM_menu_invoke;
        ot->exec = gp_convert_layer_exec;
        ot->poll = gp_convert_poll;
        ot->ui = gp_convert_ui;
-
+       
        /* flags */
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+       
        /* properties */
        ot->prop = RNA_def_enum(ot->srna, "type", prop_gpencil_convertmodes, 0, "Type", "Which type of curve to convert to");
-
+       
        RNA_def_boolean(ot->srna, "use_normalize_weights", true, "Normalize Weight",
                        "Normalize weight (set from stroke width)");
        RNA_def_float(ot->srna, "radius_multiplier", 1.0f, 0.0f, 1000.0f, "Radius Fac",
                      "Multiplier for the points' radii (set from stroke width)", 0.0f, 10.0f);
        RNA_def_boolean(ot->srna, "use_link_strokes", true, "Link Strokes",
                        "Whether to link strokes with zero-radius sections of curves");
-
+       
        prop = RNA_def_enum(ot->srna, "timing_mode", prop_gpencil_convert_timingmodes, GP_STROKECONVERT_TIMING_FULL,
                            "Timing Mode", "How to use timing data stored in strokes");
        RNA_def_enum_funcs(prop, rna_GPConvert_mode_items);
-
+       
        RNA_def_int(ot->srna, "frame_range", 100, 1, 10000, "Frame Range",
                    "The duration of evaluation of the path control curve", 1, 1000);
        RNA_def_int(ot->srna, "start_frame", 1, 1, 100000, "Start Frame",
@@ -2363,7 +2363,7 @@ void GPENCIL_OT_convert(wmOperatorType *ot)
        prop = RNA_def_int(ot->srna, "end_frame", 250, 1, 100000, "End Frame",
                           "The end frame of the path control curve (if Realtime is not set)", 1, 100000);
        RNA_def_property_update_runtime(prop, gp_convert_set_end_frame);
-
+       
        RNA_def_float(ot->srna, "gap_duration", 0.0f, 0.0f, 10000.0f, "Gap Duration",
                      "Custom Gap mode: (Average) length of gaps, in frames "
                      "(Note: Realtime value, will be scaled if Realtime is not set)", 0.0f, 1000.0f);
@@ -2371,7 +2371,7 @@ void GPENCIL_OT_convert(wmOperatorType *ot)
                      "Custom Gap mode: Number of frames that gap lengths can vary", 0.0f, 1000.0f);
        RNA_def_int(ot->srna, "seed", 0, 0, 1000, "Random Seed",
                    "Custom Gap mode: Random generator seed", 0, 100);
-
+       
        /* Note: Internal use, this one will always be hidden by UI code... */
        prop = RNA_def_boolean(ot->srna, "use_timing_data", false, "Has Valid Timing",
                               "Whether the converted Grease Pencil layer has valid timing data (internal use)");
index 1d0e0053e905008ec1b14bd9226917e394644f87..02c354e229892c4d5e065cbaa8e03a73a587f399 100644 (file)
@@ -59,34 +59,34 @@ static void ed_keymap_gpencil_general(wmKeyConfig *keyconf)
 {
        wmKeyMap *keymap = WM_keymap_find(keyconf, "Grease Pencil", 0, 0);
        wmKeyMapItem *kmi;
-
+       
        /* Draw  --------------------------------------- */
        /* draw */
        kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_draw", LEFTMOUSE, KM_PRESS, 0, DKEY);
        RNA_enum_set(kmi->ptr, "mode", GP_PAINTMODE_DRAW);
        RNA_boolean_set(kmi->ptr, "wait_for_input", false);
-
+       
        /* draw - straight lines */
        kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_draw", LEFTMOUSE, KM_PRESS, KM_CTRL, DKEY);
        RNA_enum_set(kmi->ptr, "mode", GP_PAINTMODE_DRAW_STRAIGHT);
        RNA_boolean_set(kmi->ptr, "wait_for_input", false);
-
+       
        /* draw - poly lines */
        kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_draw", LEFTMOUSE, KM_PRESS, KM_ALT, DKEY);
        RNA_enum_set(kmi->ptr, "mode", GP_PAINTMODE_DRAW_POLY);
        RNA_boolean_set(kmi->ptr, "wait_for_input", false);
-
+       
        /* erase */
        kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_draw", RIGHTMOUSE, KM_PRESS, 0, DKEY);
        RNA_enum_set(kmi->ptr, "mode", GP_PAINTMODE_ERASER);
        RNA_boolean_set(kmi->ptr, "wait_for_input", false);
-
+       
        /* Viewport Tools ------------------------------- */
-
+       
        /* Enter EditMode */
        kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", TABKEY, KM_PRESS, 0, DKEY);
        RNA_string_set(kmi->ptr, "data_path", "gpencil_data.use_stroke_edit_mode");
-
+       
        /* Pie Menu - For standard tools */
        WM_keymap_add_menu_pie(keymap, "GPENCIL_PIE_tool_palette", QKEY, KM_PRESS, 0, DKEY);
        WM_keymap_add_menu_pie(keymap, "GPENCIL_PIE_settings_palette", WKEY, KM_PRESS, 0, DKEY);
@@ -106,89 +106,89 @@ static void ed_keymap_gpencil_editing(wmKeyConfig *keyconf)
 {
        wmKeyMap *keymap = WM_keymap_find(keyconf, "Grease Pencil Stroke Edit Mode", 0, 0);
        wmKeyMapItem *kmi;
-
+       
        /* set poll callback - so that this keymap only gets enabled when stroke editmode is enabled */
        keymap->poll = gp_stroke_editmode_poll;
-
+       
        /* ----------------------------------------------- */
-
+       
        /* Exit EditMode */
        kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", TABKEY, KM_PRESS, 0, 0);
        RNA_string_set(kmi->ptr, "data_path", "gpencil_data.use_stroke_edit_mode");
-
+       
        /* Selection ------------------------------------- */
        /* select all */
        kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_select_all", AKEY, KM_PRESS, 0, 0);
        RNA_enum_set(kmi->ptr, "action", SEL_TOGGLE);
-
+       
        kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_select_all", IKEY, KM_PRESS, KM_CTRL, 0);
        RNA_enum_set(kmi->ptr, "action", SEL_INVERT);
-
+       
        /* circle select */
        WM_keymap_add_item(keymap, "GPENCIL_OT_select_circle", CKEY, KM_PRESS, 0, 0);
-
+       
        /* border select */
        WM_keymap_add_item(keymap, "GPENCIL_OT_select_border", BKEY, KM_PRESS, 0, 0);
-
+       
        /* lasso select */
        kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_CTRL, 0);
        RNA_boolean_set(kmi->ptr, "deselect", false);
        kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_SHIFT | KM_CTRL, 0);
        RNA_boolean_set(kmi->ptr, "deselect", true);
-
+       
        /* normal select */
        WM_keymap_add_item(keymap, "GPENCIL_OT_select", SELECTMOUSE, KM_PRESS, 0, 0);
-
+       
        kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0);
        RNA_boolean_set(kmi->ptr, "extend", true);
        RNA_boolean_set(kmi->ptr, "toggle", true);
-
+       
        /* whole stroke select */
        kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_select", SELECTMOUSE, KM_PRESS, KM_ALT, 0);
        RNA_boolean_set(kmi->ptr, "entire_strokes", true);
-
+       
        /* select linked */
        WM_keymap_add_item(keymap, "GPENCIL_OT_select_linked", LKEY, KM_PRESS, KM_CTRL, 0);
-
+       
        /* select more/less */
        WM_keymap_add_item(keymap, "GPENCIL_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0);
        WM_keymap_add_item(keymap, "GPENCIL_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0);
-
-
+       
+       
        /* Editing ----------------------------------------- */
-
+       
        /* duplicate and move selected points */
        WM_keymap_add_item(keymap, "GPENCIL_OT_duplicate_move", DKEY, KM_PRESS, KM_SHIFT, 0);
-
+       
        /* delete */
        WM_keymap_add_item(keymap, "GPENCIL_OT_delete", XKEY, KM_PRESS, 0, 0);
-
-
+       
+       
        /* Transform Tools */
        kmi = WM_keymap_add_item(keymap, "TRANSFORM_OT_translate", GKEY, KM_PRESS, 0, 0);
        RNA_boolean_set(kmi->ptr, "gpencil_strokes", true);
-
+       
        kmi = WM_keymap_add_item(keymap, "TRANSFORM_OT_translate", EVT_TWEAK_S, KM_ANY, 0, 0);
        RNA_boolean_set(kmi->ptr, "gpencil_strokes", true);
-
+       
        kmi = WM_keymap_add_item(keymap, "TRANSFORM_OT_rotate", RKEY, KM_PRESS, 0, 0);
        RNA_boolean_set(kmi->ptr, "gpencil_strokes", true);
-
+       
        kmi = WM_keymap_add_item(keymap, "TRANSFORM_OT_resize", SKEY, KM_PRESS, 0, 0);
        RNA_boolean_set(kmi->ptr, "gpencil_strokes", true);
-
+       
        kmi = WM_keymap_add_item(keymap, "TRANSFORM_OT_mirror", MKEY, KM_PRESS, KM_CTRL, 0);
        RNA_boolean_set(kmi->ptr, "gpencil_strokes", true);
-
+       
        kmi = WM_keymap_add_item(keymap, "TRANSFORM_OT_bend", WKEY, KM_PRESS, KM_SHIFT, 0);
        RNA_boolean_set(kmi->ptr, "gpencil_strokes", true);
-
+       
        WM_keymap_add_item(keymap, "TRANSFORM_OT_tosphere", SKEY, KM_PRESS, KM_ALT | KM_SHIFT, 0);
        RNA_boolean_set(kmi->ptr, "gpencil_strokes", true);
-
+       
        WM_keymap_add_item(keymap, "TRANSFORM_OT_shear", SKEY, KM_PRESS, KM_ALT | KM_CTRL | KM_SHIFT, 0);
        RNA_boolean_set(kmi->ptr, "gpencil_strokes", true);
-
+       
        /* Proportional Editing */
        ED_keymap_proportional_cycle(keyconf, keymap);
        ED_keymap_proportional_editmode(keyconf, keymap, true);
@@ -207,35 +207,35 @@ void ED_keymap_gpencil(wmKeyConfig *keyconf)
 void ED_operatortypes_gpencil(void)
 {
        /* Drawing ----------------------- */
-
+       
        WM_operatortype_append(GPENCIL_OT_draw);
-
+       
        /* Editing (Strokes) ------------ */
-
+       
        WM_operatortype_append(GPENCIL_OT_select);
        WM_operatortype_append(GPENCIL_OT_select_all);
        WM_operatortype_append(GPENCIL_OT_select_circle);
        WM_operatortype_append(GPENCIL_OT_select_border);
        WM_operatortype_append(GPENCIL_OT_select_lasso);
-
+       
        WM_operatortype_append(GPENCIL_OT_select_linked);
        WM_operatortype_append(GPENCIL_OT_select_more);
        WM_operatortype_append(GPENCIL_OT_select_less);
-
+       
        WM_operatortype_append(GPENCIL_OT_duplicate);
        WM_operatortype_append(GPENCIL_OT_delete);
-
+       
        /* Editing (Buttons) ------------ */
-
+       
        WM_operatortype_append(GPENCIL_OT_data_add);
        WM_operatortype_append(GPENCIL_OT_data_unlink);
-
+       
        WM_operatortype_append(GPENCIL_OT_layer_add);
        WM_operatortype_append(GPENCIL_OT_layer_remove);
        WM_operatortype_append(GPENCIL_OT_layer_move);
-
+       
        WM_operatortype_append(GPENCIL_OT_active_frame_delete);
-
+       
        WM_operatortype_append(GPENCIL_OT_convert);
 
        /* Editing (Time) --------------- */
@@ -245,7 +245,7 @@ void ED_operatormacros_gpencil(void)
 {
        wmOperatorType *ot;
        wmOperatorTypeMacro *otmacro;
-
+       
        ot = WM_operatortype_append_macro("GPENCIL_OT_duplicate_move", "Duplicate Strokes",
                                          "Make copies of the selected Grease Pencil strokes and move them",
                                          OPTYPE_UNDO | OPTYPE_REGISTER);
index b85e71de1897240e926841ef9f961d757ed39b56..d4026b14fd72821d7dd321f41c6f1d8b1984940e 100644 (file)
 /* Temporary 'Stroke' Operation data */
 typedef struct tGPsdata {
        Scene *scene;       /* current scene from context */
-
+       
        wmWindow *win;      /* window where painting originated */
        ScrArea *sa;        /* area where painting originated */
        ARegion *ar;        /* region where painting originated */
        View2D *v2d;        /* needed for GP_STROKE_2DSPACE */
        rctf *subrect;      /* for using the camera rect within the 3d view */
        rctf subrect_data;
-
+       
        GP_SpaceConversion gsc; /* settings to pass to gp_points_to_xy() */
-
+       
        PointerRNA ownerPtr; /* pointer to owner of gp-datablock */
        bGPdata *gpd;       /* gp-datablock layer comes from */
        bGPDlayer *gpl;     /* layer we're working on */
        bGPDframe *gpf;     /* frame we're working on */
-
+       
        short status;       /* current status of painting */
        short paintmode;    /* mode for painting */
-
+       
        int mval[2];        /* current mouse-position */
        int mvalo[2];       /* previous recorded mouse-position */
-
+       
        float pressure;     /* current stylus pressure */
        float opressure;    /* previous stylus pressure */
-
+       
        short radius;       /* radius of influence for eraser */
        short flags;        /* flags that can get set during runtime */
-
+       
        /* These need to be doubles, as (at least under unix) they are in seconds since epoch,
         * float (and its 7 digits precision) is definitively not enough here!
         * double, with its 15 digits precision, ensures us millisecond precision for a few centuries at least.
@@ -113,13 +113,13 @@ typedef struct tGPsdata {
        double inittime;    /* Used when converting to path */
        double curtime;     /* Used when converting to path */
        double ocurtime;    /* Used when converting to path */
-
+       
        float imat[4][4];   /* inverted transformation matrix applying when converting coords from screen-space
                             * to region space */
        float mat[4][4];
-
+       
        float custom_color[4]; /* custom color - hack for enforcing a particular color for track/mask editing */
-
+       
        void *erasercursor; /* radial cursor data for drawing eraser */
 } tGPsdata;
 
@@ -195,7 +195,7 @@ static int gpencil_draw_poll(bContext *C)
        else {
                CTX_wm_operator_poll_msg_set(C, "Active region not set");
        }
-
+       
        return 0;
 }
 
@@ -216,12 +216,12 @@ static void gp_get_3d_reference(tGPsdata *p, float vec[3])
 {
        View3D *v3d = p->sa->spacedata.first;
        const float *fp = ED_view3d_cursor3d_get(p->scene, v3d);
-
+       
        /* the reference point used depends on the owner... */
 #if 0 /* XXX: disabled for now, since we can't draw relative to the owner yet */
        if (p->ownerPtr.type == &RNA_Object) {
                Object *ob = (Object *)p->ownerPtr.data;
-
+               
                /* active Object
                 *  - use relative distance of 3D-cursor from object center
                 */
@@ -242,24 +242,24 @@ static bool gp_stroke_filtermval(tGPsdata *p, const int mval[2], int pmval[2])
 {
        int dx = abs(mval[0] - pmval[0]);
        int dy = abs(mval[1] - pmval[1]);
-
+       
        /* if buffer is empty, just let this go through (i.e. so that dots will work) */
        if (p->gpd->sbuffer_size == 0)
                return true;
-
+       
        /* check if mouse moved at least certain distance on both axes (best case)
         *      - aims to eliminate some jitter-noise from input when trying to draw straight lines freehand
         */
        else if ((dx > MIN_MANHATTEN_PX) && (dy > MIN_MANHATTEN_PX))
                return true;
-
+       
        /* check if the distance since the last point is significant enough
         *      - prevents points being added too densely
         *      - distance here doesn't use sqrt to prevent slowness... we should still be safe from overflows though
         */
        else if ((dx * dx + dy * dy) > MIN_EUCLIDEAN_PX * MIN_EUCLIDEAN_PX)
                return true;
-
+       
        /* mouse 'didn't move' */
        else
                return false;
@@ -270,7 +270,7 @@ static bool gp_stroke_filtermval(tGPsdata *p, const int mval[2], int pmval[2])
 static void gp_stroke_convertcoords(tGPsdata *p, const int mval[2], float out[3], float *depth)
 {
        bGPdata *gpd = p->gpd;
-
+       
        /* in 3d-space - pt->x/y/z are 3 side-by-side floats */
        if (gpd->sbuffer_sflag & GP_STROKE_3DSPACE) {
                if (gpencil_project_check(p) && (ED_view3d_autodist_simple(p->ar, mval, out, 0, depth))) {
@@ -283,7 +283,7 @@ static void gp_stroke_convertcoords(tGPsdata *p, const int mval[2], float out[3]
                        float rvec[3], dvec[3];
                        float mval_f[2] = {UNPACK2(mval)};
                        float zfac;
-
+               
                        /* Current method just converts each point in screen-coordinates to
                         * 3D-coordinates using the 3D-cursor as reference. In general, this
                         * works OK, but it could of course be improved.
@@ -292,10 +292,10 @@ static void gp_stroke_convertcoords(tGPsdata *p, const int mval[2], float out[3]
                         *      - investigate using nearest point(s) on a previous stroke as
                         *        reference point instead or as offset, for easier stroke matching
                         */
-
+                       
                        gp_get_3d_reference(p, rvec);
                        zfac = ED_view3d_calc_zfac(p->ar->regiondata, rvec, NULL);
-
+                       
                        if (ED_view3d_project_float_global(p->ar, rvec, mval_prj, V3D_PROJ_TEST_NOP) == V3D_PROJ_RET_OK) {
                                sub_v2_v2v2(mval_f, mval_prj, mval_f);
                                ED_view3d_win_to_delta(p->ar, mval_f, dvec, zfac);
@@ -306,13 +306,13 @@ static void gp_stroke_convertcoords(tGPsdata *p, const int mval[2], float out[3]
                        }
                }
        }
-
+       
        /* 2d - on 'canvas' (assume that p->v2d is set) */
        else if ((gpd->sbuffer_sflag & GP_STROKE_2DSPACE) && (p->v2d)) {
                UI_view2d_region_to_view(p->v2d, mval[0], mval[1], &out[0], &out[1]);
                mul_v3_m4v3(out, p->imat, out);
        }
-
+       
        /* 2d - relative to screen (viewport area) */
        else {
                if (p->subrect == NULL) { /* normal 3D view */
@@ -331,19 +331,19 @@ static short gp_stroke_addpoint(tGPsdata *p, const int mval[2], float pressure,
 {
        bGPdata *gpd = p->gpd;
        tGPspoint *pt;
-
+       
        /* check painting mode */
        if (p->paintmode == GP_PAINTMODE_DRAW_STRAIGHT) {
                /* straight lines only - i.e. only store start and end point in buffer */
                if (gpd->sbuffer_size == 0) {
                        /* first point in buffer (start point) */
                        pt = (tGPspoint *)(gpd->sbuffer);
-
+                       
                        /* store settings */
                        copy_v2_v2_int(&pt->x, mval);
                        pt->pressure = pressure;
                        pt->time = (float)(curtime - p->inittime);
-
+                       
                        /* increment buffer size */
                        gpd->sbuffer_size++;
                }
@@ -352,12 +352,12 @@ static short gp_stroke_addpoint(tGPsdata *p, const int mval[2], float pressure,
                         *      - assume that pointers for this are always valid...
                         */
                        pt = ((tGPspoint *)(gpd->sbuffer) + 1);
-
+                       
                        /* store settings */
                        copy_v2_v2_int(&pt->x, mval);
                        pt->pressure = pressure;
                        pt->time = (float)(curtime - p->inittime);
-
+                       
                        /* if this is just the second point we've added, increment the buffer size
                         * so that it will be drawn properly...
                         * otherwise, just leave it alone, otherwise we get problems
@@ -365,7 +365,7 @@ static short gp_stroke_addpoint(tGPsdata *p, const int mval[2], float pressure,
                        if (gpd->sbuffer_size != 2)
                                gpd->sbuffer_size = 2;
                }
-
+               
                /* can keep carrying on this way :) */
                return GP_STROKEADD_NORMAL;
        }
@@ -373,18 +373,18 @@ static short gp_stroke_addpoint(tGPsdata *p, const int mval[2], float pressure,
                /* check if still room in buffer */
                if (gpd->sbuffer_size >= GP_STROKE_BUFFER_MAX)
                        return GP_STROKEADD_OVERFLOW;
-
+               
                /* get pointer to destination point */
                pt = ((tGPspoint *)(gpd->sbuffer) + gpd->sbuffer_size);
-
+               
                /* store settings */
                copy_v2_v2_int(&pt->x, mval);
                pt->pressure = pressure;
                pt->time = (float)(curtime - p->inittime);
-
+               
                /* increment counters */
                gpd->sbuffer_size++;
-
+               
                /* check if another operation can still occur */
                if (gpd->sbuffer_size == GP_STROKE_BUFFER_MAX)
                        return GP_STROKEADD_FULL;
@@ -394,12 +394,12 @@ static short gp_stroke_addpoint(tGPsdata *p, const int mval[2], float pressure,
        else if (p->paintmode == GP_PAINTMODE_DRAW_POLY) {
                /* get pointer to destination point */
                pt = (tGPspoint *)(gpd->sbuffer);
-
+               
                /* store settings */
                copy_v2_v2_int(&pt->x, mval);
                pt->pressure = pressure;
                pt->time = (float)(curtime - p->inittime);
-
+               
                /* if there's stroke for this poly line session add (or replace last) point
                 * to stroke. This allows to draw lines more interactively (see new segment
                 * during mouse slide, e.g.)
@@ -407,15 +407,15 @@ static short gp_stroke_addpoint(tGPsdata *p, const int mval[2], float pressure,
                if (gp_stroke_added_check(p)) {
                        bGPDstroke *gps = p->gpf->strokes.last;
                        bGPDspoint *pts;
-
+                       
                        /* first time point is adding to temporary buffer -- need to allocate new point in stroke */
                        if (gpd->sbuffer_size == 0) {
                                gps->points = MEM_reallocN(gps->points, sizeof(bGPDspoint) * (gps->totpoints + 1));
                                gps->totpoints++;
                        }
-
+                       
                        pts = &gps->points[gps->totpoints - 1];
-
+                       
                        /* special case for poly lines: normally,
                         * depth is needed only when creating new stroke from buffer,
                         * but poly lines are converting to stroke instantly,
@@ -423,23 +423,23 @@ static short gp_stroke_addpoint(tGPsdata *p, const int mval[2], float pressure,
                         */
                        if (gpencil_project_check(p)) {
                                View3D *v3d = p->sa->spacedata.first;
-
+                               
                                view3d_region_operator_needs_opengl(p->win, p->ar);
                                ED_view3d_autodist_init(p->scene, p->ar, v3d, (p->gpd->flag & GP_DATA_DEPTH_STROKE) ? 1 : 0);
                        }
-
+                       
                        /* convert screen-coordinates to appropriate coordinates (and store them) */
                        gp_stroke_convertcoords(p, &pt->x, &pts->x, NULL);
-
+                       
                        /* copy pressure and time */
                        pts->pressure = pt->pressure;
                        pts->time = pt->time;
                }
-
+               
                /* increment counters */
                if (gpd->sbuffer_size == 0)
                        gpd->sbuffer_size++;
-
+               
                return GP_STROKEADD_NORMAL;
        }
 
@@ -453,20 +453,20 @@ static void gp_stroke_smooth(tGPsdata *p)
        bGPdata *gpd = p->gpd;
        tGPspoint *spt, tmp_spt[3];
        int i = 0, cmx = gpd->sbuffer_size;
-
+       
        /* only smooth if smoothing is enabled, and we're not doing a straight line */
        if (!(U.gp_settings & GP_PAINT_DOSMOOTH) || ELEM(p->paintmode, GP_PAINTMODE_DRAW_STRAIGHT, GP_PAINTMODE_DRAW_POLY))
                return;
-
+       
        /* don't try if less than 2 points in buffer */
        if ((cmx <= 2) || (gpd->sbuffer == NULL))
                return;
-
+       
        /* Calculate smoothing coordinates using weighted-averages
         * WARNING: we do NOT smooth first and last points (to avoid shrinkage)
         */
        spt = (tGPspoint *)gpd->sbuffer;
-
+       
        /* This (tmp_spt) small array stores the last two points' original coordinates,
         * as we don't want to use already averaged ones! It is used as a cyclic buffer...
         */
@@ -477,10 +477,10 @@ static void gp_stroke_smooth(tGPsdata *p)
                const tGPspoint *pa = (i - 1 > 0) ? (&tmp_spt[(i - 2) % 3]) : (pb);
                const tGPspoint *pd = pc + 1;
                const tGPspoint *pe = (i + 2 < cmx) ? (pc + 2) : (pd);
-
+               
                /* Store current point's original state for the two next points! */
                tmp_spt[i % 3] = *spt;
-
+               
                spt->x = (int)(0.1 * pa->x + 0.2 * pb->x + 0.4 * pc->x + 0.2 * pd->x + 0.1 * pe->x);
                spt->y = (int)(0.1 * pa->y + 0.2 * pb->y + 0.4 * pc->y + 0.2 * pd->y + 0.1 * pe->y);
        }
@@ -497,15 +497,15 @@ static void gp_stroke_simplify(tGPsdata *p)
        short num_points = gpd->sbuffer_size;
        short flag = gpd->sbuffer_sflag;
        short i, j;
-
+       
        /* only simplify if simplification is enabled, and we're not doing a straight line */
        if (!(U.gp_settings & GP_PAINT_DOSIMPLIFY) || (p->paintmode == GP_PAINTMODE_DRAW_STRAIGHT))
                return;
-
+       
        /* don't simplify if less than 4 points in buffer */
        if ((num_points <= 4) || (old_points == NULL))
                return;
-
+       
        /* clear buffer (but don't free mem yet) so that we can write to it
         *      - firstly set sbuffer to NULL, so a new one is allocated
         *      - secondly, reset flag after, as it gets cleared auto
@@ -513,7 +513,7 @@ static void gp_stroke_simplify(tGPsdata *p)
        gpd->sbuffer = NULL;
        gp_session_validatebuffer(p);
        gpd->sbuffer_sflag = flag;
-
+       
 /* macro used in loop to get position of new point
  *     - used due to the mixture of datatypes in use here
  */
@@ -524,39 +524,39 @@ static void gp_stroke_simplify(tGPsdata *p)
                pressure += old_points[offs].pressure * sfac; \
                time += old_points[offs].time * sfac; \
        } (void)0
-
+       
        /* XXX Here too, do not lose start and end points! */
        gp_stroke_addpoint(p, &old_points->x, old_points->pressure, p->inittime + (double)old_points->time);
        for (i = 0, j = 0; i < num_points; i++) {
                if (i - j == 3) {
                        float co[2], pressure, time;
                        int mco[2];
-
+                       
                        /* initialize values */
                        co[0] = 0.0f;
                        co[1] = 0.0f;
                        pressure = 0.0f;
                        time = 0.0f;
-
+                       
                        /* using macro, calculate new point */
                        GP_SIMPLIFY_AVPOINT(j, -0.25f);
                        GP_SIMPLIFY_AVPOINT(j + 1, 0.75f);
                        GP_SIMPLIFY_AVPOINT(j + 2, 0.75f);
                        GP_SIMPLIFY_AVPOINT(j + 3, -0.25f);
-
+                       
                        /* set values for adding */
                        mco[0] = (int)co[0];
                        mco[1] = (int)co[1];
-
+                       
                        /* ignore return values on this... assume to be ok for now */
                        gp_stroke_addpoint(p, mco, pressure, p->inittime + (double)time);
-
+                       
                        j += 2;
                }
        }
        gp_stroke_addpoint(p, &old_points[num_points - 1].x, old_points[num_points - 1].pressure,
                           p->inittime + (double)old_points[num_points - 1].time);
-
+       
        /* free old buffer */
        MEM_freeN(old_points);
 }
@@ -572,7 +572,7 @@ static void gp_stroke_newfrombuffer(tGPsdata *p)
        int i, totelem;
        /* since strokes are so fine, when using their depth we need a margin otherwise they might get missed */
        int depth_margin = (p->gpd->flag & GP_DATA_DEPTH_STROKE) ? 4 : 0;
-
+       
        /* get total number of points to allocate space for
         *      - drawing straight-lines only requires the endpoints
         */
@@ -580,14 +580,14 @@ static void gp_stroke_newfrombuffer(tGPsdata *p)
                totelem = (gpd->sbuffer_size >= 2) ? 2 : gpd->sbuffer_size;
        else
                totelem = gpd->sbuffer_size;
-
+       
        /* exit with error if no valid points from this stroke */
        if (totelem == 0) {
                if (G.debug & G_DEBUG)
                        printf("Error: No valid points in stroke buffer to convert (tot=%d)\n", gpd->sbuffer_size);
                return;
        }
-
+       
        /* special case for poly line -- for already added stroke during session
         * coordinates are getting added to stroke immediately to allow more
         * interactive behavior
@@ -597,46 +597,46 @@ static void gp_stroke_newfrombuffer(tGPsdata *p)
                        return;
                }
        }
-
+       
        /* allocate memory for a new stroke */
        gps = MEM_callocN(sizeof(bGPDstroke), "gp_stroke");
-
+       
        /* copy appropriate settings for stroke */
        gps->totpoints = totelem;
        gps->thickness = p->gpl->thickness;
        gps->flag = gpd->sbuffer_sflag;
        gps->inittime = p->inittime;
-
+       
        /* allocate enough memory for a continuous array for storage points */
        gps->points = MEM_callocN(sizeof(bGPDspoint) * gps->totpoints, "gp_stroke_points");
-
+       
        /* set pointer to first non-initialized point */
        pt = gps->points + (gps->totpoints - totelem);
-
+       
        /* copy points from the buffer to the stroke */
        if (p->paintmode == GP_PAINTMODE_DRAW_STRAIGHT) {
                /* straight lines only -> only endpoints */
                {
                        /* first point */
                        ptc = gpd->sbuffer;
-
+                       
                        /* convert screen-coordinates to appropriate coordinates (and store them) */
                        gp_stroke_convertcoords(p, &ptc->x, &pt->x, NULL);
-
+                       
                        /* copy pressure and time */
                        pt->pressure = ptc->pressure;
                        pt->time = ptc->time;
-
+                       
                        pt++;
                }
-
+               
                if (totelem == 2) {
                        /* last point if applicable */
                        ptc = ((tGPspoint *)gpd->sbuffer) + (gpd->sbuffer_size - 1);
-
+                       
                        /* convert screen-coordinates to appropriate coordinates (and store them) */
                        gp_stroke_convertcoords(p, &ptc->x, &pt->x, NULL);
-
+                       
                        /* copy pressure and time */
                        pt->pressure = ptc->pressure;
                        pt->time = ptc->time;
@@ -645,28 +645,28 @@ static void gp_stroke_newfrombuffer(tGPsdata *p)
        else if (p->paintmode == GP_PAINTMODE_DRAW_POLY) {
                /* first point */
                ptc = gpd->sbuffer;
-
+               
                /* convert screen-coordinates to appropriate coordinates (and store them) */
                gp_stroke_convertcoords(p, &ptc->x, &pt->x, NULL);
-
+               
                /* copy pressure and time */
                pt->pressure = ptc->pressure;
                pt->time = ptc->time;
        }
        else {
                float *depth_arr = NULL;
-
+               
                /* get an array of depths, far depths are blended */
                if (gpencil_project_check(p)) {
                        int mval[2], mval_prev[2] = {0};
                        int interp_depth = 0;
                        int found_depth = 0;
-
+                       
                        depth_arr = MEM_mallocN(sizeof(float) * gpd->sbuffer_size, "depth_points");
-
+                       
                        for (i = 0, ptc = gpd->sbuffer; i < gpd->sbuffer_size; i++, ptc++, pt++) {
                                copy_v2_v2_int(mval, &ptc->x);
-
+                               
                                if ((ED_view3d_autodist_depth(p->ar, mval, depth_margin, depth_arr + i) == 0) &&
                                    (i && (ED_view3d_autodist_depth_seg(p->ar, mval, mval_prev, depth_margin + 1, depth_arr + i) == 0)))
                                {
@@ -675,10 +675,10 @@ static void gp_stroke_newfrombuffer(tGPsdata *p)
                                else {
                                        found_depth = true;
                                }
-
+                               
                                copy_v2_v2_int(mval_prev, mval);
                        }
-
+                       
                        if (found_depth == false) {
                                /* eeh... not much we can do.. :/, ignore depth in this case, use the 3D cursor */
                                for (i = gpd->sbuffer_size - 1; i >= 0; i--)
@@ -689,49 +689,49 @@ static void gp_stroke_newfrombuffer(tGPsdata *p)
                                        /* remove all info between the valid endpoints */
                                        int first_valid = 0;
                                        int last_valid = 0;
-
+                                       
                                        for (i = 0; i < gpd->sbuffer_size; i++) {
                                                if (depth_arr[i] != FLT_MAX)
                                                        break;
                                        }
                                        first_valid = i;
-
+                                       
                                        for (i = gpd->sbuffer_size - 1; i >= 0; i--) {
                                                if (depth_arr[i] != FLT_MAX)
                                                        break;
                                        }
                                        last_valid = i;
-
+                                       
                                        /* invalidate non-endpoints, so only blend between first and last */
                                        for (i = first_valid + 1; i < last_valid; i++)
                                                depth_arr[i] = FLT_MAX;
-
+                                       
                                        interp_depth = true;
                                }
-
+                               
                                if (interp_depth) {
                                        interp_sparse_array(depth_arr, gpd->sbuffer_size, FLT_MAX);
                                }
                        }
                }
-
-
+               
+               
                pt = gps->points;
-
+               
                /* convert all points (normal behavior) */
                for (i = 0, ptc = gpd->sbuffer; i < gpd->sbuffer_size && ptc; i++, ptc++, pt++) {
                        /* convert screen-coordinates to appropriate coordinates (and store them) */
                        gp_stroke_convertcoords(p, &ptc->x, &pt->x, depth_arr ? depth_arr + i : NULL);
-
+                       
                        /* copy pressure and time */
                        pt->pressure = ptc->pressure;
                        pt->time = ptc->time;
                }
-
+               
                if (depth_arr)
                        MEM_freeN(depth_arr);
        }
-
+       
        /* add stroke to frame */
        BLI_addtail(&p->gpf->strokes, gps);
        gp_stroke_added_enable(p);
@@ -744,7 +744,7 @@ static short gp_stroke_eraser_splitdel(bGPDframe *gpf, bGPDstroke *gps, int i)
 {
        bGPDspoint *pt_tmp = gps->points;
        bGPDstroke *gsn = NULL;
-
+       
        /* if stroke only had two points, get rid of stroke */
        if (gps->totpoints == 2) {
                /* free stroke points, then stroke */
@@ -754,28 +754,28 @@ static short gp_stroke_eraser_splitdel(bGPDframe *gpf, bGPDstroke *gps, int i)
                /* nothing left in stroke, so stop */
                return 1;
        }
-
+       
        /* if last segment, just remove segment from the stroke */
        else if (i == gps->totpoints - 2) {
                /* allocate new points array, and assign most of the old stroke there */
                gps->totpoints--;
                gps->points = MEM_callocN(sizeof(bGPDspoint) * gps->totpoints, "gp_stroke_points");
                memcpy(gps->points, pt_tmp, sizeof(bGPDspoint) * gps->totpoints);
-
+               
                /* free temp buffer */
                MEM_freeN(pt_tmp);
-
+               
                /* nothing left in stroke, so stop */
                return 1;
        }
-
+       
        /* if first segment, just remove segment from the stroke */
        else if (i == 0) {
                /* allocate new points array, and assign most of the old stroke there */
                gps->totpoints--;
                gps->points = MEM_callocN(sizeof(bGPDspoint) * gps->totpoints, "gp_stroke_points");
                memcpy(gps->points, pt_tmp + 1, sizeof(bGPDspoint) * gps->totpoints);
-
+               
                /* We must adjust timings!
                 * Each point's timing data is a delta from stroke's inittime, so as we erase the first
                 * point of the stroke, we have to offset this inittime and all remaining points' delta values.
@@ -786,33 +786,33 @@ static short gp_stroke_eraser_splitdel(bGPDframe *gpf, bGPDstroke *gps, int i)
                        bGPDspoint *pts;
                        float delta = pt_tmp[1].time;
                        int j;
-
+                       
                        gps->inittime += (double)delta;
-
+                       
                        pts = gps->points;
                        for (j = 0; j < gps->totpoints; j++, pts++) {
                                pts->time -= delta;
                        }
                }
-
+               
                /* free temp buffer */
                MEM_freeN(pt_tmp);
-
+               
                /* no break here, as there might still be stuff to remove in this stroke */
                return 0;
        }
-
+       
        /* segment occurs in 'middle' of stroke, so split */
        else {
                /* duplicate stroke, and assign 'later' data to that stroke */
                gsn = MEM_dupallocN(gps);
                gsn->prev = gsn->next = NULL;
                BLI_insertlinkafter(&gpf->strokes, gps, gsn);
-
+               
                gsn->totpoints = gps->totpoints - i;
                gsn->points = MEM_callocN(sizeof(bGPDspoint) * gsn->totpoints, "gp_stroke_points");
                memcpy(gsn->points, pt_tmp + i, sizeof(bGPDspoint) * gsn->totpoints);
-
+               
                /* We must adjust timings of this new stroke!
                 * Each point's timing data is a delta from stroke's inittime, so as we erase the first
                 * point of the stroke, we have to offset this inittime and all remaing points' delta values.
@@ -823,23 +823,23 @@ static short gp_stroke_eraser_splitdel(bGPDframe *gpf, bGPDstroke *gps, int i)
                        bGPDspoint *pts;
                        float delta = pt_tmp[i].time;
                        int j;
-
+                       
                        gsn->inittime += (double)delta;
-
+                       
                        pts = gsn->points;
                        for (j = 0; j < gsn->totpoints; j++, pts++) {
                                pts->time -= delta;
                        }
                }
-
+               
                /* adjust existing stroke  */
                gps->totpoints = i;
                gps->points = MEM_callocN(sizeof(bGPDspoint) * gps->totpoints, "gp_stroke_points");
                memcpy(gps->points, pt_tmp, sizeof(bGPDspoint) * i);
-
+               
                /* free temp buffer */
                MEM_freeN(pt_tmp);
-
+               
                /* nothing left in stroke, so stop */
                return 1;
        }
@@ -864,11 +864,11 @@ static bool gp_stroke_eraser_is_occluded(tGPsdata *p, const bGPDspoint *pt, cons
                RegionView3D *rv3d = p->ar->regiondata;
                const int mval[2] = {x, y};
                float mval_3d[3];
-
+               
                if (ED_view3d_autodist_simple(p->ar, mval, mval_3d, 0, NULL)) {
                        const float depth_mval = view3d_point_depth(rv3d, mval_3d);
                        const float depth_pt   = view3d_point_depth(rv3d, &pt->x);
-
+                       
                        if (depth_pt > depth_mval) {
                                return true;
                        }
@@ -887,7 +887,7 @@ static void gp_stroke_eraser_dostroke(tGPsdata *p,
        bGPDspoint *pt1, *pt2;
        int x0 = 0, y0 = 0, x1 = 0, y1 = 0;
        int i;
-
+       
        if (gps->totpoints == 0) {
                /* just free stroke */
                if (gps->points)
@@ -896,7 +896,7 @@ static void gp_stroke_eraser_dostroke(tGPsdata *p,
        }
        else if (gps->totpoints == 1) {
                gp_point_to_xy(&p->gsc, gps, gps->points, &x0, &y0);
-
+               
                /* do boundbox check first */
                if ((!ELEM(V2D_IS_CLIPPED, x0, y0)) && BLI_rcti_isect_pt(rect, x0, y0)) {
                        /* only check if point is inside */
@@ -915,10 +915,10 @@ static void gp_stroke_eraser_dostroke(tGPsdata *p,
                        /* get points to work with */
                        pt1 = gps->points + i;
                        pt2 = gps->points + i + 1;
-
+                       
                        gp_point_to_xy(&p->gsc, gps, pt1, &x0, &y0);
                        gp_point_to_xy(&p->gsc, gps, pt2, &x1, &y1);
-
+                       
                        /* check that point segment of the boundbox of the eraser stroke */
                        if (((!ELEM(V2D_IS_CLIPPED, x0, y0)) && BLI_rcti_isect_pt(rect, x0, y0)) ||
                            ((!ELEM(V2D_IS_CLIPPED, x1, y1)) && BLI_rcti_isect_pt(rect, x1, y1)))
@@ -947,22 +947,22 @@ static void gp_stroke_doeraser(tGPsdata *p)
        bGPDframe *gpf = p->gpf;
        bGPDstroke *gps, *gpn;
        rcti rect;
-
+       
        /* rect is rectangle of eraser */
        rect.xmin = p->mval[0] - p->radius;
        rect.ymin = p->mval[1] - p->radius;
        rect.xmax = p->mval[0] + p->radius;
        rect.ymax = p->mval[1] + p->radius;
-
+       
        if (p->sa->spacetype == SPACE_VIEW3D) {
                if (p->flags & GP_PAINTFLAG_V3D_ERASER_DEPTH) {
                        View3D *v3d = p->sa->spacedata.first;
-
+                       
                        view3d_region_operator_needs_opengl(p->win, p->ar);
                        ED_view3d_autodist_init(p->scene, p->ar, v3d, 0);
                }
        }
-
+       
        /* loop over strokes, checking segments for intersections */
        for (gps = gpf->strokes.first; gps; gps = gpn) {
                gpn = gps->next;
@@ -977,7 +977,7 @@ static void gp_stroke_doeraser(tGPsdata *p)
 static void gp_session_validatebuffer(tGPsdata *p)
 {
        bGPdata *gpd = p->gpd;
-
+       
        /* clear memory of buffer (or allocate it if starting a new session) */
        if (gpd->sbuffer) {
                /* printf("\t\tGP - reset sbuffer\n"); */
@@ -987,13 +987,13 @@ static void gp_session_validatebuffer(tGPsdata *p)
                /* printf("\t\tGP - allocate sbuffer\n"); */
                gpd->sbuffer = MEM_callocN(sizeof(tGPspoint) * GP_STROKE_BUFFER_MAX, "gp_session_strokebuffer");
        }
-
+       
        /* reset indices */
        gpd->sbuffer_size = 0;
-
+       
        /* reset flags */
        gpd->sbuffer_sflag = 0;
-
+       
        /* reset inittime */
        p->inittime = 0.0;
 }
@@ -1004,7 +1004,7 @@ static int gp_session_initdata(bContext *C, tGPsdata *p)
        bGPdata **gpd_ptr = NULL;
        ScrArea *curarea = CTX_wm_area(C);
        ARegion *ar = CTX_wm_region(C);
-
+       
        /* make sure the active view (at the starting time) is a 3d-view */
        if (curarea == NULL) {
                p->status = GP_STATUS_ERROR;
@@ -1012,27 +1012,27 @@ static int gp_session_initdata(bContext *C, tGPsdata *p)
                        printf("Error: No active view for painting\n");
                return 0;
        }
-
+       
        /* pass on current scene and window */
        p->scene = CTX_data_scene(C);
        p->win = CTX_wm_window(C);
-
+       
        unit_m4(p->imat);
        unit_m4(p->mat);
-
+       
        switch (curarea->spacetype) {
                /* supported views first */
                case SPACE_VIEW3D:
                {
                        /* View3D *v3d = curarea->spacedata.first; */
                        /* RegionView3D *rv3d = ar->regiondata; */
-
+                       
                        /* set current area
                         *      - must verify that region data is 3D-view (and not something else)
                         */
                        p->sa = curarea;
                        p->ar = ar;
-
+                       
                        if (ar->regiondata == NULL) {
                                p->status = GP_STATUS_ERROR;
                                if (G.debug & G_DEBUG)
@@ -1044,7 +1044,7 @@ static int gp_session_initdata(bContext *C, tGPsdata *p)
                case SPACE_NODE:
                {
                        /* SpaceNode *snode = curarea->spacedata.first; */
-
+                       
                        /* set current area */
                        p->sa = curarea;
                        p->ar = ar;
@@ -1054,12 +1054,12 @@ static int gp_session_initdata(bContext *C, tGPsdata *p)
                case SPACE_SEQ:
                {
                        SpaceSeq *sseq = curarea->spacedata.first;
-
+                       
                        /* set current area */
                        p->sa = curarea;
                        p->ar = ar;
                        p->v2d = &ar->v2d;
-
+                       
                        /* check that gpencil data is allowed to be drawn */
                        if (sseq->mainb == SEQ_DRAW_SEQUENCE) {
                                p->status = GP_STATUS_ERROR;
@@ -1072,7 +1072,7 @@ static int gp_session_initdata(bContext *C, tGPsdata *p)
                case SPACE_IMAGE:
                {
                        /* SpaceImage *sima = curarea->spacedata.first; */
-
+                       
                        /* set the current area */
                        p->sa = curarea;
                        p->ar = ar;
@@ -1082,30 +1082,30 @@ static int gp_session_initdata(bContext *C, tGPsdata *p)
                case SPACE_CLIP:
                {
                        SpaceClip *sc = curarea->spacedata.first;
-
+                       
                        /* set the current area */
                        p->sa = curarea;
                        p->ar = ar;
                        p->v2d = &ar->v2d;
-
+                       
                        invert_m4_m4(p->imat, sc->unistabmat);
-
+                       
                        /* custom color for new layer */
                        p->custom_color[0] = 1.0f;
                        p->custom_color[1] = 0.0f;
                        p->custom_color[2] = 0.5f;
                        p->custom_color[3] = 0.9f;
-
+                       
                        if (sc->gpencil_src == SC_GPENCIL_SRC_TRACK) {
                                MovieClip *clip = ED_space_clip_get_clip(sc);
                                int framenr = ED_space_clip_get_clip_frame_number(sc);
                                MovieTrackingTrack *track = BKE_tracking_track_get_active(&clip->tracking);
                                MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
-
+                               
                                p->imat[3][0] -= marker->pos[0];
                                p->imat[3][1] -= marker->pos[1];
                        }
-
+                       
                        invert_m4_m4(p->mat, p->imat);
                        copy_m4_m4(p->gsc.mat, p->mat);
                        break;
@@ -1119,7 +1119,7 @@ static int gp_session_initdata(bContext *C, tGPsdata *p)
                        return 0;
                }
        }
-
+       
        /* get gp-data */
        gpd_ptr = ED_gpencil_data_get_pointers(C, &p->ownerPtr);
        if (gpd_ptr == NULL) {
@@ -1134,17 +1134,17 @@ static int gp_session_initdata(bContext *C, tGPsdata *p)
                        *gpd_ptr = gpencil_data_addnew("GPencil");
                p->gpd = *gpd_ptr;
        }
-
+       
        if (ED_gpencil_session_active() == 0) {
                /* initialize undo stack,
                 * also, existing undo stack would make buffer drawn
                 */
                gpencil_undo_init(p->gpd);
        }
-
+       
        /* clear out buffer (stored in gp-data), in case something contaminated it */
        gp_session_validatebuffer(p);
-
+       
        return 1;
 }
 
@@ -1152,12 +1152,12 @@ static int gp_session_initdata(bContext *C, tGPsdata *p)
 static tGPsdata *gp_session_initpaint(bContext *C)
 {
        tGPsdata *p = NULL;
-
+       
        /* create new context data */
        p = MEM_callocN(sizeof(tGPsdata), "GPencil Drawing Data");
-
+       
        gp_session_initdata(C, p);
-
+       
        /* return context data for running paint operator */
        return p;
 }
@@ -1166,18 +1166,18 @@ static tGPsdata *gp_session_initpaint(bContext *C)
 static void gp_session_cleanup(tGPsdata *p)
 {
        bGPdata *gpd = (p) ? p->gpd : NULL;
-
+       
        /* error checking */
        if (gpd == NULL)
                return;
-
+       
        /* free stroke buffer */
        if (gpd->sbuffer) {
                /* printf("\t\tGP - free sbuffer\n"); */
                MEM_freeN(gpd->sbuffer);
                gpd->sbuffer = NULL;
        }
-
+       
        /* clear flags */
        gpd->sbuffer_size = 0;
        gpd->sbuffer_sflag = 0;
@@ -1191,7 +1191,7 @@ static void gp_paint_initstroke(tGPsdata *p, short paintmode)
        p->gpl = gpencil_layer_getactive(p->gpd);
        if (p->gpl == NULL) {
                p->gpl = gpencil_layer_addnew(p->gpd, "GP_Layer", 1);
-
+               
                if (p->custom_color[3])
                        copy_v3_v3(p->gpl->color, p->custom_color);
        }
@@ -1201,7 +1201,7 @@ static void gp_paint_initstroke(tGPsdata *p, short paintmode)
                        printf("Error: Cannot paint on locked layer\n");
                return;
        }
-
+       
        /* get active frame (add a new one if not matching frame) */
        p->gpf = gpencil_layer_getframe(p->gpl, p->scene->r.cfra, 1);
        if (p->gpf == NULL) {
@@ -1212,12 +1212,12 @@ static void gp_paint_initstroke(tGPsdata *p, short paintmode)
        }
        else
                p->gpf->flag |= GP_FRAME_PAINT;
-
+       
        /* set 'eraser' for this stroke if using eraser */
        p->paintmode = paintmode;
        if (p->paintmode == GP_PAINTMODE_ERASER) {
                p->gpd->sbuffer_sflag |= GP_STROKE_ERASER;
-
+               
                /* check if we should respect depth while erasing */
                if (p->sa->spacetype == SPACE_VIEW3D) {
                        if (p->gpl->flag & GP_LAYER_NO_XRAY) {
@@ -1225,17 +1225,17 @@ static void gp_paint_initstroke(tGPsdata *p, short paintmode)
                        }
                }
        }
-
+       
        /* set 'initial run' flag, which is only used to denote when a new stroke is starting */
        p->flags |= GP_PAINTFLAG_FIRSTRUN;
-
-
+       
+       
        /* when drawing in the camera view, in 2D space, set the subrect */
        if (!(p->gpd->flag & GP_DATA_VIEWALIGN)) {
                if (p->sa->spacetype == SPACE_VIEW3D) {
                        View3D *v3d = p->sa->spacedata.first;
                        RegionView3D *rv3d = p->ar->regiondata;
-
+                       
                        /* for camera view set the subrect */
                        if (rv3d->persp == RV3D_CAMOB) {
                                ED_view3d_calc_camera_border(p->scene, p->ar, v3d, rv3d, &p->subrect_data, true); /* no shift */
@@ -1243,21 +1243,21 @@ static void gp_paint_initstroke(tGPsdata *p, short paintmode)
                        }
                }
        }
-
+       
        /* init stroke point space-conversion settings... */
        p->gsc.gpd = p->gpd;
        p->gsc.gpl = p->gpl;
-
+       
        p->gsc.sa = p->sa;
        p->gsc.ar = p->ar;
        p->gsc.v2d = p->v2d;
-
+       
        p->gsc.subrect_data = p->subrect_data;
        p->gsc.subrect = p->subrect;
-
+       
        copy_m4_m4(p->gsc.mat, p->mat);
-
-
+       
+       
        /* check if points will need to be made in view-aligned space */
        if (p->gpd->flag & GP_DATA_VIEWALIGN) {
                switch (p->sa->spacetype) {
@@ -1279,7 +1279,7 @@ static void gp_paint_initstroke(tGPsdata *p, short paintmode)
                        case SPACE_IMAGE:
                        {
                                SpaceImage *sima = (SpaceImage *)p->sa->spacedata.first;
-
+                               
                                /* only set these flags if the image editor doesn't have an image active,
                                 * otherwise user will be confused by strokes not appearing after they're drawn
                                 *
@@ -1312,24 +1312,24 @@ static void gp_paint_strokeend(tGPsdata *p)
         */
        if (gpencil_project_check(p)) {
                View3D *v3d = p->sa->spacedata.first;
-
+               
                /* need to restore the original projection settings before packing up */
                view3d_region_operator_needs_opengl(p->win, p->ar);
                ED_view3d_autodist_init(p->scene, p->ar, v3d, (p->gpd->flag & GP_DATA_DEPTH_STROKE) ? 1 : 0);
        }
-
+       
        /* check if doing eraser or not */
        if ((p->gpd->sbuffer_sflag & GP_STROKE_ERASER) == 0) {
                /* smooth stroke before transferring? */
                gp_stroke_smooth(p);
-
+               
                /* simplify stroke before transferring? */
                gp_stroke_simplify(p);
-
+               
                /* transfer stroke to frame */
                gp_stroke_newfrombuffer(p);
        }
-
+       
        /* clean up buffer now */
        gp_session_validatebuffer(p);
 }
@@ -1344,7 +1344,7 @@ static void gp_paint_cleanup(tGPsdata *p)
                /* finish off a stroke */
                gp_paint_strokeend(p);
        }
-
+       
        /* "unlock" frame */
        if (p->gpf)
                p->gpf->flag &= ~GP_FRAME_PAINT;
@@ -1356,27 +1356,27 @@ static void gp_paint_cleanup(tGPsdata *p)
 static void gpencil_draw_eraser(bContext *UNUSED(C), int x, int y, void *p_ptr)
 {
        tGPsdata *p = (tGPsdata *)p_ptr;
-
+       
        if (p->paintmode == GP_PAINTMODE_ERASER) {
                glPushMatrix();
-
+               
                glTranslatef((float)x, (float)y, 0.0f);
-
+               
                glEnable(GL_LINE_SMOOTH);
                glEnable(GL_BLEND);
-
+               
                glColor4ub(255, 100, 100, 20);
                glutil_draw_filled_arc(0.0, M_PI * 2.0, p->radius, 40);
-
+               
                setlinestyle(6);
-
+               
                glColor4ub(255, 100, 100, 200);
                glutil_draw_lined_arc(0.0, M_PI * 2.0, p->radius, 40);
-
+               
                setlinestyle(0);
                glDisable(GL_BLEND);
                glDisable(GL_LINE_SMOOTH);
-
+               
                glPopMatrix();
        }
 }
@@ -1403,33 +1403,33 @@ static void gpencil_draw_toggle_eraser_cursor(bContext *C, tGPsdata *p, short en
 static void gpencil_draw_exit(bContext *C, wmOperator *op)
 {
        tGPsdata *p = op->customdata;
-
+       
        /* clear undo stack */
        gpencil_undo_finish();
-
+       
        /* restore cursor to indicate end of drawing */
        WM_cursor_modal_restore(CTX_wm_window(C));
-
+       
        /* don't assume that operator data exists at all */
        if (p) {
                /* check size of buffer before cleanup, to determine if anything happened here */
                if (p->paintmode == GP_PAINTMODE_ERASER) {
                        /* turn off radial brush cursor */
                        gpencil_draw_toggle_eraser_cursor(C, p, false);
-
+                       
                        /* if successful, store the new eraser size to be used again next time */
                        if (p->status == GP_STATUS_DONE)
                                U.gp_eraser = p->radius;
                }
-
+               
                /* cleanup */
                gp_paint_cleanup(p);
                gp_session_cleanup(p);
-
+               
                /* finally, free the temp data */
                MEM_freeN(p);
        }
-
+       
        op->customdata = NULL;
 }
 
@@ -1446,7 +1446,7 @@ static int gpencil_draw_init(bContext *C, wmOperator *op)
 {
        tGPsdata *p;
        int paintmode = RNA_enum_get(op->ptr, "mode");
-
+       
        /* check context */
        p = op->customdata = gp_session_initpaint(C);
        if ((p == NULL) || (p->status == GP_STATUS_ERROR)) {
@@ -1454,17 +1454,17 @@ static int gpencil_draw_init(bContext *C, wmOperator *op)
                gpencil_draw_exit(C, op);
                return 0;
        }
-
+       
        /* init painting data */
        gp_paint_initstroke(p, paintmode);
        if (p->status == GP_STATUS_ERROR) {
                gpencil_draw_exit(C, op);
                return 0;
        }
-
+       
        /* radius for eraser circle is defined in userprefs now */
        p->radius = U.gp_eraser;
-
+       
        /* everything is now setup ok */
        return 1;
 }
@@ -1482,7 +1482,7 @@ static void gpencil_draw_status_indicators(tGPsdata *p)
                        if (GPENCIL_SKETCH_SESSIONS_ON(p->scene))
                                ED_area_headerprint(p->sa, IFACE_("Grease Pencil: Drawing/erasing stroke... Release to end stroke"));
                        break;
-
+               
                case GP_STATUS_IDLING:
                        /* print status info */
                        switch (p->paintmode) {
@@ -1498,13 +1498,13 @@ static void gpencil_draw_status_indicators(tGPsdata *p)
                                        ED_area_headerprint(p->sa, IFACE_("Grease Pencil Freehand Session: Hold and drag LMB to draw | "
                                                                          "ESC/Enter to end"));
                                        break;
-
+                               
                                default: /* unhandled future cases */
                                        ED_area_headerprint(p->sa, IFACE_("Grease Pencil Session: ESC/Enter to end"));
                                        break;
                        }
                        break;
-
+               
                case GP_STATUS_ERROR:
                case GP_STATUS_DONE:
                        /* clear status string */
@@ -1522,7 +1522,7 @@ static void gpencil_draw_apply(wmOperator *op, tGPsdata *p)
        if (p->paintmode == GP_PAINTMODE_ERASER) {
                /* do 'live' erasing now */
                gp_stroke_doeraser(p);
-
+               
                /* store used values */
                p->mvalo[0] = p->mval[0];
                p->mvalo[1] = p->mval[1];
@@ -1532,14 +1532,14 @@ static void gpencil_draw_apply(wmOperator *op, tGPsdata *p)
        else if (gp_stroke_filtermval(p, p->mval, p->mvalo)) {
                /* try to add point */
                short ok = gp_stroke_addpoint(p, p->mval, p->pressure, p->curtime);
-
+               
                /* handle errors while adding point */
                if ((ok == GP_STROKEADD_FULL) || (ok == GP_STROKEADD_OVERFLOW)) {
                        /* finish off old stroke */
                        gp_paint_strokeend(p);
                        /* And start a new one!!! Else, projection errors! */
                        gp_paint_initstroke(p, p->paintmode);
-
+                       
                        /* start a new stroke, starting from previous point */
                        /* XXX Must manually reset inittime... */
                        /* XXX We only need to reuse previous point if overflow! */
@@ -1556,12 +1556,12 @@ static void gpencil_draw_apply(wmOperator *op, tGPsdata *p)
                        /* the painting operation cannot continue... */
                        BKE_report(op->reports, RPT_ERROR, "Cannot paint stroke");
                        p->status = GP_STATUS_ERROR;
-
+                       
                        if (G.debug & G_DEBUG)
                                printf("Error: Grease-Pencil Paint - Add Point Invalid\n");
                        return;
                }
-
+               
                /* store used values */
                p->mvalo[0] = p->mval[0];
                p->mvalo[1] = p->mval[1];
@@ -1577,57 +1577,57 @@ static void gpencil_draw_apply_event(wmOperator *op, const wmEvent *event)
        PointerRNA itemptr;
        float mousef[2];
        int tablet = 0;
-
+       
        /* convert from window-space to area-space mouse coordinates
         * NOTE: float to ints conversions, +1 factor is probably used to ensure a bit more accurate rounding...
         */
        p->mval[0] = event->mval[0] + 1;
        p->mval[1] = event->mval[1] + 1;
        p->curtime = PIL_check_seconds_timer();
-
+       
        /* handle pressure sensitivity (which is supplied by tablets) */
        if (event->tablet_data) {
                wmTabletData *wmtab = event->tablet_data;
-
+               
                tablet = (wmtab->Active != EVT_TABLET_NONE);
                p->pressure = wmtab->Pressure;
-
+               
                /* if (wmtab->Active == EVT_TABLET_ERASER) */
                /* TODO... this should get caught by the keymaps which call drawing in the first place */
        }
        else
                p->pressure = 1.0f;
-
+       
        /* fill in stroke data (not actually used directly by gpencil_draw_apply) */
        RNA_collection_add(op->ptr, "stroke", &itemptr);
-
+       
        mousef[0] = p->mval[0];
        mousef[1] = p->mval[1];
        RNA_float_set_array(&itemptr, "mouse", mousef);
        RNA_float_set(&itemptr, "pressure", p->pressure);
        RNA_boolean_set(&itemptr, "is_start", (p->flags & GP_PAINTFLAG_FIRSTRUN));
-
+       
        /* special exception for start of strokes (i.e. maybe for just a dot) */
        if (p->flags & GP_PAINTFLAG_FIRSTRUN) {
                p->flags &= ~GP_PAINTFLAG_FIRSTRUN;
-
+               
                p->mvalo[0] = p->mval[0];
                p->mvalo[1] = p->mval[1];
                p->opressure = p->pressure;
                p->inittime = p->ocurtime = p->curtime;
-
+               
                /* special exception here for too high pressure values on first touch in
                 *  windows for some tablets, then we just skip first touch...
                 */
                if (tablet && (p->pressure >= 0.99f))
                        return;
        }
-
+       
        RNA_float_set(&itemptr, "time", p->curtime - p->inittime);
-
+       
        /* apply the current latest drawing point */
        gpencil_draw_apply(op, p);
-
+       
        /* force refresh */
        ED_region_tag_redraw(p->ar); /* just active area for now, since doing whole screen is too slow */
 }
@@ -1638,9 +1638,9 @@ static void gpencil_draw_apply_event(wmOperator *op, const wmEvent *event)
 static int gpencil_draw_exec(bContext *C, wmOperator *op)
 {
        tGPsdata *p = NULL;
-
+       
        /* printf("GPencil - Starting Re-Drawing\n"); */
-
+       
        /* try to initialize context data needed while drawing */
        if (!gpencil_draw_init(C, op)) {
                if (op->customdata) MEM_freeN(op->customdata);
@@ -1649,25 +1649,25 @@ static int gpencil_draw_exec(bContext *C, wmOperator *op)
        }
        else
                p = op->customdata;
-
+       
        /* printf("\tGP - Start redrawing stroke\n"); */
-
+       
        /* loop over the stroke RNA elements recorded (i.e. progress of mouse movement),
         * setting the relevant values in context at each step, then applying
         */
        RNA_BEGIN (op->ptr, itemptr, "stroke")
        {
                float mousef[2];
-
+               
                /* printf("\t\tGP - stroke elem\n"); */
-
+               
                /* get relevant data for this point from stroke */
                RNA_float_get_array(&itemptr, "mouse", mousef);
                p->mval[0] = (int)mousef[0];
                p->mval[1] = (int)mousef[1];
                p->pressure = RNA_float_get(&itemptr, "pressure");
                p->curtime = (double)RNA_float_get(&itemptr, "time") + p->inittime;
-
+               
                if (RNA_boolean_get(&itemptr, "is_start")) {
                        /* if first-run flag isn't set already (i.e. not true first stroke),
                         * then we must terminate the previous one first before continuing
@@ -1678,30 +1678,30 @@ static int gpencil_draw_exec(bContext *C, wmOperator *op)
                                gp_paint_initstroke(p, p->paintmode);
                        }
                }
-
+               
                /* if first run, set previous data too */
                if (p->flags & GP_PAINTFLAG_FIRSTRUN) {
                        p->flags &= ~GP_PAINTFLAG_FIRSTRUN;
-
+                       
                        p->mvalo[0] = p->mval[0];
                        p->mvalo[1] = p->mval[1];
                        p->opressure = p->pressure;
                        p->ocurtime = p->curtime;
                }
-
+               
                /* apply this data as necessary now (as per usual) */
                gpencil_draw_apply(op, p);
        }
        RNA_END;
-
+               
        /* printf("\tGP - done\n"); */
-
+       
        /* cleanup */
        gpencil_draw_exit(C, op);
-
+       
        /* refreshes */
        WM_event_add_notifier(C, NC_GPENCIL | NA_EDITED, NULL);
-
+       
        /* done */
        return OPERATOR_FINISHED;
 }
@@ -1713,10 +1713,10 @@ static int gpencil_draw_invoke(bContext *C, wmOperator *op, const wmEvent *event
 {
        tGPsdata *p = NULL;
        wmWindow *win = CTX_wm_window(C);
-
+       
        if (G.debug & G_DEBUG)
                printf("GPencil - Starting Drawing\n");
-
+       
        /* try to initialize context data needed while drawing */
        if (!gpencil_draw_init(C, op)) {
                if (op->customdata)
@@ -1727,29 +1727,29 @@ static int gpencil_draw_invoke(bContext *C, wmOperator *op, const wmEvent *event
        }
        else
                p = op->customdata;
-
+       
        /* TODO: set any additional settings that we can take from the events?
         * TODO? if tablet is erasing, force eraser to be on? */
-
+       
        /* TODO: move cursor setting stuff to stroke-start so that paintmode can be changed midway... */
-
+       
        /* if eraser is on, draw radial aid */
        if (p->paintmode == GP_PAINTMODE_ERASER) {
                gpencil_draw_toggle_eraser_cursor(C, p, true);
        }
-
+       
        /* set cursor */
        if (p->paintmode == GP_PAINTMODE_ERASER)
                WM_cursor_modal_set(win, BC_CROSSCURSOR);  /* XXX need a better cursor */
        else
                WM_cursor_modal_set(win, BC_PAINTBRUSHCURSOR);
-
+       
        /* only start drawing immediately if we're allowed to do so... */
        if (RNA_boolean_get(op->ptr, "wait_for_input") == false) {
                /* hotkey invoked - start drawing */
                /* printf("\tGP - set first spot\n"); */
                p->status = GP_STATUS_PAINTING;
-
+               
                /* handle the initial drawing - i.e. for just doing a simple dot */
                gpencil_draw_apply_event(op, event);
        }
@@ -1757,7 +1757,7 @@ static int gpencil_draw_invoke(bContext *C, wmOperator *op, const wmEvent *event
                /* toolbar invoked - don't start drawing yet... */
                /* printf("\tGP - hotkey invoked... waiting for click-drag\n"); */
        }
-
+       
        WM_event_add_notifier(C, NC_GPENCIL | NA_EDITED, NULL);
        /* add a modal handler for this operator, so that we can then draw continuous strokes */
        WM_event_add_modal_handler(C, op);
@@ -1774,7 +1774,7 @@ static bool gpencil_area_exists(bContext *C, ScrArea *sa_test)
 static tGPsdata *gpencil_stroke_begin(bContext *C, wmOperator *op)
 {
        tGPsdata *p = op->customdata;
-
+       
        /* we must check that we're still within the area that we're set up to work from
         * otherwise we could crash (see bug #20586)
         */
@@ -1782,35 +1782,35 @@ static tGPsdata *gpencil_stroke_begin(bContext *C, wmOperator *op)
                printf("\t\t\tGP - wrong area execution abort!\n");
                p->status = GP_STATUS_ERROR;
        }
-
+       
        /* printf("\t\tGP - start stroke\n"); */
-
+       
        /* we may need to set up paint env again if we're resuming */
        /* XXX: watch it with the paintmode! in future,
         *      it'd be nice to allow changing paint-mode when in sketching-sessions */
        /* XXX: with tablet events, we may event want to check for eraser here, for nicer tablet support */
-
+       
        if (gp_session_initdata(C, p))
                gp_paint_initstroke(p, p->paintmode);
-
+       
        if (p->status != GP_STATUS_ERROR)
                p->status = GP_STATUS_PAINTING;
-
+       
        return op->customdata;
 }
 
 static void gpencil_stroke_end(wmOperator *op)
 {
        tGPsdata *p = op->customdata;
-
+       
        gp_paint_cleanup(p);
-
+       
        gpencil_undo_push(p->gpd);
-
+       
        gp_session_cleanup(p);
-
+       
        p->status = GP_STATUS_IDLING;
-
+       
        p->gpd = NULL;
        p->gpl = NULL;
        p->gpf = NULL;
@@ -1821,7 +1821,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
 {
        tGPsdata *p = op->customdata;
        int estate = OPERATOR_PASS_THROUGH; /* default exit state - pass through to support MMB view nav, etc. */
-
+       
        /* if (event->type == NDOF_MOTION)
         *    return OPERATOR_PASS_THROUGH;
         * -------------------------------
@@ -1834,7 +1834,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
         * better in tools that immediately apply
         * in 3D space.
         */
-
+       
        /* we don't pass on key events, GP is used with key-modifiers - prevents Dkey to insert drivers */
        if (ISKEYBOARD(event->type)) {
                if (ELEM(event->type, LEFTARROWKEY, DOWNARROWKEY, RIGHTARROWKEY, UPARROWKEY, ZKEY)) {
@@ -1847,9 +1847,9 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
                        estate = OPERATOR_RUNNING_MODAL;
                }
        }
-
+       
        //printf("\tGP - handle modal event...\n");
-
+       
        /* exit painting mode (and/or end current stroke)
         * NOTE: cannot do RIGHTMOUSE (as is standard for canceling) as that would break polyline [#32647]
         */
@@ -1859,7 +1859,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
                p->status = GP_STATUS_DONE;
                estate = OPERATOR_FINISHED;
        }
-
+       
        /* toggle painting mode upon mouse-button movement
         *  - LEFTMOUSE  = standard drawing (all) / straight line drawing (all) / polyline (toolbox only)
         *  - RIGHTMOUSE = polyline (hotkey) / eraser (all)
@@ -1869,22 +1869,22 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
                /* if painting, end stroke */
                if (p->status == GP_STATUS_PAINTING) {
                        int sketch = 0;
-
+                       
                        /* basically, this should be mouse-button up = end stroke
                         * BUT what happens next depends on whether we 'painting sessions' is enabled
                         */
                        sketch |= GPENCIL_SKETCH_SESSIONS_ON(p->scene);
                        /* polyline drawing is also 'sketching' -- all knots should be added during one session */
                        sketch |= (p->paintmode == GP_PAINTMODE_DRAW_POLY);
-
+                       
                        if (sketch) {
                                /* end stroke only, and then wait to resume painting soon */
                                /* printf("\t\tGP - end stroke only\n"); */
                                gpencil_stroke_end(op);
-
+                               
                                /* we've just entered idling state, so this event was processed (but no others yet) */
                                estate = OPERATOR_RUNNING_MODAL;
-
+                               
                                /* stroke could be smoothed, send notifier to refresh screen */
                                WM_event_add_notifier(C, NC_GPENCIL | NA_EDITED, NULL);
                        }
@@ -1897,7 +1897,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
                else if (event->val == KM_PRESS) {
                        /* not painting, so start stroke (this should be mouse-button down) */
                        p = gpencil_stroke_begin(C, op);
-
+                       
                        if (p->status == GP_STATUS_ERROR) {
                                estate = OPERATOR_CANCELLED;
                        }
@@ -1906,7 +1906,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
                        p->status = GP_STATUS_IDLING;
                }
        }
-
+       
        /* handle mode-specific events */
        if (p->status == GP_STATUS_PAINTING) {
                /* handle painting mouse-movements? */
@@ -1914,7 +1914,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
                        /* handle drawing event */
                        /* printf("\t\tGP - add point\n"); */
                        gpencil_draw_apply_event(op, event);
-
+                       
                        /* finish painting operation if anything went wrong just now */
                        if (p->status == GP_STATUS_ERROR) {
                                printf("\t\t\t\tGP - add error done!\n");
@@ -1939,19 +1939,19 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
                                case PADPLUSKEY:
                                        p->radius += 5;
                                        break;
-
+                               
                                case WHEELUPMOUSE: /* smaller */
                                case PADMINUS:
                                        p->radius -= 5;
-
+                                       
                                        if (p->radius < 0)
                                                p->radius = 0;
                                        break;
                        }
-
+                       
                        /* force refresh */
                        ED_region_tag_redraw(p->ar); /* just active area for now, since doing whole screen is too slow */
-
+                       
                        /* event handled, so just tag as running modal */
                        estate = OPERATOR_RUNNING_MODAL;
                }
@@ -1963,14 +1963,14 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
                        estate = OPERATOR_RUNNING_MODAL;
                }
        }
-
+       
        /* gpencil modal operator stores area, which can be removed while using it (like fullscreen) */
        if (0 == gpencil_area_exists(C, p->sa))
                estate = OPERATOR_CANCELLED;
        else
                /* update status indicators - cursor, header, etc. */
                gpencil_draw_status_indicators(p);
-
+       
        /* process last operations before exiting */
        switch (estate) {
                case OPERATOR_FINISHED:
@@ -1978,11 +1978,11 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
                        gpencil_draw_exit(C, op);
                        WM_event_add_notifier(C, NC_GPENCIL | NA_EDITED, NULL);
                        break;
-
+               
                case OPERATOR_CANCELLED:
                        gpencil_draw_exit(C, op);
                        break;
-
+               
                case OPERATOR_RUNNING_MODAL | OPERATOR_PASS_THROUGH:
                        /* event doesn't need to be handled */
 #if 0
@@ -1991,7 +1991,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
 #endif
                        break;
        }
-
+       
        /* return status code */
        return estate;
 }
@@ -2012,21 +2012,21 @@ void GPENCIL_OT_draw(wmOperatorType *ot)
        ot->name = "Grease Pencil Draw";
        ot->idname = "GPENCIL_OT_draw";
        ot->description = "Make annotations on the active data";
-
+       
        /* api callbacks */
        ot->exec = gpencil_draw_exec;
        ot->invoke = gpencil_draw_invoke;
        ot->modal = gpencil_draw_modal;
        ot->cancel = gpencil_draw_cancel;
        ot->poll = gpencil_draw_poll;
-
+       
        /* flags */
        ot->flag = OPTYPE_UNDO | OPTYPE_BLOCKING;
-
+       
        /* settings for drawing */
        ot->prop = RNA_def_enum(ot->srna, "mode", prop_gpencil_drawmodes, 0, "Mode", "Way to interpret mouse movements");
        RNA_def_collection_runtime(ot->srna, "stroke", &RNA_OperatorStrokeElement, "Stroke", "");
-
+       
        /* NOTE: wait for input is enabled by default, so that all UI code can work properly without needing users to know about this */
        RNA_def_boolean(ot->srna, "wait_for_input", true, "Wait for Input", "Wait for first click instead of painting immediately");
 }
index 6478af8c306b538def43e755ff4f3ed76813f9f8..7967d6a4d95ec8fd13f2893e7ec74ca0568b45ab 100644 (file)
@@ -81,7 +81,7 @@ static int gpencil_select_poll(bContext *C)
 {
        bGPdata *gpd = ED_gpencil_data_get_active(C);
        bGPDlayer *gpl = gpencil_layer_getactive(gpd);
-
+       
        /* only if there's an active layer with an active frame */
        return (gpl && gpl->actframe);
 }
index ed84f75863e9f6c48b1ed6978d1238aec7eaa72e..5f0647fb43d5e9745351a61bdba409d20a89b526 100644 (file)
@@ -54,7 +54,7 @@
 
 typedef struct bGPundonode {
        struct bGPundonode *next, *prev;
-
+       
        char name[BKE_UNDO_STR_MAX];
        struct bGPdata *gpd;
 } bGPundonode;
@@ -70,9 +70,9 @@ int ED_gpencil_session_active(void)
 int ED_undo_gpencil_step(bContext *C, int step, const char *name)
 {
        bGPdata **gpd_ptr = NULL, *new_gpd = NULL;
-
+       
        gpd_ptr = ED_gpencil_data_get_pointers(C, NULL);
-
+       
        if (step == 1) {  /* undo */
                //printf("\t\tGP - undo step\n");
                if (cur_node->prev) {
@@ -91,18 +91,18 @@ int ED_undo_gpencil_step(bContext *C, int step, const char *name)
                        }
                }
        }
-
+       
        if (new_gpd) {
                if (gpd_ptr) {
                        if (*gpd_ptr) {
                                bGPdata *gpd = *gpd_ptr;
                                bGPDlayer *gpl, *gpld;
-
+                               
                                free_gpencil_layers(&gpd->layers);
-
+                               
                                /* copy layers */
                                BLI_listbase_clear(&gpd->layers);
-
+                               
                                for (gpl = new_gpd->layers.first; gpl; gpl = gpl->next) {
                                        /* make a copy of source layer and its data */
                                        gpld = gpencil_layer_duplicate(gpl);
@@ -111,9 +111,9 @@ int ED_undo_gpencil_step(bContext *C, int step, const char *name)
                        }
                }
        }
-
+       
        WM_event_add_notifier(C, NC_GPENCIL | NA_EDITED, NULL);
-
+       
        return OPERATOR_FINISHED;
 }
 
@@ -125,56 +125,56 @@ void gpencil_undo_init(bGPdata *gpd)
 void gpencil_undo_push(bGPdata *gpd)
 {
        bGPundonode *undo_node;
-
+       
        //printf("\t\tGP - undo push\n");
-
+       
        if (cur_node) {
                /* remove all un-done nodes from stack */
                undo_node = cur_node->next;
-
+               
                while (undo_node) {
                        bGPundonode *next_node = undo_node->next;
-
+                       
                        /* HACK: animdata wasn't duplicated, so it shouldn't be freed here,
                         * or else the real copy will segfault when accessed
                         */
                        undo_node->gpd->adt = NULL;
-
+                       
                        BKE_gpencil_free(undo_node->gpd);
                        MEM_freeN(undo_node->gpd);
-
+                       
                        BLI_freelinkN(&undo_nodes, undo_node);
-
+                       
                        undo_node = next_node;
                }
        }
-
+       
        /* create new undo node */
        undo_node = MEM_callocN(sizeof(bGPundonode), "gpencil undo node");
        undo_node->gpd = gpencil_data_duplicate(gpd, true);
-
+       
        cur_node = undo_node;
-
+       
        BLI_addtail(&undo_nodes, undo_node);
 }
 
 void gpencil_undo_finish(void)
 {
        bGPundonode *undo_node = undo_nodes.first;
-
+       
        while (undo_node) {
                /* HACK: animdata wasn't duplicated, so it shouldn't be freed here,
                 * or else the real copy will segfault when accessed
                 */
                undo_node->gpd->adt = NULL;
-
+               
                BKE_gpencil_free(undo_node->gpd);
                MEM_freeN(undo_node->gpd);
-
+               
                undo_node = undo_node->next;
        }
-
+       
        BLI_freelistN(&undo_nodes);
-
+       
        cur_node = NULL;
 }