Beispiel #1
0
void BC_WidgetGrid::calculate_maxs(){
	int r,c;
	for (r = 0; r < BC_WG_Rows; r++) {
		maxh[r] = minh[r];
		for (c = 0; c < BC_WG_Cols; c++) {
			if ((widget_rowspan[r][c] == 1) && (getw_h(r,c) > maxh[r]))
				maxh[r] = getw_h(r,c);
		}
	}

	for (c = 0; c < BC_WG_Cols; c++) {
		maxw[c] = minw[c];
		for (r = 0; r < BC_WG_Rows; r++) {
			if ((widget_colspan[r][c] == 1) && (getw_w(r,c) > maxw[c]))
				maxw[c] = getw_w(r,c);
		}
	}

	// Fix up for row & colspans:
	for (c = 0; c < BC_WG_Cols; c++) {
		for (r = 0; r < BC_WG_Rows; r++) {
			int c_cs = MIN(BC_WG_Cols - c + 1, widget_colspan[r][c]);
			int c_rs = MIN(BC_WG_Rows - c + 1, widget_rowspan[r][c]);

			if ((widget_colspan[r][c] > 1)) {
				int csw = 0;
				int c2;
				for (c2 = c; c2 < c + c_cs; c2++) {
					csw += maxw[c2];
				}
				if (csw < getw_w(r,c)) {
					for (c2 = c; c2 < c + c_cs; c2++) {
						maxw[c2] += (csw - getw_w(r,c))/c_cs;
					}
				}
			}

			if ((widget_rowspan[r][c] > 1)) {
				int csh = 0;
				int r2;
				for (r2 = c; r2 < r + c_rs; r2++) {
					csh += maxh[r2];
				}
				if (csh < getw_h(r,c)) {
					for (r2 = c; r2 < r + c_rs; r2++) {
						maxh[r2] += (csh - getw_h(r,c))/c_rs;
					}
				}
			}
		}
	}
}
Beispiel #2
0
void BC_WidgetGrid::move_widgets(){
	calculate_maxs();
	int r,c,x,y;
	int xn,yn;
	y = y_t;
	for (r = 0; r < BC_WG_Rows; r++) {
		x = x_l;
		for (c = 0; c < BC_WG_Cols; c++) {
			switch (widget_valign[r][c]){
			default:
			case VALIGN_TOP:
				yn = y;
				break;
			case VALIGN_CENTER:
				yn = y + (maxh[r] - getw_h(r,c))/2;
				break;
			case VALIGN_BOTTOM:
				yn = y + (maxh[r] - getw_h(r,c));
				break;
			}
				
			switch (widget_halign[r][c]){
			default:
			case HALIGN_LEFT:
				xn = x;
				break;
			case HALIGN_CENTER:
				xn = x + (maxw[c] - getw_w(r,c))/2;
				break;
			case HALIGN_RIGHT:
				xn = x + (maxw[c] - getw_w(r,c));
				break;
			}
			setw_position(r,c,xn,yn); // + (maxh[r] - getw_h(r,c))/2);
			x += colgaps + maxw[c];
		}
		y += rowgaps + maxh[r];
	}
}
Beispiel #3
0
void BC_WidgetGrid::print(){
	printf("\nWidget Grid: Widths: x_l=%d y_t=%d x_r=%d y_b=%d\n",x_l,y_t,x_r,y_b);
	calculate_maxs();
	for (int r = 0; r < BC_WG_Rows; r++) {
		for (int c = 0; c < BC_WG_Cols; c++) {
			printf("%d,%d\t",getw_w(r,c),getw_h(r,c));
		}
		printf("MAX: %d\n",maxh[r]);
	}
	printf("---------------------------------------------\n");
	for (int c = 0; c < BC_WG_Cols; c++) 
		printf("%d\t",maxw[c]);
	printf("\n\n");

}