static void SwitchCallback(Widget w, XtPointer call_data, XtPointer client_data) { int direction = (long)call_data; Arg args[1]; Bool result; char label[32]; XF86VidModeLockModeSwitch(XtDisplay(toplevel), vidtune->screen, False); result = XF86VidModeSwitchMode(XtDisplay(toplevel), vidtune->screen, direction); XF86VidModeLockModeSwitch(XtDisplay(toplevel), vidtune->screen, True); if (!result) return; UpdateCallback(w, call_data, client_data); if (modeline.htotal && modeline.vtotal) XmuSnprintf(label, sizeof(label), "%dx%d @ %d Hz", modeline.hdisplay, modeline.vdisplay, (int)((double)dot_clock / (double)modeline.htotal * 1000.0 / (double)modeline.vtotal)); else XmuSnprintf(label, sizeof(label), "%dx%d", modeline.hdisplay, modeline.vdisplay); XtSetArg(args[0], XtNlabel, label); XtSetValues(mode, args, 1); }
static void SelectCallback(Widget w, XtPointer call_data, XtPointer client_data) { XF86VidModeModeInfo *info = (XF86VidModeModeInfo*)call_data; Arg args[1]; Bool result; XF86VidModeLockModeSwitch(XtDisplay(toplevel), vidtune->screen, False); result = XF86VidModeSwitchToMode(XtDisplay(toplevel), vidtune->screen, info); XF86VidModeLockModeSwitch(XtDisplay(toplevel), vidtune->screen, True); if (!result) return; XtSetArg(args[0], XtNlabel, XtName(w)); XtSetValues(mode, args, 1); UpdateCallback(w, call_data, client_data); }
/*ARGSUSED*/ static void ChangeScreenCallback(Widget w, XtPointer call_data, XtPointer client_data) { Arg args[1]; screenno = (long)call_data; if (screenno > computer.num_vidmodes || screenno < 0 || vidtune == computer.vidmodes[screenno]) return; XF86VidModeLockModeSwitch(XtDisplay(toplevel), vidtune->screen, False); vidtune = computer.vidmodes[screenno]; XF86VidModeLockModeSwitch(XtDisplay(toplevel), vidtune->screen, True); UpdateCallback(w, call_data, client_data); GetModes(); XtSetArg(args[0], XtNlabel, XtName(w)); XtSetValues(screenb, args, 1); SetLabelAndModeline(); }
void Win32Window::MessageHook() { LARGE_INTEGER qwTicksPerSec = { 0, 0 }; LARGE_INTEGER qwTime; LONGLONG tickspersec; MSG msg; POINT p; double last, current; double delta, accum = 0; bool render = true; if( CreateCallback ) (*CreateCallback)(this); ShowWindow(hwnd, SW_SHOWDEFAULT); UpdateWindow(hwnd); ZeroMemory(&msg, sizeof(msg)); GetCursorPos(&p); ScreenToClient(hwnd, &p); QueryPerformanceFrequency(&qwTicksPerSec); tickspersec = qwTicksPerSec.QuadPart; QueryPerformanceCounter(&qwTime); last = (qwTime.QuadPart % tickspersec) / (double)tickspersec; while( msg.message != WM_QUIT ) { QueryPerformanceCounter(&qwTime); current = (qwTime.QuadPart % tickspersec) / (double)tickspersec; if (current < last) delta = ((1.0 + current) - last); else delta = (current - last); last = current; accum += delta; mousedx = mousedy = 0; while( accum > 0.1f ) { accum -= 0.1f; while( PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE) ) { TranslateMessage(&msg); DispatchMessage(&msg); if( msg.message == WM_CLOSE ) render = false; if( msg.message == WM_QUIT ) break; } if( msg.message == WM_QUIT ) break; if( render && UpdateCallback ) UpdateCallback(0.1f); } if( render && msg.message != WM_QUIT ) { if( RenderCallback && glcontextid != -1 ) RenderCallback(this, (float)accum / 0.1f, (float)delta); } } }