static int splash_e_h(GWindow gw, GEvent *event) { static int splash_cnt; GRect old; int i, y, x; static char *foolishness[] = { /* GT: These strings are for fun. If they are offensive or incomprehensible */ /* GT: simply translate them as something dull like: "FontForge" */ /* GT: This is a spoof of political slogans, designed to point out how foolish they are */ N_("A free press discriminates\nagainst the illiterate."), N_("A free press discriminates\nagainst the illiterate."), /* GT: This is a pun on the old latin drinking song "Gaudeamus igature!" */ N_("Gaudeamus Ligature!"), N_("Gaudeamus Ligature!"), /* GT: Spoof on the bible */ N_("In the beginning was the letter..."), /* GT: Some wit at MIT came up with this ("ontology recapitulates phylogony" is the original) */ N_("fontology recapitulates file-ogeny") }; switch ( event->type ) { case et_create: GDrawGrabSelection(gw,sn_user1); break; case et_expose: GDrawPushClip(gw,&event->u.expose.rect,&old); GDrawDrawImage(gw,&splashimage,NULL,0,0); GDrawSetFont(gw,splash_font); y = splashimage.u.image->height + as + fh/2; for ( i=1; i<linecnt; ++i ) { if ( is>=lines[i-1]+1 && is<lines[i] ) { x = 8+GDrawDrawText(gw,8,y,lines[i-1]+1,is-lines[i-1]-1,0x000000); GDrawSetFont(gw,splash_italic); GDrawDrawText(gw,x,y,is,lines[i]-is,0x000000); } else if ( ie>=lines[i-1]+1 && ie<lines[i] ) { x = 8+GDrawDrawText(gw,8,y,lines[i-1]+1,ie-lines[i-1]-1,0x000000); GDrawSetFont(gw,splash_font); GDrawDrawText(gw,x,y,ie,lines[i]-ie,0x000000); } else GDrawDrawText(gw,8,y,lines[i-1]+1,lines[i]-lines[i-1]-1,0x000000); y += fh; } GDrawPopClip(gw,&old); break; case et_map: splash_cnt = 0; break; case et_timer: if ( event->u.timer.timer==autosave_timer ) { DoAutoSaves(); } else if ( event->u.timer.timer==splasht ) { if ( ++splash_cnt==1 ) GDrawResize(gw,splashimage.u.image->width,splashimage.u.image->height-30); else if ( splash_cnt==2 ) GDrawResize(gw,splashimage.u.image->width,splashimage.u.image->height); else if ( splash_cnt>=7 ) { GGadgetEndPopup(); GDrawSetVisible(gw,false); GDrawCancelTimer(splasht); splasht = NULL; } } else { DoDelayedEvents(event); } break; case et_char: case et_mousedown: case et_close: GGadgetEndPopup(); GDrawSetVisible(gw,false); break; case et_mousemove: GGadgetPreparePopup8(gw,_(foolishness[rand()%(sizeof(foolishness)/sizeof(foolishness[0]))]) ); break; case et_selclear: /* If this happens, it means someone wants to send us a message with a*/ /* filename to open. So we need to ask for it, process it, and then */ /* take the selection back again */ if ( event->u.selclear.sel == sn_user1 ) { int len; char *arg; arg = GDrawRequestSelection(splashw,sn_user1,"STRING",&len); if ( arg==NULL ) return( true ); if ( strcmp(arg,"-new")==0 || strcmp(arg,"--new")==0 ) FontNew(); else if ( strcmp(arg,"-open")==0 || strcmp(arg,"--open")==0 ) _FVMenuOpen(NULL); else if ( strcmp(arg,"-quit")==0 || strcmp(arg,"--quit")==0 ) MenuExit(NULL,NULL,NULL); else ViewPostScriptFont(arg,0); free(arg); GDrawGrabSelection(splashw,sn_user1); } break; case et_destroy: IError("Who killed the splash screen?"); break; } return( true ); }
static int kpdv_e_h(GWindow gw, GEvent *event) { KPData *kpd = GDrawGetUserData(gw); int index, old_sel, temp; char buffer[100]; static int done=false; switch ( event->type ) { case et_expose: KP_ExposeKerns(kpd,gw,&event->u.expose.rect); break; case et_char: if ( event->u.chr.keysym == GK_F1 || event->u.chr.keysym == GK_Help ) { help("kernpairs.html"); return( true ); } KP_Commands(kpd,event); break; case et_mousedown: GGadgetEndPopup(); kpd->pressed = true; index = kpd->off_top + event->u.mouse.y/kpd->uh; if ( index>=kpd->kcnt ) index = -1; if ( index!=kpd->selected ) { old_sel = kpd->selected; kpd->selected = index; KP_RefreshSel(kpd,old_sel); KP_RefreshSel(kpd,index); } if ( event->u.mouse.button==3 && index>=0 ) { if ( !done ) { int i; for ( i=0; kernmenu[i].ti.text!=NULL || kernmenu[i].ti.line; ++i ) if ( kernmenu[i].ti.text!=NULL ) kernmenu[i].ti.text = (unichar_t *) _((char *) kernmenu[i].ti.text); for ( i=0; acmenu[i].ti.text!=NULL || acmenu[i].ti.line; ++i ) if ( acmenu[i].ti.text!=NULL ) acmenu[i].ti.text = (unichar_t *) _((char *) acmenu[i].ti.text); done = true; } if ( kpd->ac==NULL ) GMenuCreatePopupMenu(gw,event, kernmenu); else GMenuCreatePopupMenu(gw,event, acmenu); } else if ( KP_Cursor(kpd,event)!=NULL ) { kpd->pressed_x = event->u.mouse.x; kpd->old_val = kpd->kerns[index].newoff; } else kpd->pressed_x = -1; break; case et_mouseup: if ( kpd->pressed_x!=-1 ) kpd->last_index = kpd->selected; else kpd->last_index = -1; if ( kpd->selected>=0 && event->u.mouse.clicks>1 ) { if ( kpd->ac==NULL ) KPKPCloseup(kpd); else KPAC(kpd,true); return( true ); } /* Fall through... */ case et_mousemove: GGadgetEndPopup(); index = kpd->off_top + event->u.mouse.y/kpd->uh; if ( !kpd->pressed && index<kpd->kcnt ) { sprintf( buffer, "%.20s %d U+%04x", kpd->kerns[index].first->name, kpd->kerns[index].first->orig_pos, kpd->kerns[index].first->unicodeenc ); if ( kpd->kerns[index].first->unicodeenc==-1 ) strcpy(buffer+strlen(buffer)-4, "????"); sprintf( buffer+strlen(buffer), " + %.20s %d U+%04x", kpd->kerns[index].second->name, kpd->kerns[index].second->orig_pos, kpd->kerns[index].second->unicodeenc ); if ( kpd->kerns[index].second->unicodeenc==-1 ) strcpy(buffer+strlen(buffer)-4, "????"); uc_strcpy(upopupbuf,buffer); GGadgetPreparePopup(gw,upopupbuf); KP_Cursor(kpd,event); } else if ( kpd->pressed && kpd->pressed_x!=-1 ) { if ( kpd->ac!=NULL ) { /* Nothing to be done. That's what I find so wonderful. Happy Days */ } else if ( index==kpd->selected ) { KP_SetCursor(kpd,true); temp = kpd->old_val + (event->u.mouse.x-kpd->pressed_x)*(kpd->sf->ascent+kpd->sf->descent)/kpd->bdf->pixelsize; if ( temp!=kpd->kerns[index].newoff ) { kpd->kerns[index].newoff = temp; KP_RefreshKP(kpd,index); } } else { if ( kpd->movecursor ) { kpd->kerns[kpd->selected].newoff = kpd->old_val; KP_SetCursor(kpd,false); KP_RefreshKP(kpd,kpd->selected); } } if ( kpd->ac==NULL && kpd->kerns[index].kp->kcid!=0 && event->type==et_mouseup ) KP_KernClassAlter(kpd,index); } if ( event->type==et_mouseup ) kpd->pressed = false; break; case et_resize: KPV_Resize(kpd); break; } return( true ); }