diff options
Diffstat (limited to 'fontforge/kernclass.c')
-rw-r--r-- | fontforge/kernclass.c | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/fontforge/kernclass.c b/fontforge/kernclass.c index 485e6c8b..5411cbac 100644 --- a/fontforge/kernclass.c +++ b/fontforge/kernclass.c @@ -119,6 +119,7 @@ typedef struct kernclasslistdlg { #define CID_MinKern 2009 #define CID_Touched 2010 #define CID_OnlyCloser 2011 +#define CID_Autokern 2012 #define CID_SizeLabel 3000 #define CID_MagLabel 3001 @@ -1157,7 +1158,7 @@ static int KC_OK(GGadget *g, GEvent *e) { int i; int len; struct matrix_data *classes; - int err, touch=0, separation=0, minkern=0, onlyCloser; + int err, touch=0, separation=0, minkern=0, onlyCloser, autokern; sf = kcd->sf; if ( sf->cidmaster!=NULL ) sf = sf->cidmaster; @@ -1168,6 +1169,7 @@ static int KC_OK(GGadget *g, GEvent *e) { separation = GetInt8(kcd->gw,CID_Separation,_("Separation"),&err); minkern = GetInt8(kcd->gw,CID_MinKern,_("Min Kern"),&err); onlyCloser = GGadgetIsChecked(GWidgetGetControl(kcd->gw,CID_OnlyCloser)); + autokern = GGadgetIsChecked(GWidgetGetControl(kcd->gw,CID_Autokern)); if ( err ) return( true ); KCD_Finalize(kcd); @@ -1188,6 +1190,7 @@ return( true ); kc->subtable->minkern = minkern; kc->subtable->kerning_by_touch = touch; kc->subtable->onlyCloser = onlyCloser; + kc->subtable->dontautokern = !autokern; kc->first_cnt = kcd->first_cnt; kc->second_cnt = kcd->second_cnt; @@ -1983,11 +1986,12 @@ void ME_ClassCheckUnique(GGadget *g,int r, int c, SplineFont *sf) { static void KCD_FinishEdit(GGadget *g,int r, int c, int wasnew) { KernClassDlg *kcd = GDrawGetUserData(GGadgetGetWindow(g)); int is_first = GGadgetGetCid(g) == CID_ClassList; - int i; + int i, autokern; ME_ClassCheckUnique(g, r, c, kcd->sf); if ( wasnew ) { + autokern = GGadgetIsChecked(GWidgetGetControl(kcd->gw,CID_Autokern)); if ( is_first ) { kcd->offsets = grealloc(kcd->offsets,(kcd->first_cnt+1)*kcd->second_cnt*sizeof(int16)); memset(kcd->offsets+kcd->first_cnt*kcd->second_cnt, @@ -1998,7 +2002,8 @@ static void KCD_FinishEdit(GGadget *g,int r, int c, int wasnew) { 0, kcd->second_cnt*sizeof(DeviceTable)); #endif ++kcd->first_cnt; - KCD_AutoKernAClass(kcd,kcd->first_cnt-1,true); + if ( autokern ) + KCD_AutoKernAClass(kcd,kcd->first_cnt-1,true); } else { int16 *new = galloc(kcd->first_cnt*(kcd->second_cnt+1)*sizeof(int16)); for ( i=0; i<kcd->first_cnt; ++i ) { @@ -2021,7 +2026,8 @@ static void KCD_FinishEdit(GGadget *g,int r, int c, int wasnew) { } #endif ++kcd->second_cnt; - KCD_AutoKernAClass(kcd,kcd->second_cnt-1,false); + if ( autokern ) + KCD_AutoKernAClass(kcd,kcd->second_cnt-1,false); } KCD_SBReset(kcd); GDrawRequestExpose(kcd->gw,NULL,false); @@ -2524,10 +2530,10 @@ static void FillShowKerningWindow(KernClassDlg *kcd, GGadgetCreateData *left, void KernClassD(KernClass *kc, SplineFont *sf, int layer, int isv) { GRect pos; GWindowAttrs wattrs; - GGadgetCreateData gcd[53], sepbox, classbox, hvbox, buttonbox, mainbox[2], topbox[2], titbox; + GGadgetCreateData gcd[54], sepbox, classbox, hvbox, buttonbox, mainbox[2], topbox[2], titbox, hbox; GGadgetCreateData *harray1[17], *harray2[17], *varray1[5], *varray2[5]; - GGadgetCreateData *hvarray[13], *buttonarray[8], *varray[19], *h4array[8], *harrayclasses[6], *titlist[4]; - GTextInfo label[53]; + GGadgetCreateData *hvarray[13], *buttonarray[8], *varray[19], *h4array[8], *harrayclasses[6], *titlist[4], *h5array[3]; + GTextInfo label[54]; KernClassDlg *kcd; int i, j, kc_width, vi; int as, ds, ld, sbsize; @@ -2574,6 +2580,7 @@ return; memset(&wattrs,0,sizeof(wattrs)); memset(&gcd,0,sizeof(gcd)); memset(&classbox,0,sizeof(classbox)); + memset(&hbox,0,sizeof(hbox)); memset(&hvbox,0,sizeof(hvbox)); memset(&buttonbox,0,sizeof(buttonbox)); memset(&mainbox,0,sizeof(mainbox)); @@ -2725,7 +2732,6 @@ return; label[i].text_is_1byte = true; label[i].text_in_resource = true; gcd[i].gd.label = &label[i]; - gcd[i].gd.pos.x = 5; gcd[i].gd.pos.y = 5+4; gcd[i].gd.flags = gg_enabled|gg_visible|gg_utf8_popup; if ( kc->subtable->onlyCloser ) gcd[i].gd.flags = gg_enabled|gg_visible|gg_utf8_popup|gg_cb_on; @@ -2734,7 +2740,28 @@ return; "so the kerning offset will be negative."); gcd[i].gd.cid = CID_OnlyCloser; gcd[i].creator = GCheckBoxCreate; - varray[j++] = &gcd[i++]; varray[j++] = NULL; + h5array[0] = &gcd[i++]; + + label[i].text = (unichar_t *) _("Autokern new entries"); + label[i].text_is_1byte = true; + label[i].text_in_resource = true; + gcd[i].gd.label = &label[i]; + gcd[i].gd.flags = gg_enabled|gg_visible|gg_utf8_popup; + if ( !kc->subtable->dontautokern ) + gcd[i].gd.flags = gg_enabled|gg_visible|gg_utf8_popup|gg_cb_on; + gcd[i].gd.popup_msg = (unichar_t *) _( + "When adding a new class provide default kerning values\n" + "Between it and every class with which it interacts."); + gcd[i].gd.cid = CID_Autokern; + gcd[i].creator = GCheckBoxCreate; + h5array[1] = &gcd[i++]; h5array[2] = NULL; + + memset(&hbox,0,sizeof(hbox)); + hbox.gd.flags = gg_enabled|gg_visible; + hbox.gd.u.boxelements = h5array; + hbox.creator = GHBoxCreate; + + varray[j++] = &hbox; varray[j++] = NULL; gcd[i].gd.pos.x = 10; gcd[i].gd.pos.y = GDrawPointsToPixels(gw,gcd[i-1].gd.pos.y+17); gcd[i].gd.pos.width = pos.width-20; |