mirror of
https://github.com/X11Libre/xserver.git
synced 2026-03-24 05:54:08 +00:00
Store desktop dimensions in screenInfo.
For Zaphod mode screen crossing handling we need to know the size of all screens together (i.e. the whole desktop size). Store that in the screenInfo to have it readily available in events. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
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