📄 xf86vmode.c
字号:
fprintf(stderr, "XF86VidModeSwitchToMode: Warning: Xserver is"
"running an old version (%d.%d)\n", majorVersion,
minorVersion);
#endif
}
LockDisplay(dpy);
if (majorVersion < 2) {
GetOldReq(XF86VidModeSwitchToMode, XF86OldVidModeSwitchToMode, oldreq);
oldreq->reqType = info->codes->major_opcode;
oldreq->xf86vidmodeReqType = X_XF86VidModeSwitchToMode;
oldreq->screen = screen;
oldreq->dotclock = modeline->dotclock;
oldreq->hdisplay = modeline->hdisplay;
oldreq->hsyncstart = modeline->hsyncstart;
oldreq->hsyncend = modeline->hsyncend;
oldreq->htotal = modeline->htotal;
oldreq->vdisplay = modeline->vdisplay;
oldreq->vsyncstart = modeline->vsyncstart;
oldreq->vsyncend = modeline->vsyncend;
oldreq->vtotal = modeline->vtotal;
oldreq->flags = modeline->flags;
if (protocolBug) {
oldreq->privsize = 0;
} else {
oldreq->privsize = modeline->privsize;
if (modeline->privsize) {
oldreq->length += modeline->privsize;
Data32(dpy, (long *) modeline->private,
modeline->privsize * sizeof(INT32));
}
}
} else {
GetReq(XF86VidModeSwitchToMode, req);
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeSwitchToMode;
req->screen = screen;
req->dotclock = modeline->dotclock;
req->hdisplay = modeline->hdisplay;
req->hsyncstart = modeline->hsyncstart;
req->hsyncend = modeline->hsyncend;
req->htotal = modeline->htotal;
req->hskew = modeline->hskew;
req->vdisplay = modeline->vdisplay;
req->vsyncstart = modeline->vsyncstart;
req->vsyncend = modeline->vsyncend;
req->vtotal = modeline->vtotal;
req->flags = modeline->flags;
if (protocolBug) {
req->privsize = 0;
} else {
req->privsize = modeline->privsize;
if (modeline->privsize) {
req->length += modeline->privsize;
Data32(dpy, (long *) modeline->private,
modeline->privsize * sizeof(INT32));
}
}
}
UnlockDisplay(dpy);
SyncHandle();
return True;
}
Bool
SDL_NAME(XF86VidModeLockModeSwitch)(dpy, screen, lock)
Display* dpy;
int screen;
int lock;
{
XExtDisplayInfo *info = find_display (dpy);
xXF86VidModeLockModeSwitchReq *req;
XF86VidModeCheckExtension (dpy, info, False);
LockDisplay(dpy);
GetReq(XF86VidModeLockModeSwitch, req);
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeLockModeSwitch;
req->screen = screen;
req->lock = lock;
UnlockDisplay(dpy);
SyncHandle();
return True;
}
Bool
SDL_NAME(XF86VidModeGetMonitor)(dpy, screen, monitor)
Display* dpy;
int screen;
SDL_NAME(XF86VidModeMonitor)* monitor;
{
XExtDisplayInfo *info = find_display (dpy);
xXF86VidModeGetMonitorReply rep;
xXF86VidModeGetMonitorReq *req;
CARD32 syncrange;
int i;
XF86VidModeCheckExtension (dpy, info, False);
LockDisplay(dpy);
GetReq(XF86VidModeGetMonitor, req);
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeGetMonitor;
req->screen = screen;
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return False;
}
monitor->nhsync = rep.nhsync;
monitor->nvsync = rep.nvsync;
#if 0
monitor->bandwidth = (float)rep.bandwidth / 1e6;
#endif
if (rep.vendorLength) {
if (!(monitor->vendor = (char *)Xcalloc(rep.vendorLength + 1, 1))) {
_XEatData(dpy, (rep.nhsync + rep.nvsync) * 4 +
((rep.vendorLength+3) & ~3) + ((rep.modelLength+3) & ~3));
return False;
}
} else {
monitor->vendor = NULL;
}
if (rep.modelLength) {
if (!(monitor->model = Xcalloc(rep.modelLength + 1, 1))) {
_XEatData(dpy, (rep.nhsync + rep.nvsync) * 4 +
((rep.vendorLength+3) & ~3) + ((rep.modelLength+3) & ~3));
if (monitor->vendor)
Xfree(monitor->vendor);
return False;
}
} else {
monitor->model = NULL;
}
if (!(monitor->hsync = Xcalloc(rep.nhsync, sizeof(SDL_NAME(XF86VidModeSyncRange))))) {
_XEatData(dpy, (rep.nhsync + rep.nvsync) * 4 +
((rep.vendorLength+3) & ~3) + ((rep.modelLength+3) & ~3));
if (monitor->vendor)
Xfree(monitor->vendor);
if (monitor->model)
Xfree(monitor->model);
return False;
}
if (!(monitor->vsync = Xcalloc(rep.nvsync, sizeof(SDL_NAME(XF86VidModeSyncRange))))) {
_XEatData(dpy, (rep.nhsync + rep.nvsync) * 4 +
((rep.vendorLength+3) & ~3) + ((rep.modelLength+3) & ~3));
if (monitor->vendor)
Xfree(monitor->vendor);
if (monitor->model)
Xfree(monitor->model);
Xfree(monitor->hsync);
return False;
}
for (i = 0; i < rep.nhsync; i++) {
_XRead(dpy, (char *)&syncrange, 4);
monitor->hsync[i].lo = (float)(syncrange & 0xFFFF) / 100.0;
monitor->hsync[i].hi = (float)(syncrange >> 16) / 100.0;
}
for (i = 0; i < rep.nvsync; i++) {
_XRead(dpy, (char *)&syncrange, 4);
monitor->vsync[i].lo = (float)(syncrange & 0xFFFF) / 100.0;
monitor->vsync[i].hi = (float)(syncrange >> 16) / 100.0;
}
if (rep.vendorLength)
_XReadPad(dpy, monitor->vendor, rep.vendorLength);
else
monitor->vendor = "";
if (rep.modelLength)
_XReadPad(dpy, monitor->model, rep.modelLength);
else
monitor->model = "";
UnlockDisplay(dpy);
SyncHandle();
return True;
}
Bool
SDL_NAME(XF86VidModeGetViewPort)(dpy, screen, x, y)
Display* dpy;
int screen;
int *x, *y;
{
XExtDisplayInfo *info = find_display (dpy);
xXF86VidModeGetViewPortReply rep;
xXF86VidModeGetViewPortReq *req;
int majorVersion, minorVersion;
Bool protocolBug = False;
XF86VidModeCheckExtension (dpy, info, False);
/*
* Note: There was a bug in the protocol implementation in versions
* 0.x with x < 8 (no reply was sent, so the client would hang)
* Check the server's version, and don't wait for a reply with older
* versions.
*/
SDL_NAME(XF86VidModeQueryVersion)(dpy, &majorVersion, &minorVersion);
if (majorVersion == 0 && minorVersion < 8) {
protocolBug = True;
#ifdef DEBUG
fprintf(stderr, "XF86VidModeGetViewPort: Warning: Xserver is"
"running an old version (%d.%d)\n", majorVersion,
minorVersion);
#endif
}
LockDisplay(dpy);
GetReq(XF86VidModeGetViewPort, req);
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeGetViewPort;
req->screen = screen;
if (protocolBug) {
*x = 0;
*y = 0;
} else {
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return False;
}
*x = rep.x;
*y = rep.y;
}
UnlockDisplay(dpy);
SyncHandle();
return True;
}
Bool
SDL_NAME(XF86VidModeSetViewPort)(dpy, screen, x, y)
Display* dpy;
int screen;
int x, y;
{
XExtDisplayInfo *info = find_display (dpy);
xXF86VidModeSetViewPortReq *req;
XF86VidModeCheckExtension (dpy, info, False);
LockDisplay(dpy);
GetReq(XF86VidModeSetViewPort, req);
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeSetViewPort;
req->screen = screen;
req->x = x;
req->y = y;
UnlockDisplay(dpy);
SyncHandle();
return True;
}
Bool
SDL_NAME(XF86VidModeGetDotClocks)(dpy, screen,
flagsPtr, numclocksPtr, maxclocksPtr, clocksPtr)
Display* dpy;
int screen;
int *flagsPtr, *numclocksPtr, *maxclocksPtr, *clocksPtr[];
{
XExtDisplayInfo *info = find_display (dpy);
xXF86VidModeGetDotClocksReply rep;
xXF86VidModeGetDotClocksReq *req;
int i, *dotclocks;
CARD32 dotclk;
XF86VidModeCheckExtension (dpy, info, False);
LockDisplay(dpy);
GetReq(XF86VidModeGetDotClocks, req);
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeGetDotClocks;
req->screen = screen;
if (!_XReply(dpy, (xReply *)&rep,
(SIZEOF(xXF86VidModeGetDotClocksReply) - SIZEOF(xReply)) >> 2, xFalse))
{
UnlockDisplay(dpy);
SyncHandle();
return False;
}
*numclocksPtr = rep.clocks;
*maxclocksPtr = rep.maxclocks;
*flagsPtr = rep.flags;
if (!(dotclocks = (int*) Xcalloc(rep.clocks, sizeof(int)))) {
_XEatData(dpy, (rep.clocks) * 4);
Xfree(dotclocks);
return False;
}
for (i = 0; i < rep.clocks; i++) {
_XRead(dpy, (char*)&dotclk, 4);
dotclocks[i] = dotclk;
}
*clocksPtr = dotclocks;
UnlockDisplay(dpy);
SyncHandle();
return True;
}
Bool
SDL_NAME(XF86VidModeSetGammaRamp) (
Display *dpy,
int screen,
int size,
unsigned short *red,
unsigned short *green,
unsigned short *blue
)
{
int length = (size + 1) & ~1;
XExtDisplayInfo *info = find_display (dpy);
xXF86VidModeSetGammaRampReq *req;
XF86VidModeCheckExtension (dpy, info, False);
LockDisplay(dpy);
GetReq(XF86VidModeSetGammaRamp, req);
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeSetGammaRamp;
req->screen = screen;
req->length += (length >> 1) * 3;
req->size = size;
_XSend(dpy, (char*)red, size * 2);
_XSend(dpy, (char*)green, size * 2);
_XSend(dpy, (char*)blue, size * 2);
UnlockDisplay(dpy);
SyncHandle();
return True;
}
Bool
SDL_NAME(XF86VidModeGetGammaRamp) (
Display *dpy,
int screen,
int size,
unsigned short *red,
unsigned short *green,
unsigned short *blue
)
{
XExtDisplayInfo *info = find_display (dpy);
xXF86VidModeGetGammaRampReq *req;
xXF86VidModeGetGammaRampReply rep;
XF86VidModeCheckExtension (dpy, info, False);
LockDisplay(dpy);
GetReq(XF86VidModeGetGammaRamp, req);
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeGetGammaRamp;
req->screen = screen;
req->size = size;
if (!_XReply (dpy, (xReply *) &rep, 0, xFalse)) {
UnlockDisplay (dpy);
SyncHandle ();
return False;
}
if(rep.size) {
_XRead(dpy, (char*)red, rep.size << 1);
_XRead(dpy, (char*)green, rep.size << 1);
_XRead(dpy, (char*)blue, rep.size << 1);
}
UnlockDisplay(dpy);
SyncHandle();
return True;
}
Bool SDL_NAME(XF86VidModeGetGammaRampSize)(
Display *dpy,
int screen,
int *size
)
{
XExtDisplayInfo *info = find_display (dpy);
xXF86VidModeGetGammaRampSizeReq *req;
xXF86VidModeGetGammaRampSizeReply rep;
*size = 0;
XF86VidModeCheckExtension (dpy, info, False);
LockDisplay(dpy);
GetReq(XF86VidModeGetGammaRampSize, req);
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeGetGammaRampSize;
req->screen = screen;
if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) {
UnlockDisplay (dpy);
SyncHandle ();
return False;
}
*size = rep.size;
UnlockDisplay(dpy);
SyncHandle();
return True;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -