mirror of
https://github.com/X11Libre/xserver.git
synced 2026-03-24 08:04:30 +00:00
Merge remote-tracking branch 'whot/two-screen-coordinates'
This commit is contained in:
104
test/misc.c
104
test/misc.c
@@ -27,6 +27,9 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include "misc.h"
|
||||
#include "scrnintstr.h"
|
||||
|
||||
ScreenInfo screenInfo;
|
||||
|
||||
static void dix_version_compare(void)
|
||||
{
|
||||
@@ -54,9 +57,110 @@ static void dix_version_compare(void)
|
||||
assert(rc < 0);
|
||||
}
|
||||
|
||||
static void dix_update_desktop_dimensions(void)
|
||||
{
|
||||
int i;
|
||||
int x, y, w, h;
|
||||
int w2, h2;
|
||||
ScreenRec screens[MAXSCREENS];
|
||||
|
||||
for (i = 0; i < MAXSCREENS; i++)
|
||||
screenInfo.screens[i] = &screens[i];
|
||||
|
||||
x = 0;
|
||||
y = 0;
|
||||
w = 10;
|
||||
h = 5;
|
||||
w2 = 35;
|
||||
h2 = 25;
|
||||
|
||||
#define assert_dimensions(_x, _y, _w, _h) \
|
||||
update_desktop_dimensions(); \
|
||||
printf("%d %d %d %d\n", screenInfo.x, screenInfo.y, screenInfo.width, screenInfo.height); \
|
||||
assert(screenInfo.x == _x); \
|
||||
assert(screenInfo.y == _y); \
|
||||
assert(screenInfo.width == _w); \
|
||||
assert(screenInfo.height == _h);
|
||||
|
||||
#define set_screen(idx, _x, _y, _w, _h) \
|
||||
screenInfo.screens[idx]->x = _x; \
|
||||
screenInfo.screens[idx]->y = _y; \
|
||||
screenInfo.screens[idx]->width = _w; \
|
||||
screenInfo.screens[idx]->height = _h; \
|
||||
|
||||
printf("Testing\n");
|
||||
|
||||
/* single screen */
|
||||
screenInfo.numScreens = 1;
|
||||
set_screen(0, x, y, w, h);
|
||||
assert_dimensions(x, y, w, h);
|
||||
|
||||
/* dualhead rightof */
|
||||
screenInfo.numScreens = 2;
|
||||
set_screen(1, w, 0, w2, h2);
|
||||
assert_dimensions(x, y, w + w2, h2);
|
||||
|
||||
/* dualhead belowof */
|
||||
screenInfo.numScreens = 2;
|
||||
set_screen(1, 0, h, w2, h2);
|
||||
assert_dimensions(x, y, w2, h + h2);
|
||||
|
||||
/* triplehead L shape */
|
||||
screenInfo.numScreens = 3;
|
||||
set_screen(1, 0, h, w2, h2);
|
||||
set_screen(2, w2, h2, w, h);
|
||||
assert_dimensions(x, y, w + w2, h + h2);
|
||||
|
||||
/* quadhead 2x2 */
|
||||
screenInfo.numScreens = 4;
|
||||
set_screen(1, 0, h, w, h);
|
||||
set_screen(2, w, h, w, h2);
|
||||
set_screen(3, w, 0, w2, h);
|
||||
assert_dimensions(x, y, w + w2, h + h2);
|
||||
|
||||
/* quadhead horiz line */
|
||||
screenInfo.numScreens = 4;
|
||||
set_screen(1, w, 0, w, h);
|
||||
set_screen(2, 2 * w, 0, w, h);
|
||||
set_screen(3, 3 * w, 0, w, h);
|
||||
assert_dimensions(x, y, 4 * w, h);
|
||||
|
||||
/* quadhead vert line */
|
||||
screenInfo.numScreens = 4;
|
||||
set_screen(1, 0, h, w, h);
|
||||
set_screen(2, 0, 2 * h, w, h);
|
||||
set_screen(3, 0, 3 * h, w, h);
|
||||
assert_dimensions(x, y, w, 4 * h);
|
||||
|
||||
|
||||
/* x overlap */
|
||||
screenInfo.numScreens = 2;
|
||||
set_screen(0, 0, 0, w2, h2);
|
||||
set_screen(1, w, 0, w2, h2);
|
||||
assert_dimensions(x, y, w2 + w, h2);
|
||||
|
||||
/* y overlap */
|
||||
screenInfo.numScreens = 2;
|
||||
set_screen(0, 0, 0, w2, h2);
|
||||
set_screen(1, 0, h, w2, h2);
|
||||
assert_dimensions(x, y, w2, h2 + h);
|
||||
|
||||
/* negative origin */
|
||||
screenInfo.numScreens = 1;
|
||||
set_screen(0, -w2, -h2, w, h);
|
||||
assert_dimensions(-w2, -h2, w, h);
|
||||
|
||||
/* dualhead negative origin, overlap */
|
||||
screenInfo.numScreens = 2;
|
||||
set_screen(0, -w2, -h2, w2, h2);
|
||||
set_screen(1, -w, -h, w, h);
|
||||
assert_dimensions(-w2, -h2, w2, h2);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
dix_version_compare();
|
||||
dix_update_desktop_dimensions();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user