Preliminary RandR 1.2 work

This commit is contained in:
Keith Packard 2006-07-01 19:46:38 -07:00
parent d17becf024
commit dc89ecf5b5
3 changed files with 357 additions and 196 deletions

View File

@ -1,36 +1,36 @@
/*
*
* Copyright © 2000, Compaq Computer Corporation,
* Copyright © 2002, Hewlett Packard, Inc.
* Copyright © 2000 Compaq Computer Corporation
* Copyright © 2002 Hewlett-Packard Company
* Copyright © 2006 Intel Corporation
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of Compaq or HP not be used in advertising
* or publicity pertaining to distribution of the software without specific,
* written prior permission. HP makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
* the above copyright notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting documentation, and
* that the name of the copyright holders not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. The copyright holders make no representations
* about the suitability of this software for any purpose. It is provided "as
* is" without express or implied warranty.
*
* HP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL HP
* BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
* OF THIS SOFTWARE.
*
* Author: Jim Gettys, HP Labs, Hewlett-Packard, Inc.
* Author: Jim Gettys, Hewlett-Packard Company, Inc.
* Keith Packard, Intel Corporation
*/
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
#include "scrnintstr.h"
#include "mi.h"
#include <X11/extensions/randr.h>
#include "randrstr.h"
#include <stdio.h>
@ -48,26 +48,35 @@ miRRGetInfo (ScreenPtr pScreen, Rotation *rotations)
{
int i;
Bool setConfig = FALSE;
RRMonitorPtr pMonitor;
*rotations = RR_Rotate_0;
pMonitor = RRRegisterMonitor (pScreen, NULL, RR_Rotate_0);
for (i = 0; i < pScreen->numDepths; i++)
{
if (pScreen->allowedDepths[i].numVids)
{
RRScreenSizePtr pSize;
xRRMonitorMode rrMode;
RRModePtr pMode;
char name[64];
pSize = RRRegisterSize (pScreen,
pScreen->width,
pScreen->height,
pScreen->mmWidth,
pScreen->mmHeight);
if (!pSize)
return FALSE;
if (!setConfig)
{
RRSetCurrentConfig (pScreen, RR_Rotate_0, 0, pSize);
setConfig = TRUE;
}
sprintf (name, "%dx%d", pScreen->width, pScreen->height);
memset (&rrMode, '\0', sizeof (rrMode));
rrMode.width = pScreen->width;
rrMode.height = pScreen->height;
rrMode.widthInMillimeters = pScreen->mmWidth;
rrMode.heightInMillimeters = pScreen->mmHeight;
pMonitor = RRRegisterMonitor (pScreen, RR_Rotate_0);
pMode = RRRegisterMode (pMonitor,
&rrMode,
name,
strlen (name));
if (!pMode)
return FALSE;
if (!setConfig)
{
RRSetCurrentMode (pMonitor, pMode, 0, 0, RR_Rotate_0);
setConfig = TRUE;
}
}
}
return TRUE;
@ -78,10 +87,10 @@ miRRGetInfo (ScreenPtr pScreen, Rotation *rotations)
* different here
*/
Bool
miRRSetConfig (ScreenPtr pScreen,
Rotation rotation,
int rate,
RRScreenSizePtr pSize)
miRRSetMode (ScreenPtr pScreen,
int monitor,
RRModePtr pMode,
Rotation rotation)
{
return TRUE;
}
@ -96,6 +105,6 @@ miRandRInit (ScreenPtr pScreen)
return FALSE;
rp = rrGetScrPriv(pScreen);
rp->rrGetInfo = miRRGetInfo;
rp->rrSetConfig = miRRSetConfig;
rp->rrSetMode = miRRSetMode;
return TRUE;
}

View File

