static char *JSTF_LookupListDlg(GGadget *g, int r, int c) { int rows, k, j; struct matrix_data *strings = GMatrixEditGet(g, &rows); int cols = GMatrixEditGetColCnt(g); char *lookupstr = strings[cols*r+c].u.md_str; Jstf_Dlg *jd = GDrawGetUserData(GGadgetGetWindow(g)); GRect pos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[4], boxes[3]; GGadgetCreateData *varray[6], *harray3[8]; GTextInfo label[4]; struct matrixinit mi; struct glyph_list_dlg gld; memset(&gld,0,sizeof(gld)); gld.sf = jd->sf; memset(&wattrs,0,sizeof(wattrs)); wattrs.mask = wam_events|wam_cursor|wam_utf8_wtitle|wam_undercursor|wam_isdlg|wam_restrict; wattrs.event_masks = ~(1<<et_charup); wattrs.is_dlg = true; wattrs.restrict_input_to_me = 1; wattrs.undercursor = 1; wattrs.cursor = ct_pointer; wattrs.utf8_window_title = c==1 ? _("Lookups turned ON to extend a line") : c==2 ? _("Lookups turned OFF to extend a line") : c==3 ? _("Lookups which specify the maximum size by which a glyph may grow") : c==4 ? _("Lookups turned ON to shrink a line") : c==5 ? _("Lookups turned OFF to shrink a line") : _("Lookups which specify the maximum size by which a glyph may shrink"); pos.x = pos.y = 0; pos.width =GDrawPointsToPixels(NULL,GGadgetScale(268)); pos.height = GDrawPointsToPixels(NULL,375); gld.gw = gw = GDrawCreateTopWindow(NULL,&pos,lookup_e_h,&gld,&wattrs); LookupMatrixInit(&mi,lookupstr,gld.sf,c); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); memset(&label,0,sizeof(label)); k=j=0; gcd[k].gd.pos.x = 10; gcd[k].gd.pos.y = gcd[1].gd.pos.y+14; gcd[k].gd.flags = gg_enabled | gg_visible | gg_utf8_popup; gcd[k].gd.cid = CID_Lookups; gcd[k].gd.u.matrix = &mi; gcd[k].gd.popup_msg = (unichar_t *) _( "A list of lookup names"); gcd[k].creator = GMatrixEditCreate; varray[j++] = &gcd[k++]; varray[j++] = NULL; gcd[k].gd.pos.x = 30-3; gcd[k].gd.pos.width = -1; gcd[k].gd.pos.height = 0; gcd[k].gd.flags = gg_visible | gg_enabled | gg_but_default; label[k].text = (unichar_t *) _("_OK"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.handle_controlevent = JSTF_Lookup_OK; gcd[k].gd.cid = CID_OK; gcd[k++].creator = GButtonCreate; gcd[k].gd.pos.x = -30; gcd[k].gd.pos.width = -1; gcd[k].gd.pos.height = 0; gcd[k].gd.flags = gg_visible | gg_enabled | gg_but_cancel; label[k].text = (unichar_t *) _("_Cancel"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.handle_controlevent = JSTF_Glyph_Cancel; gcd[k].gd.cid = CID_Cancel; gcd[k++].creator = GButtonCreate; harray3[0] = harray3[2] = harray3[3] = harray3[4] = harray3[6] = GCD_Glue; harray3[7] = NULL; harray3[1] = &gcd[k-2]; harray3[5] = &gcd[k-1]; boxes[0].gd.flags = gg_enabled|gg_visible; boxes[0].gd.u.boxelements = harray3; boxes[0].creator = GHBoxCreate; varray[j++] = &boxes[0]; varray[j++] = NULL; varray[j] = NULL; boxes[1].gd.pos.x = boxes[1].gd.pos.y = 2; boxes[1].gd.flags = gg_enabled|gg_visible; boxes[1].gd.u.boxelements = varray; boxes[1].creator = GHVGroupCreate; GGadgetsCreate(gw,boxes+1); free( mi.matrix_data ); GMatrixEditSetNewText(gcd[0].ret,S_("LookupName|New")); GHVBoxSetExpandableCol(boxes[0].ret,gb_expandgluesame); GHVBoxFitWindow(boxes[1].ret); GDrawSetVisible(gw,true); while ( !gld.done ) GDrawProcessOneEvent(NULL); GDrawDestroyWindow(gw); GTextInfoListFree(lookup_ci[0].enum_vals); lookup_ci[0].enum_vals = NULL; return( gld.ret ); }
static void FVCreateWidth( void *_fv,SplineChar* _sc,void (*doit)(CreateWidthData *), enum widthtype wtype, char *def) { GRect pos; GWindowAttrs wattrs; GGadgetCreateData gcd[11], boxes[2], topbox[2], *hvs[17], *varray[8], *buttons[6]; GTextInfo label[11]; static CreateWidthDlg cwd; static GWindow winds[5]; static char *title[] = { N_("Set Width..."), N_("Set LBearing..."), N_("Set RBearing..."), N_("Set Both Side Bearings..."), N_("Set Vertical Advance...") }; cwd.wd.done = false; cwd.wd._fv = _fv; cwd.wd._sc = _sc; cwd.wd.wtype = wtype; cwd.wd.doit = doit; cwd.gw = winds[wtype]; if ( cwd.gw==NULL ) { memset(&wattrs,0,sizeof(wattrs)); wattrs.mask = wam_events|wam_cursor|wam_utf8_wtitle|wam_undercursor|wam_isdlg|wam_restrict; wattrs.event_masks = ~(1<<et_charup); wattrs.restrict_input_to_me = 1; wattrs.undercursor = 1; wattrs.cursor = ct_pointer; wattrs.utf8_window_title = _(title[wtype]); wattrs.is_dlg = true; pos.x = pos.y = 0; pos.width = GGadgetScale(GDrawPointsToPixels(NULL,180)); pos.height = GDrawPointsToPixels(NULL,100); cwd.gw = winds[wtype] = GDrawCreateTopWindow(NULL,&pos,cwd_e_h,&cwd,&wattrs); memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); label[0].text = (unichar_t *) _(rb1[wtype]); label[0].text_is_1byte = true; gcd[0].gd.label = &label[0]; gcd[0].gd.flags = gg_enabled|gg_visible|gg_cb_on; gcd[0].gd.cid = CID_Set; gcd[0].gd.handle_controlevent = CW_RadioChange; gcd[0].data = (void *) CID_SetVal; gcd[0].creator = GRadioCreate; label[1].text = (unichar_t *) _(rb2[wtype]); label[1].text_is_1byte = true; gcd[1].gd.label = &label[1]; gcd[1].gd.flags = gg_enabled|gg_visible|gg_rad_continueold ; gcd[1].gd.cid = CID_Incr; gcd[1].gd.handle_controlevent = CW_RadioChange; gcd[1].data = (void *) CID_IncrVal; gcd[1].creator = GRadioCreate; label[2].text = (unichar_t *) _(rb3[wtype]); label[2].text_is_1byte = true; gcd[2].gd.label = &label[2]; gcd[2].gd.flags = gg_enabled|gg_visible|gg_rad_continueold ; gcd[2].gd.cid = CID_Scale; gcd[2].gd.handle_controlevent = CW_RadioChange; gcd[2].data = (void *) CID_ScaleVal; gcd[2].creator = GRadioCreate; label[3].text = (unichar_t *) def; label[3].text_is_1byte = true; gcd[3].gd.label = &label[3]; gcd[3].gd.pos.width = 60; gcd[3].gd.flags = gg_enabled|gg_visible; gcd[3].gd.cid = CID_SetVal; gcd[3].gd.handle_controlevent = CW_FocusChange; gcd[3].data = (void *) CID_Set; gcd[3].creator = GTextFieldCreate; label[4].text = (unichar_t *) "0"; label[4].text_is_1byte = true; gcd[4].gd.label = &label[4]; gcd[4].gd.pos.width = 60; gcd[4].gd.flags = gg_enabled|gg_visible; gcd[4].gd.cid = CID_IncrVal; gcd[4].gd.handle_controlevent = CW_FocusChange; gcd[4].data = (void *) CID_Incr; gcd[4].creator = GTextFieldCreate; label[5].text = (unichar_t *) "100"; label[5].text_is_1byte = true; gcd[5].gd.label = &label[5]; gcd[5].gd.pos.width = 60; gcd[5].gd.flags = gg_enabled|gg_visible; gcd[5].gd.cid = CID_ScaleVal; gcd[5].gd.handle_controlevent = CW_FocusChange; gcd[5].data = (void *) CID_Scale; gcd[5].creator = GTextFieldCreate; gcd[6].gd.flags = gg_visible | gg_enabled | gg_but_default; label[6].text = (unichar_t *) _("_OK"); label[6].text_is_1byte = true; label[6].text_in_resource = true; gcd[6].gd.mnemonic = 'O'; gcd[6].gd.label = &label[6]; gcd[6].gd.handle_controlevent = CW_OK; gcd[6].creator = GButtonCreate; gcd[7].gd.flags = gg_visible | gg_enabled | gg_but_cancel; label[7].text = (unichar_t *) _("_Cancel"); label[7].text_is_1byte = true; label[7].text_in_resource = true; gcd[7].gd.label = &label[7]; gcd[7].gd.mnemonic = 'C'; gcd[7].gd.handle_controlevent = CW_Cancel; gcd[7].creator = GButtonCreate; label[8].text = (unichar_t *) S_(info[wtype]); label[8].text_is_1byte = true; gcd[8].gd.label = &label[8]; gcd[8].gd.pos.x = 5; gcd[8].gd.pos.y = 59; gcd[8].gd.flags = gg_enabled|gg_visible ; gcd[8].creator = GLabelCreate; label[9].text = (unichar_t *) "%"; label[9].text_is_1byte = true; gcd[9].gd.label = &label[9]; gcd[9].gd.flags = gg_enabled|gg_visible; gcd[9].creator = GLabelCreate; hvs[0] = &gcd[0]; hvs[1] = &gcd[3]; hvs[2] = GCD_Glue; hvs[3] = NULL; hvs[4] = &gcd[1]; hvs[5] = &gcd[4]; hvs[6] = GCD_Glue; hvs[7] = NULL; hvs[8] = &gcd[2]; hvs[9] = &gcd[5]; hvs[10] = &gcd[9]; hvs[11] = NULL; hvs[12] = &gcd[8]; hvs[13] = GCD_ColSpan; hvs[14] = GCD_Glue; hvs[15] = NULL; hvs[16] = NULL; buttons[0] = buttons[2] = buttons[4] = GCD_Glue; buttons[5] = NULL; buttons[1] = &gcd[6]; buttons[3] = &gcd[7]; varray[0] = &boxes[1]; varray[1] = NULL; varray[2] = GCD_Glue; varray[3] = NULL; varray[4] = &boxes[0]; varray[5] = NULL; varray[6] = NULL; memset(boxes,0,sizeof(boxes)); boxes[0].gd.flags = gg_enabled|gg_visible; boxes[0].gd.u.boxelements = buttons; boxes[0].creator = GHBoxCreate; boxes[1].gd.flags = gg_enabled|gg_visible; boxes[1].gd.u.boxelements = hvs; boxes[1].creator = GHVBoxCreate; memset(topbox,0,sizeof(topbox)); topbox[0].gd.pos.x = topbox[0].gd.pos.y = 2; topbox[0].gd.pos.width = pos.width-4; topbox[0].gd.pos.height = pos.height-4; topbox[0].gd.flags = gg_enabled|gg_visible; topbox[0].gd.u.boxelements = varray; topbox[0].creator = GHVGroupCreate; GGadgetsCreate(cwd.gw,topbox); GHVBoxSetExpandableRow(topbox[0].ret,1); GHVBoxSetExpandableCol(boxes[0].ret,gb_expandgluesame); GHVBoxSetExpandableCol(boxes[1].ret,1); GWidgetIndicateFocusGadget(GWidgetGetControl(cwd.gw,CID_SetVal)); GTextFieldSelect(GWidgetGetControl(cwd.gw,CID_SetVal),0,-1); GHVBoxFitWindow(topbox[0].ret); } else { unichar_t *temp = uc_copy(def); GGadgetSetTitle(GWidgetGetControl(cwd.gw,CID_SetVal),temp); } GWidgetHidePalettes(); GDrawSetVisible(cwd.gw,true); while ( !cwd.wd.done ) GDrawProcessOneEvent(NULL); GDrawSetVisible(cwd.gw,false); }
char *GlyphListDlg(SplineFont *sf, char *glyphstr) { int i, k, j; GRect pos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[4], boxes[3]; GGadgetCreateData *varray[6], *harray3[8]; GTextInfo label[4]; struct matrixinit mi; struct glyph_list_dlg gld; memset(&gld,0,sizeof(gld)); gld.sf = sf; memset(&wattrs,0,sizeof(wattrs)); wattrs.mask = wam_events|wam_cursor|wam_utf8_wtitle|wam_undercursor|wam_isdlg|wam_restrict; wattrs.event_masks = ~(1<<et_charup); wattrs.is_dlg = true; wattrs.restrict_input_to_me = 1; wattrs.undercursor = 1; wattrs.cursor = ct_pointer; wattrs.utf8_window_title = _("Extender Glyphs (kashidas, etc.)"); pos.x = pos.y = 0; pos.width =GDrawPointsToPixels(NULL,GGadgetScale(268)); pos.height = GDrawPointsToPixels(NULL,375); gld.gw = gw = GDrawCreateTopWindow(NULL,&pos,glyph_e_h,&gld,&wattrs); GlyphMatrixInit(&mi,glyphstr,sf); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); memset(&label,0,sizeof(label)); k=j=0; gcd[k].gd.pos.x = 10; gcd[k].gd.pos.y = gcd[1].gd.pos.y+14; gcd[k].gd.flags = gg_enabled | gg_visible | gg_utf8_popup; gcd[k].gd.cid = CID_Glyphs; gcd[k].gd.u.matrix = &mi; gcd[k].gd.popup_msg = (unichar_t *) _( "A list of glyph names"); gcd[k].creator = GMatrixEditCreate; varray[j++] = &gcd[k++]; varray[j++] = NULL; gcd[k].gd.pos.x = 30-3; gcd[k].gd.pos.width = -1; gcd[k].gd.pos.height = 0; gcd[k].gd.flags = gg_visible | gg_enabled | gg_but_default; label[k].text = (unichar_t *) _("_OK"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.handle_controlevent = JSTF_Glyph_OK; gcd[k].gd.cid = CID_OK; gcd[k++].creator = GButtonCreate; gcd[k].gd.pos.x = -30; gcd[k].gd.pos.width = -1; gcd[k].gd.pos.height = 0; gcd[k].gd.flags = gg_visible | gg_enabled | gg_but_cancel; label[k].text = (unichar_t *) _("_Cancel"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.handle_controlevent = JSTF_Glyph_Cancel; gcd[k].gd.cid = CID_Cancel; gcd[k++].creator = GButtonCreate; harray3[0] = harray3[2] = harray3[3] = harray3[4] = harray3[6] = GCD_Glue; harray3[7] = NULL; harray3[1] = &gcd[k-2]; harray3[5] = &gcd[k-1]; boxes[0].gd.flags = gg_enabled|gg_visible; boxes[0].gd.u.boxelements = harray3; boxes[0].creator = GHBoxCreate; varray[j++] = &boxes[0]; varray[j++] = NULL; varray[j] = NULL; boxes[1].gd.pos.x = boxes[1].gd.pos.y = 2; boxes[1].gd.flags = gg_enabled|gg_visible; boxes[1].gd.u.boxelements = varray; boxes[1].creator = GHVGroupCreate; GGadgetsCreate(gw,boxes+1); for ( i=0; i<mi.initial_row_cnt; ++i ) { free( mi.matrix_data[2*i+0].u.md_str ); } free( mi.matrix_data ); GMatrixEditSetNewText(gcd[0].ret,S_("GlyphName|New")); GMatrixEditSetColumnCompletion(gcd[0].ret, 0, JSTF_Glyph_Completion ); GHVBoxSetExpandableCol(boxes[0].ret,gb_expandgluesame); GHVBoxFitWindow(boxes[1].ret); GDrawSetVisible(gw,true); while ( !gld.done ) GDrawProcessOneEvent(NULL); GDrawDestroyWindow(gw); return( gld.ret ); }
void CVReviewHints(CharView *cv) { GRect pos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[18], *harray1[6], *harray2[6], *harray3[6], *harray4[6], *varray[7][2], boxes[8], *barray[6][6]; GTextInfo label[18]; static ReviewHintData hd; int k; hd.done = false; hd.cv = cv; if ( hd.gw==NULL ) { memset(&wattrs,0,sizeof(wattrs)); wattrs.mask = wam_events|wam_cursor|wam_utf8_wtitle|wam_undercursor|wam_isdlg|wam_restrict; wattrs.event_masks = ~(1<<et_charup); wattrs.restrict_input_to_me = 1; wattrs.undercursor = 1; wattrs.cursor = ct_pointer; wattrs.utf8_window_title = _("Review Hints"); wattrs.is_dlg = true; pos.x = pos.y = 0; pos.width = GGadgetScale(GDrawPointsToPixels(NULL,170)); pos.height = GDrawPointsToPixels(NULL,178); hd.gw = gw = GDrawCreateTopWindow(NULL,&pos,rh_e_h,&hd,&wattrs); memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); k=0; label[k].text = (unichar_t *) _("_HStem"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible|gg_cb_on; gcd[k].gd.cid = CID_HStem; gcd[k].gd.handle_controlevent = RH_HVStem; gcd[k].creator = GRadioCreate; harray2[0] = &gcd[k++]; label[k].text = (unichar_t *) _("_VStem"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.cid = CID_VStem; gcd[k].gd.handle_controlevent = RH_HVStem; gcd[k].creator = GRadioCreate; harray2[1] = &gcd[k++]; label[k].text = (unichar_t *) "999/999 hstem3"; label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.cid = CID_Count; gcd[k].creator = GLabelCreate; harray2[2] = GCD_HPad10; harray2[3] = &gcd[k++]; harray2[4] = GCD_Glue; harray2[5] = NULL; label[k].text = (unichar_t *) _("_Move Points"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible|gg_utf8_popup; gcd[k].gd.cid = CID_MovePoints; gcd[k].gd.popup_msg = (unichar_t *) _("When the hint's position is changed\nadjust the postion of any points\nwhich lie on that hint"); gcd[k].creator = GCheckBoxCreate; harray3[0] = &gcd[k++]; harray3[1] = GCD_Glue; harray3[2] = NULL; label[k].text = (unichar_t *) _("_Base:"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 5; gcd[k].gd.pos.y = 14+17+5+3; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].creator = GLabelCreate; harray1[0] = &gcd[k++]; gcd[k].gd.pos.width = 40; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.cid = CID_Base; gcd[k].gd.handle_controlevent = RH_TextChanged; gcd[k].creator = GTextFieldCreate; harray1[1] = &gcd[k++]; label[k].text = (unichar_t *) _("_Size:"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].creator = GLabelCreate; harray1[2] = &gcd[k++]; gcd[k].gd.pos.width = 40; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.cid = CID_Width; gcd[k].gd.handle_controlevent = RH_TextChanged; gcd[k].creator = GTextFieldCreate; harray1[3] = &gcd[k++]; harray1[4] = GCD_Glue; harray1[5] = NULL; gcd[k].gd.flags = gg_visible | gg_enabled; label[k].text = (unichar_t *) "Overlaps another hint"; label[k].text_is_1byte = true; label[k].fg = 0xff0000; label[k].bg = COLOR_DEFAULT; /* Doesn't work, needs to be in box */ gcd[k].gd.label = &label[k]; gcd[k].gd.cid = CID_Overlap; gcd[k].creator = GLabelCreate; harray4[0] = GCD_Glue; harray4[1] = &gcd[k++]; harray4[2] = GCD_Glue; harray4[3] = NULL; gcd[k].gd.flags = gg_visible | gg_enabled; label[k].text = (unichar_t *) _("Cr_eate"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.cid = CID_Add; gcd[k].gd.handle_controlevent = RH_Add; gcd[k].creator = GButtonCreate; barray[0][0] = GCD_Glue; barray[0][1] = &gcd[k++]; barray[0][2] = GCD_Glue; gcd[k].gd.flags = gg_visible | gg_enabled; label[k].text = (unichar_t *) _("Re_move"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.cid = CID_Remove; gcd[k].gd.handle_controlevent = RH_Remove; gcd[k].creator = GButtonCreate; barray[0][3] = &gcd[k++]; barray[0][4] = GCD_Glue; barray[0][5] = NULL; gcd[k].gd.pos.width = 170-10; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].creator = GLineCreate; barray[1][0] = GCD_Glue; barray[1][1] = &gcd[k++]; barray[1][2] = barray[1][3] = GCD_ColSpan; barray[1][4] = GCD_Glue; barray[1][5] = NULL; gcd[k].gd.flags = gg_visible | gg_enabled | gg_utf8_popup; label[k].text = (unichar_t *) _("< _Prev"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.cid = CID_Prev; gcd[k].gd.popup_msg = (unichar_t *) _("Previous Hint."); gcd[k].gd.handle_controlevent = RH_NextPrev; gcd[k].creator = GButtonCreate; barray[2][0] = GCD_Glue; barray[2][1] = &gcd[k++]; barray[2][2] = GCD_Glue; gcd[k].gd.flags = gg_visible | gg_enabled | gg_utf8_popup; label[k].text = (unichar_t *) _("_Next >"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.cid = CID_Next; gcd[k].gd.popup_msg = (unichar_t *) _("Next Hint."); gcd[k].gd.handle_controlevent = RH_NextPrev; gcd[k].creator = GButtonCreate; barray[2][3] = &gcd[k++]; barray[2][4] = GCD_Glue; barray[2][5] = NULL; label[k].text = (unichar_t *) _("Regenerate Hint Substitution Points"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible|gg_cb_on|gg_utf8_popup; gcd[k].gd.cid = CID_RegenHM; gcd[k].gd.popup_msg = (unichar_t *) _("If you have made any changes to the hints,\nthen in addition to changing the glyph's hints\nrefigure it's hint masks and substitution points."); gcd[k].creator = GCheckBoxCreate; barray[3][0] = &gcd[k++]; barray[3][1] = barray[3][2] = barray[3][3] = barray[3][4] = GCD_ColSpan; barray[3][5] = NULL; gcd[k].gd.flags = gg_visible | gg_enabled; label[k].text = (unichar_t *) _("_OK"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.handle_controlevent = RH_OK; gcd[k].creator = GButtonCreate; barray[4][0] = GCD_Glue; barray[4][1] = &gcd[k++]; barray[4][2] = GCD_Glue; gcd[k].gd.flags = gg_visible | gg_enabled | gg_but_cancel; label[k].text = (unichar_t *) _("_Cancel"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.handle_controlevent = RH_Cancel; gcd[k].creator = GButtonCreate; barray[4][3] = &gcd[k++]; barray[4][4] = GCD_Glue; barray[4][5] = NULL; barray[5][0] = NULL; boxes[2].gd.flags = gg_enabled|gg_visible; boxes[2].gd.u.boxelements = harray2; boxes[2].creator = GHBoxCreate; boxes[3].gd.flags = gg_enabled|gg_visible; boxes[3].gd.u.boxelements = harray3; boxes[3].creator = GHBoxCreate; boxes[4].gd.flags = gg_enabled|gg_visible; boxes[4].gd.u.boxelements = harray1; boxes[4].creator = GHBoxCreate; boxes[5].gd.flags = gg_enabled|gg_visible; boxes[5].gd.u.boxelements = harray4; boxes[5].creator = GHBoxCreate; boxes[6].gd.flags = gg_enabled|gg_visible; boxes[6].gd.u.boxelements = barray[0]; boxes[6].creator = GHVBoxCreate; varray[0][0] = &boxes[2]; varray[0][1] = NULL; varray[1][0] = &boxes[3]; varray[1][1] = NULL; varray[2][0] = &boxes[4]; varray[2][1] = NULL; varray[3][0] = &boxes[5]; varray[3][1] = NULL; varray[4][0] = &boxes[6]; varray[4][1] = NULL; varray[5][0] = NULL; boxes[0].gd.pos.x = boxes[0].gd.pos.y = 2; boxes[0].gd.flags = gg_enabled|gg_visible; boxes[0].gd.u.boxelements = varray[0]; boxes[0].gd.cid = CID_TopBox; boxes[0].creator = GHVGroupCreate; GGadgetsCreate(gw,boxes); GHVBoxSetExpandableRow(boxes[0].ret,3); GHVBoxSetExpandableCol(boxes[2].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[3].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[4].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[5].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[6].ret,gb_expandglue); GHVBoxFitWindow(boxes[0].ret); } else { gw = hd.gw; GDrawSetTransientFor(gw,(GWindow) -1); } if ( cv->b.sc->hstem==NULL && cv->b.sc->vstem==NULL ) hd.active = NULL; else if ( cv->b.sc->hstem!=NULL && cv->b.sc->vstem!=NULL ) { if ( GGadgetIsChecked(GWidgetGetControl(gw,CID_HStem))) hd.active = cv->b.sc->hstem; else hd.active = cv->b.sc->vstem; } else if ( cv->b.sc->hstem!=NULL ) { GGadgetSetChecked(GWidgetGetControl(gw,CID_HStem),true); hd.active = cv->b.sc->hstem; } else { GGadgetSetChecked(GWidgetGetControl(gw,CID_VStem),true); hd.active = cv->b.sc->vstem; } hd.ishstem = (hd.active==cv->b.sc->hstem); hd.oldh = StemInfoCopy(cv->b.sc->hstem); hd.oldv = StemInfoCopy(cv->b.sc->vstem); hd.oldmanual = cv->b.sc->manualhints; hd.changed = false; RH_SetupHint(&hd); if ( hd.active!=NULL ) { GWidgetIndicateFocusGadget(GWidgetGetControl(gw,CID_Base)); GTextFieldSelect(GWidgetGetControl(gw,CID_Base),0,-1); } GWidgetHidePalettes(); GDrawSetVisible(gw,true); while ( !hd.done ) GDrawProcessOneEvent(NULL); GDrawSetVisible(gw,false); }
void CVCreateHint(CharView *cv,int ishstem,int preservehints) { GRect pos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[9], *harray1[4], *harray2[9], *barray[7], *varray[5][2], boxes[5]; GTextInfo label[9]; static CreateHintData chd; char buffer[20]; unichar_t ubuf[20]; chd.done = false; chd.ishstem = ishstem; chd.preservehints = preservehints; chd.cv = cv; if ( chd.gw==NULL ) { memset(&wattrs,0,sizeof(wattrs)); wattrs.mask = wam_events|wam_cursor|wam_utf8_wtitle|wam_undercursor|wam_isdlg|wam_restrict; wattrs.event_masks = ~(1<<et_charup); wattrs.restrict_input_to_me = 1; wattrs.undercursor = 1; wattrs.cursor = ct_pointer; wattrs.utf8_window_title = _("Create Hint"); wattrs.is_dlg = true; pos.x = pos.y = 0; pos.width = GGadgetScale(GDrawPointsToPixels(NULL,170)); pos.height = GDrawPointsToPixels(NULL,90); chd.gw = gw = GDrawCreateTopWindow(NULL,&pos,chd_e_h,&chd,&wattrs); memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); label[0].text = (unichar_t *) _("_Base:"); label[0].text_is_1byte = true; label[0].text_in_resource = true; gcd[0].gd.label = &label[0]; gcd[0].gd.pos.x = 5; gcd[0].gd.pos.y = 17+5+6; gcd[0].gd.flags = gg_enabled|gg_visible; gcd[0].creator = GLabelCreate; harray2[0] = GCD_Glue; harray2[1] = &gcd[0]; sprintf( buffer, "%g", (double) (ishstem ? cv->p.cy : cv->p.cx) ); label[1].text = (unichar_t *) buffer; label[1].text_is_1byte = true; gcd[1].gd.label = &label[1]; gcd[1].gd.pos.x = 37; gcd[1].gd.pos.y = 17+5; gcd[1].gd.pos.width = 40; gcd[1].gd.flags = gg_enabled|gg_visible; gcd[1].gd.cid = CID_Base; gcd[1].creator = GTextFieldCreate; harray2[2] = &gcd[1]; label[2].text = (unichar_t *) _("_Size:"); label[2].text_is_1byte = true; label[2].text_in_resource = true; gcd[2].gd.label = &label[2]; gcd[2].gd.pos.x = 90; gcd[2].gd.pos.y = 17+5+6; gcd[2].gd.flags = gg_enabled|gg_visible; gcd[2].creator = GLabelCreate; harray2[3] = GCD_Glue; harray2[4] = &gcd[2]; label[3].text = (unichar_t *) "60"; label[3].text_is_1byte = true; gcd[3].gd.label = &label[3]; gcd[3].gd.pos.x = 120; gcd[3].gd.pos.y = 17+5; gcd[3].gd.pos.width = 40; gcd[3].gd.flags = gg_enabled|gg_visible; gcd[3].gd.cid = CID_Width; gcd[3].creator = GTextFieldCreate; harray2[5] = &gcd[3]; harray2[6] = GCD_Glue; harray2[7] = NULL; gcd[4].gd.pos.x = 20-3; gcd[4].gd.pos.y = 17+37; gcd[4].gd.pos.width = -1; gcd[4].gd.pos.height = 0; gcd[4].gd.flags = gg_visible | gg_enabled | gg_but_default; label[4].text = (unichar_t *) _("_OK"); label[4].text_is_1byte = true; label[4].text_in_resource = true; gcd[4].gd.mnemonic = 'O'; gcd[4].gd.label = &label[4]; gcd[4].gd.handle_controlevent = CH_OK; gcd[4].creator = GButtonCreate; barray[0] = GCD_Glue; barray[1] = &gcd[4]; barray[2] = GCD_Glue; gcd[5].gd.pos.x = -20; gcd[5].gd.pos.y = 17+37+3; gcd[5].gd.pos.width = -1; gcd[5].gd.pos.height = 0; gcd[5].gd.flags = gg_visible | gg_enabled | gg_but_cancel; label[5].text = (unichar_t *) _("_Cancel"); label[5].text_is_1byte = true; label[5].text_in_resource = true; gcd[5].gd.label = &label[5]; gcd[5].gd.mnemonic = 'C'; gcd[5].gd.handle_controlevent = CH_Cancel; gcd[5].creator = GButtonCreate; barray[3] = GCD_Glue; barray[4] = &gcd[5]; barray[5] = GCD_Glue; barray[6] = NULL; label[6].text = (unichar_t *) _("Create Horizontal Stem Hint"); /* Initialize to bigger size */ label[6].text_is_1byte = true; gcd[6].gd.label = &label[6]; gcd[6].gd.pos.x = 17; gcd[6].gd.pos.y = 5; gcd[6].gd.flags = gg_enabled|gg_visible; gcd[6].gd.cid = CID_Label; gcd[6].creator = GLabelCreate; harray1[0] = GCD_Glue; harray1[1] = &gcd[6]; harray1[2] = GCD_Glue; harray1[3] = NULL; gcd[7].gd.pos.x = 5; gcd[7].gd.pos.y = 17+31; gcd[7].gd.pos.width = 170-10; gcd[7].gd.flags = gg_enabled|gg_visible; gcd[7].creator = GLineCreate; boxes[2].gd.flags = gg_enabled|gg_visible; boxes[2].gd.u.boxelements = harray1; boxes[2].creator = GHBoxCreate; boxes[3].gd.flags = gg_enabled|gg_visible; boxes[3].gd.u.boxelements = harray2; boxes[3].creator = GHBoxCreate; boxes[4].gd.flags = gg_enabled|gg_visible; boxes[4].gd.u.boxelements = barray; boxes[4].creator = GHBoxCreate; varray[0][0] = &boxes[2]; varray[0][1] = NULL; varray[1][0] = &boxes[3]; varray[1][1] = NULL; varray[2][0] = &gcd[7]; varray[2][1] = NULL; varray[3][0] = &boxes[4]; varray[3][1] = NULL; varray[4][0] = NULL; boxes[0].gd.pos.x = boxes[0].gd.pos.y = 2; boxes[0].gd.flags = gg_enabled|gg_visible; boxes[0].gd.u.boxelements = varray[0]; boxes[0].creator = GHVGroupCreate; GGadgetsCreate(gw,boxes); GHVBoxSetExpandableCol(boxes[2].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[3].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[4].ret,gb_expandgluesame); GHVBoxFitWindow(boxes[0].ret); } else { gw = chd.gw; sprintf( buffer, "%g", (double) (ishstem ? cv->p.cy : cv->p.cx) ); uc_strcpy(ubuf,buffer); GGadgetSetTitle(GWidgetGetControl(gw,CID_Base),ubuf); GDrawSetTransientFor(gw,(GWindow) -1); } GGadgetSetTitle8(GWidgetGetControl(gw,CID_Label), ishstem ? _("Create Horizontal Stem Hint") : _("Create Vertical Stem Hint")); GWidgetIndicateFocusGadget(GWidgetGetControl(gw,CID_Base)); GTextFieldSelect(GWidgetGetControl(gw,CID_Base),0,-1); GWidgetHidePalettes(); GDrawSetVisible(gw,true); while ( !chd.done ) GDrawProcessOneEvent(NULL); GDrawSetVisible(gw,false); }
static int glist_key(GGadget *g, GEvent *event) { GList *gl = (GList *) g; uint16 keysym = event->u.chr.keysym; int sofar_pos = gl->sofar_pos; int loff, xoff, sel=-1; int refresh = false; if ( event->type == et_charup ) return( false ); if ( !g->takes_input || (g->state!=gs_enabled && g->state!=gs_active && g->state!=gs_focused )) return(false ); if ( gl->ispopup && event->u.chr.keysym == GK_Return ) { GListDoubleClick(gl,false,-1); return( true ); } else if ( gl->ispopup && event->u.chr.keysym == GK_Escape ) { GListClose(gl); return( true ); } if ( event->u.chr.keysym == GK_Return || event->u.chr.keysym == GK_Tab || event->u.chr.keysym == GK_BackTab || event->u.chr.keysym == GK_Escape ) return( false ); GDrawCancelTimer(gl->enduser); gl->enduser = NULL; gl->sofar_pos = 0; loff = 0x80000000; xoff = 0x80000000; sel = -1; if ( keysym == GK_Home || keysym == GK_KP_Home || keysym == GK_Begin || keysym == GK_KP_Begin ) { loff = -gl->loff; xoff = -gl->xoff; sel = 0; } else if ( keysym == GK_End || keysym == GK_KP_End ) { loff = GListTopInWindow(gl,gl->ltot-1)-gl->loff; xoff = -gl->xoff; sel = gl->ltot-1; } else if ( keysym == GK_Up || keysym == GK_KP_Up ) { if (( sel = GListGetFirstSelPos(&gl->g)-1 )<0 ) { /*if ( gl->loff!=0 ) loff = -1; else loff = 0;*/ sel = 0; } } else if ( keysym == GK_Down || keysym == GK_KP_Down ) { if (( sel = GListGetFirstSelPos(&gl->g))!= -1 ) ++sel; else /*if ( gl->loff + GListLinesInWindow(gl,gl->loff)<gl->ltot ) loff = 1; else loff = 0;*/ sel = 0; } else if ( keysym == GK_Left || keysym == GK_KP_Left ) { xoff = -GDrawPointsToPixels(gl->g.base,6); } else if ( keysym == GK_Right || keysym == GK_KP_Right ) { xoff = GDrawPointsToPixels(gl->g.base,6); } else if ( keysym == GK_Page_Up || keysym == GK_KP_Page_Up ) { loff = GListTopInWindow(gl,gl->loff); if ( loff == gl->loff ) /* Normally we leave one line in window from before, except if only one line fits */ loff = GListTopInWindow(gl,gl->loff-1); loff -= gl->loff; if (( sel = GListGetFirstSelPos(&gl->g))!= -1 ) { if (( sel += loff )<0 ) sel = 0; } } else if ( keysym == GK_Page_Down || keysym == GK_KP_Page_Down ) { loff = GListLinesInWindow(gl,gl->loff)-1; if ( loff<=0 ) loff = 1; if ( loff + gl->loff >= gl->ltot ) loff = GListTopInWindow(gl,gl->ltot-1)-gl->loff; if (( sel = GListGetFirstSelPos(&gl->g))!= -1 ) { if (( sel += loff )>=gl->ltot ) sel = gl->ltot-1; } } else if ( keysym == GK_BackSpace && gl->orderer ) { /* ordered lists may be reversed by typing backspace */ gl->backwards = !gl->backwards; GListOrderIt(gl); sel = GListGetFirstSelPos(&gl->g); if ( sel!=-1 ) { int top = GListTopInWindow(gl,gl->ltot-1); gl->loff = sel-1; if ( gl->loff > top ) gl->loff = top; if ( sel-1<0 ) gl->loff = 0; } GScrollBarSetPos(&gl->vsb->g,gl->loff); _ggadget_redraw(&gl->g); return( true ); } else if ( event->u.chr.chars[0]!='\0' && gl->orderer ) { int len = u_strlen(event->u.chr.chars); if ( sofar_pos+len >= gl->sofar_max ) { if ( gl->sofar_max == 0 ) gl->sofar = galloc((gl->sofar_max = len+10) * sizeof(unichar_t)); else gl->sofar = grealloc(gl->sofar,(gl->sofar_max = sofar_pos+len+10)*sizeof(unichar_t)); } u_strcpy(gl->sofar+sofar_pos,event->u.chr.chars); gl->sofar_pos = sofar_pos + len; sel = GListFindPosition(gl,gl->sofar); gl->enduser = GDrawRequestTimer(gl->g.base,GListTypeTime,0,NULL); } if ( loff==0x80000000 && sel>=0 ) { if ( sel>=gl->ltot ) sel = gl->ltot-1; if ( sel<gl->loff ) loff = sel-gl->loff; else if ( sel>=gl->loff+GListLinesInWindow(gl,gl->loff) ) loff = sel-(gl->loff+GListLinesInWindow(gl,gl->loff)-1); } else sel = -1; if ( sel!=-1 ) { int wassel = gl->ti[sel]->selected; refresh = GListAnyOtherSels(gl,sel) || !wassel; GListSelectOne(&gl->g,sel); if ( refresh ) GListSelected(gl,false,sel); } if ( loff!=0x80000000 || xoff!=0x80000000 ) { if ( loff==0x80000000 ) loff = 0; if ( xoff==0x80000000 ) xoff = 0; GListScrollBy(gl,loff,xoff); } if ( refresh ) _ggadget_redraw(g); if ( loff!=0x80000000 || xoff!=0x80000000 || sel!=-1 ) return( true ); return( false ); }
void FVAutoWidth2(FontView *fv) { struct widthinfo wi; GWindow gw; GWindowAttrs wattrs; GRect pos; GGadgetCreateData *harray1[4], *harray2[6], *harray3[6], *barray[9], *varray[14]; GGadgetCreateData gcd[29], boxes[6]; GTextInfo label[29]; int i,v; char sepbuf[20], minbuf[20], maxbuf[20], hbuf[20], lbuf[20]; SplineFont *sf = fv->b.sf; double emsize = (sf->ascent + sf->descent); memset(&wi,0,sizeof(wi)); wi.fv = fv; wi.sf = sf; memset(&wattrs,0,sizeof(wattrs)); wattrs.mask = wam_events|wam_cursor|wam_utf8_wtitle|wam_undercursor|wam_restrict|wam_isdlg; wattrs.event_masks = ~(1<<et_charup); wattrs.restrict_input_to_me = 1; wattrs.is_dlg = 1; wattrs.undercursor = 1; wattrs.cursor = ct_pointer; wattrs.utf8_window_title = _("Auto Width"); pos.x = pos.y = 0; pos.width = GGadgetScale(GDrawPointsToPixels(NULL,200)); pos.height = GDrawPointsToPixels(NULL,180); wi.gw = gw = GDrawCreateTopWindow(NULL,&pos,AW2_e_h,&wi,&wattrs); memset(&label,0,sizeof(label)); memset(&boxes,0,sizeof(boxes)); memset(&gcd,0,sizeof(gcd)); i = v = 0; label[i].text = (unichar_t *) _( "FontForge will attempt to adjust the left and right\n" "sidebearings of the selected glyphs so that the average\n" "separation between glyphs in a script will be the\n" "specified amount. You may also specify a minimum and\n" "maximum value for each glyph's sidebearings." ); label[i].text_is_1byte = true; gcd[i].gd.label = &label[i]; gcd[i].gd.pos.x = 5; gcd[i].gd.pos.y = 6; gcd[i].gd.flags = gg_visible | gg_enabled; gcd[i++].creator = GLabelCreate; varray[v++] = &gcd[i-1]; varray[v++] = NULL; label[i].text = (unichar_t *) _( "_Separation:" ); 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 = 6; gcd[i].gd.flags = gg_visible | gg_enabled; gcd[i++].creator = GLabelCreate; harray1[0] = &gcd[i-1]; if ( sf->width_separation>0 ) sprintf( sepbuf, "%d", sf->width_separation ); else sprintf( sepbuf, "%d", (int) rint( width_separation * emsize / width_last_em_size )); label[i].text = (unichar_t *) sepbuf; label[i].text_is_1byte = true; gcd[i].gd.label = &label[i]; gcd[i].gd.pos.x = 5; gcd[i].gd.pos.y = 6; gcd[i].gd.flags = gg_visible | gg_enabled; gcd[i].gd.cid = CID_Separation; gcd[i++].creator = GTextFieldCreate; harray1[1] = &gcd[i-1]; harray1[2] = GCD_Glue; harray1[3] = NULL; boxes[2].gd.flags = gg_enabled|gg_visible; boxes[2].gd.u.boxelements = harray1; boxes[2].creator = GHBoxCreate; varray[v++] = &boxes[2]; varray[v++] = NULL; label[i].text = (unichar_t *) _( "_Min:" ); 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 = 6; gcd[i].gd.flags = gg_visible | gg_enabled; gcd[i++].creator = GLabelCreate; harray2[0] = &gcd[i-1]; #define PI 3.1415926535897932 if ( sf->italicangle<0 ) sprintf( minbuf, "%d", (int) rint( sf->descent*tan(sf->italicangle*PI/180 )) ); else if ( sf->italicangle>0 ) sprintf( minbuf, "%d", (int) -rint( sf->ascent*tan(sf->italicangle*PI/180 )) ); else sprintf( minbuf, "%d", (int) rint( width_min_side_bearing * emsize / width_last_em_size )); label[i].text = (unichar_t *) minbuf; label[i].text_is_1byte = true; gcd[i].gd.label = &label[i]; gcd[i].gd.pos.x = 5; gcd[i].gd.pos.y = 6; gcd[i].gd.flags = gg_visible | gg_enabled; gcd[i].gd.cid = CID_MinSep; gcd[i++].creator = GTextFieldCreate; harray2[1] = &gcd[i-1]; label[i].text = (unichar_t *) _( "Ma_x:" ); 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 = 6; gcd[i].gd.flags = gg_visible | gg_enabled; gcd[i++].creator = GLabelCreate; harray2[2] = &gcd[i-1]; sprintf( maxbuf, "%d", (int) rint( width_max_side_bearing * emsize / width_last_em_size )); label[i].text = (unichar_t *) maxbuf; label[i].text_is_1byte = true; gcd[i].gd.label = &label[i]; gcd[i].gd.pos.x = 5; gcd[i].gd.pos.y = 6; gcd[i].gd.flags = gg_visible | gg_enabled; gcd[i].gd.cid = CID_MaxSep; gcd[i++].creator = GTextFieldCreate; harray2[3] = &gcd[i-1]; harray2[4] = GCD_Glue; harray2[5] = NULL; boxes[3].gd.flags = gg_enabled|gg_visible; boxes[3].gd.u.boxelements = harray2; boxes[3].creator = GHBoxCreate; varray[v++] = &boxes[3]; varray[v++] = NULL; label[i].text = (unichar_t *) _( "_Height:" ); 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 = 6; gcd[i].gd.flags = /* gg_visible |*/ gg_enabled; gcd[i++].creator = GLabelCreate; harray3[0] = &gcd[i-1]; sprintf( hbuf, "%d", (int) rint( width_chunk_height * emsize / width_last_em_size )); label[i].text = (unichar_t *) hbuf; label[i].text_is_1byte = true; gcd[i].gd.label = &label[i]; gcd[i].gd.pos.x = 5; gcd[i].gd.pos.y = 6; gcd[i].gd.flags = /* gg_visible |*/ gg_enabled; gcd[i].gd.cid = CID_Height; gcd[i++].creator = GTextFieldCreate; harray3[1] = &gcd[i-1]; label[i].text = (unichar_t *) _( "_Loops:" ); 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 = 6; gcd[i].gd.flags = /* gg_visible |*/ gg_enabled; gcd[i++].creator = GLabelCreate; harray3[2] = &gcd[i-1]; sprintf( lbuf, "%d", (int) rint( width_loop_cnt * emsize / width_last_em_size )); label[i].text = (unichar_t *) lbuf; label[i].text_is_1byte = true; gcd[i].gd.label = &label[i]; gcd[i].gd.pos.x = 5; gcd[i].gd.pos.y = 6; gcd[i].gd.flags = /* gg_visible |*/ gg_enabled; gcd[i].gd.cid = CID_Loop; gcd[i++].creator = GTextFieldCreate; harray3[3] = &gcd[i-1]; harray3[4] = GCD_Glue; harray3[5] = NULL; boxes[4].gd.flags = gg_enabled/*|gg_visible*/; boxes[4].gd.u.boxelements = harray3; boxes[4].creator = GHBoxCreate; varray[v++] = &boxes[4]; varray[v++] = NULL; gcd[i].gd.flags = gg_visible | gg_enabled | gg_but_default; label[i].text = (unichar_t *) _("_OK"); label[i].text_is_1byte = true; label[i].text_in_resource = true; gcd[i].gd.label = &label[i]; gcd[i].gd.handle_controlevent = AW2_OK; gcd[i++].creator = GButtonCreate; barray[0] = GCD_Glue; barray[1] = &gcd[i-1]; barray[2] = GCD_Glue; gcd[i].gd.flags = gg_visible | gg_enabled | gg_but_cancel; label[i].text = (unichar_t *) _("_Cancel"); label[i].text_is_1byte = true; label[i].text_in_resource = true; gcd[i].gd.label = &label[i]; gcd[i].gd.handle_controlevent = AW2_Cancel; gcd[i++].creator = GButtonCreate; barray[3] = barray[4] = GCD_Glue; barray[5] = &gcd[i-1]; barray[6] = GCD_Glue; barray[7] = NULL; boxes[5].gd.flags = gg_enabled|gg_visible; boxes[5].gd.u.boxelements = barray; boxes[5].creator = GHBoxCreate; varray[v++] = GCD_Glue; varray[v++] = NULL; varray[v++] = &boxes[5]; varray[v++] = NULL; varray[v++] = NULL; boxes[0].gd.pos.x = gcd[i].gd.pos.y = 2; boxes[0].gd.flags = gg_enabled|gg_visible; boxes[0].gd.u.boxelements = varray; boxes[0].creator = GHVGroupCreate; GGadgetsCreate(gw,boxes); GHVBoxSetExpandableRow(boxes[0].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[2].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[3].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[4].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[5].ret,gb_expandgluesame); GHVBoxFitWindow(boxes[0].ret); GWidgetIndicateFocusGadget(gcd[2].ret); GTextFieldSelect(gcd[2].ret,0,-1); GWidgetHidePalettes(); GDrawSetVisible(gw,true); while ( !wi.done ) GDrawProcessOneEvent(NULL); GDrawDestroyWindow(gw); }
SearchView *SVCreate(FontView *fv) { SearchView *sv; GRect pos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[14], boxes[6], *butarray[14], *allowarray[6], *fudgearray[4], *halfarray[3], *varray[14]; GTextInfo label[14]; FontRequest rq; int as, ds, ld; char fudgebuf[20]; int k, sel_pos, efdo_pos; static GFont *plainfont = NULL, *boldfont=NULL; if ( searcher!=NULL ) { if ( SVAttachFV(fv,true)) { GDrawSetVisible(fv->sv->gw,true); GDrawRaise(fv->sv->gw); return( searcher ); } else return( NULL ); } searcher = sv = SVFillup( gcalloc(1,sizeof(SearchView)), fv ); memset(&wattrs,0,sizeof(wattrs)); wattrs.mask = wam_events|wam_cursor|wam_isdlg/*|wam_icon*/; wattrs.is_dlg = true; wattrs.event_masks = -1; wattrs.event_masks = -1; wattrs.cursor = ct_pointer; /*wattrs.icon = icon;*/ pos.width = 600; pos.height = 400; pos.x = GGadgetScale(104)+6; DefaultY(&pos); sv->gw = gw = GDrawCreateTopWindow(NULL,&pos,sv_e_h,&sv->cv_srch,&wattrs); SVSetTitle(sv); if ( plainfont==NULL ) { memset(&rq,0,sizeof(rq)); rq.utf8_family_name = SANS_UI_FAMILIES; rq.point_size = 12; rq.weight = 400; plainfont = GDrawInstanciateFont(NULL,&rq); plainfont = GResourceFindFont("SearchView.Font",plainfont); GDrawDecomposeFont(plainfont, &rq); rq.weight = 700; boldfont = GDrawInstanciateFont(NULL,&rq); boldfont = GResourceFindFont("SearchView.BoldFont",boldfont); } sv->plain = plainfont; sv->bold = boldfont; GDrawWindowFontMetrics(sv->gw,sv->plain,&as,&ds,&ld); sv->fh = as+ds; sv->as = as; SVCharViewInits(sv); memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); k=0; label[k].text = (unichar_t *) _("Allow:"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 5; gcd[k].gd.pos.y = GDrawPixelsToPoints(NULL,sv->cv_y+sv->cv_height+8); gcd[k].gd.flags = gg_enabled|gg_visible|gg_utf8_popup; gcd[k].gd.cid = CID_Allow; gcd[k].gd.popup_msg = (unichar_t *) _("Allow a match even if the search pattern has\nto be transformed by a combination of the\nfollowing transformations."); gcd[k].creator = GLabelCreate; allowarray[k] = &gcd[k]; ++k; label[k].text = (unichar_t *) _("Flipping"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 35; gcd[k].gd.pos.y = gcd[0].gd.pos.y-3; gcd[k].gd.flags = gg_enabled|gg_visible|gg_cb_on|gg_utf8_popup; gcd[k].gd.cid = CID_Flipping; gcd[k].gd.popup_msg = (unichar_t *) _("Allow a match even if the search pattern has\nto be transformed by a combination of the\nfollowing transformations."); gcd[k].creator = GCheckBoxCreate; allowarray[k] = &gcd[k]; ++k; label[k].text = (unichar_t *) _("Scaling"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 100; gcd[k].gd.pos.y = gcd[1].gd.pos.y; gcd[k].gd.flags = gg_enabled|gg_visible|gg_utf8_popup; gcd[k].gd.cid = CID_Scaling; gcd[k].gd.popup_msg = (unichar_t *) _("Allow a match even if the search pattern has\nto be transformed by a combination of the\nfollowing transformations."); gcd[k].creator = GCheckBoxCreate; allowarray[k] = &gcd[k]; ++k; label[k].text = (unichar_t *) _("Rotating"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 170; gcd[k].gd.pos.y = gcd[1].gd.pos.y; gcd[k].gd.flags = gg_enabled|gg_visible|gg_utf8_popup; gcd[k].gd.cid = CID_Rotating; gcd[k].gd.popup_msg = (unichar_t *) _("Allow a match even if the search pattern has\nto be transformed by a combination of the\nfollowing transformations."); gcd[k].creator = GCheckBoxCreate; allowarray[k] = &gcd[k]; allowarray[++k] = GCD_Glue; allowarray[5] = NULL; label[k].text = (unichar_t *) _("_Match Fuzziness:"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].creator = GLabelCreate; fudgearray[0] = &gcd[k++]; sprintf(fudgebuf,"%g",old_fudge); label[k].text = (unichar_t *) fudgebuf; label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.cid = CID_Fuzzy; gcd[k].creator = GTextFieldCreate; fudgearray[1] = &gcd[k++]; fudgearray[2] = GCD_Glue; fudgearray[3] = NULL; efdo_pos = k; label[k].text = (unichar_t *) _("Endpoints specify minimum length and direction only"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 5; gcd[k].gd.pos.y = gcd[1].gd.pos.y+18; gcd[k].gd.flags = gg_enabled|gg_visible|gg_utf8_popup; gcd[k].gd.cid = CID_Endpoints; gcd[k].gd.popup_msg = (unichar_t *) _( "If the search pattern is a single open contour\n" "then do not match the end points. They merely\n" "specify the direction from which the curve should\n" "move toward the next point (which will be matched),\n" "and the minimum distance between the first matched\n" "point and the one before it. The endpoints of the\n" "replace contour will also only be used for positioning.\n" "\n" "This allows you to match a right angle corner\n" "without needed to specify exactly how long the edges\n" "are which form the right angle."); gcd[k++].creator = GCheckBoxCreate; sel_pos = k; label[k].text = (unichar_t *) _("Search Selected Chars Only"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 5; gcd[k].gd.pos.y = gcd[1].gd.pos.y+18; gcd[k].gd.flags = gg_enabled|gg_visible|gg_utf8_popup; gcd[k].gd.cid = CID_Selected; gcd[k].gd.popup_msg = (unichar_t *) _("Only search characters selected in the fontview.\nNormally we search all characters in the font."); gcd[k++].creator = GCheckBoxCreate; label[k].text = (unichar_t *) _("Find Next"); /* Start with this to allow sufficient space */ label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 5; gcd[k].gd.pos.y = gcd[sel_pos].gd.pos.y+24; gcd[k].gd.flags = gg_visible|gg_but_default; gcd[k].gd.cid = CID_Find; gcd[k].gd.handle_controlevent = SV_Find; gcd[k].creator = GButtonCreate; butarray[0] = GCD_Glue; butarray[1] = GCD_Glue; butarray[2] = &gcd[k++]; label[k].text = (unichar_t *) _("Find All"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 0; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+3; gcd[k].gd.flags = gg_visible; gcd[k].gd.cid = CID_FindAll; gcd[k].gd.handle_controlevent = SV_FindAll; gcd[k].creator = GButtonCreate; butarray[3] = GCD_Glue; butarray[4] = &gcd[k++]; label[k].text = (unichar_t *) _("Replace"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 0; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y; gcd[k].gd.flags = gg_visible; gcd[k].gd.cid = CID_Replace; gcd[k].gd.handle_controlevent = SV_RplFind; gcd[k].creator = GButtonCreate; butarray[5] = GCD_Glue; butarray[6] = &gcd[k++]; label[k].text = (unichar_t *) _("Replace All"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 0; gcd[k].gd.pos.y = gcd[k-2].gd.pos.y; gcd[k].gd.flags = gg_visible; gcd[k].gd.cid = CID_ReplaceAll; gcd[k].gd.handle_controlevent = SV_RplAll; gcd[k].creator = GButtonCreate; butarray[7] = GCD_Glue; butarray[8] = &gcd[k++]; label[k].text = (unichar_t *) _("_Cancel"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 0; gcd[k].gd.pos.y = gcd[k-3].gd.pos.y; gcd[k].gd.flags = gg_enabled|gg_visible|gg_but_cancel; gcd[k].gd.cid = CID_Cancel; gcd[k].gd.handle_controlevent = SV_Cancel; gcd[k].creator = GButtonCreate; butarray[9] = GCD_Glue; butarray[10] = &gcd[k++]; butarray[11] = GCD_Glue; butarray[12] = GCD_Glue; butarray[13] = NULL; boxes[2].gd.flags = gg_enabled|gg_visible; boxes[2].gd.u.boxelements = allowarray; boxes[2].creator = GHBoxCreate; boxes[3].gd.flags = gg_enabled|gg_visible; boxes[3].gd.u.boxelements = fudgearray; boxes[3].creator = GHBoxCreate; halfarray[0] = &boxes[2]; halfarray[1] = &boxes[3]; halfarray[2] = NULL; boxes[4].gd.flags = gg_enabled|gg_visible; boxes[4].gd.u.boxelements = halfarray; boxes[4].creator = GHBoxCreate; boxes[5].gd.flags = gg_enabled|gg_visible; boxes[5].gd.u.boxelements = butarray; boxes[5].creator = GHBoxCreate; varray[0] = GCD_Glue; varray[1] = NULL; varray[2] = &boxes[4]; varray[3] = NULL; varray[4] = &gcd[efdo_pos]; varray[5] = NULL; varray[6] = GCD_Glue; varray[7] = NULL; varray[8] = &gcd[sel_pos]; varray[9] = NULL; varray[10] = &boxes[5]; varray[11]= NULL; varray[12] = NULL; boxes[0].gd.pos.x = boxes[0].gd.pos.y = 2; boxes[0].gd.flags = gg_enabled|gg_visible; boxes[0].gd.u.boxelements = varray; boxes[0].gd.cid = CID_TopBox; boxes[0].creator = GHVGroupCreate; GGadgetsCreate(gw,boxes); GHVBoxSetExpandableRow(boxes[0].ret,0); GHVBoxSetPadding(boxes[2].ret,6,3); GHVBoxSetExpandableCol(boxes[2].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[3].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[5].ret,gb_expandglue); GGadgetResize(boxes[0].ret,pos.width,pos.height); GGadgetSetTitle8(GWidgetGetControl(gw,CID_Find),_("Find")); sv->showsfindnext = false; GDrawRequestTimer(gw,1000,1000,NULL); sv->button_height = GDrawPointsToPixels(gw,100); GDrawResize(gw,650,400); /* Force a resize event */ GDrawSetVisible(sv->gw,true); return( sv ); }
void SFBdfProperties(SplineFont *sf, EncMap *map, BDFFont *thisone) { struct bdf_dlg bd; int i; BDFFont *bdf; GTextInfo *ti; char buffer[40]; char title[130]; GRect pos, subpos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[10]; GTextInfo label[9]; FontRequest rq; static GFont *font = NULL; extern int _GScrollBar_Width; int sbwidth; static unichar_t sans[] = { 'h','e','l','v','e','t','i','c','a',',','c','l','e','a','r','l','y','u',',','u','n','i','f','o','n','t', '\0' }; static GBox small = { 0 }; GGadgetData gd; /* I don't use a MatrixEdit here because I want to be able to display */ /* non-standard properties. And a MatrixEdit can only disply things in */ /* its pull-down list */ memset(&bd,0,sizeof(bd)); bd.map = map; bd.sf = sf; for ( bdf = sf->bitmaps, i=0; bdf!=NULL; bdf=bdf->next, ++i ); if ( i==0 ) return; bd.fcnt = i; bd.fonts = gcalloc(i,sizeof(struct bdf_dlg_font)); bd.cur = &bd.fonts[0]; for ( bdf = sf->bitmaps, i=0; bdf!=NULL; bdf=bdf->next, ++i ) { bd.fonts[i].bdf = bdf; bd.fonts[i].old_prop_cnt = bdf->prop_cnt; bd.fonts[i].old_props = BdfPropsCopy(bdf->props,bdf->prop_cnt); bd.fonts[i].sel_prop = -1; bdf->prop_max = bdf->prop_cnt; if ( bdf==thisone ) bd.cur = &bd.fonts[i]; } ti = gcalloc((i+1),sizeof(GTextInfo)); for ( bdf = sf->bitmaps, i=0; bdf!=NULL; bdf=bdf->next, ++i ) { if ( bdf->clut==NULL ) sprintf( buffer, "%d", bdf->pixelsize ); else sprintf( buffer, "%d@%d", bdf->pixelsize, BDFDepth(bdf)); ti[i].text = (unichar_t *) copy(buffer); ti[i].text_is_1byte = true; } ti[bd.cur-bd.fonts].selected = true; memset(&wattrs,0,sizeof(wattrs)); wattrs.mask = wam_events|wam_cursor|wam_utf8_wtitle|wam_undercursor|wam_isdlg|wam_restrict; wattrs.event_masks = ~(1<<et_charup); wattrs.is_dlg = true; wattrs.restrict_input_to_me = 1; wattrs.undercursor = 1; wattrs.cursor = ct_pointer; snprintf(title,sizeof(title),_("Strike Information for %.90s"), sf->fontname); wattrs.utf8_window_title = title; pos.x = pos.y = 0; pos.width = GDrawPointsToPixels(NULL,GGadgetScale(268)); pos.height = GDrawPointsToPixels(NULL,375); bd.gw = gw = GDrawCreateTopWindow(NULL,&pos,bdfp_e_h,&bd,&wattrs); sbwidth = GDrawPointsToPixels(bd.gw,_GScrollBar_Width); subpos.x = 0; subpos.y = GDrawPointsToPixels(NULL,28); subpos.width = pos.width-sbwidth; subpos.height = pos.height - subpos.y - GDrawPointsToPixels(NULL,70); wattrs.mask = wam_events; bd.v = GWidgetCreateSubWindow(gw,&subpos,bdfpv_e_h,&bd,&wattrs); bd.vwidth = subpos.width; bd.vheight = subpos.height; bd.width = pos.width; bd.height = pos.height; bd.value_x = GDrawPointsToPixels(bd.gw,135); if ( font==NULL ) { memset(&rq,0,sizeof(rq)); rq.family_name = sans; rq.point_size = 10; rq.weight = 400; font = GDrawInstanciateFont(GDrawGetDisplayOfWindow(gw),&rq); font = GResourceFindFont("BDFProperties.Font",font); } bd.font = font; { int as, ds, ld; GDrawFontMetrics(bd.font,&as,&ds,&ld); bd.as = as; bd.fh = as+ds; } memset(gcd,0,sizeof(gcd)); memset(label,0,sizeof(label)); i=0; gcd[i].gd.pos.x = 10; gcd[i].gd.pos.y = 3; gcd[i].gd.flags = gg_visible | gg_enabled; gcd[i].gd.u.list = ti; gcd[i].gd.handle_controlevent = BdfP_ChangeBDF; gcd[i++].creator = GListButtonCreate; gcd[i].gd.pos.x = bd.vwidth; gcd[i].gd.pos.y = subpos.y-1; gcd[i].gd.pos.width = sbwidth; gcd[i].gd.pos.height = subpos.height+2; gcd[i].gd.flags = gg_visible | gg_enabled | gg_sb_vert | gg_pos_in_pixels; gcd[i].gd.handle_controlevent = _BdfP_VScroll; gcd[i++].creator = GScrollBarCreate; label[i].text = (unichar_t *) _("Delete"); label[i].text_is_1byte = true; gcd[i].gd.label = &label[i]; gcd[i].gd.pos.x = 4; gcd[i].gd.pos.y = GDrawPixelsToPoints(gw,subpos.y+subpos.height)+6; gcd[i].gd.flags = gg_visible | gg_enabled ; gcd[i].gd.handle_controlevent = BdfP_DeleteCurrent; gcd[i].gd.cid = CID_Delete; gcd[i++].creator = GButtonCreate; label[i].text = (unichar_t *) _("Default All"); label[i].text_is_1byte = true; gcd[i].gd.label = &label[i]; gcd[i].gd.pos.x = 80; gcd[i].gd.pos.y = gcd[i-1].gd.pos.y; gcd[i].gd.flags = gg_visible | gg_enabled ; gcd[i].gd.handle_controlevent = BdfP_DefaultAll; gcd[i].gd.cid = CID_DefAll; gcd[i++].creator = GButtonCreate; label[i].text = (unichar_t *) _("Default This"); label[i].text_is_1byte = true; gcd[i].gd.label = &label[i]; gcd[i].gd.pos.y = gcd[i-1].gd.pos.y; gcd[i].gd.flags = gg_visible | gg_enabled ; gcd[i].gd.handle_controlevent = BdfP_DefaultCurrent; gcd[i].gd.cid = CID_DefCur; gcd[i++].creator = GButtonCreate; /* I want the 2 pronged arrow, but gdraw can't find a nice one */ /* label[i].text = (unichar_t *) "⇑"; *//* Up Arrow */ label[i].text = (unichar_t *) "↑"; /* Up Arrow */ label[i].text_is_1byte = true; gcd[i].gd.label = &label[i]; gcd[i].gd.pos.y = gcd[i-1].gd.pos.y; gcd[i].gd.flags = gg_visible | gg_enabled ; gcd[i].gd.handle_controlevent = BdfP_Up; gcd[i].gd.cid = CID_Up; gcd[i++].creator = GButtonCreate; /* I want the 2 pronged arrow, but gdraw can't find a nice one */ /* label[i].text = (unichar_t *) "⇓"; *//* Down Arrow */ label[i].text = (unichar_t *) "↓"; /* Down Arrow */ label[i].text_is_1byte = true; gcd[i].gd.label = &label[i]; gcd[i].gd.pos.y = gcd[i-1].gd.pos.y; gcd[i].gd.flags = gg_visible | gg_enabled ; gcd[i].gd.handle_controlevent = BdfP_Down; gcd[i].gd.cid = CID_Down; gcd[i++].creator = GButtonCreate; gcd[i].gd.pos.x = 30-3; gcd[i].gd.pos.y = GDrawPixelsToPoints(NULL,pos.height)-32-3; gcd[i].gd.pos.width = -1; gcd[i].gd.pos.height = 0; gcd[i].gd.flags = gg_visible | gg_enabled | gg_but_default; label[i].text = (unichar_t *) _("_OK"); label[i].text_is_1byte = true; label[i].text_in_resource = true; gcd[i].gd.label = &label[i]; gcd[i].gd.handle_controlevent = BdfP_OK; gcd[i].gd.cid = CID_OK; gcd[i++].creator = GButtonCreate; gcd[i].gd.pos.x = -30; gcd[i].gd.pos.y = gcd[i-1].gd.pos.y+3; gcd[i].gd.pos.width = -1; gcd[i].gd.pos.height = 0; gcd[i].gd.flags = gg_visible | gg_enabled | gg_but_cancel; label[i].text = (unichar_t *) _("_Cancel"); label[i].text_is_1byte = true; label[i].text_in_resource = true; gcd[i].gd.label = &label[i]; gcd[i].gd.handle_controlevent = BdfP_Cancel; gcd[i].gd.cid = CID_Cancel; gcd[i++].creator = GButtonCreate; GGadgetsCreate(gw,gcd); GTextInfoListFree(gcd[0].gd.u.list); bd.vsb = gcd[1].ret; small.main_background = small.main_foreground = COLOR_DEFAULT; small.main_foreground = 0x0000ff; memset(&gd,'\0',sizeof(gd)); memset(&label[0],'\0',sizeof(label[0])); label[0].text = (unichar_t *) "\0\0\0\0"; label[0].font = bd.font; gd.pos.height = bd.fh; gd.pos.width = bd.vwidth-bd.value_x; gd.label = &label[0]; gd.box = &small; gd.flags = gg_enabled | gg_pos_in_pixels | gg_dontcopybox | gg_text_xim; bd.tf = GTextFieldCreate(bd.v,&gd,&bd); bd.press_pos = -1; BdfP_EnableButtons(&bd); BdfP_RefigureScrollbar(&bd); GDrawSetVisible(bd.v,true); GDrawSetVisible(gw,true); while ( !bd.done ) GDrawProcessOneEvent(NULL); GDrawDestroyWindow(gw); }
void SFShowKernPairs(SplineFont *sf,SplineChar *sc,AnchorClass *ac,int layer) { KPData kpd; GRect pos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[9], boxes[6], *hvarray[3][3], *harray[3], *barray[10], *varray[5]; GTextInfo label[9]; FontRequest rq; int as, ds, ld,i; static int done=false; static GFont *font=NULL; memset(&kpd,0,sizeof(kpd)); kpd.sf = sf; kpd.sc = sc; kpd.ac = ac; kpd.layer = layer; kpd.first = true; kpd.last_index = kpd.selected = -1; if ( ac==NULL ) KPBuildKernList(&kpd); else KPBuildAnchorList(&kpd); if ( kpd.kcnt==0 ) return; memset(&wattrs,0,sizeof(wattrs)); wattrs.mask = wam_events|wam_cursor|wam_utf8_wtitle|wam_undercursor|wam_isdlg|wam_restrict; wattrs.event_masks = ~(1<<et_charup); wattrs.restrict_input_to_me = 1; wattrs.undercursor = 1; wattrs.cursor = ct_pointer; wattrs.utf8_window_title = ac==NULL?_("Kern Pairs"):_("Anchored Pairs"); wattrs.is_dlg = true; pos.x = pos.y = 0; pos.width = GGadgetScale(200); pos.height = GDrawPointsToPixels(NULL,500); kpd.gw = gw = GDrawCreateTopWindow(NULL,&pos,kpd_e_h,&kpd,&wattrs); memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); label[0].text = (unichar_t *) _("_Size:"); label[0].text_is_1byte = true; label[0].text_in_resource = true; gcd[0].gd.label = &label[0]; gcd[0].gd.pos.x = 5; gcd[0].gd.pos.y = 5+6; gcd[0].gd.flags = gg_enabled|gg_visible; gcd[0].creator = GLabelCreate; hvarray[0][0] = &gcd[0]; gcd[1].gd.label = &sizes[1]; gcd[1].gd.label->selected = true; gcd[1].gd.pos.x = 50; gcd[1].gd.pos.y = 5; gcd[1].gd.flags = gg_enabled|gg_visible; gcd[1].gd.cid = CID_Size; gcd[1].gd.u.list = sizes; gcd[1].gd.handle_controlevent = KP_ChangeSize; gcd[1].creator = GListButtonCreate; hvarray[0][1] = &gcd[1]; hvarray[0][2] = NULL; label[2].text = (unichar_t *) _("Sort By:"); label[2].text_is_1byte = true; gcd[2].gd.label = &label[2]; gcd[2].gd.pos.x = gcd[0].gd.pos.x; gcd[2].gd.pos.y = gcd[0].gd.pos.y+25; gcd[2].gd.flags = gg_enabled|gg_visible; gcd[2].creator = GLabelCreate; hvarray[1][0] = &gcd[2]; if ( !done ) { done = true; for ( i=0; sortby[i].text!=NULL; ++i ) sortby[i].text = (unichar_t *) _((char *) sortby[i].text); } gcd[3].gd.label = &sortby[0]; gcd[3].gd.label->selected = true; gcd[3].gd.pos.x = 50; gcd[3].gd.pos.y = gcd[1].gd.pos.y+25; gcd[3].gd.flags = gg_enabled|gg_visible; gcd[3].gd.cid = CID_SortBy; gcd[3].gd.u.list = sortby; gcd[3].gd.handle_controlevent = KP_ChangeSort; gcd[3].creator = GListButtonCreate; hvarray[1][1] = &gcd[3]; hvarray[1][2] = NULL; hvarray[2][0] = NULL; boxes[2].gd.flags = gg_enabled|gg_visible; boxes[2].gd.u.boxelements = hvarray[0]; boxes[2].creator = GHVBoxCreate; varray[0] = &boxes[2]; gcd[4].gd.pos.width = 40; gcd[4].gd.pos.height = 250; gcd[4].gd.flags = gg_visible | gg_enabled; gcd[4].gd.u.drawable_e_h = kpdv_e_h; gcd[4].creator = GDrawableCreate; gcd[5].gd.flags = gg_enabled|gg_visible|gg_sb_vert; gcd[5].gd.cid = CID_ScrollBar; gcd[5].gd.handle_controlevent = KP_Scrolled; gcd[5].creator = GScrollBarCreate; harray[0] = &gcd[4]; harray[1] = &gcd[5]; harray[2] = NULL; boxes[3].gd.flags = gg_enabled|gg_visible; boxes[3].gd.u.boxelements = harray; boxes[3].creator = GHBoxCreate; varray[1] = &boxes[3]; gcd[6].gd.pos.x = 20-3; gcd[6].gd.pos.y = 17+37; gcd[6].gd.pos.width = -1; gcd[6].gd.pos.height = 0; gcd[6].gd.flags = gg_visible | gg_enabled | gg_but_default; label[6].text = (unichar_t *) _("_OK"); label[6].text_is_1byte = true; label[6].text_in_resource = true; gcd[6].gd.label = &label[6]; gcd[6].gd.cid = CID_OK; gcd[6].gd.handle_controlevent = KP_OK; gcd[6].creator = GButtonCreate; gcd[7].gd.pos.x = -20; gcd[7].gd.pos.y = gcd[6].gd.pos.y+3; gcd[7].gd.pos.width = -1; gcd[7].gd.pos.height = 0; gcd[7].gd.flags = gg_visible | gg_enabled | gg_but_cancel; label[7].text = (unichar_t *) _("_Cancel"); label[7].text_is_1byte = true; label[7].text_in_resource = true; gcd[7].gd.label = &label[7]; gcd[7].gd.cid = CID_Cancel; gcd[7].gd.handle_controlevent = KP_Cancel; gcd[7].creator = GButtonCreate; barray[0] = GCD_Glue; barray[1] = &gcd[6]; barray[2] = GCD_Glue; barray[3] = GCD_Glue; barray[4] = &gcd[7]; barray[5] = GCD_Glue; barray[6] = NULL; boxes[4].gd.flags = gg_enabled|gg_visible; boxes[4].gd.u.boxelements = barray; boxes[4].creator = GHBoxCreate; varray[2] = &boxes[4]; varray[3] = NULL; boxes[0].gd.flags = gg_enabled|gg_visible; boxes[0].gd.u.boxelements = varray; boxes[0].creator = GVBoxCreate; GGadgetsCreate(gw,boxes); GHVBoxSetExpandableRow(boxes[0].ret,1); GHVBoxSetExpandableCol(boxes[3].ret,0); GHVBoxSetExpandableCol(boxes[4].ret,gb_expandgluesame); GHVBoxSetPadding(boxes[0].ret,0,2); GHVBoxSetPadding(boxes[3].ret,0,0); kpd.v = GDrawableGetWindow(gcd[4].ret);; GGadgetGetSize(gcd[4].ret,&pos); kpd.sb_width = pos.width; GGadgetGetSize(gcd[3].ret,&pos); kpd.header_height = pos.y+pos.height+4; kpd.bdf = SplineFontPieceMeal(kpd.sf,kpd.layer,(intpt) (gcd[1].gd.label->userdata),72,true,NULL); if ( font==NULL ) { memset(&rq,'\0',sizeof(rq)); rq.utf8_family_name = SANS_UI_FAMILIES; rq.point_size = -12; rq.weight = 400; font = GDrawInstanciateFont(GDrawGetDisplayOfWindow(gw),&rq); font = GResourceFindFont("Combinations.Font",font); } kpd.font = font; GDrawFontMetrics(kpd.font,&as,&ds,&ld); kpd.fh = as+ds; kpd.as = as; kpd.uh = (4*kpd.bdf->pixelsize/3)+kpd.fh+6; kpd.vpad = kpd.bdf->pixelsize/5 + 3; GHVBoxFitWindow(boxes[0].ret); GDrawSetVisible(kpd.v,true); GDrawSetVisible(kpd.gw,true); while ( !kpd.done ) GDrawProcessOneEvent(NULL); free( kpd.kerns ); GDrawDestroyWindow(gw); }
void CVFtPpemDlg(CharView *cv,int debug) { GRect pos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[16], boxes[8]; GTextInfo label[16]; FtSizeData fsd; char buffer[20], buffer2[20], buffer3[20]; GGadgetCreateData *varray[7][4], *barray[9], *harray1[3], *harray2[3], *harray3[3]; int k,r; memset(&fsd,0,sizeof(fsd)); fsd.cv = cv; fsd.debug = debug; memset(&wattrs,0,sizeof(wattrs)); wattrs.mask = wam_events|wam_cursor|wam_utf8_wtitle|wam_undercursor|wam_isdlg|wam_restrict; wattrs.event_masks = ~(1<<et_charup); wattrs.restrict_input_to_me = 1; wattrs.undercursor = 1; wattrs.cursor = ct_pointer; wattrs.utf8_window_title = _("Grid Fit Parameters"); wattrs.is_dlg = true; pos.x = pos.y = 0; pos.width = GGadgetScale(GDrawPointsToPixels(NULL,190)); pos.height = GDrawPointsToPixels(NULL,106); fsd.gw = gw = GDrawCreateTopWindow(NULL,&pos,fsd_e_h,&fsd,&wattrs); memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); k=r=0; label[k].text = (unichar_t *) _("Debug _fpgm/prep"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 80; gcd[k].gd.pos.y = 4; gcd[k].gd.flags = debug ? (gg_enabled|gg_visible) : 0; if ( last_fpgm ) gcd[k].gd.flags |= gg_cb_on; gcd[k].gd.cid = CID_Debugfpgm; gcd[k++].creator = GCheckBoxCreate; varray[r][0] = &gcd[k-1]; varray[r][1] = GCD_ColSpan; varray[r][2] = GCD_ColSpan; varray[r++][3] = NULL; label[k].text = (unichar_t *) _("Scale X/Y the same"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 110; gcd[k].gd.pos.y = 17+5+6; gcd[k].gd.flags = gg_enabled|gg_visible; if ( gridfit_x_sameas_y ) gcd[k].gd.flags |= gg_cb_on; gcd[k].gd.cid = CID_SameAs; gcd[k].gd.handle_controlevent = FtPpem_SameAsChanged; gcd[k++].creator = GCheckBoxCreate; varray[r][0] = &gcd[k-1]; varray[r][1] = GCD_HPad10; label[k].text = (unichar_t *) _("_DPI:"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 110; gcd[k].gd.pos.y = 17+5+6; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k++].creator = GLabelCreate; harray1[0] = &gcd[k-1]; sprintf( buffer2, "%d", gridfit_dpi ); label[k].text = (unichar_t *) buffer2; label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 140; gcd[k].gd.pos.y = 17+5; gcd[k].gd.pos.width = 40; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.cid = CID_DPI; gcd[k++].creator = GTextFieldCreate; harray1[1] = &gcd[k-1]; harray1[2] = NULL; boxes[2].gd.flags = gg_enabled|gg_visible; boxes[2].gd.u.boxelements = harray1; boxes[2].creator = GHBoxCreate; varray[r][2] = &boxes[2]; varray[r++][3] = NULL; label[k].text = (unichar_t *) _("_Pointsize Y:"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 5; gcd[k].gd.pos.y = 17+5+6; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k++].creator = GLabelCreate; harray2[0] = &gcd[k-1]; sprintf( buffer, "%g", gridfit_pointsizey ); label[k].text = (unichar_t *) buffer; label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 57; gcd[k].gd.pos.y = 17+5; gcd[k].gd.pos.width = 40; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.handle_controlevent = FtPpem_PtYChanged; gcd[k].gd.cid = CID_PointSize; gcd[k++].creator = GTextFieldCreate; harray2[1] = &gcd[k-1]; harray2[2] = NULL; boxes[3].gd.flags = gg_enabled|gg_visible; boxes[3].gd.u.boxelements = harray2; boxes[3].creator = GHBoxCreate; varray[r][0] = &boxes[3]; varray[r][1] = GCD_HPad10; label[k].text = (unichar_t *) _("_X:"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 5; gcd[k].gd.pos.y = 17+5+6; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k++].creator = GLabelCreate; harray3[0] = &gcd[k-1]; sprintf( buffer3, "%g", gridfit_x_sameas_y ? gridfit_pointsizey : gridfit_pointsizex); label[k].text = (unichar_t *) buffer3; label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 57; gcd[k].gd.pos.y = 17+5; gcd[k].gd.pos.width = 40; gcd[k].gd.flags = gg_enabled|gg_visible; if ( gridfit_x_sameas_y ) gcd[k].gd.flags = gg_visible; gcd[k].gd.cid = CID_PointSizeX; gcd[k++].creator = GTextFieldCreate; harray3[1] = &gcd[k-1]; harray3[2] = NULL; boxes[4].gd.flags = gg_enabled|gg_visible; boxes[4].gd.u.boxelements = harray3; boxes[4].creator = GHBoxCreate; varray[r][2] = &boxes[4]; varray[r++][3] = NULL; label[k].text = (unichar_t *) _("_Mono"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 20; gcd[k].gd.pos.y = 14+31; gcd[k].gd.flags = gridfit_depth==1 ? (gg_enabled|gg_visible|gg_cb_on) : (gg_enabled|gg_visible); gcd[k].gd.cid = CID_BW; gcd[k++].creator = GRadioCreate; varray[r][0] = &gcd[k-1]; varray[r][1] = GCD_HPad10; label[k].text = (unichar_t *) _("_Anti-Aliased"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 80; gcd[k].gd.pos.y = gcd[9].gd.pos.y; gcd[k].gd.flags = gridfit_depth!=1 ? (gg_enabled|gg_visible|gg_cb_on) : (gg_enabled|gg_visible); gcd[k++].creator = GRadioCreate; varray[r][2] = &gcd[k-1]; varray[r++][3] = NULL; gcd[k].gd.pos.x = 5; gcd[k].gd.pos.y = 17+31+16; gcd[k].gd.pos.width = 190-10; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k++].creator = GLineCreate; varray[r][0] = &gcd[k-1]; varray[r][1] = GCD_ColSpan; varray[r][2] = GCD_ColSpan; varray[r++][3] = NULL; gcd[k].gd.pos.x = 20-3; gcd[k].gd.pos.y = 17+37+16; gcd[k].gd.pos.width = -1; gcd[k].gd.pos.height = 0; gcd[k].gd.flags = gg_visible | gg_enabled | gg_but_default; label[k].text = (unichar_t *) _("_OK"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.mnemonic = 'O'; gcd[k].gd.label = &label[k]; gcd[k].gd.handle_controlevent = FtPpem_OK; gcd[k++].creator = GButtonCreate; barray[0] = GCD_Glue; barray[1] = &gcd[k-1]; barray[2] = GCD_Glue; gcd[k].gd.pos.x = -20; gcd[k].gd.pos.y = gcd[4].gd.pos.y+3; gcd[k].gd.pos.width = -1; gcd[k].gd.pos.height = 0; gcd[k].gd.flags = gg_visible | gg_enabled | gg_but_cancel; label[k].text = (unichar_t *) _("_Cancel"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.mnemonic = 'C'; gcd[k].gd.handle_controlevent = FtPpem_Cancel; gcd[k++].creator = GButtonCreate; barray[3] = GCD_Glue; barray[4] = &gcd[k-1]; barray[5] = GCD_Glue; barray[6] = NULL; boxes[5].gd.flags = gg_enabled|gg_visible; boxes[5].gd.u.boxelements = barray; boxes[5].creator = GHBoxCreate; varray[r][0] = &boxes[5]; varray[r][1] = GCD_ColSpan; varray[r][2] = GCD_ColSpan; varray[r++][3] = NULL; varray[r][0] = NULL; boxes[0].gd.pos.x = boxes[0].gd.pos.y = 2; boxes[0].gd.flags = gg_enabled|gg_visible; boxes[0].gd.u.boxelements = varray[0]; boxes[0].creator = GHVGroupCreate; GGadgetsCreate(gw,boxes); GHVBoxFitWindow(boxes[0].ret); GWidgetIndicateFocusGadget(GWidgetGetControl(gw,CID_PointSize)); GTextFieldSelect(GWidgetGetControl(gw,CID_PointSize),0,-1); GWidgetHidePalettes(); GDrawSetVisible(gw,true); while ( !fsd.done ) GDrawProcessOneEvent(NULL); GDrawDestroyWindow(gw); }
static void Layer2Layer(CharView *cv,FontView *fv,enum l2l_type l2l,int def_layer) { L2LDlg d; GRect pos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[17], *hvarray[34], *harray[5], *harray2[8], *hvarray2[7], boxes[7]; GTextInfo label[17]; int k,j; memset(&d,0,sizeof(d)); d.cv = cv; d.fv = fv; d.l2l = l2l; if ( cv!=NULL ) d.sf = cv->b.sc->parent; else d.sf = fv->b.sf; memset(&wattrs,0,sizeof(wattrs)); wattrs.mask = wam_events|wam_cursor|wam_utf8_wtitle|wam_undercursor|wam_isdlg|wam_restrict; wattrs.event_masks = ~(1<<et_charup); wattrs.restrict_input_to_me = 1; wattrs.undercursor = 1; wattrs.cursor = ct_pointer; wattrs.utf8_window_title = l2l==l2l_copy ? _("Copy Layers") : _("Compare Layers"); wattrs.is_dlg = true; pos.x = pos.y = 0; pos.width = GGadgetScale(GDrawPointsToPixels(NULL,170)); pos.height = GDrawPointsToPixels(NULL,178); d.gw = gw = GDrawCreateTopWindow(NULL,&pos,l2l_e_h,&d,&wattrs); memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); k=j=0; label[k].text = (unichar_t *) (l2l==l2l_copy ? _("Copy one layer to another") : _("Compare two layers")); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k++].creator = GLabelCreate; hvarray[j++] = &gcd[k-1]; hvarray[j++] = NULL; label[k].text = (unichar_t *) (l2l==l2l_copy ? _("From:") : _("Base:")); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k++].creator = GLabelCreate; hvarray2[0] = &gcd[k-1]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.cid = CID_FromLayer; gcd[k].gd.u.list = SFLayerList(d.sf,def_layer); gcd[k++].creator = GListButtonCreate; hvarray2[1] = &gcd[k-1]; hvarray2[2] = NULL; label[k].text = (unichar_t *) (l2l==l2l_copy ? _("To:") : _("Other:")); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k++].creator = GLabelCreate; hvarray2[3] = &gcd[k-1]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.cid = CID_ToLayer; gcd[k].gd.u.list = SFLayerList(d.sf,def_layer==ly_fore ? ly_back : ly_fore ); gcd[k++].creator = GListButtonCreate; hvarray2[4] = &gcd[k-1]; hvarray2[5] = NULL; hvarray2[6] = NULL; boxes[3].gd.flags = gg_enabled|gg_visible; boxes[3].gd.u.boxelements = hvarray2; boxes[3].creator = GHVBoxCreate; hvarray[j++] = &boxes[3]; hvarray[j++] = NULL; if ( l2l==l2l_copy ) { label[k].text = (unichar_t *) _("Clear destination layer before copy"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.cid = CID_ClearOld; gcd[k].gd.flags = gg_enabled|gg_visible|gg_cb_on; gcd[k++].creator = GCheckBoxCreate; hvarray[j++] = &gcd[k-1]; hvarray[j++] = NULL; } else { label[k].text = (unichar_t *) _("Allow errors of:"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k++].creator = GLabelCreate; harray[0] = &gcd[k-1]; label[k].text = (unichar_t *) "1"; label[k].text_is_1byte = true; gcd[k].gd.pos.width = 50; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.cid = CID_ErrorBound; gcd[k++].creator = GTextFieldCreate; harray[1] = &gcd[k-1]; label[k].text = (unichar_t *) _("em units"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k++].creator = GLabelCreate; harray[2] = &gcd[k-1]; harray[3] = GCD_Glue; harray[4] = NULL; boxes[4].gd.flags = gg_enabled|gg_visible; boxes[4].gd.u.boxelements = harray; boxes[4].creator = GHBoxCreate; hvarray[j++] = &boxes[4]; hvarray[j++] = NULL; } gcd[k].gd.flags = gg_visible | gg_enabled | gg_but_default; label[k].text = (unichar_t *) _("_OK"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.handle_controlevent = L2L_OK; gcd[k++].creator = GButtonCreate; harray2[0] = GCD_Glue; harray2[1] = &gcd[k-1]; harray2[2] = GCD_Glue; harray2[3] = GCD_Glue; gcd[k].gd.flags = gg_visible | gg_enabled | gg_but_cancel; label[k].text = (unichar_t *) _("_Cancel"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.handle_controlevent = L2L_Cancel; gcd[k++].creator = GButtonCreate; harray2[4] = GCD_Glue; harray2[5] = &gcd[k-1]; harray2[6] = GCD_Glue; harray2[7] = NULL; boxes[2].gd.flags = gg_enabled|gg_visible; boxes[2].gd.u.boxelements = harray2; boxes[2].creator = GHBoxCreate; hvarray[j++] = &boxes[2]; hvarray[j++] = NULL; hvarray[j++] = GCD_Glue; hvarray[j++] = NULL; hvarray[j++] = NULL; boxes[0].gd.pos.x = boxes[0].gd.pos.y = 2; boxes[0].gd.flags = gg_enabled|gg_visible; boxes[0].gd.u.boxelements = hvarray; boxes[0].creator = GHVGroupCreate; GGadgetsCreate(gw,boxes); GHVBoxSetExpandableRow(boxes[0].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[2].ret,gb_expandgluesame); if ( l2l==l2l_compare ) GHVBoxSetExpandableRow(boxes[4].ret,gb_expandglue); GTextInfoListFree(gcd[2].gd.u.list); GTextInfoListFree(gcd[4].gd.u.list); GHVBoxFitWindow(boxes[0].ret); GDrawSetVisible(gw,true); while ( !d.done ) GDrawProcessOneEvent(NULL); GDrawDestroyWindow(gw); }