@@ -83,6 +83,15 @@ static int free_path(lua_State* L);
83
83
84
84
static void pdlua_gfx_clear (t_pdlua * obj , int layer , int removed ); // only for pd-vanilla, to delete all tcl/tk items
85
85
86
+ void pdlua_gfx_free (t_pdlua_gfx * gfx ) {
87
+ for (int i = 0 ; i < gfx -> num_layers ; i ++ )
88
+ {
89
+ free (gfx -> layer_tags [i ]);
90
+ }
91
+ free (gfx -> layer_tags );
92
+ if (gfx -> transforms ) freebytes (gfx -> transforms , gfx -> num_transforms * sizeof (gfx_transform ));
93
+ }
94
+
86
95
// Trigger repaint callback in lua script
87
96
void pdlua_gfx_repaint (t_pdlua * o , int firsttime ) {
88
97
#if !PLUGDATA
@@ -775,7 +784,7 @@ static int gfx_initialize(t_pdlua *obj)
775
784
gfx -> transforms = NULL ;
776
785
gfx -> num_transforms = 0 ;
777
786
gfx -> num_layers = 0 ;
778
- gfx -> layer_tags = malloc ( sizeof ( char * )) ;
787
+ gfx -> layer_tags = NULL ;
779
788
780
789
pdlua_gfx_repaint (obj , 0 );
781
790
return 0 ;
@@ -839,7 +848,11 @@ static int start_paint(lua_State* L) {
839
848
if (layer >= gfx -> num_layers )
840
849
{
841
850
int new_num_layers = layer + 1 ;
842
- gfx -> layer_tags = resizebytes (gfx -> layer_tags , sizeof (char * ) * gfx -> num_layers , sizeof (char * ) * new_num_layers );
851
+ if (gfx -> layer_tags )
852
+ gfx -> layer_tags = resizebytes (gfx -> layer_tags , sizeof (char * ) * gfx -> num_layers , sizeof (char * ) * new_num_layers );
853
+ else
854
+ gfx -> layer_tags = malloc (sizeof (char * ));
855
+
843
856
gfx -> num_layers = new_num_layers ;
844
857
gfx -> layer_tags [layer ] = malloc (64 );
845
858
snprintf (gfx -> layer_tags [layer ], 64 , ".l%i%lx" , layer , (long )obj );
0 commit comments