Пример #1
0
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 );
}
Пример #2
0
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);
	}
    }
}