svn merge -r39781:39792 https://svn.blender.org/svnroot/bf-blender/trunk/blender...
[blender-staging.git] / source / blender / blenkernel / intern / gpencil.c
index 6086aa58d40af59930830527f8cf28344eb9891b..c2e94cc97db7cfd407ef49190345900f569feb00 100644 (file)
@@ -1,6 +1,4 @@
-/**
- * $Id: gpencil.c 19758 2009-04-16 13:10:08Z aligorith $
- *
+/*
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
@@ -15,7 +13,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
  * The Original Code is Copyright (C) 2008, Blender Foundation
  * This is a new part of Blender
  *
  * ***** END GPL LICENSE BLOCK *****
  */
+
+/** \file blender/blenkernel/intern/gpencil.c
+ *  \ingroup bke
+ */
+
  
 #include <stdio.h>
 #include <string.h>
 
 #include "MEM_guardedalloc.h"
 
-#include "IMB_imbuf.h"
-#include "IMB_imbuf_types.h"
-
-#include "BLI_arithb.h"
 #include "BLI_blenlib.h"
+#include "BLI_utildefines.h"
 
-#include "DNA_listBase.h"
 #include "DNA_gpencil_types.h"
-#include "DNA_object_types.h"
-#include "DNA_scene_types.h"
-#include "DNA_screen_types.h"
-#include "DNA_space_types.h"
-#include "DNA_userdef_types.h"
-#include "DNA_vec_types.h"
 
-#include "BKE_blender.h"
-#include "BKE_context.h"
-#include "BKE_curve.h"
 #include "BKE_global.h"
 #include "BKE_gpencil.h"
-#include "BKE_image.h"
 #include "BKE_library.h"
 #include "BKE_main.h"
-#include "BKE_utildefines.h"
+
 
 
 /* ************************************************** */
@@ -194,7 +183,7 @@ bGPDlayer *gpencil_layer_addnew (bGPdata *gpd)
        
        /* auto-name */
        sprintf(gpl->info, "GP_Layer");
-       BLI_uniquename(&gpd->layers, gpl, "GP_Layer", '.', offsetof(bGPDlayer, info[0]), 128);
+       BLI_uniquename(&gpd->layers, gpl, "GP_Layer", '.', offsetof(bGPDlayer, info[0]), sizeof(gpl->info));
        
        /* make this one the active one */
        gpencil_layer_setactive(gpd, gpl);
@@ -204,7 +193,7 @@ bGPDlayer *gpencil_layer_addnew (bGPdata *gpd)
 }
 
 /* add a new gp-datablock */
-bGPdata *gpencil_data_addnew (char name[])
+bGPdata *gpencil_data_addnew (const char name[])
 {
        bGPdata *gpd;
        
@@ -214,6 +203,11 @@ bGPdata *gpencil_data_addnew (char name[])
        /* initial settings */
        gpd->flag = (GP_DATA_DISPINFO|GP_DATA_EXPAND);
        
+       /* for now, stick to view is also enabled by default
+        * since this is more useful...
+        */
+       gpd->flag |= GP_DATA_VIEWALIGN;
+       
        return gpd;
 }
 
@@ -308,7 +302,7 @@ bGPdata *gpencil_data_duplicate (bGPdata *src)
 void gpencil_frame_delete_laststroke (bGPDlayer *gpl, bGPDframe *gpf)
 {
        bGPDstroke *gps= (gpf) ? gpf->strokes.last : NULL;
-       int cfra = 1; // XXX FIXME!!!
+       int cfra = (gpf) ? gpf->framenum : 0; /* assume that the current frame was not locked */
        
        /* error checking */
        if (ELEM(NULL, gpf, gps))
@@ -344,8 +338,10 @@ bGPDframe *gpencil_layer_getframe (bGPDlayer *gpl, int cframe, short addnew)
        if (gpl->actframe) {
                gpf= gpl->actframe;
                
-               /* do not allow any changes to layer's active frame if layer is locked */
-               if (gpl->flag & GP_LAYER_LOCKED)
+               /* do not allow any changes to layer's active frame if layer is locked from changes
+                * or if the layer has been set to stay on the current frame
+                */
+               if (gpl->flag & (GP_LAYER_LOCKED|GP_LAYER_FRAMELOCK))
                        return gpf;
                /* do not allow any changes to actframe if frame has painting tag attached to it */
                if (gpf->flag & GP_FRAME_PAINT)