static int nld_e_h(GWindow gw, GEvent *event) { if ( event->type==et_close ) { struct nldlg *d = GDrawGetUserData(gw); d->done = true; } else if ( event->type == et_char ) { return( false ); } else if ( event->type==et_controlevent && event->u.control.subtype==et_buttonactivate ) { struct nldlg *d = GDrawGetUserData(gw); d->done = true; d->ok = GGadgetGetCid(event->u.control.g); } return( true ); }
static int Trans_TypeChange(GGadget *g, GEvent *e) { if ( e->type==et_controlevent && e->u.control.subtype == et_listselected ) { GWindow bw = GGadgetGetWindow(g); int offset = GGadgetGetCid(g)-CID_Type; int index = GGadgetGetFirstListSelectedItem(g); int mask = (intpt) transformtypes[index].userdata; int i; if ( mask & 0x400 ) { real xoff = last_ruler_offset[0].x, yoff = last_ruler_offset[0].y; char buf[24]; unichar_t ubuf[24]; if ( mask & 0x20 ) index -= 4; /* skew */ else index -= 7; /* move or rotate */ GGadgetSelectOneListItem( g,index ); mask &= ~0x400; if ( mask&1 ) { /* Move */ sprintf( buf, "%.1f", (double) xoff ); uc_strcpy(ubuf,buf); GGadgetSetTitle(GWidgetGetControl(bw,CID_XMove+offset), ubuf ); sprintf( buf, "%.1f", (double) yoff ); uc_strcpy(ubuf,buf); GGadgetSetTitle(GWidgetGetControl(bw,CID_YMove+offset), ubuf ); } else { sprintf( buf, "%.0f", atan2(yoff,xoff)*180/3.1415926535897932 ); uc_strcpy(ubuf,buf); GGadgetSetTitle(GWidgetGetControl(bw,((mask&0x2)?CID_Angle:CID_SkewAng)+offset), ubuf ); GGadgetSetChecked(GWidgetGetControl(bw,CID_Clockwise+offset), false ); GGadgetSetChecked(GWidgetGetControl(bw,CID_CounterClockwise+offset), true ); } } for ( i=CID_First; i<=CID_Last; ++i ) { GGadget *sg; sg = GWidgetGetControl(bw,i+offset); GGadgetSetVisible(sg, ( ((intpt) GGadgetGetUserData(sg))&mask )?1:0); } if ( selcid[index]!=0 ) { GGadget *tf = GWidgetGetControl(bw,selcid[index]+offset); GWidgetIndicateFocusGadget(tf); GTextFieldSelect(tf,0,-1); } GWidgetToDesiredSize(bw); GDrawRequestExpose(bw,NULL,false); } return( true ); }
static int RH_NextPrev(GGadget *g, GEvent *e) { if ( e->type==et_controlevent && e->u.control.subtype == et_buttonactivate ) { ReviewHintData *hd = GDrawGetUserData(GGadgetGetWindow(g)); StemInfo *prev; if ( GGadgetGetCid(g)==CID_Next ) { if ( hd->active->next !=NULL ) hd->active = hd->active->next; } else { prev = hd->ishstem ? hd->cv->b.sc->hstem : hd->cv->b.sc->vstem; for ( ; prev->next!=hd->active && prev->next!=NULL; prev = prev->next ); hd->active = prev; } RH_SetupHint(hd); } return( true ); }
static int RH_TextChanged(GGadget *g, GEvent *e) { int wasconflict; if ( e->type==et_controlevent && e->u.control.subtype == et_textchanged ) { ReviewHintData *hd = GDrawGetUserData(GGadgetGetWindow(g)); if ( hd->active!=NULL ) { int cid = GGadgetGetCid(g); int err=0; real start = GetCalmReal8(hd->gw,CID_Base,_("Base:"),&err); real width = GetCalmReal8(hd->gw,CID_Width,_("Size:"),&err); if ( err ) return( true ); if ( GGadgetIsChecked(GWidgetGetControl(GGadgetGetWindow(g),CID_MovePoints)) ) { if ( width<0 ) RH_MovePoints(hd,hd->active,start+width,-width); else RH_MovePoints(hd,hd->active,start,width); } if ( cid==CID_Base ) hd->active->start = start; else hd->active->width = width; if ( width<0 ) { hd->active->ghost = true; hd->active->width = -width; hd->active->start = start+width; } else hd->active->ghost = false; wasconflict = hd->active->hasconflicts; if ( hd->ishstem ) hd->cv->b.sc->hconflicts = StemListAnyConflicts(hd->cv->b.sc->hstem); else hd->cv->b.sc->vconflicts = StemListAnyConflicts(hd->cv->b.sc->vstem); hd->cv->b.sc->manualhints = true; hd->changed = true; if ( wasconflict!=hd->active->hasconflicts ) { GGadgetSetVisible(GWidgetGetControl(hd->gw,CID_Overlap),hd->active->hasconflicts); if ( hd->active->hasconflicts ) GHVBoxFitWindow(GWidgetGetControl(hd->gw,CID_TopBox)); } SCOutOfDateBackground(hd->cv->b.sc); SCUpdateAll(hd->cv->b.sc); } } return( true ); }
static int AnchorD_CorrectionChanged(GGadget *g, GEvent *e) { AnchorDlg *a = GDrawGetUserData(GGadgetGetWindow(g)); if ( e->type==et_controlevent && e->u.control.subtype == et_textchanged ) { const unichar_t *ret = _GGadgetGetTitle(g); int is_y = GGadgetGetCid(g)==CID_YCor; unichar_t *end; int correction = u_strtol(ret,&end,10); while ( *end==' ' ) ++end; if ( *end!='\0' ) return( true ); if ( correction<-128 || correction>127 ) { ff_post_error( _("Out of Range"), _("Corrections must be between -128 and 127 (and should be smaller)") ); return( true ); } DeviceTableSet(is_y?&a->yadjust:&a->xadjust,a->pixelsize,correction); GDrawRequestExpose(a->gw,NULL,false); } return( true ); }
static int AnchorD_PositionChanged(GGadget *g, GEvent *e) { AnchorDlg *a = GDrawGetUserData(GGadgetGetWindow(g)); if ( e->type==et_controlevent && e->u.control.subtype == et_textchanged ) { const unichar_t *ret = _GGadgetGetTitle(g); int is_y = GGadgetGetCid(g)==CID_Y; unichar_t *end; int val = u_strtol(ret,&end,10); while ( *end==' ' ) ++end; if ( *end!='\0' ) return( true ); if ( (is_y && a->apos.y==val) || (!is_y && a->apos.x==val)) return( true ); if ( is_y ) a->apos.y = val; else a->apos.x = val; AnchorD_ClearCorrections(a); GDrawRequestExpose(a->gw,NULL,false); } return( true ); }
static int Trans_OK(GGadget *g, GEvent *e) { real transform[6], trans[6], t[6]; bigreal angle, angle2; int i, index, err; int alllayers = false, round_2_int = false, dokerns = false, dokp=false; int dogrid = false, dowidth = false; BasePoint base; int origin, bvpos=0; BVTFunc bvts[TCnt+1]; static int warned = false; int isapply = GGadgetGetCid(g) == CID_Apply; if ( e->type==et_controlevent && e->u.control.subtype == et_buttonactivate ) { TransData *td = GDrawGetUserData(GGadgetGetWindow(g)); transform[0] = transform[3] = 1.0; transform[1] = transform[2] = transform[4] = transform[5] = 0; base.x = base.y = 0; origin = GGadgetGetFirstListSelectedItem( GWidgetGetControl(td->gw,CID_Origin)); if ( GWidgetGetControl(td->gw,CID_AllLayers)!=NULL ) alllayers = GGadgetIsChecked(GWidgetGetControl(td->gw,CID_AllLayers)); if ( GWidgetGetControl(td->gw,CID_DoGrid)!=NULL ) dogrid = GGadgetIsChecked(GWidgetGetControl(td->gw,CID_DoGrid)); if ( GWidgetGetControl(td->gw,CID_DoWidth)!=NULL ) dowidth = GGadgetIsChecked(GWidgetGetControl(td->gw,CID_DoWidth)); else dowidth = true; if ( GWidgetGetControl(td->gw,CID_DoSimplePos)!=NULL ) dokp = GGadgetIsChecked(GWidgetGetControl(td->gw,CID_DoSimplePos)); if ( GWidgetGetControl(td->gw,CID_DoKerns)!=NULL ) dokerns = GGadgetIsChecked(GWidgetGetControl(td->gw,CID_DoKerns)); round_2_int = GGadgetIsChecked(GWidgetGetControl(td->gw,CID_Round2Int)); if ( isapply ) alllayers = dogrid = dokp = dokerns = false; if ( td->getorigin!=NULL ) { (td->getorigin)(td->userdata,&base,origin ); transform[4] = -base.x; transform[5] = -base.y; } for ( i=0; i<TCnt; ++i ) { index = GGadgetGetFirstListSelectedItem( GWidgetGetControl(td->gw,CID_Type+i*TBlock_CIDOffset)); trans[0] = trans[3] = 1.0; trans[1] = trans[2] = trans[4] = trans[5] = 0; err = 0; switch ( index ) { case 0: /* Do Nothing */ break; case 1: /* Move */ trans[4] = GetReal8(td->gw,CID_XMove+i*TBlock_CIDOffset,_("X Movement"),&err); trans[5] = GetReal8(td->gw,CID_YMove+i*TBlock_CIDOffset,_("Y Movement"),&err); bvts[bvpos].x = trans[4]; bvts[bvpos].y = trans[5]; bvts[bvpos++].func = bvt_transmove; break; case 2: /* Rotate */ angle = GetReal8(td->gw,CID_Angle+i*TBlock_CIDOffset,_("Rotation Angle"),&err); if ( GGadgetIsChecked( GWidgetGetControl(td->gw,CID_Clockwise+i*TBlock_CIDOffset)) ) angle = -angle; if ( fmod(angle,90)!=0 ) bvts[0].func = bvt_none; /* Bad trans=> No trans */ else { angle = fmod(angle,360); if ( angle<0 ) angle+=360; if ( angle==90 ) bvts[bvpos++].func = bvt_rotate90ccw; else if ( angle==180 ) bvts[bvpos++].func = bvt_rotate180; else if ( angle==270 ) bvts[bvpos++].func = bvt_rotate90cw; } angle *= 3.1415926535897932/180; trans[0] = trans[3] = cos(angle); trans[2] = -(trans[1] = sin(angle)); break; case 3: /* Scale Uniformly */ trans[0] = trans[3] = GetReal8(td->gw,CID_Scale+i*TBlock_CIDOffset,_("Scale Factor"),&err)/100.0; bvts[0].func = bvt_none; /* Bad trans=> No trans */ break; case 4: /* Scale */ trans[0] = GetReal8(td->gw,CID_XScale+i*TBlock_CIDOffset,_("X Scale Factor"),&err)/100.0; trans[3] = GetReal8(td->gw,CID_YScale+i*TBlock_CIDOffset,_("Y Scale Factor"),&err)/100.0; bvts[0].func = bvt_none; /* Bad trans=> No trans */ break; case 5: /* Flip */ if ( GGadgetIsChecked( GWidgetGetControl(td->gw,CID_Horizontal+i*TBlock_CIDOffset)) ) { trans[0] = -1; bvts[bvpos++].func = bvt_fliph; } else { trans[3] = -1; bvts[bvpos++].func = bvt_flipv; } break; case 6: /* Skew */ angle = GetReal8(td->gw,CID_SkewAng+i*TBlock_CIDOffset,_("Skew Angle"),&err); if ( GGadgetIsChecked( GWidgetGetControl(td->gw,CID_CounterClockwise+i*TBlock_CIDOffset)) ) angle = -angle; angle *= 3.1415926535897932/180; trans[2] = tan(angle); skewselect(&bvts[bvpos],trans[2]); ++bvpos; break; case 7: /* 3D rotate */ angle = GetReal8(td->gw,CID_XAxis+i*TBlock_CIDOffset,_("Rotation about X Axis"),&err) * 3.1415926535897932/180; angle2 = GetReal8(td->gw,CID_YAxis+i*TBlock_CIDOffset,_("Rotation about Y Axis"),&err) * 3.1415926535897932/180; trans[0] = cos(angle2); trans[3] = cos(angle ); bvts[0].func = bvt_none; /* Bad trans=> No trans */ break; default: IError("Unexpected selection in Transform"); err = 1; break; } if ( err ) return(true); #if 0 printf( "(%g,%g,%g,%g,%g,%g)*(%g,%g,%g,%g,%g,%g) = ", trans[0], trans[1], trans[2], trans[3], trans[4], trans[5], transform[0], transform[1], transform[2], transform[3], transform[4], transform[5]); #endif t[0] = transform[0]*trans[0] + transform[1]*trans[2]; t[1] = transform[0]*trans[1] + transform[1]*trans[3]; t[2] = transform[2]*trans[0] + transform[3]*trans[2]; t[3] = transform[2]*trans[1] + transform[3]*trans[3]; t[4] = transform[4]*trans[0] + transform[5]*trans[2] + trans[4]; t[5] = transform[4]*trans[1] + transform[5]*trans[3] + trans[5]; memcpy(transform,t,sizeof(t)); #if 0 printf( "(%g,%g,%g,%g,%g,%g)\n", transform[0], transform[1], transform[2], transform[3], transform[4], transform[5]); #endif } bvts[bvpos++].func = bvt_none; /* Done */ for ( i=0; i<6; ++i ) if ( RealNear(transform[i],0)) transform[i] = 0; transform[4] += base.x; transform[5] += base.y; if (( transform[1]!=0 || transform[2]!=0 ) && !warned ) { ff_post_notice(_("Warning"),_("After rotating or skewing a glyph you should probably apply Element->Add Extrema")); warned = true; } (td->transfunc)(td->userdata,transform,origin,bvts, (alllayers?fvt_alllayers:0)| (dogrid?fvt_dogrid:0)| (dowidth?0:fvt_dontmovewidth)| (round_2_int?fvt_round_to_int:0)| (dokp?fvt_scalepstpos:0)| (dokerns?fvt_scalekernclasses:0)| (isapply?fvt_justapply:0)); td->done = !isapply; td->applied = isapply; } return( true ); }
static int GCol_TextChanged(GGadget *g, GEvent *e) { if ( e->type==et_controlevent && e->u.control.subtype == et_textchanged ) { struct gcol_data *d = GDrawGetUserData(GGadgetGetWindow(g)); double *offs[7] = { &d->col.h, &d->col.s, &d->col.v, &d->col.r, &d->col.g, &d->col.b, &d->col.alpha }; int i, err = false; int low, high; double val; char text[50]; if ( GGadgetGetCid(g)==CID_Alpha ) { low = 3; high=7; /* Didn't actually change the rgb values, but parse them */ /* This is in case we need to clear the error flag */ d->col.hsv = false; d->col.rgb = true; } else if ( GGadgetGetCid(g)>=CID_Hue ) { low = 0; high=3; d->col.hsv = true; d->col.rgb = false; } else { low = 3; high=6; d->col.hsv = false; d->col.rgb = true; } for ( i=low; i<high; ++i ) { val = GetCalmReal8(d->gw,cids[i],_(labnames[i]),&err); if ( err ) break; if ( i==0 ) { val = fmod(val,360); if ( val<0 ) val += 360; } else { if ( val<0 || val>1 ) { err = true; break; } } *offs[i] = val; } if ( err ) { d->col.hsv = d->col.rgb = false; } else if ( d->col.hsv ) { gHSV2RGB((struct hslrgb *) &d->col); for ( i=3; i<6; ++i ) { sprintf( text, "%.2f", *offs[i]); GGadgetSetTitle8(GWidgetGetControl(d->gw,cids[i]),text); } } else { gRGB2HSV((struct hslrgb *) &d->col); sprintf( text, "%3.0f", *offs[0]); GGadgetSetTitle8(GWidgetGetControl(d->gw,cids[0]),text); for ( i=1; i<3; ++i ) { sprintf( text, "%.2f", *offs[i]); GGadgetSetTitle8(GWidgetGetControl(d->gw,cids[i]),text); } } GDrawRequestExpose(d->wheelw,NULL,false); GDrawRequestExpose(d->gradw,NULL,false); GDrawRequestExpose(d->colw,NULL,false); } return( true ); }