void CVMouseUpRuler(CharView *cv, GEvent *event) { if ( cv->ruler_w!=NULL ) { last_ruler_offset[1] = last_ruler_offset[0]; last_ruler_offset[0].x = cv->info.x-cv->p.cx; last_ruler_offset[0].y = cv->info.y-cv->p.cy; if ( !(event->u.mouse.state & ksm_alt) ) { /*cv->autonomous_ruler_w = true;*/ return; } GDrawDestroyWindow(cv->ruler_w); cv->ruler_w = NULL; } }
static int ruler_e_h(GWindow gw, GEvent *event) { CharView *cv = (CharView *) GDrawGetUserData(gw); unichar_t ubuf[80]; int line; switch ( event->type ) { case et_expose: GDrawSetFont(gw,cv->rfont); /*GDrawFillRect(gw,NULL,0xe0e0c0);*/ for ( line=0; RulerText(cv,ubuf,line); ++line ) GDrawDrawBiText(gw,2,line*cv->rfh+cv->ras+1,ubuf,-1,NULL,0x000000); break; case et_mousedown: cv->autonomous_ruler_w = false; GDrawDestroyWindow(gw); cv->ruler_w = NULL; break; } return( true ); }
void CPUpdateInfo(CharView *cv, GEvent *event) { if ( !cv->showcpinfo ) return; if ( !cv->p.pressed ) { if ( cv->ruler_w!=NULL && GDrawIsVisible(cv->ruler_w)) { GDrawDestroyWindow(cv->ruler_w); cv->ruler_w = NULL; } return; } if ( cv->ruler_w==NULL ) CPStartInfo(cv,event); else { CpInfoPlace(cv,event); GDrawSync(NULL); GDrawProcessPendingEvents(NULL); /* The resize needs to happen before the expose */ if ( !cv->p.pressed ) /* but a mouse up might sneak in... */ return; GDrawRequestExpose(cv->ruler_w,NULL,false); } }
void CVMouseMoveRuler(CharView *cv, GEvent *event) { if ( cv->autonomous_ruler_w ) return; if ( !cv->p.pressed && (event->u.mouse.state&ksm_alt) ) { if ( cv->ruler_w!=NULL && GDrawIsVisible(cv->ruler_w)) { GDrawDestroyWindow(cv->ruler_w); cv->ruler_w = NULL; } return; } if ( !cv->p.pressed ) CVMouseAtSpline(cv,event); RulerPlace(cv,event); if ( !cv->p.pressed ) GDrawSetVisible(cv->ruler_w,true); GDrawSync(NULL); GDrawProcessPendingEvents(NULL); /* The resize needs to happen before the expose */ if ( !cv->p.pressed && (event->u.mouse.state&ksm_alt) ) /* but a mouse up might sneak in... */ return; GDrawRequestExpose(cv->ruler_w,NULL,false); GDrawRequestExpose(cv->v,NULL,false); }
static char *JSTF_Langs(GGadget *g, int r, int c) { int rows, i, k, j; struct matrix_data *strings = GMatrixEditGet(g, &rows); int cols = GMatrixEditGetColCnt(g); 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; jd->ldone = false; jd->here = (struct jstf_lang **) &strings[cols*r+3].u.md_addr; 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 = _("Justified Languages"); pos.x = pos.y = 0; pos.width =GDrawPointsToPixels(NULL,GGadgetScale(268)); pos.height = GDrawPointsToPixels(NULL,375); jd->lgw = gw = GDrawCreateTopWindow(NULL,&pos,langs_e_h,jd,&wattrs); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); memset(&label,0,sizeof(label)); k=j=0; JLanguageMatrixInit(&mi,*jd->here); gcd[k].gd.pos.x = 10; gcd[k].gd.pos.y = gcd[1].gd.pos.y+14; gcd[k].gd.pos.width = 900; gcd[k].gd.flags = gg_enabled | gg_visible | gg_utf8_popup; gcd[k].gd.cid = CID_Languages; gcd[k].gd.u.matrix = &mi; gcd[k].gd.popup_msg = (unichar_t *) _( "A list of languages and the lookups turned on and off\n" "for each to accomplish justification. A language may\n" "appear more than once, in which case second (or third,\n" "etc.) will be tried if the first fails."); 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_Language_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_Language_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_("Language|New")); GMatrixEditSetUpDownVisible(gcd[0].ret,true); GHVBoxSetExpandableCol(boxes[0].ret,gb_expandgluesame); GHVBoxFitWindow(boxes[1].ret); GDrawSetVisible(gw,true); while ( !jd->ldone ) GDrawProcessOneEvent(NULL); GDrawDestroyWindow(gw); return( NULL ); }
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 ); }
unichar_t *FVOpenFont(char *title, const char *defaultfile, int mult) { GRect pos; int i, filter, renamei; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[11], boxes[5], *varray[9], *harray1[7], *harray2[4], *harray3[9]; GTextInfo label[10]; struct gfc_data d; int bs = GIntGetResource(_NUM_Buttonsize), bsbigger, totwid, spacing; GGadget *tf; unichar_t *temp; char **nlnames; GTextInfo *namelistnames, **filts; int cnt; memset(&d,'\0',sizeof(d)); 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.is_dlg = true; wattrs.undercursor = 1; wattrs.cursor = ct_pointer; wattrs.utf8_window_title = title; pos.x = pos.y = 0; totwid = GGadgetScale(295); bsbigger = 4*bs+4*14>totwid; totwid = bsbigger?4*bs+4*12:totwid; spacing = (totwid-4*bs-2*12)/3; pos.width = GDrawPointsToPixels(NULL,totwid); pos.height = GDrawPointsToPixels(NULL,247); gw = GDrawCreateTopWindow(NULL,&pos,e_h,&d,&wattrs); memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); i=0; gcd[i].gd.pos.x = 12; gcd[i].gd.pos.y = 6; gcd[i].gd.pos.width = totwid*100/GIntGetResource(_NUM_ScaleFactor)-24; gcd[i].gd.pos.height = 180; gcd[i].gd.flags = gg_visible | gg_enabled; if ( RecentFiles[0]!=NULL ) gcd[i].gd.flags = gg_visible | gg_enabled | gg_file_pulldown; if ( mult ) gcd[i].gd.flags |= gg_file_multiple; varray[0] = &gcd[i]; varray[1] = NULL; gcd[i++].creator = GFileChooserCreate; label[i].text = (unichar_t *) _("Filter:"); label[i].text_is_1byte = true; gcd[i].gd.label = &label[i]; gcd[i].gd.pos.x = 8; gcd[i].gd.pos.y = 188+6; gcd[i].gd.flags = gg_visible | gg_enabled | gg_utf8_popup; gcd[i].gd.popup_msg = (unichar_t *) _("Display files of this type" ); harray1[0] = GCD_Glue; harray1[1] = &gcd[i]; gcd[i++].creator = GLabelCreate; gcd[i].gd.pos.x = 0; gcd[i].gd.pos.y = gcd[i-1].gd.pos.y-6; gcd[i].gd.flags = gg_visible | gg_enabled | gg_utf8_popup; gcd[i].gd.popup_msg = (unichar_t *) _("Display files of this type"); gcd[i].gd.handle_controlevent = GFD_FilterSelected; harray1[2] = &gcd[i]; harray1[3] = GCD_Glue; harray1[4] = GCD_Glue; harray1[5] = GCD_Glue; harray1[6] = NULL; gcd[i++].creator = GListButtonCreate; boxes[2].gd.flags = gg_visible | gg_enabled; boxes[2].gd.u.boxelements = harray1; boxes[2].creator = GHBoxCreate; varray[2] = &boxes[2]; varray[3] = NULL; label[i].text = (unichar_t *) _("Force glyph names to:"); label[i].text_is_1byte = true; gcd[i].gd.label = &label[i]; gcd[i].gd.pos.x = 8; gcd[i].gd.pos.y = 188+6; gcd[i].gd.flags = gg_visible | gg_enabled | gg_utf8_popup; gcd[i].gd.popup_msg = (unichar_t *) _("In the saved font, force all glyph names to match those in the specified namelist"); harray2[0] = &gcd[i]; gcd[i++].creator = GLabelCreate; renamei = i; gcd[i].gd.pos.x = 0; gcd[i].gd.pos.y = gcd[i-1].gd.pos.y-6; gcd[i].gd.flags = gg_visible | gg_enabled | gg_utf8_popup; gcd[i].gd.popup_msg = (unichar_t *) _("In the saved font, force all glyph names to match those in the specified namelist"); gcd[i].creator = GListButtonCreate; nlnames = AllNamelistNames(); for ( cnt=0; nlnames[cnt]!=NULL; ++cnt); namelistnames = calloc(cnt+3,sizeof(GTextInfo)); namelistnames[0].text = (unichar_t *) _("No Rename"); namelistnames[0].text_is_1byte = true; if ( force_names_when_opening==NULL ) { namelistnames[0].selected = true; gcd[i].gd.label = &namelistnames[0]; } namelistnames[1].line = true; for ( cnt=0; nlnames[cnt]!=NULL; ++cnt) { namelistnames[cnt+2].text = (unichar_t *) nlnames[cnt]; namelistnames[cnt+2].text_is_1byte = true; if ( force_names_when_opening!=NULL && strcmp(_(force_names_when_opening->title),nlnames[cnt])==0 ) { namelistnames[cnt+2].selected = true; gcd[i].gd.label = &namelistnames[cnt+2]; } } harray2[1] = &gcd[i]; harray2[2] = GCD_Glue; harray2[3] = NULL; gcd[i++].gd.u.list = namelistnames; boxes[3].gd.flags = gg_visible | gg_enabled; boxes[3].gd.u.boxelements = harray2; boxes[3].creator = GHBoxCreate; varray[4] = &boxes[3]; varray[5] = NULL; gcd[i].gd.pos.x = 12; gcd[i].gd.pos.y = 216-3; gcd[i].gd.pos.width = -1; 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.mnemonic = 'O'; gcd[i].gd.label = &label[i]; gcd[i].gd.handle_controlevent = GFD_Ok; harray3[0] = GCD_Glue; harray3[1] = &gcd[i]; gcd[i++].creator = GButtonCreate; gcd[i].gd.pos.x = -(spacing+bs)*100/GIntGetResource(_NUM_ScaleFactor)-12; gcd[i].gd.pos.y = gcd[i-1].gd.pos.y+3; gcd[i].gd.pos.width = -1; gcd[i].gd.flags = gg_visible | gg_enabled; label[i].text = (unichar_t *) S_("Font|_New"); label[i].text_is_1byte = true; label[i].text_in_resource = true; gcd[i].gd.mnemonic = 'N'; gcd[i].gd.label = &label[i]; gcd[i].gd.handle_controlevent = GFD_New; harray3[2] = GCD_Glue; harray3[3] = &gcd[i]; gcd[i++].creator = GButtonCreate; filter = i; gcd[i].gd.pos.x = (spacing+bs)*100/GIntGetResource(_NUM_ScaleFactor)+12; gcd[i].gd.pos.y = gcd[i-1].gd.pos.y; gcd[i].gd.pos.width = -1; gcd[i].gd.flags = /* gg_visible |*/ gg_enabled; label[i].text = (unichar_t *) _("_Filter"); label[i].text_is_1byte = true; label[i].text_in_resource = true; gcd[i].gd.mnemonic = 'F'; gcd[i].gd.label = &label[i]; gcd[i].gd.handle_controlevent = GFileChooserFilterEh; harray3[4] = &gcd[i]; gcd[i++].creator = GButtonCreate; gcd[i].gd.pos.x = -12; gcd[i].gd.pos.y = gcd[i-1].gd.pos.y; gcd[i].gd.pos.width = -1; 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.mnemonic = 'C'; gcd[i].gd.handle_controlevent = GFD_Cancel; harray3[5] = GCD_Glue; harray3[6] = &gcd[i]; harray3[7] = GCD_Glue; harray3[8] = NULL; gcd[i++].creator = GButtonCreate; boxes[4].gd.flags = gg_visible | gg_enabled; boxes[4].gd.u.boxelements = harray3; boxes[4].creator = GHBoxCreate; varray[6] = &boxes[4]; varray[7] = NULL; varray[8] = NULL; boxes[0].gd.pos.x = boxes[0].gd.pos.y = 2; boxes[0].gd.flags = gg_visible | gg_enabled; boxes[0].gd.u.boxelements = varray; boxes[0].creator = GHVGroupCreate; gcd[i].gd.pos.x = 2; gcd[i].gd.pos.y = 2; gcd[i].gd.pos.width = pos.width-4; gcd[i].gd.pos.height = pos.height-4; gcd[i].gd.flags = gg_enabled | gg_visible | gg_pos_in_pixels; gcd[i++].creator = GGroupCreate; GGadgetsCreate(gw,boxes); d.gfc = gcd[0].ret; d.rename = gcd[renamei].ret; filts = StandardFilters(); GGadgetSetList(harray1[2]->ret,filts,true); GHVBoxSetExpandableRow(boxes[0].ret,0); GHVBoxSetExpandableCol(boxes[2].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[3].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[4].ret,gb_expandgluesame); GHVBoxFitWindow(boxes[0].ret); free(namelistnames); GGadgetSetUserData(gcd[filter].ret,gcd[0].ret); GFileChooserConnectButtons(gcd[0].ret,harray3[1]->ret,gcd[filter].ret); temp = utf82u_copy(filts[default_font_filter_index]->userdata); GFileChooserSetFilterText(gcd[0].ret,temp); free(temp); GFileChooserGetChildren(gcd[0].ret,NULL, NULL, &tf); if ( RecentFiles[0]!=NULL ) { GGadgetSetList(tf,GTextInfoFromChars(RecentFiles,RECENT_MAX),false); } GGadgetSetTitle8(gcd[0].ret,defaultfile); GWidgetHidePalettes(); GDrawSetVisible(gw,true); while ( !d.done ) GDrawProcessOneEvent(NULL); GDrawDestroyWindow(gw); GDrawProcessPendingEvents(NULL); /* Give the window a chance to vanish... */ GDrawSync(NULL); GDrawProcessPendingEvents(NULL); /* Give the window a chance to vanish... */ free( d.lastpopupfontname ); GTextInfoArrayFree(filts); for ( cnt=0; nlnames[cnt]!=NULL; ++cnt) { free(nlnames[cnt]); } free(nlnames); return(d.ret); }
static uint32_t * GWidgetOpenFileWPath (const uint32_t *title, const uint32_t *defaultfile, const uint32_t *initial_filter, char **mimetypes, GFileChooserFilterType filter, char **path) { GRect pos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[7], boxes[3], *varray[5], *harray[8]; GTextInfo label[4]; struct gfc_data d; int bs = GIntGetResource (_NUM_Buttonsize), bsbigger, totwid; GProgressPauseTimer (); memset (&wattrs, 0, sizeof (wattrs)); wattrs.mask = wam_events | wam_cursor | wam_wtitle | wam_undercursor | wam_restrict | wam_isdlg; wattrs.event_masks = ~(1 << et_charup); wattrs.restrict_input_to_me = 1; wattrs.undercursor = 1; wattrs.is_dlg = 1; wattrs.cursor = ct_pointer; wattrs.window_title = (uint32_t *) title; pos.x = pos.y = 0; totwid = GGadgetScale (223); bsbigger = 3 * bs + 4 * 14 > totwid; totwid = bsbigger ? 3 * bs + 4 * 12 : totwid; pos.width = GDrawPointsToPixels (NULL, totwid); pos.height = GDrawPointsToPixels (NULL, 223); gw = GDrawCreateTopWindow (NULL, &pos, e_h, &d, &wattrs); memset (&label, 0, sizeof (label)); memset (&gcd, 0, sizeof (gcd)); memset (&boxes, 0, sizeof (boxes)); gcd[0].gd.pos.x = 12; gcd[0].gd.pos.y = 6; gcd[0].gd.pos.width = 223 - 24; gcd[0].gd.pos.height = 180; gcd[0].gd.flags = gg_visible | gg_enabled; gcd[0].creator = GFileChooserCreate; varray[0] = &gcd[0]; varray[1] = NULL; gcd[1].gd.pos.x = 12; gcd[1].gd.pos.y = 192 - 3; gcd[1].gd.pos.width = -1; gcd[1].gd.flags = gg_visible | gg_enabled | gg_but_default; label[1].text = (uint32_t *) _("_OK"); label[1].text_is_1byte = true; label[1].text_has_mnemonic = true; gcd[1].gd.label = &label[1]; gcd[1].gd.handle_controlevent = GFD_Ok; gcd[1].creator = GButtonCreate; harray[0] = GCD_Glue; harray[1] = &gcd[1]; gcd[2].gd.pos.x = (totwid - bs) * 100 / GIntGetResource (_NUM_ScaleFactor) / 2; gcd[2].gd.pos.y = gcd[1].gd.pos.y + 3; gcd[2].gd.pos.width = -1; gcd[2].gd.flags = gg_visible | gg_enabled; label[2].text = (uint32_t *) _("_Filter"); label[2].text_is_1byte = true; label[2].text_has_mnemonic = true; gcd[2].gd.label = &label[2]; gcd[2].gd.handle_controlevent = GFileChooserFilterEh; gcd[2].creator = GButtonCreate; harray[2] = GCD_Glue; harray[3] = &gcd[2]; gcd[3].gd.pos.x = -gcd[1].gd.pos.x; gcd[3].gd.pos.y = gcd[2].gd.pos.y; gcd[3].gd.pos.width = -1; gcd[3].gd.flags = gg_visible | gg_enabled | gg_but_cancel; label[3].text = (uint32_t *) _("_Cancel"); label[3].text_is_1byte = true; label[3].text_has_mnemonic = true; gcd[3].gd.label = &label[3]; gcd[3].gd.handle_controlevent = GFD_Cancel; gcd[3].creator = GButtonCreate; harray[4] = GCD_Glue; harray[5] = &gcd[3]; harray[6] = GCD_Glue; harray[7] = NULL; boxes[2].gd.flags = gg_visible | gg_enabled; boxes[2].gd.u.boxelements = harray; boxes[2].creator = GHBoxCreate; varray[2] = &boxes[2]; varray[3] = NULL; varray[4] = NULL; boxes[0].gd.pos.x = boxes[0].gd.pos.y = 2; boxes[0].gd.flags = gg_visible | gg_enabled; boxes[0].gd.u.boxelements = varray; boxes[0].creator = GHVGroupCreate; gcd[4].gd.pos.x = 2; gcd[4].gd.pos.y = 2; gcd[4].gd.pos.width = pos.width - 4; gcd[4].gd.pos.height = pos.height - 4; gcd[4].gd.flags = gg_enabled | gg_visible | gg_pos_in_pixels; gcd[4].creator = GGroupCreate; GGadgetsCreate (gw, boxes); GGadgetSetUserData (gcd[2].ret, gcd[0].ret); GHVBoxSetExpandableRow (boxes[0].ret, 0); GHVBoxSetExpandableCol (boxes[2].ret, gb_expandgluesame); GHVBoxFitWindow (boxes[0].ret); GFileChooserConnectButtons (gcd[0].ret, gcd[1].ret, gcd[2].ret); GFileChooserSetFilterText (gcd[0].ret, initial_filter); GFileChooserSetFilterFunc (gcd[0].ret, filter); GFileChooserSetMimetypes (gcd[0].ret, mimetypes); GFileChooserSetPaths (gcd[0].ret, path); GGadgetSetTitle (gcd[0].ret, defaultfile); memset (&d, '\0', sizeof (d)); d.gfc = gcd[0].ret; GDrawSetVisible (gw, true); while (!d.done) GDrawProcessOneEvent (NULL); GDrawDestroyWindow (gw); GDrawProcessPendingEvents (NULL); /* Give the window a chance to vanish... */ GDrawSync (NULL); GDrawProcessPendingEvents (NULL); /* Give the window a chance to vanish... */ GProgressResumeTimer (); return (d.ret); }
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); }
void NonLinearDlg(FontView *fv,CharView *cv) { static unichar_t *lastx, *lasty; struct nldlg d; GRect pos; GWindowAttrs wattrs; GGadgetCreateData gcd[8], boxes[4], *hvarray[3][3], *barray[9], *varray[3][2]; GTextInfo label[8]; struct context c; char *expstr; memset(&d,'\0',sizeof(d)); memset(&c,'\0',sizeof(c)); 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 = _("Non Linear Transform"); pos.x = pos.y = 0; pos.width = GGadgetScale(GDrawPointsToPixels(NULL,200)); pos.height = GDrawPointsToPixels(NULL,97); d.gw = GDrawCreateTopWindow(NULL,&pos,nld_e_h,&d,&wattrs); memset(gcd,0,sizeof(gcd)); memset(boxes,0,sizeof(boxes)); memset(label,0,sizeof(label)); /* GT: an expression describing the transformation applied to the X coordinate */ label[0].text = (unichar_t *) _("X Expr:"); label[0].text_is_1byte = true; gcd[0].gd.label = &label[0]; gcd[0].gd.pos.x = 10; gcd[0].gd.pos.y = 8; gcd[0].gd.flags = gg_visible | gg_enabled | gg_utf8_popup; gcd[0].gd.popup_msg = (unichar_t *) _("These expressions may contain the operators +,-,*,/,%,^ (which means raise to the power of here), and ?: It may also contain a few standard functions. Basic terms are real numbers, x and y.\nExamples:\n x^3+2.5*x^2+5\n (x-300)*(y-200)/100\n y+sin(100*x)"); gcd[0].creator = GLabelCreate; hvarray[0][0] = &gcd[0]; if ( lastx!=NULL ) label[1].text = lastx; else { label[1].text = (unichar_t *) "x"; label[1].text_is_1byte = true; } gcd[1].gd.label = &label[1]; gcd[1].gd.pos.x = 55; gcd[1].gd.pos.y = 5; gcd[1].gd.pos.width = 135; gcd[1].gd.flags = gg_visible | gg_enabled | gg_utf8_popup; gcd[1].gd.popup_msg = (unichar_t *) _("These expressions may contain the operators +,-,*,/,%,^ (which means raise to the power of here), and ?: It may also contain a few standard functions. Basic terms are real numbers, x and y.\nExamples:\n x^3+2.5*x^2+5\n (x-300)*(y-200)/100\n y+sin(100*x)"); gcd[1].creator = GTextFieldCreate; hvarray[0][1] = &gcd[1]; hvarray[0][2] = NULL; /* GT: an expression describing the transformation applied to the Y coordinate */ label[2].text = (unichar_t *) _("Y Expr:"); label[2].text_is_1byte = true; gcd[2].gd.label = &label[2]; gcd[2].gd.pos.x = 10; gcd[2].gd.pos.y = gcd[0].gd.pos.y+26; gcd[2].gd.flags = gg_visible | gg_enabled | gg_utf8_popup; gcd[2].gd.popup_msg = (unichar_t *) _("These expressions may contain the operators +,-,*,/,%,^ (which means raise to the power of here), and ?: It may also contain a few standard functions. Basic terms are real numbers, x and y.\nExamples:\n x^3+2.5*x^2+5\n (x-300)*(y-200)/100\n y+sin(100*x)"); gcd[2].creator = GLabelCreate; hvarray[1][0] = &gcd[2]; if ( lasty!=NULL ) label[3].text = lasty; else { label[3].text = (unichar_t *) "y"; label[3].text_is_1byte = true; } gcd[3].gd.label = &label[3]; gcd[3].gd.pos.x = gcd[1].gd.pos.x; gcd[3].gd.pos.y = gcd[1].gd.pos.y+26; gcd[3].gd.pos.width = gcd[1].gd.pos.width; gcd[3].gd.flags = gg_visible | gg_enabled | gg_utf8_popup; gcd[3].gd.popup_msg = (unichar_t *) _("These expressions may contain the operators +,-,*,/,%,^ (which means raise to the power of here), and ?: It may also contain a few standard functions. Basic terms are real numbers, x and y.\nExamples:\n x^3+2.5*x^2+5\n (x-300)*(y-200)/100\n y+sin(100*x)"); gcd[3].creator = GTextFieldCreate; 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][0] = &boxes[2]; varray[0][1] = NULL; gcd[4].gd.pos.x = 30-3; gcd[4].gd.pos.y = gcd[3].gd.pos.y+30; 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.label = &label[4]; gcd[4].gd.cid = true; gcd[4].creator = GButtonCreate; barray[0] = GCD_Glue; barray[1] = &gcd[4]; barray[2] = GCD_Glue; gcd[5].gd.pos.x = -30; gcd[5].gd.pos.y = gcd[4].gd.pos.y+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.cid = false; gcd[5].creator = GButtonCreate; barray[3] = GCD_Glue; barray[4] = &gcd[5]; barray[5] = GCD_Glue; barray[6] = NULL; boxes[3].gd.flags = gg_enabled|gg_visible; boxes[3].gd.u.boxelements = barray; boxes[3].creator = GHBoxCreate; varray[1][0] = &boxes[3]; varray[1][1] = NULL; varray[2][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(d.gw,boxes); GHVBoxSetExpandableCol(boxes[2].ret,1); GHVBoxSetExpandableCol(boxes[3].ret,gb_expandgluesame); GHVBoxFitWindow(boxes[0].ret); GDrawSetVisible(d.gw,true); while ( !d.done ) { GDrawProcessOneEvent(NULL); if ( d.done && d.ok ) { expstr = cu_copy(_GGadgetGetTitle(gcd[1].ret)); c.had_error = false; if ( (c.x_expr = nlt_parseexpr(&c,expstr))==NULL ) d.done = d.ok = false; else { free(expstr); c.had_error = false; expstr = cu_copy(_GGadgetGetTitle(gcd[3].ret)); if ( (c.y_expr = nlt_parseexpr(&c,expstr))==NULL ) { d.done = d.ok = false; nlt_exprfree(c.x_expr); } else { free(expstr); free(lasty); free(lastx); lastx = GGadgetGetTitle(gcd[1].ret); lasty = GGadgetGetTitle(gcd[3].ret); } } } } if ( d.ok ) { if ( fv!=NULL ) _SFNLTrans((FontViewBase *) fv,&c); else CVNLTrans((CharViewBase *) cv,&c); nlt_exprfree(c.x_expr); nlt_exprfree(c.y_expr); } GDrawDestroyWindow(d.gw); }
void DeltaSuggestionDlg(FontView *fv,CharView *cv) { GRect pos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[13], boxes[4]; GTextInfo label[13]; GGadgetCreateData *varray[7][5], *barray[9]; char dpi_buffer[40], within_buffer[40]; QGData *data; int failed = false; int k, r; FontView *savefv; if ( !hasFreeType() ) { ff_post_error(_("No FreeType"),_("You must install the freetype library before using this command.")); return; } if ( !hasFreeTypeByteCode() ) { ff_post_error(_("No FreeType"),_("Your version of the freetype library does not contain the bytecode interpreter.")); return; } if ( delta_sizes==NULL ) delta_sizes = copy("7-40,72,80,88,96"); data = calloc(1,sizeof(QGData)); data->fv = (FontViewBase *) fv; data->cv = cv; if ( cv!=NULL ) { data->sc = cv->b.sc; savefv = (FontView *) cv->b.fv; data->layer = CVLayer((CharViewBase *) cv); if ( !data->sc->parent->layers[data->layer].order2 ) failed = true; if ( !failed && data->sc->ttf_instrs_len==0 ) ff_post_notice(_("No Instructions"),_("This glyph has no instructions. Adding instructions (a DELTA) may change its rasterization significantly.")); cv->qg = data; cv->note_x = cv->note_y = 32766; } else { savefv = fv; data->layer = fv->b.active_layer; if ( !fv->b.sf->layers[data->layer].order2 ) failed = true; } if ( failed ) { ff_post_error(_("Not quadratic"),_("This must be a truetype layer.")); free(data); if ( cv!=NULL ) cv->qg = NULL; return; } savefv->qg = data; 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 = _("DELTA suggestions"); wattrs.is_dlg = true; pos.x = pos.y = 0; pos.width = GGadgetScale(GDrawPointsToPixels(NULL,190)); pos.height = GDrawPointsToPixels(NULL,106); data->gw = gw = GDrawCreateTopWindow(NULL,&pos,delta_e_h,data,&wattrs); memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); k=r=0; label[k].text = (unichar_t *) _( "When a curve passes very close to the center of a\n" "pixel you might want to check that the curve is on\n" "the intended side of that pixel.\n" "If it's on the wrong side, consider using a DELTA\n" "instruction to adjust the closest point at the\n" "current pixelsize." ); 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; varray[r][0] = &gcd[k-1]; varray[r][1] = GCD_ColSpan; varray[r][2] = GCD_ColSpan; varray[r][3] = GCD_ColSpan; varray[r++][4] = NULL; label[k].text = (unichar_t *) _("Rasterize at sizes:"); 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; label[k].text = (unichar_t *) delta_sizes; 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_Sizes; gcd[k++].creator = GTextFieldCreate; varray[r][0] = &gcd[k-2]; varray[r][1] = &gcd[k-1]; varray[r][2] = GCD_ColSpan; varray[r][3] = GCD_ColSpan; varray[r++][4] = NULL; 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.flags = gg_enabled|gg_visible; gcd[k++].creator = GLabelCreate; sprintf( dpi_buffer, "%d", delta_dpi ); label[k].text = (unichar_t *) dpi_buffer; label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.width = 40; gcd[k].gd.cid = CID_DPI; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k++].creator = GTextFieldCreate; 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.flags = delta_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.flags = delta_depth!=1 ? (gg_enabled|gg_visible|gg_cb_on) : (gg_enabled|gg_visible); gcd[k++].creator = GRadioCreate; varray[r][0] = &gcd[k-4]; varray[r][1] = &gcd[k-3]; varray[r][2] = &gcd[k-2]; varray[r][3] = &gcd[k-1]; varray[r++][4] = NULL; label[k].text = (unichar_t *) _("Proximity:"); 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; sprintf( within_buffer, "%g", delta_within ); label[k].text = (unichar_t *) within_buffer; 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.pos.width = 40; gcd[k].gd.cid = CID_Within; gcd[k++].creator = GTextFieldCreate; label[k].text = (unichar_t *) _("pixels"); 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; varray[r][0] = &gcd[k-3]; varray[r][1] = &gcd[k-2]; varray[r][2] = &gcd[k-1]; varray[r][3] = GCD_ColSpan; varray[r++][4] = NULL; label[k].text = (unichar_t *) _( "This may take a while. Please be patient..." ); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled; gcd[k].gd.cid = CID_Msg; gcd[k++].creator = GLabelCreate; varray[r][0] = &gcd[k-1]; varray[r][1] = GCD_ColSpan; varray[r][2] = GCD_ColSpan; varray[r][3] = GCD_ColSpan; varray[r++][4] = 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 = Delta_OK; gcd[k].gd.cid = CID_Ok; gcd[k++].creator = GButtonCreate; barray[0] = GCD_Glue; barray[1] = &gcd[k-1]; barray[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 = Delta_Cancel; gcd[k].gd.cid = CID_Cancel; gcd[k++].creator = GButtonCreate; barray[3] = GCD_Glue; barray[4] = &gcd[k-1]; barray[5] = GCD_Glue; barray[6] = NULL; boxes[2].gd.flags = gg_enabled|gg_visible; boxes[2].gd.u.boxelements = barray; boxes[2].creator = GHBoxCreate; varray[r][0] = &boxes[2]; varray[r][1] = GCD_ColSpan; varray[r][2] = GCD_ColSpan; varray[r][3] = GCD_ColSpan; varray[r++][4] = 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].gd.cid = CID_Top; boxes[0].creator = GHVGroupCreate; GGadgetsCreate(gw,boxes); GHVBoxFitWindow(boxes[0].ret); GDrawSetVisible(gw,true); while ( !data->done ) GDrawProcessOneEvent(NULL); GDrawDestroyWindow(gw); if ( data->cv!=NULL ) data->cv->qg = NULL; if ( savefv->qg == data ) savefv->qg = NULL; }
int GotoChar(SplineFont *sf,EncMap *map,int *merge_with_selection) { GRect pos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[9], boxes[3], *hvarray[6][2], *barray[10]; GTextInfo label[9]; static GotoData gd; GTextInfo *ranges = NULL; int k,j; if ( !map->enc->only_1byte ) ranges = AvailableRanges(sf,map); memset(&gd,0,sizeof(gd)); gd.sf = sf; gd.map = map; gd.ret = -1; gd.ranges = ranges; 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 = _("Goto"); wattrs.is_dlg = true; pos.x = pos.y = 0; pos.width = GGadgetScale(GDrawPointsToPixels(NULL,170)); pos.height = GDrawPointsToPixels(NULL,90); gd.gw = gw = GDrawCreateTopWindow(NULL,&pos,goto_e_h,&gd,&wattrs); memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); k=j=0; label[k].text = (unichar_t *) _("Enter the name of a glyph in the font"); 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][0] = &gcd[k++]; hvarray[j++][1] = NULL; gcd[k].gd.flags = gg_enabled|gg_visible|gg_text_xim; gcd[k].gd.cid = CID_Name; if ( ranges==NULL ) gcd[k].creator = GTextCompletionCreate; else { gcd[k].gd.u.list = ranges; gcd[k].creator = GListFieldCreate; } hvarray[j][0] = &gcd[k++]; hvarray[j++][1] = NULL; if ( merge_with_selection!=NULL ) { label[k].text = (unichar_t *) _("Merge into selection"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.cid = CID_MergeWithSelection; gcd[k].gd.flags = *merge_with_selection ? gg_enabled|gg_visible|gg_cb_on : gg_enabled|gg_visible; gcd[k].creator = GCheckBoxCreate; hvarray[j][0] = &gcd[k++]; hvarray[j++][1] = NULL; } hvarray[j][0] = GCD_Glue; hvarray[j++][1] = 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 = Goto_OK; gcd[k].creator = GButtonCreate; barray[0] = GCD_Glue; barray[1] = &gcd[k++]; barray[2] = GCD_Glue; barray[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 = Goto_Cancel; gcd[k].creator = GButtonCreate; barray[4] = GCD_Glue; barray[5] = &gcd[k++]; barray[6] = GCD_Glue; barray[7] = NULL; boxes[2].gd.flags = gg_visible | gg_enabled; boxes[2].gd.u.boxelements = barray; boxes[2].creator = GHBoxCreate; hvarray[j][0] = &boxes[2]; hvarray[j++][1] = NULL; hvarray[j][0] = NULL; boxes[0].gd.pos.x = boxes[0].gd.pos.y = 2; boxes[0].gd.flags = gg_visible | gg_enabled; boxes[0].gd.u.boxelements = hvarray[0]; boxes[0].creator = GHVGroupCreate; GGadgetsCreate(gw,boxes); GCompletionFieldSetCompletion(gcd[1].ret,GotoCompletion); GCompletionFieldSetCompletionMode(gcd[1].ret,true); GHVBoxSetExpandableRow(boxes[0].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[2].ret,gb_expandgluesame); GHVBoxFitWindow(boxes[0].ret); GDrawSetVisible(gw,true); while ( !gd.done ) GDrawProcessOneEvent(NULL); if ( merge_with_selection!=NULL ) *merge_with_selection = GGadgetIsChecked(GWidgetGetControl(gw,CID_MergeWithSelection)); GDrawDestroyWindow(gw); return( gd.ret ); }
void RemoveEncoding(void) { GRect pos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[5]; GTextInfo label[5]; Encoding *item; int done = 0; for ( item=enclist; item!=NULL && item->builtin; item=item->next ); if ( item==NULL ) return; memset(&gcd,0,sizeof(gcd)); memset(&label,0,sizeof(label)); 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 = _("Remove Encoding"); pos.x = pos.y = 0; pos.width = GGadgetScale(GDrawPointsToPixels(NULL,150)); pos.height = GDrawPointsToPixels(NULL,110); gw = GDrawCreateTopWindow(NULL,&pos,de_e_h,&done,&wattrs); gcd[0].gd.pos.x = 10; gcd[0].gd.pos.y = 6; gcd[0].gd.pos.width = 130; gcd[0].gd.pos.height = 5*12+10; gcd[0].gd.flags = gg_visible | gg_enabled; gcd[0].gd.cid = CID_Encodings; gcd[0].gd.u.list = EncodingList(); gcd[0].gd.handle_controlevent = DE_Delete; gcd[0].creator = GListCreate; gcd[2].gd.pos.x = -10; gcd[2].gd.pos.y = gcd[0].gd.pos.y+gcd[0].gd.pos.height+5; gcd[2].gd.pos.width = -1; gcd[2].gd.pos.height = 0; gcd[2].gd.flags = gg_visible | gg_enabled | gg_but_cancel ; label[2].text = (unichar_t *) _("_Cancel"); label[2].text_is_1byte = true; label[2].text_in_resource = true; gcd[2].gd.label = &label[2]; gcd[2].gd.mnemonic = 'C'; gcd[2].gd.handle_controlevent = DE_Cancel; gcd[2].creator = GButtonCreate; gcd[1].gd.pos.x = 10-3; gcd[1].gd.pos.y = gcd[2].gd.pos.y-3; gcd[1].gd.pos.width = -1; gcd[1].gd.pos.height = 0; gcd[1].gd.flags = gg_visible | gg_enabled | gg_but_default ; label[1].text = (unichar_t *) _("_Delete"); label[1].text_is_1byte = true; label[1].text_in_resource = true; gcd[1].gd.mnemonic = 'D'; gcd[1].gd.label = &label[1]; gcd[1].gd.handle_controlevent = DE_Delete; gcd[1].creator = GButtonCreate; gcd[3].gd.pos.x = 2; gcd[3].gd.pos.y = 2; gcd[3].gd.pos.width = pos.width-4; gcd[3].gd.pos.height = pos.height-2; gcd[3].gd.flags = gg_enabled | gg_visible | gg_pos_in_pixels; gcd[3].creator = GGroupCreate; GGadgetsCreate(gw,gcd); GTextInfoListFree(gcd[0].gd.u.list); GWidgetHidePalettes(); GDrawSetVisible(gw,true); while ( !done ) GDrawProcessOneEvent(NULL); GDrawDestroyWindow(gw); }
void CPEndInfo(CharView *cv) { if ( cv->ruler_w!=NULL ) { GDrawDestroyWindow(cv->ruler_w); cv->ruler_w = NULL; } }
void JustifyDlg(SplineFont *sf) { Jstf_Dlg jd; GRect pos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[4], boxes[3]; GGadgetCreateData *varray[6], *harray3[8]; GTextInfo label[4]; struct matrixinit mi; int i,j,k; LookupUIInit(); JustUIInit(); memset(&jd,0,sizeof(jd)); jd.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 = _("Justified Scripts"); pos.x = pos.y = 0; pos.width =GDrawPointsToPixels(NULL,GGadgetScale(268)); pos.height = GDrawPointsToPixels(NULL,375); jd.gw = gw = GDrawCreateTopWindow(NULL,&pos,jscripts_e_h,&jd,&wattrs); JScriptMatrixInit(&mi,sf->justify); 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_Scripts; gcd[k].gd.u.matrix = &mi; gcd[k].gd.popup_msg = (unichar_t *) _( "A list of scripts with special justification needs"); 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_Script_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 = Justify_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_("Script|New")); GMatrixEditSetUpDownVisible(gcd[0].ret,true); GMatrixEditShowColumn(gcd[0].ret,3,false); GHVBoxSetExpandableCol(boxes[0].ret,gb_expandgluesame); GHVBoxFitWindow(boxes[1].ret); GDrawSetVisible(gw,true); while ( !jd.done ) GDrawProcessOneEvent(NULL); GDrawDestroyWindow(gw); }
static void StartDeltaDisplay(QGData *qg) { GWindowAttrs wattrs; GRect pos; GWindow gw, oldgw = qg->gw; GGadgetCreateData gcd[8], boxes[5], *harray[4], *harray2[5], *butarray[8], *varray[4]; GTextInfo label[8]; int i, k; FontRequest rq; int as, ds, ld; static GFont *valfont=NULL; static int sorts_translated = 0; if (!sorts_translated) { for (i=0; i<sizeof(sorts)/sizeof(sorts[0]); i++) sorts[i].text = (unichar_t *) _((char *) sorts[i].text); for (i=0; i<sizeof(glyphsorts)/sizeof(glyphsorts[0]); i++) glyphsorts[i].text = (unichar_t *) _((char *) glyphsorts[i].text); sorts_translated=1; } memset(&wattrs,0,sizeof(wattrs)); wattrs.mask = wam_events|wam_cursor|wam_utf8_wtitle|wam_undercursor|wam_isdlg; wattrs.event_masks = -1; wattrs.cursor = ct_mypointer; wattrs.utf8_window_title = _("Potential spots for Delta instructions"); wattrs.is_dlg = true; wattrs.undercursor = 1; pos.x = pos.y = 0; pos.width = GDrawPointsToPixels(NULL,200); pos.height = GDrawPointsToPixels(NULL,300); qg->gw = gw = GDrawCreateTopWindow(NULL,&pos,qg_e_h,qg,&wattrs); qg->done = false; if ( valfont==NULL ) { memset(&rq,0,sizeof(rq)); rq.utf8_family_name = "Helvetica"; rq.point_size = 11; rq.weight = 400; valfont = GDrawInstanciateFont(gw,&rq); valfont = GResourceFindFont("Validate.Font",valfont); } qg->font = valfont; GDrawWindowFontMetrics(gw,qg->font,&as,&ds,&ld); qg->fh = as+ds; qg->as = as; memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); k = 0; label[k].text = (unichar_t *) _("Sort:"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k++].creator = GLabelCreate; sorts[0].selected = true; sorts[1].selected = sorts[2].selected = false; sorts[2].disabled = qg->fv==NULL; gcd[k].gd.u.list = sorts; gcd[k].gd.cid = CID_Sort; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.handle_controlevent = QGSorter; gcd[k++].creator = GListButtonCreate; label[k].text = (unichar_t *) _("Glyph:"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k++].creator = GLabelCreate; gcd[k].gd.u.list = glyphsorts; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.cid = CID_GlyphSort; gcd[k].gd.handle_controlevent = QGSorter; gcd[k++].creator = GListButtonCreate; if ( qg->fv==NULL ) gcd[k-1].gd.flags = gcd[k-2].gd.flags = gg_enabled; harray2[0] = &gcd[k-4]; harray2[1] = &gcd[k-3]; harray2[2] = &gcd[k-2]; harray2[3] = &gcd[k-1]; harray2[4] = NULL; gcd[k].gd.flags = gg_visible | gg_enabled; gcd[k].gd.u.drawable_e_h = qgv_e_h; gcd[k++].creator = GDrawableCreate; gcd[k].gd.flags = gg_visible | gg_enabled | gg_sb_vert; gcd[k].gd.handle_controlevent = QG_VScroll; gcd[k++].creator = GScrollBarCreate; harray[0] = &gcd[k-2]; harray[1] = &gcd[k-1]; harray[2] = NULL; harray[3] = 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 = QG_OK; gcd[k++].creator = GButtonCreate; butarray[0] = GCD_Glue; butarray[1] = &gcd[k-1]; butarray[2] = GCD_Glue; butarray[3] = NULL; boxes[2].gd.flags = gg_enabled|gg_visible; boxes[2].gd.u.boxelements = harray; boxes[2].creator = GHVGroupCreate; boxes[3].gd.flags = gg_enabled|gg_visible; boxes[3].gd.u.boxelements = butarray; boxes[3].creator = GHBoxCreate; boxes[4].gd.flags = gg_enabled|gg_visible; boxes[4].gd.u.boxelements = harray2; boxes[4].creator = GHBoxCreate; varray[0] = &boxes[4]; varray[1] = &boxes[2]; varray[2] = &boxes[3]; varray[3] = NULL; boxes[0].gd.flags = gg_enabled|gg_visible; boxes[0].gd.u.boxelements = varray; boxes[0].creator = GVBoxCreate; GGadgetsCreate(gw,boxes); qg->vsb = gcd[5].ret; qg->v = GDrawableGetWindow(gcd[4].ret); GHVBoxSetExpandableRow(boxes[0].ret,1); GHVBoxSetExpandableCol(boxes[2].ret,0); GHVBoxSetPadding(boxes[2].ret,0,0); GHVBoxSetExpandableCol(boxes[3].ret,gb_expandglue); GHVBoxFitWindow(boxes[0].ret); QGDoSort(qg); GDrawSetVisible(gw,true); while ( !qg->done ) GDrawProcessOneEvent(NULL); GDrawDestroyWindow(gw); qgnodeFree(&qg->list); qg->gw = oldgw; }
int PointOfViewDlg(struct pov_data *pov, SplineFont *sf, int flags) { static struct pov_data def = { or_center, or_value, 0, 0, .1, 0, 3.1415926535897932/16, .2, 0 }; double emsize = (sf->ascent + sf->descent); struct nldlg d; GRect pos; GWindowAttrs wattrs; GGadgetCreateData gcd[24], boxes[7], *varray[10][3], *harray1[3], *harray2[3], *barray[9], *harray3[3], *harray4[3]; GTextInfo label[24]; int i,k,l; char xval[40], yval[40], zval[40], dval[40], tval[40], dirval[40]; double x,y,z,dv,tilt,dir; int err; static int done = false; if ( !done ) { done = true; for ( i=0; originx[i].text!=NULL; ++i ) originx[i].text = (unichar_t *) _((char *) originx[i].text); for ( i=0; originy[i].text!=NULL; ++i ) originy[i].text = (unichar_t *) _((char *) originy[i].text); } *pov = def; pov->x *= emsize; pov->y *= emsize; pov->z *= emsize; pov->d *= emsize; if ( !(flags&1) ) { if ( pov->xorigin == or_lastpress ) pov->xorigin = or_center; if ( pov->yorigin == or_lastpress ) pov->yorigin = or_center; } memset(&d,'\0',sizeof(d)); 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 = _("Point of View Projection"); pos.x = pos.y = 0; pos.width = GGadgetScale(GDrawPointsToPixels(NULL,240)); pos.height = GDrawPointsToPixels(NULL,216); d.gw = GDrawCreateTopWindow(NULL,&pos,nld_e_h,&d,&wattrs); memset(gcd,0,sizeof(gcd)); memset(boxes,0,sizeof(boxes)); memset(label,0,sizeof(label)); k=l=0; label[k].text = (unichar_t *) _("View Point"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 10; gcd[k].gd.pos.y = 8; gcd[k].gd.flags = gg_visible | gg_enabled; gcd[k++].creator = GLabelCreate; varray[l][0] = &gcd[k-1]; varray[l][1] = GCD_ColSpan; varray[l++][2] = NULL; 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 = 10; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y + 16; gcd[k].gd.flags = gg_visible | gg_enabled; gcd[k++].creator = GLabelCreate; harray1[0] = &gcd[k-1]; for ( i=or_zero; i<or_undefined; ++i ) originx[i].selected = false; originx[pov->xorigin].selected = true; originx[or_lastpress].disabled = !(flags&1); gcd[k].gd.pos.x = 23; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y-4; gcd[k].gd.flags = gg_visible | gg_enabled; gcd[k].gd.label = &originx[pov->xorigin]; gcd[k].gd.u.list = originx; gcd[k].gd.cid = CID_XType; gcd[k++].creator = GListButtonCreate; 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[l][0] = &boxes[2]; sprintf( xval, "%g", rint(pov->x)); label[k].text = (unichar_t *) xval; label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 160; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y; gcd[k].gd.pos.width = 60; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.handle_controlevent = PoV_Vanish; gcd[k].gd.cid = CID_XValue; gcd[k++].creator = GTextFieldCreate; varray[l][1] = &gcd[k-1]; varray[l++][2] = NULL; label[k].text = (unichar_t *) _("_Y"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = gcd[k-3].gd.pos.x; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y + 28; gcd[k].gd.flags = gg_visible | gg_enabled; gcd[k++].creator = GLabelCreate; harray2[0] = &gcd[k-1]; for ( i=or_zero; i<or_undefined; ++i ) originy[i].selected = false; originy[pov->yorigin].selected = true; originy[or_lastpress].disabled = !(flags&1); gcd[k].gd.pos.x = gcd[k-3].gd.pos.x; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y-4; gcd[k].gd.flags = gg_visible | gg_enabled; gcd[k].gd.label = &originy[pov->yorigin]; gcd[k].gd.u.list = originy; gcd[k].gd.cid = CID_YType; gcd[k++].creator = GListButtonCreate; 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[l][0] = &boxes[3]; sprintf( yval, "%g", rint(pov->y)); label[k].text = (unichar_t *) yval; label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = gcd[k-3].gd.pos.x; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y; gcd[k].gd.pos.width = gcd[k-3].gd.pos.width; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.cid = CID_YValue; gcd[k].gd.handle_controlevent = PoV_Vanish; gcd[k++].creator = GTextFieldCreate; varray[l][1] = &gcd[k-1]; varray[l++][2] = NULL; label[k].text = (unichar_t *) _("Distance to drawing plane:"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 10; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y + 28; gcd[k].gd.flags = gg_visible | gg_enabled; gcd[k++].creator = GLabelCreate; varray[l][0] = &gcd[k-1]; sprintf( zval, "%g", rint(pov->z)); label[k].text = (unichar_t *) zval; label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 160; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y-4; gcd[k].gd.pos.width = 60; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.handle_controlevent = PoV_Vanish; gcd[k].gd.cid = CID_ZValue; gcd[k++].creator = GTextFieldCreate; varray[l][1] = &gcd[k-1]; varray[l++][2] = NULL; label[k].text = (unichar_t *) _("Distance to projection plane:"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = gcd[k-2].gd.pos.x; gcd[k].gd.pos.y = gcd[k-2].gd.pos.y + 24; gcd[k].gd.flags = gg_visible | gg_enabled; gcd[k++].creator = GLabelCreate; varray[l][0] = &gcd[k-1]; sprintf( dval, "%g", rint(pov->d)); label[k].text = (unichar_t *) dval; label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 160; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y-4; gcd[k].gd.pos.width = 60; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.handle_controlevent = PoV_Vanish; gcd[k].gd.cid = CID_DValue; gcd[k++].creator = GTextFieldCreate; varray[l][1] = &gcd[k-1]; varray[l++][2] = NULL; label[k].text = (unichar_t *) _("Drawing plane tilt:"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = gcd[k-2].gd.pos.x; gcd[k].gd.pos.y = gcd[k-2].gd.pos.y + 24; gcd[k].gd.flags = gg_visible | gg_enabled; gcd[k++].creator = GLabelCreate; varray[l][0] = &gcd[k-1]; sprintf( tval, "%g", rint(pov->tilt*180/3.1415926535897932)); label[k].text = (unichar_t *) tval; label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 160; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y-4; gcd[k].gd.pos.width = 40; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.handle_controlevent = PoV_Vanish; gcd[k].gd.cid = CID_Tilt; gcd[k++].creator = GTextFieldCreate; harray3[0] = &gcd[k-1]; label[k].text = (unichar_t *) U_("°"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = gcd[k-1].gd.pos.x+gcd[k-1].gd.pos.width+3; gcd[k].gd.pos.y = gcd[k-2].gd.pos.y; gcd[k].gd.flags = gg_visible | gg_enabled; gcd[k++].creator = GLabelCreate; 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[l][1] = &boxes[4]; varray[l++][2] = NULL; label[k].text = (unichar_t *) _("Direction of gaze:"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = gcd[k-3].gd.pos.x; gcd[k].gd.pos.y = gcd[k-3].gd.pos.y + 24; gcd[k].gd.flags = gg_visible | gg_enabled; gcd[k++].creator = GLabelCreate; varray[l][0] = &gcd[k-1]; sprintf( dirval, "%g", rint(pov->direction*180/3.1415926535897932)); label[k].text = (unichar_t *) dirval; label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 160; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y-4; gcd[k].gd.pos.width = 40; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.handle_controlevent = PoV_Vanish; gcd[k].gd.cid = CID_GazeDirection; gcd[k++].creator = GTextFieldCreate; harray4[0] = &gcd[k-1]; label[k].text = (unichar_t *) U_("°"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = gcd[k-1].gd.pos.x+gcd[k-1].gd.pos.width+3; gcd[k].gd.pos.y = gcd[k-2].gd.pos.y; gcd[k].gd.flags = gg_visible | gg_enabled; gcd[k++].creator = GLabelCreate; harray4[1] = &gcd[k-1]; harray4[2] = NULL; boxes[5].gd.flags = gg_enabled|gg_visible; boxes[5].gd.u.boxelements = harray4; boxes[5].creator = GHBoxCreate; varray[l][1] = &boxes[5]; varray[l++][2] = NULL; label[k].text = (unichar_t *) _("Vanishing Point:"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 10; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+18; gcd[k].gd.flags = gg_visible | gg_enabled | gg_utf8_popup; gcd[k].gd.popup_msg = (unichar_t *) _("This is the approximate location of the vanishing point.\nIt does not include the offset induced by \"Center of selection\"\nnor \"Last Press\"."); gcd[k++].creator = GLabelCreate; varray[l][0] = &gcd[k-1]; label[k].text = (unichar_t *) "123456.,123456."; label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 160; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y; gcd[k].gd.flags = gg_visible | gg_enabled | gg_utf8_popup; gcd[k].gd.popup_msg = (unichar_t *) _("This is the approximate location of the vanishing point.\nIt does not include the offset induced by \"Center of selection\"\nnor \"Last Press\"."); gcd[k].gd.cid = CID_Vanish; gcd[k++].creator = GLabelCreate; varray[l][1] = &gcd[k-1]; varray[l++][2] = NULL; gcd[k].gd.pos.x = 30-3; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+18; 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.cid = true; gcd[k++].creator = GButtonCreate; barray[0] = GCD_Glue; barray[1] = &gcd[k-1]; barray[2] = GCD_Glue; gcd[k].gd.pos.x = -30; gcd[k].gd.pos.y = gcd[k-1].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.cid = false; gcd[k++].creator = GButtonCreate; barray[3] = GCD_Glue; barray[4] = &gcd[k-1]; barray[5] = GCD_Glue; barray[6] = NULL; boxes[6].gd.flags = gg_enabled|gg_visible; boxes[6].gd.u.boxelements = barray; boxes[6].creator = GHBoxCreate; varray[l][0] = &boxes[6]; varray[l][1] = GCD_ColSpan; varray[l++][2] = NULL; varray[l][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(d.gw,boxes); GHVBoxFitWindow(boxes[0].ret); PoV_DoVanish(&d); GDrawSetVisible(d.gw,true); while ( !d.done ) { GDrawProcessOneEvent(NULL); if ( d.done ) { if ( !d.ok ) { GDrawDestroyWindow(d.gw); return( -1 ); } err = false; x = GetReal8(d.gw,CID_XValue,_("_X"),&err); y = GetReal8(d.gw,CID_YValue,_("_Y"),&err); z = GetReal8(d.gw,CID_ZValue,_("Distance to drawing plane:"),&err); dv = GetReal8(d.gw,CID_DValue,_("Distance to projection plane:"),&err); tilt = GetReal8(d.gw,CID_Tilt,_("Drawing plane tilt:"),&err); dir = GetReal8(d.gw,CID_GazeDirection,_("Direction of gaze:"),&err); if ( err ) { d.done = d.ok = false; continue; } pov->x = x; pov->y = y; pov->z = z; pov->d = dv; pov->tilt = tilt*3.1415926535897932/180; pov->direction = dir*3.1415926535897932/180; pov->xorigin = GGadgetGetFirstListSelectedItem( GWidgetGetControl(d.gw,CID_XType)); pov->yorigin = GGadgetGetFirstListSelectedItem( GWidgetGetControl(d.gw,CID_YType)); } } GDrawDestroyWindow(d.gw); def = *pov; def.x /= emsize; def.y /= emsize; def.z /= emsize; def.d /= emsize; return( 0 ); /* -1 => Canceled */ }
void AnchorControl(SplineChar *sc,AnchorPoint *ap,int layer) { GRect pos; GWindowAttrs wattrs; AnchorDlg a; GWindow gw; GGadgetCreateData gcd[15], buttonbox, maingcd[3], *hvarray[60], *buttonarray[8]; GGadgetCreateData glyphbox, *glypharray[5]; GTextInfo label[16]; int k, hv; extern int _GScrollBar_Width; char buffer[20], xbuf[20], ybuf[20]; GRect boxsize; memset(&a,0,sizeof(a)); a.sc = sc; a.ap = ap; a.apos = ap->me; a.pixelsize = aa_pixelsize; a.magfactor = 1; a.layer = layer; if ( ap->xadjust.corrections!=NULL ) { int len = ap->xadjust.last_pixel_size-ap->xadjust.first_pixel_size+1; a.xadjust = ap->xadjust; a.xadjust.corrections = malloc(len); memcpy(a.xadjust.corrections,ap->xadjust.corrections,len); } if ( ap->yadjust.corrections!=NULL ) { int len = ap->yadjust.last_pixel_size-ap->yadjust.first_pixel_size+1; a.yadjust = ap->yadjust; a.yadjust.corrections = malloc(len); memcpy(a.yadjust.corrections,ap->yadjust.corrections,len); } 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 = true; wattrs.undercursor = 1; wattrs.cursor = ct_pointer; wattrs.utf8_window_title = _("Anchor Control..."); wattrs.is_dlg = true; GDrawGetSize(GDrawGetRoot(NULL),&pos); pos.x = pos.y = 0; pos.height = GDrawPointsToPixels(NULL,210); if ( pos.height<aa_pixelsize+40+25 ) pos.height = aa_pixelsize+40+25; pos.width -= 50; a.gw = gw = GDrawCreateTopWindow(NULL,&pos,anchord_e_h,&a,&wattrs); a.ctl_len = GDrawPointsToPixels(gw,140); a.sb_height = GDrawPointsToPixels(gw,_GScrollBar_Width); a.sb_base = pos.height - a.sb_height; memset(maingcd,0,sizeof(maingcd)); memset(&buttonbox,0,sizeof(buttonbox)); memset(&glyphbox,0,sizeof(glyphbox)); memset(gcd,0,sizeof(gcd)); memset(label,0,sizeof(label)); k = hv = 0; gcd[k].gd.flags = gg_visible|gg_enabled ; gcd[k].gd.cid = CID_Glyph; gcd[k].gd.handle_controlevent = AnchorD_GlyphChanged; gcd[k++].creator = GListButtonCreate; glypharray[0] = GCD_Glue; glypharray[1] = &gcd[k-1]; glypharray[2] = GCD_Glue; glypharray[3] = NULL; glyphbox.gd.flags = gg_enabled|gg_visible; glyphbox.gd.u.boxelements = glypharray; glyphbox.creator = GHBoxCreate; hvarray[hv++] = &glyphbox; hvarray[hv++] = GCD_ColSpan; hvarray[hv++] = GCD_ColSpan; hvarray[hv++] = GCD_ColSpan; hvarray[hv++] = GCD_Glue; hvarray[hv++] = NULL; 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.pos.x = 5; gcd[k].gd.pos.y = 9; gcd[k].gd.flags = gg_visible|gg_enabled | gg_utf8_popup; gcd[k++].creator = GLabelCreate; hvarray[hv++] = &gcd[k-1]; hvarray[hv++] = GCD_ColSpan; sprintf( buffer, "%d", a.pixelsize ); label[k].text = (unichar_t *) buffer; label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 40; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y-4; gcd[k].gd.pos.width = 60; gcd[k].gd.flags = gg_visible|gg_enabled | gg_utf8_popup ; gcd[k].gd.cid = CID_DisplaySize; gcd[k].gd.handle_controlevent = AnchorD_DisplaySizeChanged; gcd[k].gd.popup_msg = gcd[k-1].gd.popup_msg = (unichar_t *) _("The size at which the current glyph is rasterized.\nFor small pixelsize you may want to use the magnification\nfactor below to get a clearer view.\n\nThe pulldown list contains the pixelsizes at which there\nare device table corrections."); gcd[k++].creator = GListFieldCreate; hvarray[hv++] = &gcd[k-1]; hvarray[hv++] = GCD_ColSpan; hvarray[hv++] = GCD_Glue; hvarray[hv++] = NULL; /* GT: Short for: Magnification */ label[k].text = (unichar_t *) _("Mag:"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 10; gcd[k].gd.pos.y = gcd[k-2].gd.pos.y+26; gcd[k].gd.flags = gg_visible|gg_enabled | gg_utf8_popup ; gcd[k++].creator = GLabelCreate; hvarray[hv++] = GCD_HPad10; hvarray[hv++] = &gcd[k-1]; hvarray[hv++] = GCD_ColSpan; gcd[k].gd.pos.x = 45; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y-4; gcd[k].gd.flags = gg_visible|gg_enabled | gg_utf8_popup ; gcd[k].gd.cid = CID_Mag; gcd[k].gd.u.list = magnifications; gcd[k].gd.handle_controlevent = AnchorD_MagnificationChanged; gcd[k].gd.popup_msg = gcd[k-1].gd.popup_msg = (unichar_t *) _("The glyph is rasterized at the size above, but it\nmay be difficult to see the alignment errors\nthat can happen at small pixelsizes. This allows\nyou to expand each pixel to show potential problems\nbetter."); gcd[k++].creator = GListButtonCreate; hvarray[hv++] = &gcd[k-1]; hvarray[hv++] = GCD_Glue; hvarray[hv++] = NULL; 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 = gcd[k-1].gd.pos.y+30; gcd[k].gd.flags = gg_visible|gg_enabled | gg_utf8_popup ; gcd[k++].creator = GLabelCreate; hvarray[hv++] = &gcd[k-1]; hvarray[hv++] = GCD_ColSpan; sprintf( xbuf, "%d", (int) rint(ap->me.x) ); label[k].text = (unichar_t *) xbuf; label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 40; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y-4; gcd[k].gd.pos.width = 60; gcd[k].gd.flags = gg_visible|gg_enabled | gg_utf8_popup ; gcd[k].gd.cid = CID_X; gcd[k].gd.handle_controlevent = AnchorD_PositionChanged; gcd[k].gd.popup_msg = gcd[k-1].gd.popup_msg = (unichar_t *) _("The X coordinate of the anchor point in this glyph"); gcd[k++].creator = GNumericFieldCreate; hvarray[hv++] = &gcd[k-1]; hvarray[hv++] = GCD_ColSpan; hvarray[hv++] = GCD_Glue; hvarray[hv++] = NULL; /* GT: Short for Correction */ label[k].text = (unichar_t *) _("Cor:"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 10; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+30; gcd[k].gd.flags = gg_visible|gg_enabled | gg_utf8_popup ; gcd[k].gd.popup_msg = (unichar_t *) _("Correction in pixels to the horizontal positioning of this anchor point\nwhen rasterizing at the given pixelsize.\n(Lives in a Device Table)"); gcd[k++].creator = GLabelCreate; hvarray[hv++] = GCD_HPad10; hvarray[hv++] = &gcd[k-1]; hvarray[hv++] = GCD_ColSpan; label[k].text = (unichar_t *) "0"; label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 45; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y-4; gcd[k].gd.pos.width = 60; gcd[k].gd.flags = gg_visible|gg_enabled | gg_utf8_popup ; gcd[k].gd.cid = CID_XCor; gcd[k].gd.handle_controlevent = AnchorD_CorrectionChanged; gcd[k].gd.popup_msg = gcd[k-1].gd.popup_msg = (unichar_t *) _("This is the number of pixels by which the anchor\nshould be moved horizontally when the glyph is\nrasterized at the above size. This information\nis part of the device table for this anchor.\nDevice tables are particularly important at small\npixelsizes where rounding errors will have a\nproportionally greater effect."); gcd[k++].creator = GNumericFieldCreate; hvarray[hv++] = &gcd[k-1]; hvarray[hv++] = GCD_Glue; hvarray[hv++] = NULL; label[k].text = (unichar_t *) _("_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 = gcd[k-1].gd.pos.y+30; gcd[k].gd.flags = gg_visible|gg_enabled | gg_utf8_popup ; gcd[k++].creator = GLabelCreate; hvarray[hv++] = &gcd[k-1]; hvarray[hv++] = GCD_ColSpan; sprintf( ybuf, "%d", (int) rint(ap->me.y) ); label[k].text = (unichar_t *) ybuf; label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 40; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y-4; gcd[k].gd.pos.width = 60; gcd[k].gd.flags = gg_visible|gg_enabled | gg_utf8_popup ; gcd[k].gd.cid = CID_Y; gcd[k].gd.handle_controlevent = AnchorD_PositionChanged; gcd[k].gd.popup_msg = gcd[k-1].gd.popup_msg = (unichar_t *) _("The Y coordinate of the anchor point in this glyph"); gcd[k++].creator = GNumericFieldCreate; hvarray[hv++] = &gcd[k-1]; hvarray[hv++] = GCD_ColSpan; hvarray[hv++] = GCD_Glue; hvarray[hv++] = NULL; /* GT: Short for Correction */ label[k].text = (unichar_t *) _("Cor:"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 10; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+30; gcd[k].gd.flags = gg_visible|gg_enabled | gg_utf8_popup ; gcd[k].gd.popup_msg = (unichar_t *) _("Correction in pixels to the horizontal positioning of this anchor point\nwhen rasterizing at the given pixelsize.\n(Lives in a Device Table)"); gcd[k++].creator = GLabelCreate; hvarray[hv++] = GCD_HPad10; hvarray[hv++] = &gcd[k-1]; hvarray[hv++] = GCD_ColSpan; label[k].text = (unichar_t *) "0"; label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 45; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y-4; gcd[k].gd.pos.width = 60; gcd[k].gd.flags = gg_visible|gg_enabled | gg_utf8_popup ; gcd[k].gd.cid = CID_YCor; gcd[k].gd.handle_controlevent = AnchorD_CorrectionChanged; gcd[k].gd.popup_msg = gcd[k-1].gd.popup_msg = (unichar_t *) _("This is the number of pixels by which the anchor\nshould be moved vertically when the glyph is\nrasterized at the above size. This information\nis part of the device table for this anchor.\nDevice tables are particularly important at small\npixelsizes where rounding errors will have a\nproportionally greater effect."); gcd[k++].creator = GNumericFieldCreate; hvarray[hv++] = &gcd[k-1]; hvarray[hv++] = GCD_Glue; hvarray[hv++] = NULL; hvarray[hv++] = GCD_Glue; hvarray[hv++] = GCD_Glue; hvarray[hv++] = GCD_Glue; hvarray[hv++] = GCD_Glue; hvarray[hv++] = GCD_Glue; hvarray[hv++] = NULL; 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.pos.x = 5; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+40; gcd[k].gd.pos.width = -1; gcd[k].gd.flags = gg_visible|gg_enabled|gg_but_default; gcd[k].gd.handle_controlevent = AnchorD_OK; gcd[k++].creator = GButtonCreate; buttonarray[0] = GCD_Glue; buttonarray[1] = &gcd[k-1]; buttonarray[2] = GCD_Glue; 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 = 80; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+3; gcd[k].gd.pos.width = -1; gcd[k].gd.flags = gg_visible|gg_enabled|gg_but_cancel; gcd[k].gd.handle_controlevent = AnchorD_Cancel; gcd[k++].creator = GButtonCreate; buttonarray[3] = GCD_Glue; buttonarray[4] = &gcd[k-1]; buttonarray[5] = GCD_Glue; buttonarray[6] = NULL; buttonbox.gd.flags = gg_enabled|gg_visible; buttonbox.gd.u.boxelements = buttonarray; buttonbox.creator = GHBoxCreate; hvarray[hv++] = &buttonbox; hvarray[hv++] = GCD_ColSpan; hvarray[hv++] = GCD_ColSpan; hvarray[hv++] = GCD_ColSpan; hvarray[hv++] = GCD_Glue; hvarray[hv++] = NULL; hvarray[hv++] = NULL; maingcd[0].gd.pos.x = maingcd[0].gd.pos.y = 5; maingcd[0].gd.pos.height = pos.height - 10; /* maingcd[0].gd.pos.width = a.ctl_len - 10; */ maingcd[0].gd.flags = gg_enabled|gg_visible|gg_pos_in_pixels; maingcd[0].gd.u.boxelements = hvarray; maingcd[0].creator = GHVBoxCreate; maingcd[1].gd.pos.x = 300; maingcd[1].gd.pos.y = pos.height-a.sb_height; maingcd[1].gd.pos.height = a.sb_height; maingcd[1].gd.pos.width = pos.width-300; maingcd[1].gd.flags = gg_visible|gg_enabled|gg_pos_in_pixels; maingcd[1].creator = GScrollBarCreate; GGadgetsCreate(a.gw,maingcd); GGadgetSetList(gcd[0].ret,AnchorD_GlyphsInClass(&a),false); GTextInfoListFree(gcd[0].gd.u.list); GHVBoxSetExpandableRow(maingcd[0].ret,gb_expandglue); GHVBoxSetExpandableCol(maingcd[0].ret,4); GHVBoxSetExpandableCol(buttonbox.ret,gb_expandgluesame); GHVBoxSetExpandableCol(glyphbox.ret,gb_expandglue); GGadgetGetDesiredSize(maingcd[0].ret,&boxsize,NULL); a.ctl_len = boxsize.width + 10; a.hsb = maingcd[1].ret; AnchorD_FindComplements(&a); AnchorD_SetDevTabs(&a); AnchorD_ChangeSize(&a); AnchorD_SetTitle(&a); GDrawSetVisible(a.gw,true); while ( !a.done ) GDrawProcessOneEvent(NULL); GDrawDestroyWindow(a.gw); AnchorD_FreeAll(&a); }
static int _GWidget_TopLevel_eh(GWindow gw, GEvent *event) { GTopLevelD *td; int ret; if ( !GDrawNativeWindowExists(NULL,event->native_window) ) return( true ); td = (GTopLevelD *) (gw->widget_data); if ( td==NULL ) /* Dying */ return( true ); GGadgetPopupExternalEvent(event); if ( event->type==et_focus ) { if ( event->u.focus.gained_focus ) { if ( gw->is_toplevel && !gw->is_popup && !gw->is_dying ) { if ( last_input_window!=gw ) previous_focus_window = last_input_window; current_focus_window = gw; } } else if ( current_focus_window==gw ) { current_focus_window = NULL; } if ( !td->ispalette && gw->is_visible && event->u.focus.gained_focus && !gw->is_dying ) { GWindow dlg = GDrawGetRedirectWindow(NULL); if ( dlg==NULL || dlg==gw ) { /* If top level window loses the focus all its palettes go invisible */ /* if it gains focus then all palettes that are supposed to be vis */ /* become visible */ /* But not if we've got an active dialog */ GTopLevelD *palette; if ( last_paletted_focus_window!=NULL && !last_paletted_focus_window->is_dying ) { GTopLevelD *lpfw_td = (GTopLevelD *) (last_paletted_focus_window->widget_data); for ( palette=lpfw_td->palettes; palette!=NULL; palette = palette->nextp ) { if ( !palette->w->is_visible && palette->w->visible_request ) { GDrawSetVisible(palette->w,false); palette->w->visible_request = true; } } } for ( palette=td->palettes; palette!=NULL; palette = palette->nextp ) { if ( !palette->w->is_visible && palette->w->visible_request ) GDrawSetVisible(palette->w,true); } last_paletted_focus_window = gw; } } if ( !gw->is_dying && td->gfocus!=NULL && td->gfocus->funcs->handle_focus!=NULL ) { { oldtd = td; oldgfocus = td->gfocus; } /* Debug!!!! */ (td->gfocus->funcs->handle_focus)(td->gfocus,event); } else if ( !gw->is_dying && td->wfocus!=NULL ) { if ( td->wfocus->widget_data!=NULL ) { if ( td->wfocus->widget_data->e_h!=NULL ) (td->wfocus->widget_data->e_h)(td->wfocus,event); } else if ( td->wfocus->eh!=NULL ) (td->wfocus->eh)(td->wfocus,event); } if ( !gw->is_dying && td->e_h!=NULL ) (td->e_h)(gw,event); return( true ); } else if ( !gw->is_dying && event->type == et_crossing ) { GiveToAll((GContainerD *) td,event); return( true ); } else if ( event->type == et_char || event->type == et_charup ) { return( _GWidget_TopLevel_Key(gw,gw,event)); } else if ( !gw->is_dying && event->type == et_resize ) { GRect r; if ( td->gmenubar!=NULL ) { GGadgetGetSize(td->gmenubar,&r); GGadgetResize(td->gmenubar,event->u.resize.size.width,r.height); GGadgetRedraw(td->gmenubar); } /* status line, toolbar, etc. */ if ( td->palettes!=NULL && event->u.resize.moved ) { GTopLevelD *palette; for ( palette=td->palettes; palette!=NULL; palette = palette->nextp ) { if ( !broken_palettes || !palette->positioned_yet ) { int x = gw->pos.x + palette->owner_off_x, y = gw->pos.y + palette->owner_off_y; if ( x<0 ) x=0; if ( y<0 ) y=0; if ( x+palette->w->pos.width>GDrawGetRoot(NULL)->pos.width ) x = GDrawGetRoot(NULL)->pos.width-palette->w->pos.width; if ( y+palette->w->pos.height>GDrawGetRoot(NULL)->pos.height ) y = GDrawGetRoot(NULL)->pos.height-palette->w->pos.height; ++palette->programmove; if ( gw->is_visible ) GDrawTrueMove(palette->w, x, y); else GDrawMove(palette->w, x, y); palette->positioned_yet = true; } } } if ( td->ispalette ) { if ( td->programmove>0 ) --td->programmove; else { td->owner_off_x = gw->pos.x - td->owner->w->pos.x; td->owner_off_y = gw->pos.y - td->owner->w->pos.y; } } } else if ( event->type == et_close && td->ispalette ) { GDrawSetVisible(gw,false); return( true ); } else if ( !gw->is_dying && event->type == et_visibility ) { if ( broken_palettes ) /* Do Nothing */; else if ( td->ispalette && event->u.visibility.state!=vs_unobscured ) { if ( !GDrawIsAbove(gw,td->owner->w)) GDrawRaiseAbove(gw,td->owner->w); } } else if ( !gw->is_dying && event->type == et_map && !td->ispalette ) { /* If top level window goes invisible all its palettes follow */ /* if it goes visible then all palettes that are supposed to be vis */ /* follow */ ManagePalettesVis(td, event->u.map.is_visible ); } if ( event->type == et_destroy ) { if ( td->palettes!=NULL ) { struct gtopleveldata *palettes, *next; for ( palettes=td->palettes; palettes!=NULL; palettes = next ) { next = palettes->nextp; GDrawDestroyWindow(palettes->w); } /* Palettes must die before our widget data are freed */ GDrawSync(GDrawGetDisplayOfWindow(gw)); GDrawProcessPendingEvents(GDrawGetDisplayOfWindow(gw)); } } ret = _GWidget_Container_eh(gw,event); if ( event->type == et_destroy ) { if ( gw==current_focus_window ) current_focus_window = NULL; if ( gw==previous_focus_window ) previous_focus_window = NULL; if ( gw==last_input_window ) last_input_window = NULL; if ( gw==last_paletted_focus_window ) last_paletted_focus_window = NULL; ret = true; } return( ret ); }
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 InitCursors(void) { GWindow mask, image; /* The XServer shipping with redhat 7.1 seems to suffer a protocol change */ /* with the red and blue members of XColor structure reversed */ /* So all of my cursors which should be red (to match the points drawn */ /* on the screen) come out blue. If I run the same image on another server*/ /* it's red. Oh well. */ image = GDrawCreateBitmap(NULL,magplus_width,magplus_height,magplus_bits); ct_magplus = GDrawCreateCursor(image,image,0x000000,0xffffff,magplus_x_hot, magplus_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,magminus_width,magminus_height,magminus_bits); ct_magminus = GDrawCreateCursor(image,image,0x000000,0xffffff,magminus_x_hot, magminus_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,pointercur_width,pointercur_height,pointercur_bits); mask = GDrawCreateBitmap(NULL,pointercurmask_width,pointercurmask_height,pointercurmask_bits); ct_mypointer = GDrawCreateCursor(image,mask,0x000000,0xffffff,pointercur_x_hot, pointercur_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); image = GDrawCreateBitmap(NULL,pointercic_width,pointercic_height,pointercic_bits); mask = GDrawCreateBitmap(NULL,pointercic_width,pointercic_height,pointercicmask_bits); ct_circle = GDrawCreateCursor(image,mask,0xff0000,0xffffff,pointercic_x_hot, pointercic_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); image = GDrawCreateBitmap(NULL,pointerhvcic_width,pointerhvcic_height,pointerhvcic_bits); mask = GDrawCreateBitmap(NULL,pointerhvcic_width,pointerhvcic_height,pointerhvcicmask_bits); ct_hvcircle = GDrawCreateCursor(image,mask,0xff0000,0xffffff,pointerhvcic_x_hot, pointerhvcic_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); image = GDrawCreateBitmap(NULL,pointertri_width,pointertri_height,pointertri_bits); mask = GDrawCreateBitmap(NULL,pointertri_width,pointertri_height,pointertrimask_bits); ct_triangle = GDrawCreateCursor(image,mask,0xff0000,0xffffff,pointertri_x_hot, pointertri_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); image = GDrawCreateBitmap(NULL,pointersqr_width,pointersqr_height,pointersqr_bits); mask = GDrawCreateBitmap(NULL,pointersqr_width,pointersqr_height,pointersqrmask_bits); ct_square = GDrawCreateCursor(image,mask,0xff0000,0xffffff,pointersqr_x_hot, pointersqr_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); image = GDrawCreateBitmap(NULL,pencur_width,pencur_height,pencur_bits); mask = GDrawCreateBitmap(NULL,pencur_width,pencur_height,pencurmask_bits); ct_pen = GDrawCreateCursor(image,mask,0xff0000,0xffffff,pencur_x_hot, pencur_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); image = GDrawCreateBitmap(NULL,setwidthcur_width,setwidthcur_height,setwidthcur_bits); /*mask = GDrawCreateBitmap(NULL,setwidthcur_width,setwidthcur_height,setwidthmask_bits);*/ ct_setwidth = GDrawCreateCursor(image,image,0xff0000,0xffffff,setwidthcur_x_hot, setwidthcur_y_hot); GDrawDestroyWindow(image); #if _CursorsMustBe16x16 ct_g2circle = ct_hvcircle; #else image = GDrawCreateBitmap(NULL,pointerg2cic_width,pointerg2cic_height,pointerg2cic_bits); mask = GDrawCreateBitmap(NULL,pointerg2cic_width,pointerg2cic_height,pointerg2cicmask_bits); ct_g2circle = GDrawCreateCursor(image,mask,0xff0000,0xffffff,pointerg2cic_x_hot, pointerg2cic_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); #endif image = GDrawCreateBitmap(NULL,pointerleft_width,pointerleft_height,pointerleft_bits); mask = GDrawCreateBitmap(NULL,pointerleft_width,pointerleft_height,pointerleftmask_bits); ct_spiroleft = GDrawCreateCursor(image,mask,0xff0000,0xffffff,pointerleft_x_hot, pointerleft_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); image = GDrawCreateBitmap(NULL,pointerright_width,pointerright_height,pointerright_bits); mask = GDrawCreateBitmap(NULL,pointerright_width,pointerright_height,pointerrightmask_bits); ct_spiroright = GDrawCreateCursor(image,mask,0xff0000,0xffffff,pointerright_x_hot, pointerright_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); image = GDrawCreateBitmap(NULL,rulercur_width,rulercur_height,rulercur_bits); ct_ruler = GDrawCreateCursor(image,image,0x000000,0xffffff,rulercur_x_hot, rulercur_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,knifecur_width,knifecur_height,knifecur_bits); mask = GDrawCreateBitmap(NULL,knifecur_width,knifecur_height,knifecurmask_bits); ct_knife = GDrawCreateCursor(image,mask,0xff0000,0xffffff,knifecur_x_hot, knifecur_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); image = GDrawCreateBitmap(NULL,flipcur_width,flipcur_height,flipcur_bits); mask = GDrawCreateBitmap(NULL,flipcur_width,flipcur_height,flipcurmask_bits); ct_flip = GDrawCreateCursor(image,image,0xff0000,0xffffff,flipcur_x_hot, flipcur_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); image = GDrawCreateBitmap(NULL,rotatecur_width,rotatecur_height,rotatecur_bits); ct_rotate = GDrawCreateCursor(image,image,0x000000,0xffffff,rotatecur_x_hot, rotatecur_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,scalecur_width,scalecur_height,scalecur_bits); mask = GDrawCreateBitmap(NULL,scalecur_width,scalecur_height,scalecurmask_bits); ct_scale = GDrawCreateCursor(image,image,0xff0000,0xffffff,scalecur_x_hot, scalecur_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); image = GDrawCreateBitmap(NULL,skewcur_width,skewcur_height,skewcur_bits); mask = GDrawCreateBitmap(NULL,skewcur_width,skewcur_height,skewcurmask_bits); ct_skew = GDrawCreateCursor(image,image,0xff0000,0xffffff,skewcur_x_hot, skewcur_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); image = GDrawCreateBitmap(NULL,rotate3dcur_width,rotate3dcur_height,rotate3dcur_bits); ct_3drotate = GDrawCreateCursor(image,image,0xff0000,0xffffff,rotate3dcur_x_hot, rotate3dcur_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,perspectivecur_width,perspectivecur_height,perspectivecur_bits); ct_perspective = GDrawCreateCursor(image,image,0xff0000,0xffffff,perspectivecur_x_hot, perspectivecur_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,rectcur_width,rectcur_height,rectcur_bits); ct_rect = GDrawCreateCursor(image,image,0xff0000,0xffffff,rectcur_x_hot, rectcur_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,elipsecur_width,elipsecur_height,elipsecur_bits); ct_elipse = GDrawCreateCursor(image,image,0xff0000,0xffffff,elipsecur_x_hot, elipsecur_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,polycur_width,polycur_height,polycur_bits); ct_poly = GDrawCreateCursor(image,image,0xff0000,0xffffff,polycur_x_hot, polycur_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,starcur_width,starcur_height,starcur_bits); ct_star = GDrawCreateCursor(image,image,0xff0000,0xffffff,starcur_x_hot, starcur_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,nwse_width,nwse_height,nwse_bits); ct_nwse = GDrawCreateCursor(image,image,0xff0000,0xffffff,nwse_x_hot, nwse_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,nesw_width,nesw_height,nesw_bits); ct_nesw = GDrawCreateCursor(image,image,0xff0000,0xffffff,nesw_x_hot, nesw_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,leftright_width,leftright_height,leftright_bits); ct_leftright = GDrawCreateCursor(image,image,0xff0000,0xffffff,leftright_x_hot, leftright_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,updown_width,updown_height,updown_bits); ct_updown = GDrawCreateCursor(image,image,0xff0000,0xffffff,updown_x_hot, updown_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,pencil_width,pencil_height,pencil_bits); mask = GDrawCreateBitmap(NULL,pencil_width,pencil_height,pencilmask_bits); ct_pencil = GDrawCreateCursor(image,mask,0xff0000,0xffffff,pencil_x_hot, pencil_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); image = GDrawCreateBitmap(NULL,eyedropper_width,eyedropper_height,eyedropper_bits); mask = GDrawCreateBitmap(NULL,eyedropper_width,eyedropper_height,eyedroppermask_bits); ct_eyedropper = GDrawCreateCursor(image,mask,0xff0000,0xffffff,eyedropper_x_hot, eyedropper_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); image = GDrawCreateBitmap(NULL,shift_width,shift_height,shift_bits); ct_shift = GDrawCreateCursor(image,image,0xff0000,0xffffff,shift_x_hot, shift_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,linecur_width,linecur_height,linecur_bits); ct_line = GDrawCreateCursor(image,image,0xff0000,0xffffff,linecur_x_hot, linecur_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,hand_width,hand_height,hand_bits); mask = GDrawCreateBitmap(NULL,hand_width,hand_height,handmask_bits); ct_myhand = GDrawCreateCursor(image,mask,0xff0000,0xffffff,hand_x_hot, hand_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); image = GDrawCreateBitmap(NULL,filledrectcur_width,filledrectcur_height,filledrectcur_bits); ct_filledrect = GDrawCreateCursor(image,image,0xff0000,0xffffff,filledrectcur_x_hot, filledrectcur_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,filledelipsecur_width,filledelipsecur_height,filledelipsecur_bits); ct_filledelipse = GDrawCreateCursor(image,image,0xff0000,0xffffff,filledelipsecur_x_hot, filledelipsecur_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,kerncur_width,kerncur_height,kerncur_bits); mask = GDrawCreateBitmap(NULL,rbearmask_width,rbearmask_height,rbearmask_bits); ct_kerning = GDrawCreateCursor(image,mask,0xff0000,0xffffff,kerncur_x_hot, kerncur_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,rbearcur_width,rbearcur_height,rbearcur_bits); ct_rbearing = GDrawCreateCursor(image,mask,0xff0000,0xffffff,rbearcur_x_hot, rbearcur_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); image = GDrawCreateBitmap(NULL,lbearcur_width,lbearcur_height,lbearcur_bits); mask = GDrawCreateBitmap(NULL,lbearmask_width,lbearmask_height,lbearmask_bits); ct_lbearing = GDrawCreateCursor(image,mask,0xff0000,0xffffff,lbearcur_x_hot, lbearcur_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); logo_icon = GDrawCreateBitmap(NULL,logo_width,logo_height,logo_bits); GDrawSetDefaultIcon(logo_icon); image = GDrawCreateBitmap(NULL,prohibition_width,prohibition_height,prohibition_bits); mask = GDrawCreateBitmap(NULL,prohibition_width,prohibition_height,prohibitionmask_bits); ct_prohibition = GDrawCreateCursor(image,mask,0xff0000,0xffffff,prohibition_x_hot, prohibition_y_hot); GDrawDestroyWindow(image); GDrawDestroyWindow(mask); image = GDrawCreateBitmap(NULL,ddcursor_width,ddcursor_height,ddcursor_bits); ct_ddcursor = GDrawCreateCursor(image,image,0xff0000,0xffffff,ddcursor_x_hot, ddcursor_y_hot); GDrawDestroyWindow(image); image = GDrawCreateBitmap(NULL,featurescursor_width,featurescursor_height,featurescursor_bits); ct_features = GDrawCreateCursor(image,image,0xff0000,0xffffff,featurescursor_x_hot, featurescursor_y_hot); GDrawDestroyWindow(image); }
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); GHVBoxFitWindow(boxes[0].ret); GDrawSetVisible(gw,true); while ( !d.done ) GDrawProcessOneEvent(NULL); GDrawDestroyWindow(gw); }
static void FilterDlg(void) { static struct col_init cols[] = { { me_string, NULL, NULL, NULL, N_("Name") }, { me_string, NULL, NULL, NULL, N_("Filter") } }; static int inited = false; static struct matrixinit mi = { 2, cols, 0, NULL, NULL, filter_candelete, NULL, NULL, NULL, NULL }; struct matrix_data *md; int k, cnt, i, ptwidth; GGadgetCreateData gcd[3], boxes[3], *varray[7], *harray[7]; GTextInfo label[3]; GRect pos; GWindow gw; GWindowAttrs wattrs; struct filter_d d; if ( !inited ) { inited = true; cols[0].title = _(cols[0].title); cols[1].title = _(cols[1].title); } for ( k=0; k<2; ++k ) { cnt = 0; for ( i=0; def_font_filters[i].name!=NULL; ++i ) { if ( *(char *) def_font_filters[i].name != '-' ) { if ( k ) { md[2*cnt].u.md_str = copy(_(def_font_filters[i].name)); md[2*cnt].frozen = true; md[2*cnt+1].u.md_str = copy(def_font_filters[i].filter); md[2*cnt+1].frozen = true; } ++cnt; } } if ( user_font_filters!=NULL ) { for ( i=0; user_font_filters[i].name!=NULL; ++i ) { if ( *(char *) user_font_filters[i].name != '-' ) { if ( k ) { md[2*cnt].u.md_str = copy(user_font_filters[i].name); md[2*cnt].frozen = false; md[2*cnt+1].u.md_str = copy(user_font_filters[i].filter); md[2*cnt+1].frozen = false; } ++cnt; } } } if ( !k ) md = calloc(2*cnt,sizeof(struct matrix_data)); } mi.initial_row_cnt = cnt; mi.matrix_data = md; memset(&d,'\0',sizeof(d)); 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 = true; wattrs.undercursor = 1; wattrs.cursor = ct_pointer; wattrs.utf8_window_title = _("Edit Font Filters"); pos.x = pos.y = 0; ptwidth = 2*GIntGetResource(_NUM_Buttonsize)+GGadgetScale(60); pos.width =GDrawPointsToPixels(NULL,ptwidth); pos.height = GDrawPointsToPixels(NULL,90); gw = GDrawCreateTopWindow(NULL,&pos,filter_e_h,&d,&wattrs); memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); gcd[0].gd.pos.x = 10; gcd[0].gd.pos.y = 6; gcd[0].gd.pos.width = 300; gcd[0].gd.pos.height = 200; gcd[0].gd.flags = gg_visible | gg_enabled; gcd[0].creator = GMatrixEditCreate; gcd[0].gd.u.matrix = &mi; varray[0] = &gcd[0]; varray[1] = NULL; gcd[1].gd.pos.x = 20-3; gcd[1].gd.pos.y = 90-35-3; gcd[1].gd.pos.width = -1; gcd[1].gd.pos.height = 0; gcd[1].gd.flags = gg_visible | gg_enabled | gg_but_default; label[1].text = (unichar_t *) _("_OK"); label[1].text_is_1byte = true; label[1].text_in_resource = true; gcd[1].gd.label = &label[1]; gcd[1].gd.handle_controlevent = Filter_OK; gcd[1].creator = GButtonCreate; harray[0] = GCD_Glue; harray[1] = &gcd[1]; harray[2] = GCD_Glue; gcd[2].gd.pos.x = -20; gcd[2].gd.pos.y = 90-35; gcd[2].gd.pos.width = -1; gcd[2].gd.pos.height = 0; gcd[2].gd.flags = gg_visible | gg_enabled | gg_but_cancel; label[2].text = (unichar_t *) _("_Cancel"); label[2].text_is_1byte = true; label[2].text_in_resource = true; gcd[2].gd.label = &label[2]; gcd[2].gd.handle_controlevent = Filter_Cancel; gcd[2].creator = GButtonCreate; harray[3] = GCD_Glue; harray[4] = &gcd[2]; harray[5] = GCD_Glue; harray[6] = NULL; varray[2] = &boxes[2]; varray[3] = NULL; varray[4] = 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].creator = GHVGroupCreate; boxes[2].gd.flags = gg_enabled|gg_visible; boxes[2].gd.u.boxelements = harray; boxes[2].creator = GHBoxCreate; GGadgetsCreate(gw,boxes); GHVBoxSetExpandableRow(boxes[0].ret,0); GHVBoxSetExpandableCol(boxes[2].ret,gb_expandgluesame); GHVBoxFitWindow(boxes[0].ret); GMatrixEditSetNewText(gcd[0].ret,S_("Filter|New")); d.gme = gcd[0].ret; GDrawSetVisible(gw,true); while ( !d.done ) GDrawProcessOneEvent(NULL); GDrawDestroyWindow(gw); for ( i=0; i<cnt; ++i ) { free(md[2*i].u.md_str); free(md[2*i+1].u.md_str); } free(md); }
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 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 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); }