Cleanup: move armature undo into own file
authorCampbell Barton <ideasman42@gmail.com>
Mon, 19 Mar 2018 16:10:07 +0000 (17:10 +0100)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 19 Mar 2018 16:45:20 +0000 (17:45 +0100)
source/blender/editors/armature/CMakeLists.txt
source/blender/editors/armature/armature_utils.c
source/blender/editors/armature/editarmature_undo.c [new file with mode: 0644]
source/blender/editors/include/ED_armature.h

index b213aca..4c394d7 100644 (file)
@@ -48,6 +48,7 @@ set(SRC
        editarmature_generate.c
        editarmature_retarget.c
        editarmature_sketch.c
+       editarmature_undo.c
        meshlaplacian.c
        pose_edit.c
        pose_lib.c
index a55264b..0efd9ce 100644 (file)
@@ -710,11 +710,11 @@ void ED_armature_to_edit(bArmature *arm)
 }
 
 /* *************************************************************** */
-/* Undo for Armature EditMode*/
+/* Used by Undo for Armature EditMode*/
 
 /* free's bones and their properties */
 
-static void ED_armature_ebone_listbase_free(ListBase *lb)
+void ED_armature_ebone_listbase_free(ListBase *lb)
 {
        EditBone *ebone, *ebone_next;
 
@@ -732,7 +732,7 @@ static void ED_armature_ebone_listbase_free(ListBase *lb)
        BLI_listbase_clear(lb);
 }
 
-static void ED_armature_ebone_listbase_copy(ListBase *lb_dst, ListBase *lb_src)
+void ED_armature_ebone_listbase_copy(ListBase *lb_dst, ListBase *lb_src)
 {
        EditBone *ebone_src;
        EditBone *ebone_dst;
@@ -765,78 +765,6 @@ void ED_armature_ebone_listbase_temp_clear(ListBase *lb)
        }
 }
 
-typedef struct UndoArmature {
-       EditBone *act_edbone;
-       ListBase lb;
-} UndoArmature;
-
-static void undoBones_to_editBones(void *uarmv, void *armv, void *UNUSED(data))
-{
-       UndoArmature *uarm = uarmv;
-       bArmature *arm = armv;
-       EditBone *ebone;
-       
-       ED_armature_ebone_listbase_free(arm->edbo);
-       ED_armature_ebone_listbase_copy(arm->edbo, &uarm->lb);
-       
-       /* active bone */
-       if (uarm->act_edbone) {
-               ebone = uarm->act_edbone;
-               arm->act_edbone = ebone->temp.ebone;
-       }
-       else {
-               arm->act_edbone = NULL;
-       }
-
-       ED_armature_ebone_listbase_temp_clear(arm->edbo);
-}
-
-static void *editBones_to_undoBones(void *armv, void *UNUSED(obdata))
-{
-       bArmature *arm = armv;
-       UndoArmature *uarm;
-       EditBone *ebone;
-       
-       uarm = MEM_callocN(sizeof(UndoArmature), "listbase undo");
-       
-       ED_armature_ebone_listbase_copy(&uarm->lb, arm->edbo);
-       
-       /* active bone */
-       if (arm->act_edbone) {
-               ebone = arm->act_edbone;
-               uarm->act_edbone = ebone->temp.ebone;
-       }
-
-       ED_armature_ebone_listbase_temp_clear(&uarm->lb);
-       
-       return uarm;
-}
-
-static void free_undoBones(void *uarmv)
-{
-       UndoArmature *uarm = uarmv;
-       
-       ED_armature_ebone_listbase_free(&uarm->lb);
-
-       MEM_freeN(uarm);
-}
-
-static void *get_armature_edit(bContext *C)
-{
-       Object *obedit = CTX_data_edit_object(C);
-       if (obedit && obedit->type == OB_ARMATURE) {
-               return obedit->data;
-       }
-       return NULL;
-}
-
-/* and this is all the undo system needs to know */
-void undo_push_armature(bContext *C, const char *name)
-{
-       // XXX solve getdata()
-       undo_editmode_push(C, name, get_armature_edit, free_undoBones, undoBones_to_editBones, editBones_to_undoBones, NULL);
-}
-
 /* *************************************************************** */
 /* Low level selection functions which hide connected-parent
  * flag behavior which gets tricky to handle in selection operators.
diff --git a/source/blender/editors/armature/editarmature_undo.c b/source/blender/editors/armature/editarmature_undo.c
new file mode 100644 (file)
index 0000000..36e6ec4
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation, 2002-2009 full recode.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/armature/editarmature_undo.c
+ *  \ingroup edarmature
+ */
+
+#include "DNA_armature_types.h"
+#include "DNA_object_types.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_math.h"
+
+#include "BKE_context.h"
+
+#include "ED_armature.h"
+#include "ED_util.h"
+
+typedef struct UndoArmature {
+       EditBone *act_edbone;
+       ListBase lb;
+} UndoArmature;
+
+static void undoBones_to_editBones(void *uarmv, void *armv, void *UNUSED(data))
+{
+       UndoArmature *uarm = uarmv;
+       bArmature *arm = armv;
+       EditBone *ebone;
+
+       ED_armature_ebone_listbase_free(arm->edbo);
+       ED_armature_ebone_listbase_copy(arm->edbo, &uarm->lb);
+
+       /* active bone */
+       if (uarm->act_edbone) {
+               ebone = uarm->act_edbone;
+               arm->act_edbone = ebone->temp.ebone;
+       }
+       else {
+               arm->act_edbone = NULL;
+       }
+
+       ED_armature_ebone_listbase_temp_clear(arm->edbo);
+}
+
+static void *editBones_to_undoBones(void *armv, void *UNUSED(obdata))
+{
+       bArmature *arm = armv;
+       UndoArmature *uarm;
+       EditBone *ebone;
+
+       uarm = MEM_callocN(sizeof(UndoArmature), "listbase undo");
+
+       ED_armature_ebone_listbase_copy(&uarm->lb, arm->edbo);
+
+       /* active bone */
+       if (arm->act_edbone) {
+               ebone = arm->act_edbone;
+               uarm->act_edbone = ebone->temp.ebone;
+       }
+
+       ED_armature_ebone_listbase_temp_clear(&uarm->lb);
+
+       return uarm;
+}
+
+static void free_undoBones(void *uarmv)
+{
+       UndoArmature *uarm = uarmv;
+
+       ED_armature_ebone_listbase_free(&uarm->lb);
+
+       MEM_freeN(uarm);
+}
+
+static void *get_armature_edit(bContext *C)
+{
+       Object *obedit = CTX_data_edit_object(C);
+       if (obedit && obedit->type == OB_ARMATURE) {
+               return obedit->data;
+       }
+       return NULL;
+}
+
+/* and this is all the undo system needs to know */
+void undo_push_armature(bContext *C, const char *name)
+{
+       // XXX solve getdata()
+       undo_editmode_push(C, name, get_armature_edit, free_undoBones, undoBones_to_editBones, editBones_to_undoBones, NULL);
+}
index 42bda26..39e95eb 100644 (file)
@@ -128,7 +128,6 @@ void ED_keymap_armature(struct wmKeyConfig *keyconf);
 void ED_armature_from_edit(struct bArmature *arm);
 void ED_armature_to_edit(struct bArmature *arm);
 void ED_armature_edit_free(struct bArmature *arm);
-void ED_armature_ebone_listbase_temp_clear(struct ListBase *lb);
 
 void ED_armature_deselect_all(struct Object *obedit);
 void ED_armature_deselect_all_visible(struct Object *obedit);
@@ -186,6 +185,11 @@ void ED_armature_ebone_select_set(EditBone *ebone, bool select);
 void ED_armature_ebone_selectflag_enable(EditBone *ebone, int flag);
 void ED_armature_ebone_selectflag_disable(EditBone *ebone, int flag);
 
+/* armature_utils.c */
+void ED_armature_ebone_listbase_temp_clear(struct ListBase *lb);
+void ED_armature_ebone_listbase_free(struct ListBase *lb);
+void ED_armature_ebone_listbase_copy(struct ListBase *lb_dst, struct ListBase *lb_src);
+
 /* poseobject.c */
 void ED_armature_exit_posemode(struct bContext *C, struct Base *base);
 void ED_armature_enter_posemode(struct bContext *C, struct Base *base);