summaryrefslogtreecommitdiff
path: root/hw/vfb
diff options
context:
space:
mode:
Diffstat (limited to 'hw/vfb')
-rw-r--r--hw/vfb/InitInput.c2
-rw-r--r--hw/vfb/InitOutput.c67
-rw-r--r--hw/vfb/Xvfb.man.pre32
3 files changed, 81 insertions, 20 deletions
diff --git a/hw/vfb/InitInput.c b/hw/vfb/InitInput.c
index fdece85d7..345526d19 100644
--- a/hw/vfb/InitInput.c
+++ b/hw/vfb/InitInput.c
@@ -26,7 +26,7 @@ other dealings in this Software without prior written authorization
from The Open Group.
*/
-/* $XFree86: xc/programs/Xserver/hw/vfb/InitInput.c,v 3.9 2001/12/14 19:59:45 dawes Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/vfb/InitInput.c,v 3.10 2003/11/16 03:16:59 dawes Exp $ */
#include "X11/X.h"
#define NEED_EVENTS
diff --git a/hw/vfb/InitOutput.c b/hw/vfb/InitOutput.c
index 59283bdf3..1e751a51d 100644
--- a/hw/vfb/InitOutput.c
+++ b/hw/vfb/InitOutput.c
@@ -26,7 +26,17 @@ other dealings in this Software without prior written authorization
from The Open Group.
*/
-/* $XFree86: xc/programs/Xserver/hw/vfb/InitOutput.c,v 3.25 2003/11/15 04:01:56 dawes Exp $ */
+
+/*
+ * The screen origin code is:
+ *
+ * Copyright (c) 2004 by The XFree86 Project, Inc
+ * Rights as per the XFree86 1.1 licence
+ * (http://www.xfree86.org/legal/licenses.html).
+ *
+ */
+
+/* $XFree86: xc/programs/Xserver/hw/vfb/InitOutput.c,v 3.27 2004/03/05 03:20:48 dawes Exp $ */
#if defined(WIN32)
#include <X11/Xwinsock.h>
@@ -80,7 +90,9 @@ typedef struct
int width;
int paddedBytesWidth;
int paddedWidth;
+ int xOrigin;
int height;
+ int yOrigin;
int depth;
int bitsPerPixel;
int sizeInBytes;
@@ -254,7 +266,7 @@ OsVendorFatalError()
void
ddxUseMsg()
{
- ErrorF("-screen scrn WxHxD set screen's width, height, depth\n");
+ ErrorF("-screen n WxHxD[@x,y] set screen's width, height, depth, origin\n");
ErrorF("-pixdepths list-of-int support given pixmap depths\n");
#ifdef RENDER
ErrorF("+/-render turn on/of RENDER extension support"
@@ -288,6 +300,7 @@ ddxProcessArgument(int argc, char *argv[], int i)
if (strcmp (argv[i], "-screen") == 0) /* -screen n WxHxD */
{
int screenNum;
+ char *s;
if (i + 2 >= argc) UseMsg();
screenNum = atoi(argv[i+1]);
if (screenNum < 0 || screenNum >= MAXSCREENS)
@@ -295,14 +308,31 @@ ddxProcessArgument(int argc, char *argv[], int i)
ErrorF("Invalid screen number %d\n", screenNum);
UseMsg();
}
- if (3 != sscanf(argv[i+2], "%dx%dx%d",
+ s = strtok(argv[i+2], "@");
+ if (3 != sscanf(s, "%dx%dx%d",
&vfbScreens[screenNum].width,
&vfbScreens[screenNum].height,
&vfbScreens[screenNum].depth))
{
- ErrorF("Invalid screen configuration %s\n", argv[i+2]);
+ ErrorF("Invalid screen configuration %s\n", s);
UseMsg();
}
+ s = strtok(NULL, "@");
+ if (s)
+ {
+ if (2 != sscanf(s, "%d,%d",
+ &vfbScreens[screenNum].xOrigin,
+ &vfbScreens[screenNum].yOrigin))
+ {
+ ErrorF("Invalid screen position %s\n", s);
+ UseMsg();
+ }
+ }
+ else
+ {
+ vfbScreens[screenNum].xOrigin = -1;
+ vfbScreens[screenNum].yOrigin = -1;
+ }
if (screenNum >= vfbNumScreens)
vfbNumScreens = screenNum + 1;
@@ -1033,6 +1063,35 @@ InitOutput(ScreenInfo *screenInfo, int argc, char **argv)
}
}
+ /*
+ * Setup the Xinerama Layout. If the screen origins are not specified
+ * explicitly, assume that screen n is to the right of screen n - 1.
+ * It is safe to set this up even when Xinerama is not used.
+ */
+
+ for (i = 0; i < vfbNumScreens; i++)
+ {
+ if (vfbScreens[i].xOrigin < 0 || vfbScreens[i].yOrigin < 0)
+ {
+ if (i == 0)
+ {
+ dixScreenOrigins[i].x = 0;
+ dixScreenOrigins[i].y = 0;
+ }
+ else
+ {
+ dixScreenOrigins[i].x = dixScreenOrigins[i - 1].x +
+ vfbScreens[i - 1].width;
+ dixScreenOrigins[i].y = dixScreenOrigins[i - 1].y;
+ }
+ }
+ else
+ {
+ dixScreenOrigins[i].x = vfbScreens[i].xOrigin;
+ dixScreenOrigins[i].y = vfbScreens[i].yOrigin;
+ }
+ }
+
} /* end InitOutput */
/* this is just to get the server to link on AIX */
diff --git a/hw/vfb/Xvfb.man.pre b/hw/vfb/Xvfb.man.pre
index 64b6ea48d..5e7168a1c 100644
--- a/hw/vfb/Xvfb.man.pre
+++ b/hw/vfb/Xvfb.man.pre
@@ -23,7 +23,7 @@
.\" other dealings in this Software without prior written authorization
.\" from The Open Group.
.\"
-.\" $XFree86: xc/programs/Xserver/hw/vfb/Xvfb.man,v 1.9 2001/12/14 19:59:45 dawes Exp $
+.\" $XFree86: xc/programs/Xserver/hw/vfb/Xvfb.man,v 1.11 2004/03/05 03:20:48 dawes Exp $
.\"
.TH XVFB 1 __xorgversion__
.SH NAME
@@ -58,30 +58,32 @@ To build \fIXvfb\fP, put the following in your host.def and remake.
In addition to the normal server options described in the \fIXserver(1)\fP
manual page, \fIXvfb\fP accepts the following command line switches:
.TP 4
-.B "\-screen \fIscreennum\fP \fIWxHxD\fP"
+.B "\-screen \fIscreennum\fP \fIW\fPx\fIH\fPx\fID\fP\fR[\fP@\fIx\fP,\fIy\fP\fR]\fP"
This option creates screen \fIscreennum\fP and sets its width, height,
-and depth to W, H, and D respectively. By default, only screen 0 exists
-and has the dimensions 1280x1024x8.
+and depth to W, H, and D respectively, and optionally the screen origin
+(for Xinerama purposes) to (x,y). By default, only screen 0 exists and
+has the dimensions 1280x1024x8. If a screen origin is not specified
+when using Xinerama, the default is for screen
+.I N
+to be positioned to the right of screen
+.IR N\-1 .
.TP 4
.B "\-pixdepths \fIlist-of-depths\fP"
This option specifies a list of pixmap depths that the server should
support in addition to the depths implied by the supported screens.
-\fIlist-of-depths\fP is a space-separated list of integers that can
-have values from 1 to 32.
+\fIlist-of-depths\fP is a space-separated list of integers that can have
+values from 1 to 32.
.TP 4
.B "\-fbdir \fIframebuffer-directory\fP"
This option specifies the directory in which the memory mapped files
-containing the framebuffer memory should be created.
-See FILES.
-This option only exists on machines that have the mmap and msync system
-calls.
+containing the framebuffer memory should be created. See FILES. This
+option only exists on machines that have the mmap and msync system calls.
.TP 4
.B "\-shmem"
-This option specifies that the framebuffer should be put in shared memory.
-The shared memory ID for each screen will be printed by the server.
-The shared memory is in xwd format.
-This option only exists on machines that support the System V shared memory
-interface.
+This option specifies that the framebuffer should be put in shared
+memory. The shared memory ID for each screen will be printed by the
+server. The shared memory is in xwd format. This option only exists
+on machines that support the System V shared memory interface.
.PP
If neither \fB\-shmem\fP nor \fB\-fbdir\fP is specified,
the framebuffer memory will be allocated with malloc().