Commit: aa48aca0a7e331f8305c430a6c73e3bac502e66b Author: Hans Goudey Date: Tue Jul 2 17:24:42 2019 -0400 Branches: soc-2019-bevel-profiles https://developer.blender.org/rBaa48aca0a7e331f8305c430a6c73e3bac502e66b
Fixed saving and loading of profile widget and profile widget memory leaks. Also consolidated ProfilePath and ProfileWidget structs. In the process I renamed the files that define it, and renamed some other variables for consistency. This also includes some small changes to the profile widget UI. =================================================================== M source/blender/CMakeLists.txt R076 source/blender/blenkernel/BKE_profile_path.h source/blender/blenkernel/BKE_profile_widget.h M source/blender/blenkernel/CMakeLists.txt M source/blender/blenkernel/intern/modifier.c R064 source/blender/blenkernel/intern/profile_path.c source/blender/blenkernel/intern/profile_widget.c M source/blender/blenloader/intern/readfile.c M source/blender/blenloader/intern/writefile.c M source/blender/bmesh/operators/bmo_bevel.c M source/blender/bmesh/tools/bmesh_bevel.c M source/blender/editors/include/UI_interface.h M source/blender/editors/interface/interface_draw.c M source/blender/editors/interface/interface_handlers.c M source/blender/editors/interface/interface_templates.c R081 source/blender/makesdna/DNA_profilepath_types.h source/blender/makesdna/DNA_profilewidget_types.h M source/blender/makesdna/intern/makesdna.c M source/blender/makesrna/RNA_access.h M source/blender/makesrna/intern/rna_profile.c M source/blender/modifiers/intern/MOD_bevel.c =================================================================== diff --git a/source/blender/CMakeLists.txt b/source/blender/CMakeLists.txt index b8c5f72e41c..77fa7e3ab81 100644 --- a/source/blender/CMakeLists.txt +++ b/source/blender/CMakeLists.txt @@ -68,7 +68,7 @@ set(SRC_DNA_INC ${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_outliner_types.h ${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_packedFile_types.h ${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_particle_types.h - ${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_profilepath_types.h + ${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_profilewidget_types.h ${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_rigidbody_types.h ${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_scene_types.h ${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_screen_types.h diff --git a/source/blender/blenkernel/BKE_profile_path.h b/source/blender/blenkernel/BKE_profile_widget.h similarity index 76% rename from source/blender/blenkernel/BKE_profile_path.h rename to source/blender/blenkernel/BKE_profile_widget.h index affa5140ee7..93fbdcf2b78 100644 --- a/source/blender/blenkernel/BKE_profile_path.h +++ b/source/blender/blenkernel/BKE_profile_widget.h @@ -25,7 +25,6 @@ */ struct ProfileWidget; -struct ProfilePath; struct ProfilePoint; /* HANS-TODO: Organize */ @@ -49,29 +48,29 @@ void profilewidget_evaluate(const struct ProfileWidget *prwdgt, float *y_out); /* Length portion is the fraction of the total path length where we want the location */ -void profilepath_evaluate(const struct ProfilePath *prpath, +void profilewidget_evaluate_portion(const struct ProfileWidget *prwdgt, float length_portion, float *x_out, float *y_out); /* Need to find the total length of the curve to sample a portion of it */ -float profilepath_total_length(const struct ProfilePath *prpath); +float profilewidget_total_length(const struct ProfileWidget *prwdgt); /* Distance in 2D to the next point */ -float profilepath_linear_distance_to_next_point(const struct ProfilePath *prpath, int i); +float profilewidget_linear_distance_to_next_point(const struct ProfileWidget *prwdgt, int i); -void profilepath_reset(struct ProfilePath *prpath, int preset); +void profilewidget_reset(struct ProfileWidget *prwdgt); -void profilepath_remove(struct ProfilePath *prpath, const short flag); +void profilewidget_remove(struct ProfileWidget *prwdgt, const short flag); -bool profilepath_remove_point(struct ProfilePath *prpath, struct ProfilePoint *point); +bool profilewidget_remove_point(struct ProfileWidget *prwdgt, struct ProfilePoint *point); -struct ProfilePoint *profilepath_insert(struct ProfilePath *prpath, float x, float y); +struct ProfilePoint *profilewidget_insert(struct ProfileWidget *prwdgt, float x, float y); -void profilepath_reverse(struct ProfilePath *prpath); +void profilewidget_reverse(struct ProfileWidget *prwdgt); -void profilepath_handle_set(struct ProfilePath *prpath, int type); +void profilewidget_handle_set(struct ProfileWidget *prwdgt, int type); /* Called for a complete update of the widget after modifications */ void profilewidget_changed(struct ProfileWidget *prwdgt, const bool rem_doubles); @@ -79,7 +78,7 @@ void profilewidget_changed(struct ProfileWidget *prwdgt, const bool rem_doubles) /* call before all evaluation functions */ void profilewidget_initialize(struct ProfileWidget *prwdgt, int nsegments); -void profilepath_fill_segment_table(const struct ProfilePath *prpath, +void profilewidget_fill_segment_table(const struct ProfileWidget *prwdgt, double *x_table_out, double *y_table_out); diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index c15df299e1f..be3462d7060 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -177,7 +177,7 @@ set(SRC intern/pbvh.c intern/pbvh_bmesh.c intern/pointcache.c - intern/profile_path.c + intern/profile_widget.c intern/report.c intern/rigidbody.c intern/scene.c @@ -317,7 +317,7 @@ set(SRC BKE_particle.h BKE_pbvh.h BKE_pointcache.h - BKE_profile_path.h + BKE_profile_widget.h BKE_report.h BKE_rigidbody.h BKE_scene.h diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index 2254207e545..f2246bb3bd4 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -154,6 +154,7 @@ static void modifier_free_data_id_us_cb(void *UNUSED(userData), void modifier_free_ex(ModifierData *md, const int flag) { + printf("MODIFIER FREE EX\n"); const ModifierTypeInfo *mti = modifierType_getInfo(md->type); if ((flag & LIB_ID_CREATE_NO_USER_REFCOUNT) == 0) { @@ -338,6 +339,7 @@ static void modifier_copy_data_id_us_cb(void *UNUSED(userData), void modifier_copyData_ex(ModifierData *md, ModifierData *target, const int flag) { + printf("MODIFIER COPYDATA EX\n"); const ModifierTypeInfo *mti = modifierType_getInfo(md->type); target->mode = md->mode; @@ -901,6 +903,7 @@ struct Mesh *modwrap_applyModifier(ModifierData *md, const ModifierEvalContext *ctx, struct Mesh *me) { + printf("MODWRAP APPLY MODIFIER\n"); const ModifierTypeInfo *mti = modifierType_getInfo(md->type); BLI_assert(CustomData_has_layer(&me->pdata, CD_NORMAL) == false); diff --git a/source/blender/blenkernel/intern/profile_path.c b/source/blender/blenkernel/intern/profile_widget.c similarity index 64% rename from source/blender/blenkernel/intern/profile_path.c rename to source/blender/blenkernel/intern/profile_widget.c index 89616c37b5b..bd3cb093e55 100644 --- a/source/blender/blenkernel/intern/profile_path.c +++ b/source/blender/blenkernel/intern/profile_widget.c @@ -28,7 +28,7 @@ #include "MEM_guardedalloc.h" -#include "DNA_profilepath_types.h" +#include "DNA_profilewidget_types.h" #include "DNA_curve_types.h" #include "BLI_blenlib.h" @@ -37,11 +37,11 @@ #include "BLI_task.h" #include "BLI_threads.h" -#include "BKE_profile_path.h" +#include "BKE_profile_widget.h" #include "BKE_curve.h" #include "BKE_fcurve.h" -#define DEBUG_PRWDGT 0 +#define DEBUG_PRWDGT 1 #define DEBUG_PRWDGT_TABLE 1 #define DEBUG_PRWDGT_EVALUATE 0 #define DEBUG_PRWDGT_REVERSE 0 @@ -58,13 +58,13 @@ void profilewidget_set_defaults(ProfileWidget *prwdgt) BLI_rctf_init(&prwdgt->view_rect, 0.0f, 1.0f, 0.0f, 1.0f); prwdgt->clip_rect = prwdgt->view_rect; - prwdgt->profile->totpoint = 2; - prwdgt->profile->path = MEM_callocN(2 * sizeof(ProfilePoint), "path points"); + prwdgt->totpoint = 2; + prwdgt->path = MEM_callocN(2 * sizeof(ProfilePoint), "path points"); - prwdgt->profile->path[0].x = 1.0f; - prwdgt->profile->path[0].y = 0.0f; - prwdgt->profile->path[1].x = 1.0f; - prwdgt->profile->path[1].y = 1.0f; + prwdgt->path[0].x = 1.0f; + prwdgt->path[0].y = 0.0f; + prwdgt->path[1].x = 1.0f; + prwdgt->path[1].y = 1.0f; prwdgt->changed_timestamp = 0; } @@ -76,10 +76,10 @@ struct ProfileWidget *profilewidget_add(int preset) #endif ProfileWidget *prwdgt = MEM_callocN(sizeof(ProfileWidget), "new profile widget"); - prwdgt->profile = MEM_callocN(sizeof(ProfilePath), "new profile path"); profilewidget_set_defaults(prwdgt); - profilepath_reset(prwdgt->profile, preset); + prwdgt->preset = preset; + profilewidget_reset(prwdgt); profilewidget_changed(prwdgt, false); return prwdgt; @@ -91,20 +91,19 @@ void profilewidget_free_data(ProfileWidget *prwdgt) printf("PROFILEWIDGET FREE DATA\n"); #endif - if (!prwdgt->profile) { - /* Why are you even here in the first place? */ - printf("ProfileWidget has no profile\n"); /* HANS-TODO: Remove */ - return; + if (prwdgt->path) { + MEM_freeN(prwdgt->path); + prwdgt->path = NULL; } - if (prwdgt->profile->path) { - MEM_freeN(prwdgt->profile->path); - prwdgt->profile->path = NULL; + else { +#if DEBUG_PRWDGT + printf("The prwdgt had no path... probably a second redundant free call\n"); +#endif } - if (prwdgt->profile->table) { - MEM_freeN(prwdgt->profile->table); - prwdgt->profile->table = NULL; + if (prwdgt->table) { + MEM_freeN(prwdgt->table); + prwdgt->table = NULL; } - MEM_freeN(prwdgt->profile); } void profilewidget_free(ProfileWidget *prwdgt) @@ -112,7 +111,6 @@ void profilewidget_free(ProfileWidget *prwdgt) #if DEBUG_PRWDGT printf("PROFILEWIDGET FREE\n"); #endif - if (prwdgt) { profilewidget_free_data(prwdgt); MEM_freeN(prwdgt); @@ -126,11 +124,11 @@ void profilewidget_copy_data(ProfileWidget *target, const ProfileWidget *prwdgt) #endif *target = *prwdgt; - if (prwdgt->profile->path) { - target->profile->path = MEM_dupallocN(prwdgt->profile->path); + if (prwdgt->path) { + target->path = MEM_dupallocN(prwdgt->path); } - if (prwdgt->profile->table) { - target->profile->table = MEM_dupallocN(prwdgt->profile->table); + if (prwdgt->table) { + target->table = MEM_dupallocN(prwdgt->table); } } @@ -141,9 +139,9 @@ ProfileWidget *profilewidget_copy(const ProfileWidget *prwdgt) #endif if (prwdgt) { - ProfileWidget *prwdgtn = MEM_dupallocN(prwdgt); - profilewidget_copy_data(prwdgtn, prwdgt); - return prwdgtn; + ProfileWidget *new_prdgt = MEM_dupallocN(prwdgt); + profilewidget_copy_data(new_prdgt, prwdgt); + return new_prdgt; } return NULL; } @@ -151,7 +149,7 @@ ProfileWidget *profilewidget_copy(const ProfileWidget *prwdgt) /* ********** requires profilewidget_changed() call after ******** */ /* remove specified point */ -bool profilepath_remove_point(ProfilePath *prpath, ProfilePoint *point) +bool profilewidget_remove_point(ProfileWidget *prwdgt, ProfilePoint *point) { ProfilePoint *pts; int a, b, removed = 0; @@ -161,16 +159,16 @@ bool profilepath_remove_point(ProfilePath *prpath, ProfilePoint *point) #endif /* must have 2 points minimum */ - if (prpath->totpoint <= 2) { + if (prwdgt->totpoint <= 2) { return false; } - pts = MEM_mallocN((size_t)prpath->totpoint * sizeof(ProfilePoint), "path @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs