[Bf-blender-cvs] [f501a4d] GPencil_Editing_Stage3: GPencil: Code Cleanup - Deduplicate code for adding a copy of the active frame (for editing)
Joshua Leung
noreply at git.blender.org
Sun Dec 6 14:30:05 CET 2015
Commit: f501a4dd9635d198243e2955b72fc6f8fb073908
Author: Joshua Leung
Date: Mon Dec 7 01:27:12 2015 +1300
Branches: GPencil_Editing_Stage3
https://developer.blender.org/rBf501a4dd9635d198243e2955b72fc6f8fb073908
GPencil: Code Cleanup - Deduplicate code for adding a copy of the active frame (for editing)
===================================================================
M source/blender/blenkernel/BKE_gpencil.h
M source/blender/blenkernel/intern/gpencil.c
M source/blender/editors/gpencil/gpencil_brush.c
M source/blender/editors/transform/transform_conversions.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 084c552..4d13dd7 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -47,6 +47,7 @@ void BKE_gpencil_free(struct bGPdata *gpd);
void gpencil_stroke_sync_selection(struct bGPDstroke *gps);
struct bGPDframe *gpencil_frame_addnew(struct bGPDlayer *gpl, int cframe);
+struct bGPDframe *gpencil_frame_addcopy(struct bGPDlayer *gpl, int cframe);
struct bGPDlayer *gpencil_layer_addnew(struct bGPdata *gpd, const char *name, int setactive);
struct bGPdata *gpencil_data_addnew(const char name[]);
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 81a8fb7..4261054 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -132,7 +132,7 @@ bGPDframe *gpencil_frame_addnew(bGPDlayer *gpl, int cframe)
bGPDframe *gpf = NULL, *gf = NULL;
short state = 0;
- /* error checking (neg frame only if they are not allowed in Blender!) */
+ /* error checking */
if (gpl == NULL)
return NULL;
@@ -178,6 +178,61 @@ bGPDframe *gpencil_frame_addnew(bGPDlayer *gpl, int cframe)
return gpf;
}
+/* add a copy of the active gp-frame to the given layer */
+bGPDframe *gpencil_frame_addcopy(bGPDlayer *gpl, int cframe)
+{
+ bGPDframe *new_frame, *gpf;
+ bool found = false;
+
+ /* Error checking/handling */
+ if (gpl == NULL) {
+ /* no layer */
+ return NULL;
+ }
+ else if (gpl->actframe == NULL) {
+ /* no active frame, so just create a new one from scratch */
+ return gpencil_frame_addnew(gpl, cframe);
+ }
+
+ /* Create a copy of the frame */
+ new_frame = gpencil_frame_duplicate(gpl->actframe);
+
+ /* Find frame to insert it before */
+ for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
+ if (gpf->framenum > cframe) {
+ /* Add it here */
+ BLI_insertlinkbefore(&gpl->frames, gpf, new_frame);
+
+ found = true;
+ break;
+ }
+ else if (gpf->framenum == cframe) {
+ /* This only happens when we're editing with framelock on...
+ * - Delete the new frame and don't do anything else here...
+ */
+ free_gpencil_strokes(new_frame);
+ MEM_freeN(new_frame);
+ new_frame = NULL;
+
+ found = true;
+ break;
+ }
+ }
+
+ if (found == false) {
+ /* Add new frame to the end */
+ BLI_addtail(&gpl->frames, new_frame);
+ }
+
+ /* Ensure that frame is set up correctly, and return it */
+ if (new_frame) {
+ new_frame->framenum = cframe;
+ gpl->actframe = new_frame;
+ }
+
+ return new_frame;
+}
+
/* add a new gp-layer and make it the active layer */
bGPDlayer *gpencil_layer_addnew(bGPdata *gpd, const char *name, int setactive)
{
diff --git a/source/blender/editors/gpencil/gpencil_brush.c b/source/blender/editors/gpencil/gpencil_brush.c
index 9f5767f..8206438 100644
--- a/source/blender/editors/gpencil/gpencil_brush.c
+++ b/source/blender/editors/gpencil/gpencil_brush.c
@@ -1130,47 +1130,8 @@ static void gpsculpt_brush_init_stroke(tGP_BrushEditData *gso)
* spent too much time editing the wrong frame...
*/
// XXX: should this be allowed when framelock is enabled?
- // XXX: the logic below should be deduplicated, as the transform conversion code also does it
if (gpf->framenum != cfra) {
- bGPDframe *new_frame = gpencil_frame_duplicate(gpf);
- bGPDframe *gf;
- bool found = false;
-
- /* Find frame to insert it before */
- for (gf = gpl->frames.first; gf; gf = gf->next) {
- if (gf->framenum > cfra) {
- /* Add it here */
- BLI_insertlinkbefore(&gpl->frames, gf, new_frame);
-
- found = true;
- break;
- }
- else if (gf->framenum == cfra) {
- /* This only happens when we're editing with framelock on...
- * - Delete the new frame and don't do anything else here...
- */
- //printf("GP Sculpt init stroke - Copy aborted for frame %d -> %d\n", gpf->framenum, gf->framenum);
- free_gpencil_strokes(new_frame);
- MEM_freeN(new_frame);
- new_frame = NULL;
-
- found = true;
- break;
- }
- }
-
- if (found == false) {
- /* Add new frame to the end */
- BLI_addtail(&gpl->frames, new_frame);
- }
-
- /* Edit the new frame instead, if it did get created + added */
- if (new_frame) {
- // TODO: tag this one as being "newly created" so that we can remove it if the edit is cancelled
- new_frame->framenum = cfra;
-
- gpl->actframe = gpf = new_frame;
- }
+ gpencil_frame_addcopy(gpl, cfra);
}
}
}
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 4dcef3a..6360535 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -7756,45 +7756,7 @@ static void createTransGPencil(bContext *C, TransInfo *t)
*/
// XXX: should this be allowed when framelock is enabled?
if (gpf->framenum != cfra) {
- bGPDframe *new_frame = gpencil_frame_duplicate(gpf);
- bGPDframe *gf;
- bool found = false;
-
- /* Find frame to insert it before */
- for (gf = gpl->frames.first; gf; gf = gf->next) {
- if (gf->framenum > cfra) {
- /* Add it here */
- BLI_insertlinkbefore(&gpl->frames, gf, new_frame);
-
- found = true;
- break;
- }
- else if (gf->framenum == cfra) {
- /* This only happens when we're editing with framelock on...
- * - Delete the new frame and don't do anything else here...
- */
- //printf("GP Frame convert to TransData - Copy aborted for frame %d -> %d\n", gpf->framenum, gf->framenum);
- free_gpencil_strokes(new_frame);
- MEM_freeN(new_frame);
- new_frame = NULL;
-
- found = true;
- break;
- }
- }
-
- if (found == false) {
- /* Add new frame to the end */
- BLI_addtail(&gpl->frames, new_frame);
- }
-
- /* Edit the new frame instead, if it did get created + added */
- if (new_frame) {
- // TODO: tag this one as being "newly created" so that we can remove it if the edit is cancelled
- new_frame->framenum = cfra;
-
- gpf = new_frame;
- }
+ gpf = gpencil_frame_addcopy(gpl, cfra);
}
/* Loop over strokes, adding TransData for points as needed... */
More information about the Bf-blender-cvs
mailing list