129 const char* displayName;
130 displayName = getenv(
"DISPLAY");
132 displayName =
":0.0";
136 fgDisplay.display = XOpenDisplay(displayName);
139 GfOut(
"failed to open display '%s'", XDisplayName( displayName ) );
154 XRRQueryVersion(
fgDisplay.display, &major, &minor);
155 printf(
"Randr version: %d.%d\n", major, minor);
159 XF86VidModeQueryVersion(
fgDisplay.display, &major, &minor);
160 printf(
"Xxf86vm version: %d.%d\n", major, minor);
178 XRRScreenConfiguration *screenconfig = XRRGetScreenInfo(
fgDisplay.display,
fgDisplay.RootWindow);
179 if (screenconfig != NULL) {
180 SizeID size = XRRConfigCurrentConfiguration (screenconfig, &
fgDisplay.rotation);
182 XRRScreenSize *sizes = XRRConfigSizes(screenconfig, &nsize);
183 fgDisplay.ScreenWidth = sizes[size].width;
184 fgDisplay.ScreenHeight = sizes[size].height;
185 fgDisplay.rate = XRRConfigCurrentRate(screenconfig);
187 XRRFreeScreenConfigInfo(screenconfig);
192 XF86VidModeGetModeLine(
208 XRRScreenConfiguration *screenconfig = XRRGetScreenInfo(
fgDisplay.display,
fgDisplay.RootWindow);
209 if (screenconfig != NULL) {
211 XRRScreenSize *sizes = XRRConfigSizes(screenconfig, &nsize);
214 for (size = 0; size < nsize; size++) {
215 if (sizes[size].width ==
fgDisplay.ScreenWidth && sizes[size].height ==
fgDisplay.ScreenHeight)
221 Status status = RRSetConfigFailed;
222 status = XRRSetScreenConfigAndRate(
232 if (status == RRSetConfigSuccess) {
236 XRRUpdateConfiguration(&ev);
237 }
while ((ev.type != ConfigureNotify) && ((ev.type -
fgDisplay.event_base) != RRScreenChangeNotify));
240 XRRFreeScreenConfigInfo(screenconfig);
248 XF86VidModeModeInfo** displayModes;
249 int i, displayModesCount;
254 XF86VidModeGetAllModeLines(
264 for( i=0; i<displayModesCount; i++ ) {
265 if( displayModes[ i ]->hdisplay ==
fgDisplay.DisplayMode.hdisplay &&
266 displayModes[ i ]->vdisplay ==
fgDisplay.DisplayMode.vdisplay &&
267 displayModes[ i ]->dotclock == (
unsigned int)
fgDisplay.DisplayModeClock )
291 if (
fgDisplay.DisplayMode.privsize > 0) {
324 XRRScreenConfiguration *screenconfig = XRRGetScreenInfo(
fgDisplay.display,
fgDisplay.RootWindow);
325 if (screenconfig != NULL) {
327 XRRScreenSize *sizes = XRRConfigSizes(screenconfig, &nsize);
330 for (size = 0; size < nsize; size++) {
331 if (sizes[size].width ==
fgState.GameModeSize.X && sizes[size].height ==
fgState.GameModeSize.Y) {
338 XRRFreeScreenConfigInfo(screenconfig);
343 short *rates = XRRConfigRates(screenconfig, size, &nrate);
345 for (rate = 0; rate < nrate; rate++) {
346 if (rates[rate] ==
fgState.GameModeRefresh) {
353 XRRFreeScreenConfigInfo(screenconfig);
359 Status status = RRSetConfigFailed;
360 status = XRRSetScreenConfigAndRate(
370 XRRFreeScreenConfigInfo(screenconfig);
372 if (status == RRSetConfigSuccess) {
376 XRRUpdateConfiguration(&ev);
377 }
while ((ev.type != ConfigureNotify) && ((ev.type -
fgDisplay.event_base) != RRScreenChangeNotify));
392 XF86VidModeModeInfo** displayModes;
393 int i, displayModesCount;
398 XF86VidModeGetAllModeLines(
408 for( i=0; i<displayModesCount; i++ )
411 int refresh = displayModes[ i ]->dotclock*1000/(displayModes[ i ]->htotal*displayModes[ i ]->vtotal);
421 if ((i == 0) || (XF86VidModeSwitchToMode(
424 displayModes[ i ]) > 0))
426 XF86VidModeSetViewPort(
472 int width = 640, height = 480, depth = 16,
refresh = 72;
480 if( sscanf(
string,
"%ix%i:%i@%i", &width, &height, &depth, &
refresh ) != 4 )
481 if( sscanf(
string,
"%ix%i:%i", &width, &height, &depth ) != 3 )
482 if( sscanf(
string,
"%ix%i@%i", &width, &height, &
refresh ) != 3 )
483 if( sscanf(
string,
"%ix%i", &width, &height ) != 2 )
484 if( sscanf(
string,
":%i@%i", &depth, &
refresh ) != 2 )
485 if( sscanf(
string,
":%i", &depth ) != 1 )
486 if( sscanf(
string,
"@%i", &
refresh ) != 1 )
487 GfOut(
"unable to parse game mode string `%s'",
string );
492 fgState.GameModeSize.X = width;
493 fgState.GameModeSize.Y = height;
int refresh(tSituation *s)