summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2011-09-07 14:04:10 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2011-10-13 11:26:09 +1000
commit8bebb4b4896d8b6ba3309b5b28fce883bb9f8a96 (patch)
treecb2419bbda70f25479db2e1e58f65779a602270c /test
parent9cbfa4739a51e4cc6b8094833928bf8678f63876 (diff)
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>
Diffstat (limited to 'test')
-rw-r--r--test/misc.c104
1 files changed, 104 insertions, 0 deletions
diff --git a/test/misc.c b/test/misc.c
index 3d3b1a1e3..d98449ba0 100644
--- a/test/misc.c
+++ b/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;
}