Esempio n. 1
0
int c_best_direction(
	int c00, int c01, int c02, int c03,
	int c10, int c11, int c12, int c13,
	int c20, int c21, int c22, int c23,
	int c30, int c31, int c32, int c33,
	int depth)
{
	Grid grid;
	grid.cells[index(0, 0)] = c00;
	grid.cells[index(0, 1)] = c01;
	grid.cells[index(0, 2)] = c02;
	grid.cells[index(0, 3)] = c03;
	grid.cells[index(1, 0)] = c10;
	grid.cells[index(1, 1)] = c11;
	grid.cells[index(1, 2)] = c12;
	grid.cells[index(1, 3)] = c13;
	grid.cells[index(2, 0)] = c20;
	grid.cells[index(2, 1)] = c21;
	grid.cells[index(2, 2)] = c22;
	grid.cells[index(2, 3)] = c23;
	grid.cells[index(3, 0)] = c30;
	grid.cells[index(3, 1)] = c31;
	grid.cells[index(3, 2)] = c32;
	grid.cells[index(3, 3)] = c33;
	
	return best_direction(grid, depth);
}
Esempio n. 2
0
void place_overlap_find_least_placement(const Rect* client_rects,
                                        int n_client_rects,
                                        const Rect *monitor,
                                        const Size* req_size,
                                        Point* result)
{
    POINT_SET(*result, monitor->x, monitor->y);
    int overlap = G_MAXINT;
    int max_edges = 2 * (n_client_rects + 1);

    int x_edges[max_edges];
    int y_edges[max_edges];
    make_grid(client_rects, n_client_rects, monitor,
            x_edges, y_edges, max_edges);
    int i;
    for (i = 0; i < max_edges; ++i) {
        if (x_edges[i] == G_MAXINT)
            break;
        int j;
        for (j = 0; j < max_edges; ++j) {
            if (y_edges[j] == G_MAXINT)
                break;
            Point grid_point = {.x = x_edges[i], .y = y_edges[j]};
            Point best_top_left;
            int this_overlap =
                best_direction(&grid_point, client_rects, n_client_rects,
                        monitor, req_size, &best_top_left);
            if (this_overlap < overlap) {
                overlap = this_overlap;
                *result = best_top_left;
            }
            if (overlap == 0)
                break;
        }
        if (overlap == 0)
            break;
    }
}