Beispiel #1
0
static void
column_squeeze(Area *a) {
	static Vector_ptr fvec;
	Frame *f;
	int surplus, osurplus, dy, i;

	fvec.n = 0;
	for(f=a->frame; f; f=f->anext)
		if(!f->collapsed) {
			f->r = frame_hints(f, f->r, 0);
			vector_ppush(&fvec, f);
		}

	surplus = column_surplus(a);
	for(osurplus=0; surplus != osurplus;) {
		osurplus = surplus;
		qsort(fvec.ary, fvec.n, sizeof *fvec.ary, comp_frame);
		for(i=0; i < fvec.n; i++) {
			f=fvec.ary[i];
			dy = foo(f);
			if(dy > surplus)
				break;
			surplus -= dy;
			f->r.max.y += dy;
		}
	}
}
Beispiel #2
0
Area*
area_find(View *v, Rectangle r, int dir, bool wrap) {
	static Vector_ptr vec;
	Area *a;
	int s;

	vec.n = 0;
	foreach_column(v, s, a)
		vector_ppush(&vec, a);

	return findthing(r, dir, &vec, area_rect, wrap);
}