29 #ifdef WITH_X11_XF86VMODE
30 # include <X11/Xlib.h>
31 # include <X11/extensions/xf86vmode.h>
52 #ifdef WITH_X11_XF86VMODE
53 int majorVersion, minorVersion;
54 XF86VidModeModeInfo **vidmodes;
57 GHOST_ASSERT(display < 1,
"Only single display systems are currently supported.\n");
62 majorVersion = minorVersion = 0;
63 if (!XF86VidModeQueryVersion(dpy, &majorVersion, &minorVersion)) {
64 fprintf(stderr,
"Error: XF86VidMode extension missing!\n");
68 if (XF86VidModeGetAllModeLines(dpy, DefaultScreen(dpy), &numSettings, &vidmodes)) {
74 GHOST_ASSERT(display < 1,
"Only single display systems are currently supported.\n");
83 #ifdef WITH_X11_XF86VMODE
84 static int calculate_rate(XF86VidModeModeInfo *info)
86 return (info->htotal && info->vtotal) ? (1000 * info->dotclock / (info->htotal * info->vtotal)) :
102 #ifdef WITH_X11_XF86VMODE
103 int majorVersion, minorVersion;
105 GHOST_ASSERT(display < 1,
"Only single display systems are currently supported.\n");
107 majorVersion = minorVersion = 0;
108 if (XF86VidModeQueryVersion(dpy, &majorVersion, &minorVersion)) {
109 XF86VidModeModeInfo **vidmodes;
112 if (XF86VidModeGetAllModeLines(dpy, DefaultScreen(dpy), &numSettings, &vidmodes)) {
113 GHOST_ASSERT(index < numSettings,
"Requested setting outside of valid range.\n");
115 setting.
xPixels = vidmodes[index]->hdisplay;
116 setting.
yPixels = vidmodes[index]->vdisplay;
117 setting.
bpp = DefaultDepth(dpy, DefaultScreen(dpy));
118 setting.
frequency = calculate_rate(vidmodes[index]);
125 fprintf(stderr,
"Warning: XF86VidMode extension missing!\n");
130 GHOST_ASSERT(display < 1,
"Only single display systems are currently supported.\n");
131 GHOST_ASSERT(index < 1,
"Requested setting outside of valid range.\n");
134 setting.
xPixels = DisplayWidth(dpy, DefaultScreen(dpy));
135 setting.
yPixels = DisplayHeight(dpy, DefaultScreen(dpy));
136 setting.
bpp = DefaultDepth(dpy, DefaultScreen(dpy));
154 #ifdef WITH_X11_XF86VMODE
158 int majorVersion, minorVersion;
159 XF86VidModeModeInfo **vidmodes;
161 int scrnum, num_vidmodes;
166 scrnum = DefaultScreen(dpy);
169 majorVersion = minorVersion = 0;
170 if (!XF86VidModeQueryVersion(dpy, &majorVersion, &minorVersion)) {
171 fprintf(stderr,
"Error: XF86VidMode extension missing!\n");
175 printf(
"Using XFree86-VidModeExtension Version %d.%d\n", majorVersion, minorVersion);
178 if (XF86VidModeGetAllModeLines(dpy, scrnum, &num_vidmodes, &vidmodes)) {
181 for (
int i = 0; i < num_vidmodes; i++) {
182 if (vidmodes[i]->hdisplay < setting.
xPixels || vidmodes[i]->vdisplay < setting.
yPixels) {
186 if (best_fit == -1 || (vidmodes[i]->hdisplay < vidmodes[best_fit]->hdisplay) ||
187 (vidmodes[i]->hdisplay == vidmodes[best_fit]->hdisplay &&
188 vidmodes[i]->vdisplay < vidmodes[best_fit]->vdisplay)) {
193 if ((vidmodes[i]->hdisplay == vidmodes[best_fit]->hdisplay) &&
194 (vidmodes[i]->vdisplay == vidmodes[best_fit]->vdisplay)) {
197 if (calculate_rate(vidmodes[i]) > calculate_rate(vidmodes[best_fit])) {
202 if (
abs(calculate_rate(vidmodes[i]) - (
int)setting.
frequency) <
203 abs(calculate_rate(vidmodes[best_fit]) - (
int)setting.
frequency)) {
210 if (best_fit != -1) {
212 printf(
"Switching to video mode %dx%d %dx%d %d\n",
213 vidmodes[best_fit]->hdisplay,
214 vidmodes[best_fit]->vdisplay,
215 vidmodes[best_fit]->htotal,
216 vidmodes[best_fit]->vtotal,
217 calculate_rate(vidmodes[best_fit]));
221 XF86VidModeSwitchToMode(dpy, scrnum, vidmodes[best_fit]);
224 XF86VidModeSetViewPort(dpy, scrnum, 0, 0);
#define GHOST_ASSERT(x, info)
unsigned char GHOST_TUns8
GHOST_TSuccess getDisplaySetting(GHOST_TUns8 display, GHOST_TInt32 index, GHOST_DisplaySetting &setting) const
GHOST_DisplayManagerX11(GHOST_SystemX11 *system)
GHOST_TSuccess setCurrentDisplaySetting(GHOST_TUns8 display, const GHOST_DisplaySetting &setting)
GHOST_TSuccess getCurrentDisplaySetting(GHOST_TUns8 display, GHOST_DisplaySetting &setting) const
GHOST_TSuccess getNumDisplaySettings(GHOST_TUns8 display, GHOST_TInt32 &numSettings) const
GHOST_TSuccess getNumDisplays(GHOST_TUns8 &numDisplays) const
GHOST_TUns8 getNumDisplays() const
__forceinline const avxi abs(const avxi &a)