void SCClearContents(SplineChar *sc,int layer) { int ly_first, ly_last; if ( sc==NULL ) return; if ( sc->parent!=NULL && sc->parent->multilayer ) { ly_first = ly_fore; ly_last = sc->layer_cnt-1; } else ly_first = ly_last = layer; for ( layer = ly_first; layer<=ly_last; ++layer ) SCClearLayer(sc,layer); --layer; if ( sc->parent!=NULL && (sc->parent->multilayer || (!sc->parent->layers[layer].background && SCWasEmpty(sc,layer)))) { sc->widthset = false; if ( sc->parent!=NULL && sc->width!=0 ) sc->width = sc->parent->ascent+sc->parent->descent; AnchorPointsFree(sc->anchor); sc->anchor = NULL; StemInfosFree(sc->hstem); sc->hstem = NULL; StemInfosFree(sc->vstem); sc->vstem = NULL; DStemInfosFree(sc->dstem); sc->dstem = NULL; MinimumDistancesFree(sc->md); sc->md = NULL; free(sc->ttf_instrs); sc->ttf_instrs = NULL; sc->ttf_instrs_len = 0; SCOutOfDateBackground(sc); } }
// FIXME: Try to use garbage-collected allocation for the management // of anchor point lists. Note: after this is done, we can get rid of // the ‘catch’ calls in the Guile code. static SCM scm_free_AnchorPoint_linked_list (SCM ap_ptr) { AnchorPointsFree (scm_to_pointer (ap_ptr)); return SCM_UNSPECIFIED; }