@ -1,29 +1,30 @@
/*
*
* Copyright © 2000, Compaq Computer Corporation,
* Copyright © 2002, Hewlett Packard, Inc.
* Copyright © 2000 Compaq Computer Corporation
* Copyright © 2002 Hewlett-Packard Company
* Copyright © 2006 Intel Corporation
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of Compaq or HP not be used in advertising
* or publicity pertaining to distribution of the software without specific,
* written prior permission. HP makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
* the above copyright notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting documentation, and
* that the name of the copyright holders not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. The copyright holders make no representations
* about the suitability of this software for any purpose. It is provided "as
* is" without express or implied warranty.
*
* HP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL HP
* BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
* OF THIS SOFTWARE.
*
* Author: Jim Gettys, HP Labs, Hewlett-Packard, Inc.
* Author: Jim Gettys, Hewlett-Packard Company, Inc.
* Keith Packard, Intel Corporation
*/
#define NEED_REPLIES
#define NEED_EVENTS
#ifdef HAVE_DIX_CONFIG_H
@ -159,10 +160,21 @@ static Bool
RRCloseScreen (int i, ScreenPtr pScreen)
{
rrScrPriv(pScreen);
RRMonitorPtr pMonitor;
unwrap (pScrPriv, pScreen, CloseScreen);
if (pScrPriv->pSizes)
xfree (pScrPriv->pSizes);
while (pMonitor = pScrPriv->pMonitors)
{
RRModePtr pMode;
pScrPriv->pMonitors = pMonitor->next;
while (pMode = pMonitor->pModes)
{
pMonitor->pModes = pMode->next;
xfree (pMode);
}
xfree (pMonitor);
}
xfree (pScrPriv);
RRNScreens -= 1; /* ok, one fewer screen with RandR running */
return (*pScreen->CloseScreen) (i, pScreen);
@ -187,6 +199,25 @@ SRRScreenChangeNotifyEvent(xRRScreenChangeNotifyEvent *from,
cpswaps(from->subpixelOrder, to->subpixelOrder);
}
static void
SRRMonitorChangeNotifyEvent(xRRMonitorChangeNotifyEvent *from,
xRRMonitorChangeNotifyEvent *to)
{
to->type = from->type;
to->subCode = from->subCode;
cpswaps(from->sequenceNumber, to->sequenceNumber);
cpswapl(from->timestamp, to->timestamp);
cpswapl(from->configTimestamp, to->configTimestamp);
cpswapl(from->root, to->root);
cpswapl(from->window, to->window);
cpswaps(from->monitor, to->monitor);
cpswaps(from->modeID, to->modeID);
cpswaps(from->rotation, to->rotation);
cpswaps(from->subpixelOrder, to->subpixelOrder);
cpswaps(from->x, to->x);
cpswaps(from->y, to->y);
}
Bool RRScreenInit(ScreenPtr pScreen)
{
rrScrPrivPtr pScrPriv;
@ -207,8 +238,12 @@ Bool RRScreenInit(ScreenPtr pScreen)
/*
* Calling function best set these function vectors
*/
pScrPriv->rrSetConfig = 0;
pScrPriv->rrSetMode = 0;
pScrPriv->rrGetInfo = 0;
#ifdef RANDR_SCREEN_INTERFACE
pScrPriv->rrSetConfig = 0;
#endif
/*
* This value doesn't really matter -- any client must call
* GetScreenInfo before reading it which will automatically update
@ -219,14 +254,7 @@ Bool RRScreenInit(ScreenPtr pScreen)
wrap (pScrPriv, pScreen, CloseScreen, RRCloseScreen);
pScrPriv->rotations = RR_Rotate_0;
pScrPriv->nSizes = 0;
pScrPriv->nSizesInUse = 0;
pScrPriv->pSizes = 0;
pScrPriv->rotation = RR_Rotate_0;
pScrPriv->size = -1;
pScrPriv->pMonitors = NULL;
RRNScreens += 1; /* keep count of screens that implement randr */
return TRUE;
@ -318,55 +346,96 @@ TellChanged (WindowPtr pWin, pointer value)
RREventPtr *pHead, pRREvent;
ClientPtr client;
xRRScreenChangeNotifyEvent se;
xRRMonitorChangeNotifyEvent me;
ScreenPtr pScreen = pWin->drawable.pScreen;
rrScrPriv(pScreen);
RRScreenSizePtr pSize;
RRMonitorPtr pMonitor = pScrPriv->pMonitors;
RRModePtr pMode;
WindowPtr pRoot = WindowTable[pScreen->myNum];
int i;
pHead = (RREventPtr *) LookupIDByType (pWin->drawable.id, EventType);
if (!pHead)
return WT_WALKCHILDREN;
se.type = RRScreenChangeNotify + RREventBase;
se.rotation = (CARD8) pScrPriv->rotation;
se.timestamp = pScrPriv->lastSetTime.milliseconds;
se.configTimestamp = pScrPriv->lastConfigTime.milliseconds;
se.root = pRoot->drawable.id;
se.window = pWin->drawable.id;
#ifdef RENDER
se.subpixelOrder = PictureGetSubpixelOrder (pScreen);
#else
se.subpixelOrder = SubPixelUnknown;
#endif
if (pScrPriv->size >= 0)
{
pSize = &pScrPriv->pSizes[pScrPriv->size];
se.sizeID = pSize->id;
se.widthInPixels = pSize->width;
se.heightInPixels = pSize->height;
se.widthInMillimeters = pSize->mmWidth;
se.heightInMillimeters = pSize->mmHeight;
}
else
{
/*
* This "shouldn't happen", but a broken DDX can
* forget to set the current configuration on GetInfo
*/
se.sizeID = 0xffff;
se.widthInPixels = 0;
se.heightInPixels = 0;
se.widthInMillimeters = 0;
se.heightInMillimeters = 0;
}
for (pRREvent = *pHead; pRREvent; pRREvent = pRREvent->next)
{
client = pRREvent->client;
if (client == serverClient || client->clientGone)
continue;
se.sequenceNumber = client->sequence;
if(pRREvent->mask & RRScreenChangeNotifyMask)
WriteEventsToClient (client, 1, (xEvent *) &se);
if (pRREvent->mask & RRMonitorChangeNotifyMask))
{
me.type = RRNotify + RREventBase;
me.subCode = RRNotify_MonitorChange;
me.timestamp = pScrPriv->lastSetTime.milliseconds;
me.configTimestamp = pScrPriv->lastConfigTime.milliseconds;
me.root = pRoot->drawable.id;
me.window = pWin->drawable.id;
#ifdef RENDER
me.subpixelOrder = PictureGetSubpixelOrder (pScreen);
#else
me.subpixelOrder = SubPixelUnknown;
#endif
for (i = 0; i < pScrPriv->nMonitors; i++)
{
pMonitor = &pScrPriv->pMonitors[i];
me.monitor = i;
if (pMonitor->mode >= 0) {
me.modeID = pMonitor->pMode[pMonitor->mode].id;
me.rotation = pMonitor->rotation;
me.x = pMonitor->x;
me.y = pMonitor->y;
} else {
me.modeID = 0xffff;
me.rotation = RR_Rotate_0;
me.x = 0;
me.y = 0;
}
WriteEventsToClient (client, 1, (xEvent *) &me);
}
}
if ((pRREvent->mask & RRScreenChangeNotifyMask) &&
pScrPriv->nMonitors > 0)
{
se.type = RRScreenChangeNotify + RREventBase;
se.rotation = (CARD8) pScrPriv->rotation;
se.timestamp = pScrPriv->lastSetTime.milliseconds;
se.sequenceNumber = client->sequence;
se.configTimestamp = pScrPriv->lastConfigTime.milliseconds;
se.root = pRoot->drawable.id;
se.window = pWin->drawable.id;
#ifdef RENDER
se.subpixelOrder = PictureGetSubpixelOrder (pScreen);
#else
se.subpixelOrder = SubPixelUnknown;
#endif
pMonitor = &pScrPriv->pMonitors[0];
se.sequenceNumber = client->sequence;
if (pMonitor->mode >= 0)
{
pMode = &pMonitor->pModes[pMonitor->mode];
se.sizeID = pMode->id;
se.widthInPixels = pMode->width;
se.heightInPixels = pMode->height;
se.widthInMillimeters = pMode->mmWidth;
se.heightInMillimeters = pMode->mmHeight;
}
else
{
/*
* This "shouldn't happen", but a broken DDX can
* forget to set the current configuration on GetInfo
*/
se.sizeID = 0xffff;
se.widthInPixels = 0;
se.heightInPixels = 0;
se.widthInMillimeters = 0;
se.heightInMillimeters = 0;
}
WriteEventsToClient (client, 1, (xEvent *) &se);
}
}
return WT_WALKCHILDREN;
}
@ -375,59 +444,66 @@ static Bool
RRGetInfo (ScreenPtr pScreen)
{
rrScrPriv (pScreen);
int i, j, k, l;
int m, s, n;
Bool changed;
Rotation rotations;
RRScreenSizePtr pSize;
RRScreenRatePtr pRate;
RRMonitorPtr pMonitor;
RRModePtr pMode;
for (i = 0; i < pScrPriv->nSizes; i++)
for (m = 0; m < pScrPriv->nMonitors; m++)
{
pSize = &pScrPriv->pSizes[i];
pSize->oldReferenced = pSize->referenced;
pSize->referenced = FALSE;
for (k = 0; k < pSize->nRates; k++)
pMonitor = &pScrPriv->pMonitors[m];
pMonitor->oldReferenced = pMonitor->referenced;
pMonitor->referenced = FALSE;
for (s = 0; s < pMonitor->nModes; s++)
{
pRate = &pSize->pRates[k];
pRate->oldReferenced = pRate->referenced;
pRate->referenced = FALSE;
pMode = &pSize->pModes[s];
pMode->oldReferenced = pMode->referenced;
pMode->referenced = FALSE;
}
}
changed = FALSE;
rotations = 0;
if (!(*pScrPriv->rrGetInfo) (pScreen, &rotations))
return FALSE;
changed = FALSE;
/*
* Check whether anything changed and simultaneously generate
* the protocol id values for the objects
*/
if (rotations != pScrPriv->rotations)
{
pScrPriv->rotations = rotations;
changed = TRUE;
}
j = 0;
for (i = 0; i < pScrPriv->nSizes; i++)
{
pSize = &pScrPriv->pSizes[i];
if (pSize->oldReferenced != pSize->referenced)
changed = TRUE;
if (pSize->referenced)
pSize->id = j++;
l = 0;
for (k = 0; k < pSize->nRates; k++)
/* Old GetInfo clients return rotations here */
if (rotations && pScrPriv->nMonitors) {
/*
* Check whether anything changed and simultaneously generate
* the protocol id values for the objects
*/
if (rotations != pScrPriv->pMonitors[i].rotations)
{
pRate = &pSize->pRates[k];
if (pRate->oldReferenced != pRate->referenced)
changed = TRUE;
if (pRate->referenced)
l++;
pScrPriv->pMonitors[i].rotations = rotations;
changed = TRUE;
}
pSize->nRatesInUse = l;
}
pScrPriv->nSizesInUse = j;
n = 0;
for (m = 0; m < pScrPriv->nMonitors; m++)
{
int modeid = 0;
pMonitor = &pScrPriv->pMonitors[m];
if (pMonitor->oldReferenced != pMonitor->referenced)
changed = TRUE;
if (pMonitor->referenced)
{
for (s = 0; s < pMonitor->nModes; s++)
{
pMode = &pMonitor->pModes[s];
if (pMode->oldReferenced != pMode->referenced)
changed = TRUE;
if (pMode->referenced)
pMode->id = modeid++;
}
n++;
}
pMonitor->nModesInUse = modeid;
}
pScrPriv->nMonitorsInUse = n;
if (changed)
{
UpdateCurrentTime ();
@ -1241,6 +1317,7 @@ RRRegisterSize (ScreenPtr pScreen,
if (!pScrPriv)
return 0;
tmp.id = -1;
tmp.width = width;
tmp.height= height;
tmp.mmWidth = mmWidth;

View File

@ -1,24 +1,28 @@
/*
*
* Copyright © 2000 Compaq Computer Corporation
* Copyright © 2002 Hewlett-Packard Company
* Copyright © 2006 Intel Corporation
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of Compaq not be used in
* advertising or publicity pertaining to distribution of the software without
* specific, written prior permission. Compaq makes no
* representations about the suitability of this software for any purpose. It
* is provided "as is" without express or implied warranty.
* the above copyright notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting documentation, and
* that the name of the copyright holders not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. The copyright holders make no representations
* about the suitability of this software for any purpose. It is provided "as
* is" without express or implied warranty.
*
* COMPAQ DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL COMPAQ BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
* OF THIS SOFTWARE.
*
* Author: Jim Gettys, Hewlett-Packard Company, Inc.
* Keith Packard, Intel Corporation
*/
#ifdef HAVE_DIX_CONFIG_H
@ -28,56 +32,83 @@
#ifndef _RANDRSTR_H_
#define _RANDRSTR_H_
#include <X11/extensions/randr.h>
#include <X11/extensions/randrproto.h>
typedef struct _rrScreenRate {
int rate;
Bool referenced;
Bool oldReferenced;
} RRScreenRate, *RRScreenRatePtr;
typedef struct _rrScreenSize {
typedef struct _rrMode {
struct _rrMode *next;
int id;
short width, height;
short mmWidth, mmHeight;
RRScreenRatePtr pRates;
int nRates;
int nRatesInUse;
Bool referenced;
Bool oldReferenced;
} RRScreenSize, *RRScreenSizePtr;
xRRMonitorMode mode;
} RRMode, *RRModePtr;
typedef struct _rrMonitor {
struct _rrMonitor *next;
ScreenPtr pScreen;
RRModePtr pModes;
void *identifier; /* made unique by DDX */
Bool referenced;
/*
* Current state
*/
int mode;
int x, y;
Rotation rotation;
} RRMonitor, *RRMonitorPtr;
typedef Bool (*RRSetScreenSizeProcPtr) (ScreenPtr pScreen,
CARD16 width,
CARD16 height,
CARD32 widthInMM,
CARD32 heightInMM);
typedef Bool (*RRSetModeProcPtr) (ScreenPtr pScreen,
int monitor,
RRModePtr pMode,
int x,
int y,
Rotation rotation);
typedef Bool (*RRGetInfoProcPtr) (ScreenPtr pScreen, Rotation *rotations);
typedef Bool (*RRCloseScreenProcPtr) ( int i, ScreenPtr pscreen);
#ifdef RANDR_SCREEN_INTERFACE
typedef void *RRScreenSizePtr;
typedef Bool (*RRSetConfigProcPtr) (ScreenPtr pScreen,
Rotation rotation,
int rate,
RRScreenSizePtr pSize);
typedef Bool (*RRGetInfoProcPtr) (ScreenPtr pScreen, Rotation *rotations);
typedef Bool (*RRCloseScreenProcPtr) ( int i, ScreenPtr pscreen);
#endif
typedef struct _rrScrPriv {
RRSetConfigProcPtr rrSetConfig;
RRSetModeProcPtr rrSetMode;
RRGetInfoProcPtr rrGetInfo;
RRCloseScreenProcPtr CloseScreen;
TimeStamp lastSetTime; /* last changed by client */
TimeStamp lastConfigTime; /* possible configs changed */
RRCloseScreenProcPtr CloseScreen;
/*
* monitor data
*/
RRMonitorPtr pMonitors;
#ifdef RANDR_SCREEN_INTERFACE
/*
* Configuration information
*/
Rotation rotations;
int nSizes;
int nSizesInUse;
RRScreenSizePtr pSizes;
RRSetConfigProcPtr rrSetConfig;
/*
* Current state
*/
Rotation rotation;
int size;
int rate;
#endif
} rrScrPrivRec, *rrScrPrivPtr;
extern int rrPrivIndex;
@ -90,6 +121,60 @@ extern int rrPrivIndex;
void
RRExtensionInit (void);
/*
* Then, register a monitor with the screen
*/
RRMonitorPtr
RRRegisterMonitor (ScreenPtr pScreen,
void *identifier,
Rotation rotations);
/*
* Next, register the list of modes with the monitor
*/
RRModePtr
RRRegisterMode (RRMonitorPtr pMonitor,
xRRMonitorMode *pMode,
char *name,
int nameLength);
/*
* Finally, set the current configuration of each monitor
*/
void
RRSetCurrentMode (RRMonitorPtr pMonitor,
RRModePtr pMode,
Rotation rotation);
Bool RRScreenInit(ScreenPtr pScreen);
Rotation
RRGetRotation (ScreenPtr pScreen);
Bool
miRandRInit (ScreenPtr pScreen);
Bool
miRRGetInfo (ScreenPtr pScreen, Rotation *rotations);
Bool
miRRGetScreenInfo (ScreenPtr pScreen);
Bool
miRRSetMode (ScreenPtr pScreen,
int monitor,
RRModePtr pMode,
Rotation rotation);
#ifdef RANDR_SCREEN_INTERFACE
/*
* This is the old interface, deprecated but left
* around for compatibility
*/
/*
* Then, register the specific size with the screen
*/
@ -105,6 +190,9 @@ Bool RRRegisterRate (ScreenPtr pScreen,
RRScreenSizePtr pSize,
int rate);
Bool RRRegisterRotation (ScreenPtr pScreen,
Rotation rotation);
/*
* Finally, set the current configuration of the screen
*/
@ -115,30 +203,17 @@ RRSetCurrentConfig (ScreenPtr pScreen,
int rate,
RRScreenSizePtr pSize);
Bool RRScreenInit(ScreenPtr pScreen);
Rotation
RRGetRotation (ScreenPtr pScreen);
int
RRSetScreenConfig (ScreenPtr pScreen,
Rotation rotation,
int rate,
RRScreenSizePtr pSize);
Bool
miRandRInit (ScreenPtr pScreen);
Bool
miRRGetInfo (ScreenPtr pScreen, Rotation *rotations);
Bool
miRRSetConfig (ScreenPtr pScreen,
Rotation rotation,
int rate,
RRScreenSizePtr size);
Bool
miRRGetScreenInfo (ScreenPtr pScreen);
#endif
#endif /* _RANDRSTR_H_ */