Exemplo n.º 1
0
Arquivo: frdraw.c Projeto: npe9/harvey
Point
_frdraw(Frame *f, Point pt)
{
    Frbox *b;
    int nb, n;

    for(b=f->box,nb=0; nb<f->nbox; nb++, b++) {
        _frcklinewrap0(f, &pt, b);
        if(pt.y == f->r.max.y) {
            f->nchars -= _frstrlen(f, nb);
            _frdelbox(f, nb, f->nbox-1);
            break;
        }
        if(b->nrune > 0) {
            n = _frcanfit(f, pt, b);
            if(n == 0)
                drawerror(f->display, "_frcanfit==0");
            if(n != b->nrune) {
                _frsplitbox(f, nb, n);
                b = &f->box[nb];
            }
            pt.x += b->wid;
        } else {
            if(b->bc == '\n') {
                pt.x = f->r.min.x;
                pt.y+=f->font->height;
            } else
                pt.x += _frnewwid(f, pt, b);
        }
    }
    return pt;
}
Exemplo n.º 2
0
int
_frfindbox(Frame *f, int bn, ulong p, ulong q)	/* find box containing q and put q on a box boundary */
{
	Frbox *b;

	for(b = &f->box[bn]; bn<f->nbox && p+NRUNE(b)<=q; bn++, b++)
		p += NRUNE(b);
	if(p != q)
		_frsplitbox(f, bn++, (int)(q-p));
	return bn;
}