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); } }
static void Do_OKRegen(ReviewHintData *hd) { SplineChar *sc = hd->cv->b.sc; StemInfo *curh = sc->hstem, *curv = sc->vstem; int do_regen = GGadgetIsChecked(GWidgetGetControl(hd->gw,CID_RegenHM)); /* We go backwards here, but not for long. The point is to go back to */ /* the original hint state so we can preserve it, now that we know we*/ /* are going to modify it */ sc->hstem = hd->oldh; sc->vstem = hd->oldv; SCPreserveHints(sc,CVLayer((CharViewBase *) hd->cv)); sc->hstem = curh; sc->vstem = curv; StemInfosFree(hd->oldh); StemInfosFree(hd->oldv); if ( hd->lastactive!=NULL ) hd->lastactive->active = false; if ( hd->changed ) { SCClearHintMasks(hd->cv->b.sc,CVLayer((CharViewBase *) (hd->cv)),true); if ( do_regen ) SCFigureHintMasks(hd->cv->b.sc,CVLayer((CharViewBase *) (hd->cv))); } /* Everything else got done as we went along... */ SCOutOfDateBackground(hd->cv->b.sc); SCUpdateAll(hd->cv->b.sc); SCHintsChanged(hd->cv->b.sc); hd->done = true; }
static void DoCancel(ReviewHintData *hd) { StemInfosFree(hd->cv->b.sc->hstem); StemInfosFree(hd->cv->b.sc->vstem); hd->cv->b.sc->hstem = hd->oldh; hd->cv->b.sc->vstem = hd->oldv; hd->cv->b.sc->hconflicts = StemListAnyConflicts(hd->cv->b.sc->hstem); hd->cv->b.sc->vconflicts = StemListAnyConflicts(hd->cv->b.sc->vstem); hd->cv->b.sc->manualhints = hd->oldmanual; if ( hd->undocreated ) SCDoUndo(hd->cv->b.sc,ly_fore); SCOutOfDateBackground(hd->cv->b.sc); SCUpdateAll(hd->cv->b.sc); hd->done = true; }