static int DoFindOne(SearchView *sv,int startafter) { int i, gid; SplineChar *startcur = sv->sd.curchar; /* It is possible that some idiot deleted the current character since */ /* the last search... do some mild checks */ if ( sv->sd.curchar!=NULL && sv->sd.curchar->parent == sv->sd.fv->sf && sv->sd.curchar->orig_pos>=0 && sv->sd.curchar->orig_pos<sv->sd.fv->sf->glyphcnt && sv->sd.curchar==sv->sd.fv->sf->glyphs[sv->sd.curchar->orig_pos] ) /* Looks ok */; else sv->sd.curchar=startcur=NULL; if ( !sv->sd.subpatternsearch ) startafter = false; if ( sv->showsfindnext && sv->sd.curchar!=NULL ) i = sv->sd.fv->map->backmap[sv->sd.curchar->orig_pos]+1-startafter; else { startafter = false; if ( !sv->sd.onlyselected ) i = 0; else { for ( i=0; i<sv->sd.fv->map->enccount; ++i ) if ( sv->sd.fv->selected[i] && (gid=sv->sd.fv->map->map[i])!=-1 && sv->sd.fv->sf->glyphs[gid]!=NULL ) break; } } for ( ; i<sv->sd.fv->map->enccount; ++i ) { if (( !sv->sd.onlyselected || sv->sd.fv->selected[i]) && (gid=sv->sd.fv->map->map[i])!=-1 && sv->sd.fv->sf->glyphs[gid]!=NULL ) { SCSplinePointsUntick(sv->sd.fv->sf->glyphs[gid],sv->sd.fv->active_layer); if ( SearchChar(&sv->sd,gid,startafter) ) break; } startafter = false; } if ( i>=sv->sd.fv->map->enccount ) { ff_post_notice(_("Not Found"),sv->showsfindnext?_("The search pattern was not found again in the font %.100s"):_("The search pattern was not found in the font %.100s"),sv->sd.fv->sf->fontname); sv->sd.curchar = startcur; GGadgetSetTitle8(GWidgetGetControl(sv->gw,CID_Find),_("Find")); sv->showsfindnext = false; return( false ); } SVSelectSC(sv); if ( sv->lastcv!=NULL && sv->lastcv->b.sc==startcur && sv->lastcv->b.fv== sv->sd.fv ) { CVChangeSC(sv->lastcv,sv->sd.curchar); GDrawSetVisible(sv->lastcv->gw,true); GDrawRaise(sv->lastcv->gw); } else sv->lastcv = CharViewCreate(sv->sd.curchar,(FontView *) sv->sd.fv,-1); GGadgetSetTitle8(GWidgetGetControl(sv->gw,CID_Find),_("Find Next")); sv->showsfindnext = true; return( true ); }
static void QGMouse( QGData *qg, GEvent *e) { int l = qg->loff_top + e->u.mouse.y/qg->fh; struct navigate where; if ( (e->type == et_mousedown) && (e->u.mouse.button==1)) { memset(&where,0,sizeof(where)); QG_FindLine(&qg->list,l,&where); if ( where.parent==NULL ) return; if ( where.offset==-1 ) { where.parent->open = !where.parent->open; QG_Remetric(qg); GDrawRequestExpose(qg->v,NULL,false); return; } else { QuestionableGrid *q = &where.parent->first[where.offset]; CharView *cv; if ( qg->inprocess ) return; cv = qg->cv; if ( cv==NULL && qg->fv!=NULL ) { qg->inprocess = true; cv = qg->cv = CharViewCreate(q->sc,(FontView *) (qg->fv),qg->fv->map->backmap[q->sc->orig_pos]); if ( qg->layer == ly_fore ) { cv->b.drawmode = dm_fore; } else { cv->b.layerheads[dm_back] = &qg->sc->layers[qg->layer]; cv->b.drawmode = dm_back; } cv->qg = qg; qg->inprocess = false; } else if ( qg->cv==NULL ) return; else if ( qg->cv->b.sc != q->sc ) { CVChangeSC(qg->cv,q->sc); } cv->ft_pointsizex = cv->ft_pointsizey = q->size; cv->ft_ppemy = cv->ft_ppemx = rint(q->size*qg->dpi/72.0); cv->ft_dpi = qg->dpi; cv->ft_depth = qg->depth; cv->note_x = q->x; cv->note_y = q->y; cv->show_ft_results = true; cv->showgrids = true; CVGridFitChar(cv); } } }